WHERE

作者: 一江碎月 | 来源:发表于2017-11-27 22:44 被阅读0次

位于 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 之间的行。

其得到的结果为:

image.png

从结果可以看出: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 条件的连接

  1. AND 表示与关系,连接的两个 WHERE 条件必须同时满足才行。

  2. OR 表示或关系,连接的两个 WHERE 条件中有一个成立即可。

  3. 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。

相关文章

网友评论

      本文标题:WHERE

      本文链接:https://www.haomeiwen.com/subject/htyjbxtx.html