SQL基本操作之过滤数据
WHERE子句操作符
我们一般不会想获得所有行的列值,而是选取我们所需要的
SQL提供了WHERE子句实现过滤数据的功能
如在Customers表中提取用户名为Fun4All的列(单引号代表字符串):
SELECT * FROM Customers WHERE cust_name = 'Fun4All';
WHERE子句操作符见下表:
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
!< | 不小于 |
> | 大于 |
>= | 大于等于 |
!> | 不大于 |
BETWEEN AND | 在指定的两个值之间 |
IS NULL | 为NULL值 |
注意:不同的DBMS的操作符可能有差异,详见官方文档。
几个栗子:
- 检查单个值:
SELECT * FROM Customers WHERE cust_id > 1000000003;
- 不匹配检查:
SELECT * FROM Customers WHERE cust_id != 1000000003
; - 范围值检查:
SELECT * FROM Customers WHERE cust_id BETWEEN 1000000001 AND 1000000004
;
注意:
1.进行不匹配检查时,NULL也不会出现在不匹配的列中,因为未知具有特殊的含义,数据库不知道他们是否匹配。
2.同时使用WHERE子句和ORDER BY子句时,ORDER BY子句应在WHERE子句之后
高级数据过滤
AND操作符
即逻辑关系“且”。
栗子:选出用户表中用户名不为1000000000,1000000003,10000000004的列值:
SELECT *
FROM Customers
WHERE cust_id != 1000000003 AND cust_id != 1000000000 AND cust_id != 1000000004;
OR操作符
即逻辑关系“非”
栗子:用户id大于1000000004或小于1000000002的所有列值
SELECT * FROM Customers WHERE cust_id < 1000000002 OR cust_id > 1000000004;
注意:SQL中AND操作符的优先级高于OR操作符,但可以通过括号修改(使用这些操作符时应尽量使用括号以消除歧义)
In操作符
用于指定条件范围,功能与OR相当
栗子:选取居住在曼西或者芝加哥的用户 保存为草稿
SELECT * FROM Customers WHERE cust_city In ('Muncie', 'Chicago');
In操作符与OR操作符的区别:
- 更清楚直观
- 容易管理
- 更快
- 可以包含其他SELECT子句
NOT操作符
即逻辑关系中的、“非”。
栗子:选取不居住在芝加哥的用户:
SELECT * FROM Customers WHERE NOT cust_city = 'Chicago';
在复杂的子句中,NOT操作符非常有用。
注意:MariaDB仅支持使用NOT否定IN、BETWEEN、EXISTS子句,大多数DBMS支持使用NOT否定任何条件
参考:《SQL必知必会》