位于 FROM 子句之后,但紧挨着 FROM 子句,用于对操作的数据进行过滤
—— 只有满足条件的行才会被操作。
逻辑判断
常用的逻辑判断有:
=:等于
>:大于
<:小于
!= 或 <>:不等于
>= 或 !<:大于等于
这些逻辑判断可以用于字符串,SQL中字符串用单引号或双引号括起来即可。如:
SELECT * FROM demo WHERE name!='HotKey';
查询所有 name 不为 HotKey 的行。
BETWEEN AND
用于指定某个值位于的区间。该区间为闭区间。
BETWEEN x AND y:在指定的 x , y 之间。
SELECT * FROM demo WHERE name BETWEEN 'H' AND 'J'
查询所有 name 位于 H 与 J 之间的行。
其得到的结果为:
从结果可以看出:BETWEEN AND 不代表 name 只能取 H, I, J 中的一种,它会得到所有以 H, I 开头的行和 name 为 J 的行。因为按字典排序时,"HXX",“IXX"是大于 H,但小于 J 。
IS NULL
用于获取值为 NULL 的行
没有赋值,或赋值为 null 的值会满足 IS NULL 条件。
SELECT * FROM demo WHERE hint IS NULL;
该语句会查询 hint 为 null 的行。
LIKE 与通配符
LIKE 用于 WHERE 字句中进行通配符匹配。
%:除了null外,表示任意字符出现任意次数 —— 0次、1次和多次 。
_:表示任意字符,但是该字符能且只能出现一次。
SELECT * FROM demo WHERE hint LIKE "http://%";
查找的 hint 需以 http:// 开头。如果写成 %http://% ,则表示 hint 中只要含有 http:// 即可。
SELECT * FROM demo WHERE name LIKE "__";
__ 是两个 _,它表示两个字符。因此,上述语句表示操作 name 为两个字符的行 。
注意事项
1,通配符只能用于字符串。
2,尽量不使用通配符,能用其它方法实现的查询就不要使用通配符,这是因为通配符查询起来非常消耗性能。
3,必须使用通配符时,也尽量将通配符放在查询条件的最后。
IN
指定属性所有可能的取值,只要满足范围中的某一个就可以匹配成功。IN 取一组由逗号分隔,括在圆括号内的合法值。
如:
SELECT * FROM animals WHERE weight IN (2,20) ;
其表示 weight 要么为 2,要么为20。而不能取 2,20 中间的某个数。
AND OR
上述的几个关键字主要用于某个条件的建立,而 AND OR 主要用于多个 WHERE 条件的连接。
AND 表示与关系,连接的两个 WHERE 条件必须同时满足才行。
OR 表示或关系,连接的两个 WHERE 条件中有一个成立即可。
AND 的优先级高于 OR。可以使用 () 进行逻辑分组。
SELECT * FROM demo WHERE name="HotKey" AND hint LIKE "run%"
该条语句查找的行必须满足 name="HotKey" ,同时也必须满足 hint LIKE "run%"。
SELECT * FROM demo WHERE name="HotKey" OR hint LIKE "http%"
该条语句查找的行只需要满足两个 WHERE 条件之一即可。
NOT
否定紧跟其后的条件
NOT 只否定其后紧跟的一个条件。而不是否定其后所有的条件。
SELECT * FROM animals WHERE NOT weight IN (2,5) AND name = 'Critters'
所查询的列,weight 不能是 2 或 5,同时 name 必须是 Critters。
可以看出NOT只否定了第一条,并没有否定name='Critters'。如果改成
SELECT * FROM animals WHERE NOT weight IN (2,5) AND NOT name = 'Critters'
则表示 weight 不能是 2 或 5,同时 name 不能是 Critters。