组合WHERE子句
AND操作符
AND 用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行
SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id='DLL01' AND prod_price<=4
OR操作符
OR 用在WHERE子句中的关键字,用来表示检索匹配任一给定条件的行
SELECT prod_name,prod_price FROM products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'
求值顺序
例子:列出价格为10美元及以上,且由DLL01或BRS01制造的产品。
SELECT prod_name,prod_price,vend_id FROM products WHERE vend_id='ddl01' OR vend_id='brs01' AND prod_price>=10
SQL在处理OR操作符钱,优先处理AND操作符(在MySQL中是按从前到后的顺序执行的)。
任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确的分组操作符。
所以规范的sql语句为:
SELECT prod_name,prod_price,vend_id FROM products WHERE (vend_id='ddl01' OR vend_id='brs01') AND prod_price>=10;
IN操作符
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取一组由逗号分隔、括在圆括号中的合法值
SELECT prod_name,prod_price FROM products WHERE vend_id IN ('DLL01','BRS01') ORDER BY prod_name
IN操作符与OR的功能相同
SELECT prod_name,prod_price,vend_id FROM products WHERE vend_id ='DLL01' OR vend_id ='BRS01' ORDER BY 1
既然两者功能相同,为什么还要使用IN操作符呢?其优点如下:
- 在有很多合法选项时,IN操作符的语法更清楚,更直观
- 在与其他AND和OR操作符组合使用IN时,求值顺序更容易管理
- IN操作符一般比一组OR操作符执行得更快
- IN的最大优点是可以包含其他SELECT语句,能够更动态的建立WHERE子句
NOT操作符
NOT是WHERE子句中用来否定其后条件的关键字
SELECT prod_name,vend_id FROM products WHERE NOT vend_id='DLL01' ORDER BY prod_name;
上面的语句也可以用 <>操作符来完成:
SELECT prod_name,vend_id FROM products WHERE vend_id <> 'DLL01' ORDER BY prod_name;
SELECT prod_name,vend_id FROM products WHERE vend_id != 'DLL01' ORDER BY prod_name;
NOT在复杂的子句中会更好的体现。