内容摘要:如何组合 WHERE 子句以建立功能更强的更高级的搜索条件。学习如何使用 NOT 和 IN 操作符。
7.1 组合 WHERE 语句
7.1.1 AND 操作符
AND:WHERE 子句中的关键字,用来指示检索满足所有给定条件的行。必须同时满足,为“且”的关系。可以添加多个条件,每个条件均需要使用一个 AND 操作符。
SELECT prod_id,prod_price,Prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10; // 同时满足 vend_id 为 1003 且产品价格小于等于 10 的
7.1.2 OR 操作符
OR:WHERE 子句中的关键字,检索匹配任一给定条件的行。满足一个即可,为“或”的关系。
SELECT prod_id,prod_price,Prod_name FROM products WHERE vend_id = 1002 OR vend_id = 1003; // vend_id 为 1002 或 1003 均可
7.1.3 计算次序
AND 和 OR 若组合使用,使用圆括号来明确计算次序。
SELECT prod_id,prod_price,Prod_name FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;
7.2 IN 操作符
IN:WHERE 子句中用来指定要匹配值的清单的关键字,功能与 OR 相同。
SELECT prod_id,prod_price,Prod_name FROM products WHERE vend_id IN (1002,1003) AND prod_price = 10; // 这两行完全等价
SELECT prod_id,prod_price,Prod_name FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price = 10;
IN 操作符的优点:
- 在使用长的合法选项清单时,IN 操作符的语法更清楚且更直观;
- 使用 IN 时,计算的次序更容易管理(因为使用的操作符更少);
- IN 操作符一般比 OR 操作符清单执行更快;
- IN 的最大优点是可以包含其他 SELECT 语句,能够更动态的建立 WHERE 子句。
7.3 NOT 操作符
NOT:WHERE 子句中用来否定后跟条件的关键字。
SELECT prod_id,prod_price,Prod_name FROM products WHERE vend_id NOT IN (1002,1003) AND prod_price = 10; // 检索所有不是 1002 和 1003 的供应商 id
MySQL 支持使用 NOT 对 IN、BETWEEN 和 EXISTS 子句取反,这与多数其他 DBMS 允许使用 NOT 对各种条件取反有很大差别。(什么差别?)