WHERE高级搜索和NOT、IN操作符
组合WHERE子句
为了进行更强的过滤控制,MySQL允许给出多个WHERE子句。
有2种方式
- AND子句
- OR子句
操作符(operator)
用来联结或改变WHERE子句中的子句关键字。也称为逻辑操作符
AND操作符
给WHERE子句添加附加条件,指示DBMS只返回满足所有给定的条件行
SELECT
prod_id,
prod_price,
prod_name
FROM
products
WHERE
vend_id = 1003
AND prod_price <= 10;
检索由供应商1003制造且价格小于等于10美元
OR操作符
指示DBMS检索匹配任一条件的行
SELECT
prod_id,
prod_price,
prod_name
FROM
products
WHERE
vend_id = 1003
OR vend_id = 1002;
计算次序
WHERE可以包含任意数目的AND和OR操作符。允许两者结合以进行复杂和高级的过滤
SQL在处理OR操作符之前,会优先处理AND操作符,解决此问题的办法是使用圆括号明确地分组相应的操作符
SELECT
prod_name,
prod_price
FROM
products
WHERE
( vend_id = 1002 OR vend_id = 1003 )
AND prod_price >= 10;
如果不使用括号,则结果和预期完全不同
在WHERE子句中使用圆括号
因为圆括号具有较AND和OR操作符高的计算次序。任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组,能够确保按照预期结果运行,消除歧义
IN操作符
指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都在圆括号中。
SELECT
prod_name,
prod_price
FROM
products
WHERE
vend_id IN ( 1002, 1003 )
ORDER BY
prod_name;
其等价于
SELECT
prod_name,
prod_price
FROM
products
WHERE
vend_id = 1002
OR vend_id = 1003
ORDER BY
prod_name;
为什么要使用IN操作符
- IN操作符语法更清楚且更直观
- IN操作符计算的次序更容易管理(使用的操作符更少)
- IN操作符一般比OR操作符执行更快
- IN操作符最大优点是可以包含其他SELECT语句,更动态地建立WHERE子句
NOT操作符
NOT操作符有且仅有一个功能,否定NOT之后所根的任何条件
SELECT
prod_name,
prod_price
FROM
products
WHERE
vend_id NOT IN ( 1002, 1003 )
ORDER BY
prod_name;
检索1002和1003之外的所有供应商制造的产品
为什么使用NOT
简单的WHERE子句中,NOT没有什么优点,但是在复杂子句中,NOT是非常有用的
MySQL中的NOT
MySQL支持使用NOT对IN、BETWEEN和EXISTS子句取反
Comments | 0 条评论