1. 组合WHERE子句
1.1 AND操作符
SELECT prod_id, prod_price, prod_name
FROM products
WHERE vend_id = 1003 AND prod_price <= 10;
AND用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行
上述例子中值包含了一个AND,还可以多个AND一起使用
1.2 OR操作符
SELECT prod_name, prod_price
FROM products
WHERE vend_id = 1002 OR vend_id = 1003;
OR匹配任意一个条件而不是同时匹配多个
1.3 计算次序
WHERE可以包含任意数目的AND和OR。允许两者结合起来使用。但二者之间在同时使用时存在次序问题。
处理OR操作之前,优先处理AND操作
通过使用括号可以实现分组,即先计算括号中的,然后再计算括号外的
通过一个例子说明一下
- 没有括号
SELECT prod_name, prod_price
FROM products
WHERE vend_id = 1002 OR vend_id = 1003 AND prod_price >= 10
上面的例子会先处理AND操作符,返回id为1003制造商制造的10元(含10)以上的产品,或者由id为1002的制造商制造的任何产品,没有价格限制
- 有括号
SELECT prod_name, prod_price
FROM products
WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10
此时,这个例子返回是数据就是由id为1002或1003的制造商制造的价格高于10元(含10)的任何产品
2. IN操作符
圆括号在WHERE子句中还有另外一种用法。IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。
括号中包含有逗号分隔的清单,清单内容为数据库中的合法值
SELECT prod_name, prod_price
FROM products
WHERE vend_id IN (1002, 1003)
ORDER BY prob_name;
IN操作符完成与OR操作符相同的功能
那么为什么要用IN,IN具有以下优点:
- 在使用长的合法选项清单时,IN操作符的语法更清楚更直观
- 在使用IN时,计算的次序更容易管理(使用的操作符更少)
- IN操作符一般比OR操作符执行更快
- IN的最大优点是可以包含其他SELECT语句,能够更动态地建立WHERE子句。
3. NOT操作符
NOT操作符用来否定它之后所跟的任何条件
SELECT prod_name, prod_price
FROM products
WHERE vend_id NOT IN (1002, 1003)
ORDER BY prob_name;
mysql支持使用NOT对IN,BETWEEN和EXIST子句取反