5 高级数据过滤
5.1 组合WHERE子句
ADD操作符
SELECT prod_id FROM Products WHERE vend_id = 'DLL01' AND prod_price <= 4;
如果要增加多个过滤条件,每个条件之间都要加AND关键字。
OR操作符
用来表示检索任一给定条件的行
ADD和OR结合
ADD在求值的过程中优先级比OR更高。
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01' AND prod_price >= 10;
当SQL看到上述WHERE子句时,会优先处理AND操作符。它的理解为:由BRS01制造的价格为10美元以上的产品以及由DLL01制造的所有产品,而不管价格如何。
解决此问题的方法是使用圆括号对操作行为进行明确分配。
WHERE ( vend_id = 'DLL01' OR vend_id = 'BRS01' ) AND prod_price >= 10;
此时SQL语句变为由DLL01或者BRS01制造的价格为10美元以上的产品。
5.2 IN操作符
用来指定条件范围,范围中的每个条件都可以进行匹配。IN 取一组由逗号分隔,括在圆括号里合法值。
WHERE vend_id IN ( 'DLL01',BRS01" )
此SQL语句检索DLL01和BRS01制造的所有产品。
由此看来,IN操作符完成了与OR相同的工作。
5.3 NOT操作符
WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。
下面的例子说明NOT的使用。为了列出除1002和1003之外的所有供应商制造的产品,可编写如下的代码:
SELECT prod_name, prod_price FROM Products WHERE vend_id NOT IN ( 1002,1003) ORDER BY prod_name;
为什么使用NOT?对于简单的WHERE子句,使用NOT确实没有什么优势。但在更复杂的子句中, NOT是非常有用的。例如,在与IN操作符联合使用时, NOT使找出与条件列表不匹配的行非常简单。