组合WHERE子句,使用NOT 和 IN 操作符
使用SELECT语句的WHERE子句指定搜索条件
1.使用WHERE子句
数据库中一般包含大量的数据,很少需要检索表中的所有行。通常只会根据特定操作或报告的需要提取表数据的子集。质检所所需数据需要指定搜索条件
(search criteria),搜索条件也称为过滤条件
(filter condition)。
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出。例如:
SELECT id, name, age
FROM student
WHERE age = 12;
这条语句从student表中检索三个列id、name、age,但不返回所有行,只返回age值为12的行。
思考:SQL过滤与应用过滤
数据也可以在应用层过滤。比如SQL的SELECT检索出超过客户端应用实际所需要数据。然后客户端代码对返回的数据进行循环(遍历),筛选出需要的行。
通常,这种做法极其不妥
。优化数据库后可以更快捷有效的对数据进行过滤,而客户端应用(或开发语言)处理数据库的工作会极大地影响应用的性能,并且使所创建的应用完全不具备可伸缩性。此外,如果在客户端过滤数据,服务器不得不通过网络发送多余的数据。这将导致网络宽带的浪费。
tisp:在同时使用
WHERE
和ORDER BY
子句时,要将ORDER BY放在WHERE之后。
2、WHERE子句操作符
操作符 | 说明 | 操作符 | 说明 | |
---|---|---|---|---|
= | 等于 | IS NULL | 为NULL的值 | |
> | 大于 | !> | 不大于 | |
< | 小于 | !< | 不小于 | |
!= | 不等于 | <= | 小于等于 | |
<> | 不等于 | >= | 大于等于 | |
BETWEEN | 在指定的两个值之间 |
tips:表中列出的某些操作符是冗余的(例如 <> 与 != 相同,!< 相当于 >= )。并非所有的DBMS都支持这些操作符。
2.1检查单个值
列出所有价格小于10元的商品(商品名、价格)
SELECT name, price
FROM goods
WHERE price < 10;
2.2不匹配检查
列出所有不姓王的同学(surname姓氏、name姓名、score学分)
SELECT surname, name, score
FROM students
WHERE surname <> '王'
tips:
①这里也可用!=
代替<>
②'王'的单引号:单引号用来限定字符串
。
如果将值与字符串类型
的列进行比较,就需要限定引号。
用来与数值列
进行比较的值不用引号
2.3 范围值检查
BETWEEN
操作符
检索出价格在5到10之间的所有商品:
SELECT name, price
FROME goods
WHERE price BETWEEN 5 AND 10;
tips:①使用BETWEEN 时,所需范围的“开始值”和“结束值”需要用
AND
关键字分隔。
②BETWEEN匹配范围中的所有值,包括指定的开始值和结束值
。
2.4空值检查
IS NULL 操作符
在一个列不包含值时,称其包含空值NULL。
NULL
无值(no value),它与字段包含0、空字符串或仅仅包含空格不同。
检索出没有被输入成绩的同学的姓名
SELECT name
FROM students
WHERE score IS NULL;
检索出所有没有输入成绩(空score字段,并不是score为0)的同学姓名。
tips:
NULL 和 非匹配
通过过滤选择不包含指定值的所有行时,可能希望返回含NULL值的所有行。但是这做不到。因为NULL比较特殊,所以在进行 匹配过滤 或 非匹配过滤 时,不会返回这些结果。因此在过滤数据时,一定要验证,被过滤列中含NULL值的行,确实出现在了返回的数据中。
网友评论