为了进行更强的过滤控制,sql允许给出多个where子句,这些子句有两种使用方式,即以and子句或or子句的方式使用。
注意: 1、操作符:用来联结或改变where子句中的子句的关键字,也称为逻辑操作符
列出价格为10美元及以上,且有DLL01或BSR01制造的产品。
输入:
SELECT prod_name,prod_price FROM Products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01' AND prod_price >= 10; #错误输出: 分析: 返回的行中由四行价格小于10美元,显然返回的行未按预期的进行过滤。原因就是AND操作符的优先级比OR操作符的优先级高,所有这里理解为:由供应商BRS01制造的价格为10美元以上的所有产品,以及由供应商制造的所有产品而且不管其价格如何。
输入:
SELECT prod_name,prod_price FROM Products WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01') AND prod_price >= 10; #正确 #正确的语句和前一条的唯一差别就是,将前两个条件用圆括号括了起来输出:
注意: 1、任何时候使用具有and和or操作符的whereziju,都应该使用圆括号明确的分组操作符。不要过分依赖默认求值顺序,即使他确实如你希望的那样。使用圆括号没有什么坏处,他能消除歧义。
IN: WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当。
SELECT prod_name,prod_price FROM products WHERE vend_id IN ('DLL01','BRS01') ORDER BY prod_name ; SELECT prod_name,prod_price FROM products WHERE vend_id = ’DLL01‘ OR vend_id = 'BRS01' ORDER BY prod_name ;为什么要使用IN操作符 1、再由很多合法选项时,IN操作符的语法更清楚,更直观。 2、在与其他AND和OR操作符组合使用IN时,求职顺序更容易管理。 3、IN操作符一般比一组OR操作符执行的更快。 4、IN的最大优点是可以包含其他SELECT语句,能够更动态的建立WHERE子句。
WHERE子句中的NOT操作符由且只有一个功能,那就是否定其后所更的任何条件。
SELECT prod_name FROM produtcts WHERE NOT vend_id = 'dll01' ORDER BY prod_name ;分析: 这里的NOT否定跟在其后的条件,因此,DBMS不是匹配vend_id为DLL01,而是匹配非DLL01之外的所有东西。
#以上的例子也可以使用<>操作符来完成 SELECT prod_name FROM Products WHERE vend_id <> 'DLL01' ORDER BY prod_name ;分析: 为什么使用NOT?对于这里的这种简单的WHERE子句,使用NOT确实没有什么优势。但在更复杂的子句中,NOT是非常有用的。