Mysql-数据过滤
本章说如何组合 WHERE 子句以建立更高级的搜索条件.我们还将学习如何使用 NOT 和 IN 操作
组合 WHERE 子句
- 操作符用来连结或者改变 WHERE 子句中的子句的关键字
AND 操作符
为了通过不止一个列进行过滤,可使用 AND 操作符给 WHERE 子句附加条件
- AND 表示 两个条件必须同时满足
SELECT id,price,name from user WHERE id='003' AND price=300;
WHERE 子句链接 通过 and 表示两个条件 必须同时满足
OR 操作符
OR 表示只要满足一个就行
SELECT name,id,price FROM user WHERE id='003' OR price=500;
AND 和 OR 的次序
WHERE 可包含任意数目的 AND 和 OR 操作符,允许两者结合进行复杂和高级的过滤
- 特别注意的就是 AND 操作符级别最高
SELECT name,price FROM user WHERE id='1002' OR id='1003' AND price>=300
这样他会优先使用 AND
- 最后的效果实际等于
SELECT name,price FROM user WHERE (id='1002' OR id='1003') AND price>=300
IN 操作符 等价于 OR
圆括号在 WHERE 子句中还有另外一种用法,IN 操作符用来指定条件范围,范围中每个条件都可以进行匹配,IN 取合法值的由逗号分隔的清单,全都在圆括号中
- 特别注意的就是 IN 不表示范围,它只表示几个数中的取值
SELECT * FROM user WHERE id IN (1000,1100) ORDER BY name;
- 上面等价于
SELECT * FROM user WHERE id='1000' OR id='1100' ORDER BY name;
IN 的特点
- 1.在使用长的合法选项清单时候,IN 操作符的语法更清楚更直观
- 在使用 IN 时 计算的次序更容易管理
- IN 的操作符一般比 OR 操作符执行更快
- IN 的最大的优点时可以包含其他 SELECT 语句,使得能更加动态建立 WHERE 子句
NOT 操作符
WHERE 子句中的 NOT 操作符有且只有一个功能,那就是否定它之后所有的任何条件
NOT WHERE 子句 用来否定后跟的条件的关键字
SELECT name,price FROM user WHERE id NOT IN (1002,1003) ORDER BY name;
它表示 不匹配 1002 和 1003 的 ID 而是匹配 I002 和 I003 以外的 ID