过滤数据
WHERE 子句
在SELECT 语句中,数据根据WHERE子句中指定的搜索条件进行过滤。
WHERE 子句操作符
操作符 | 说明 |
---|---|
= | 等于 |
<> 或 != | 不等于 |
< | 小于 |
<= | 小于等于 |
!< | 不小于 |
> | 大于 |
>= | 大于等于 |
!> | 不大于 |
BETWEEN | 在指定两个值之间 |
IS NULL | 为NULL值 |
检查单个值
SELECT column_name
FROM table_name
WHERE column_name = 'str';
不匹配检查
SELECT column_name
FROM table_name
WHERE column_name <> 'str';
范围值检查
SELECT column_name
FROM table_name
WHERE column_name BETWEEN m AND n;
空值检查
SELECT column_name
FROM table_name
WHERE column_name IS NULL;
- 在进行匹配过滤或非匹配过滤时,不会返回NULL值(需要通过IS NULL单独验证)
组合WHERE 子句
- 为了进行更强的过滤空控制,SQL 允许给出多个WHERE 子句,以AND 或OR 操作符组合
AND 操作符
SELECT column_name_1,column_name_2
FROM table_name
WHERE column_name_1 = 'str_1' AND column_name_2 = 'str_2';
- AND 关键字用来指示检索满足所有给定条件的行
OR 操作符
SELECT column_name_1,column_name_2
FROM table_name
WHERE column_name_1 = 'str_1' OR column_name_2 = 'str_2';
- OR 关键字用来指示检索满足任一给定条件的行
求值顺序
SELECT column_name_1,column_name_2,column_name_3
FROM table_name
WHERE (column_name_1 = 'str_1'
OR column_name_2 = 'str_2')
AND ,column_name_3 >= 10;
- SQL 在处理OR 操作符前会优先处理AND 操作符
- 圆括号有比AND 或OR 操作符更高的求值顺序
- 任何时候使用具有AND 和OR 操作符的WHERE 子句都应该使用圆括号明确地分组操作符
IN 操作符
SELECT column_name_1,column_name_2
FROM table_name
WHERE column_name_1 IN ('str_1','str_2');
- IN 操作符用来指定要匹配值的清单
- IN 取一组圆括号中由逗号分隔的合法值
- IN 与OR 功能相当,但比OR 执行速度更快
- IN 可包含其他SELECT 语句
NOT 操作符
SELECT column_name
FROM table_name
WHERE NOT column_name = 'str';
- NOT 操作符用来否定其后所跟的任何条件
- NOT 操作符用于要过滤的列前而不仅是在其后
KIKE 操作符
- 通配符是SQL 的WHERE 子句中有特殊含义的字符,在搜索子句中使用通配符必须使用LIKE 操作符
百分号(%)通配符
SELECT column_name
FROM table_name
WHERE column_name LIKE '%str%';
- 在搜索串中,%表示任何字符出现任意次数
- 通配符可在搜索模式中的任意位置使用,并且可以使用多个通配符
- %可匹配0个字符,但不能匹配NULL
下划线(_)通配符
SELECT column_name
FROM table_name
WHERE column_name LIKE 'str_';
- 下划线通配符(_)只匹配单个字符
使用通配符注意事项
- 通配符搜索相对比较耗时
- 通配符置于开头搜索速度最慢