SQL基础学习笔记 《SQL必知必会第五版》 第四~六章—— WHERE子句指定过滤条件
在SQL语句中,一般使用WHERE关键字来指定搜索的过滤条件,紧接在FROM关键字之后,ORDER BY和LIMIT之前。WHERE子句中可以使用比较运算符和BETWEEN /IS NULL/AND/OR/IN/NOT/LIKE等操作符来对查询设定条件,下面逐一讲解。
一、比较运算符

并否所有DBMS都支持上述操作符,具体支持哪些操作符需参考使用的DBMS文档。
SELECT vend_id, prod_name
FROM Products
WHERE vend_id <> 'DLL01';
如上段代码,在使用!=或<>时,被对比类型为字符串类型时,对比数据需加上单引号''。
- 使用BETWEEN时必须接上AND,AND前后分别设置开始值和终值
- WHERE column IS NULL;可以用来检测列内有无NULL值
- DBMS特有操作符参见其文档
二、组合WHERE子句
- AND
SELECT prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = 'DLL01' AND prod_price <= 4;
此例中只有两个过滤条件,还可通过增加AND来增加过滤条件。
- OR
SELECT prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';
与AND不同,在执行OR子句时,第一个条件满足该数据就会返回,后续条件不再执行
- AND和OR注意事项
在子句中同时出现AND和OR,会默认优先执行AND前后的语句,此时如想提高OR执行优先级可用圆括号()将OR语句包围。支持多AND和OR的复合子句,以此进行复杂过滤。
SELECT prod_name, prod_price
FROM Products
WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01')
AND prod_price >= 10;
三、IN操作符
IN主要用('','','')格式来指定一个条件范围集合,其实是一个支持更复杂OR的子句
SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ('DLL01','BRS01')
ORDER BY prod_name;
- IN对比OR的优点
四、NOT操作符
NOT唯一作用在于让其后的条件进行非运算,!=和<>也可实现同样功能,但NOT优势在于和IN连用时,可快速过滤掉IN里的行。大部分DBMS支持NOT否定所有条件。
五、LIKE和通配符
通配符可实现文本字段(字符串类型)模糊条件过滤,其它类型字段不能使用通配符。共有% _ [ ]三种通配符,使用时都需跟在LIKE谓词后。
- 百分比通配符%
代表匹配任意个数的任意字符,可使用在搜索模式任意位置,如下
SELECT prod_name
FROM Products
WHERE prod_name LIKE '%F%y%';
意思为查找符合条件(忽略F前后任意字符和y之后任意字符)的字符串
注意事项:结尾有NULL值会无法返回正确数据,可在结尾加%
- 下划线通配符_
代表匹配单个字符,功能与%一样,DB2不支持_ - 方括号通配符[ ]
代表匹配方括号内的指定字符集的任意一个字符,可与% _组合使用,[^ ]在括号内前缀^脱品号来表示否定。
浙公网安备 33010602011771号