本节将介绍如何组合 where 子句以建立功能更强的更高级的搜索条件
组合 where 子句
and 操作符
select *
from sc
where score > 60 and score < 80;
此 sql 语句检索 sc
表中 score
字段值大于 60 并且小于 80 的所有数据,输出为:
+------+------+-------+
| SId | CId | score |
+------+------+-------+
| 02 | 01 | 70.0 |
| 04 | 01 | 72.0 |
| 05 | 01 | 76.0 |
+------+------+-------+
上述例子中使用了只包含一个关键字 and 的语句,把两个过滤条件组合在一起。还可以添加多个过滤条件,每添加一条就要使用一个 and
or 操作符
select *
from sc
where score = 70 or score = 80;
此 sql 语句检索 sc
表中 score
字段等于 70 或 等于 80 的所有数据,输出为:
+------+------+-------+
| SId | CId | score |
+------+------+-------+
| 01 | 01 | 80.0 |
| 02 | 01 | 70.0 |
| 02 | 03 | 80.0 |
| 03 | 01 | 80.0 |
| 03 | 02 | 80.0 |
| 03 | 03 | 80.0 |
+------+------+-------+
计算次序
where 可包含任意数目的 and 和 or 操作符。允许两者结合以进行复杂和高级的过滤
select *
from sc
where score = 70 or score = 80 and sid =1;
输出为:
+------+------+-------+
| SId | CId | score |
+------+------+-------+
| 01 | 01 | 80.0 |
| 02 | 01 | 70.0 |
+------+------+-------+
以上例子可以看出 sql(像多数语言一样)在处理 or 操作符前,优先处理 and 操作符,如果想优先处理 or 语句,则应改为:
select *
from sc
where (score = 70 or score = 80) and sid =1;
输出为:
+------+------+-------+
| SId | CId | score |
+------+------+-------+
| 01 | 01 | 80.0 |
+------+------+-------+
in 操作符
圆括号的另一种写法可以使用 in
操作符来代替,in
操作符用来指定条件范围,范围中的每个条件都可以进行匹配
select *
from sc
where score in (70,80)
order by cid;
此 sql 语句检索 sc
表中 score
字段值为 70 和 80 的所有数据,并按照 cid
的升序排序,输出为:
+------+------+-------+
| SId | CId | score |
+------+------+-------+
| 01 | 01 | 80.0 |
| 02 | 01 | 70.0 |
| 03 | 01 | 80.0 |
| 03 | 02 | 80.0 |
| 02 | 03 | 80.0 |
| 03 | 03 | 80.0 |
+------+------+-------+
使用 in
的优点:
1.在使用长的合法选项清单时, in 操作符的语法更清楚且更直观
2.在使用 in 时,计算的次序更容易管理(因为使用的操作符更少)
3.in 操作符一般比 or 操作符清单执行更快
4.in 的最大优点是可以包含其他 select 语句,使得能够更动态地建立 where 子句
not 操作符
where 子句中的 not 操作符有且只有一个功能,那就是否定它之后所跟的任何条件
select *
from sc
where score in (70,80)
order by cid;
输出为:
+------+------+-------+
| SId | CId | score |
+------+------+-------+
| 04 | 01 | 72.0 |
| 05 | 01 | 76.0 |
| 06 | 01 | 31.0 |
| 01 | 02 | 40.0 |
| 02 | 02 | 60.0 |
| 04 | 02 | 59.0 |
| 05 | 02 | 87.0 |
| 07 | 02 | 89.0 |
| 01 | 03 | 99.0 |
| 04 | 03 | 59.0 |
| 06 | 03 | 34.0 |
| 07 | 03 | 98.0 |
+------+------+-------+
Mysql 支持使用 not 对 in 、 between 和 exists 子句取反,这与多数其他 dbms 允许使用 not 对各种条件取反有很大的差别
网友评论