5.1组合WHERE子句
操作符(operator)用来联结或改变WHERE子句中的子句的关键字。也称为逻辑操作符。
5.1.1 AND操作符
为了通过不止一个列进行过滤,可使用AND操作符给WHERE子句附加条件。
SELECT prod_id,prod_price,prod_name
FROM Products
WHERE vend_id = 'DLL01' AND prod_price <= 4;
AND 用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行。
5.1.2OR操作符
OR操作符与AND操作符不同,他指示数据库管理系统软件检测匹配任一条件的行。事实上,许多DBMS在OR WHERE子句的第一个条件满足的情况下,不再计算第二个条件。
SELECT prod_name,prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';WHERE子句中使用的关键字,用来表示检索匹配任一给定条件的行。
5.1.3计算次序
WHERE可包含任意数目的AND和OR操作符。
SELECT prod_name,prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01' AND prod_price >=10;
不会按预期进行过滤。原因在于计算的次序。SQL在处理OR操作符前,优先处理AND操作符。SQL看到语句时,他理解为有供应商BRS01制造的任何价格为10美元以上的产品,或者由供应商DLL01制造的任何产品,而不管其价格如何。
SELECT prod_name,prod_price
FROM Products
WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01' )AND prod_price >=10;
使用圆括号将前两个条件括起来。
在WHERE子句中使用圆括号:任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认计算次序。
5.2IN操作符
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全部括在圆括号中。
SELECT prod_name,prod_price
FROM Products
WHERE vend_id IN('DLL01','BRS01')
ORDER BY prod_name;
等价于WHERE vend_id =’DLL01’ OR vend_id = ‘BRS01’
使用IN操作符的优点:
1.在长时间的合法选项清单时,IN操作符的语法更清楚且更直观。
2.在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
3.IN操作符一般比OR操作符清单执行更快。
4.IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。
5.3NOT操作符
WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。因为NOT从不自己使用,它的语法与其他操作符有所不同。NOT可以用在要过滤的列前,而不仅是在其后。
NOT WHERE子句中用来否定后跟条件的关键字。
SELECT prod_name
FROM Products
WHERE NOT vend_id = 'DLL01'
ORDER BY prod_name;
NOT否定跟在它之后的条件。
等价于:
SELECT prod_name
FROM Products
WHERE vend_id <> 'DLL01'
ORDER BY prod_name;
在使用简单的WHERE子句时,使用NOT没有什么优势。但是在更复杂的子句中,NOT是非常有用的。
MySQL中的NOT:MySQL不支持这里描述的NOT的格式。在MySQL中,NOT只用来否定EXISTS(NOT EXISTS)