组合WHERE字句
SQL给多个WHERE字句,允许以AND和OR字句的方式使用,称为操作符。
AND操作符
例:
SELECT prod_name,prod_price
FROM Products
WHERE vent_id='DLL01'AND prod_price<=4;
作用是检索由DLL01制造的且价格小于等于四的名称和价格,AND连接这两个条件,如果是DLL01生产的,但是价格大于4的,不检索。同理,价格小于四,但是不是DLL01生产的也不检索。
AND
用来连接检索所有满足条件的行,如果需要多个过滤条件,可以使用多个AND。
OR操作符
与AND操作符正好相反,指示DBMS检索匹配任一条件的行。事实上,DBMS在OR WHERE字句的第一个条件满足的情况下,就不再计算第二个条件。
SELECT prod_name,prod_price
FROM Products
WHERE vent_id='DLL01'OR vent_id='BRS01';
OR表示检索匹配任一给定条件的行。
求值顺序
如果要求出10美元以上,且由DLL01或BRS01制造的产品,那么会同时用到AND和OR操作,操作顺序会对结果产生影响。例如:
SELECT prod_name,prod_price
FROM Products
WHERE vent_id='DLL01'OR vent_id='BRS01' AND prod_price>=10;
由于在操作符中,AND的优先级更高,所以会输出由'BRS01'制造的的价格10美元及以上的商品和由DLL01制造的商品。那么就不是我们想要的几个,所以正确的解法是用圆括号对操作符进行分组。
SELECT prod_name,prod_price
FROM Products
WHERE (vent_id='DLL01'OR vent_id='BRS01') AND prod_price>=10;
因为圆括号的优先级比AND和OR更高,所以输出结果是由DLL01或者BRS01生产的价格大于等于10美元的产品,这样才是正确的。
实际上多使用圆括号没有坏处。
IN操作符
IN操作符用来指定条件范围,氛围中的每个条件都可以进行匹配。
IN取一组由逗号分隔,括在圆括号中的合法值。
例如:
SELECT prod_name,prod_price
FROM Products
WHERE vent_id IN('DLL01','BRS01');
作用是输出由DLL01和BRS01生产的产品。
读者可能会觉得IN操作符和OR操作符效果一样,实际上是这样的
SELECT prod_name,prod_price
FROM Products
WHERE vent_id ='DLL01'OR vent_id='BRS01'
ORDER BY prod_name;
效果是一样的,那么为什么要用IN操作符?IN操作符最大的优点是可以包含其他的SELECT字句,可以更动态的建立WHERE字句,我在第11篇笔记会提到。
NOT操作符
NOT操作符只有一个功能,就是否定后面的所有条件。NOT从来不单独使用,NOT关键字可以用在要过滤的列前面,而不仅仅是在后面。
SELECT prod_name
FROM Products
WHERE NOT vent_id='DLL01'
ORDER BY prod_name;
输出DLL01之外的所有东西。同理也可以用!=或者<>表示
SELECT prod_name
FROM Products
WHERE vent_id<>'DLL01'
ORDER BY prod_name;
在更复杂的字句中,NOT的作用比<>更大,这里看不出来。