【SQL必知必会】第5课 高级过滤数据


5.1 组合WHERE 子句

#5.1.1 AND操作符

1 SELECT prod_id, prod_price, prod_name
2 FROM Products
3 WHERE vend_id = 'DLL01' AND prod_price <= 4;

结果

 


#5.1.2 OR操作符

1 SELECT prod_name, prod_price
2 FROM Products
3 WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';

结果


#5.1.3 求值顺序

需要列出“价格为10美元及以上”?且由 “DLL01” 或 “BRS01” 制造的所有产品。

1 SELECT prod_name, prod_price
2 FROM Products
3 WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'
4 AND prod_price >= 10;

结果:

观察到出现的,不符合10美元以下的!!!原因是 逻辑运算符的运算顺序。

#使用圆括号来消除歧义

1 SELECT prod_name, prod_price
2 FROM Products
3 WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01')
4 AND prod_price >= 10;
5 
6 /* 使用圆括号来消除歧义 */

结果


5.2 IN 操作符

 1 SELECT prod_name, prod_price
 2 FROM Products
 3 WHERE vend_id IN ( 'DLL01', 'BRS01' )
 4 ORDER BY prod_name;
 5 
 6 /*
 7 效果等价以下的语句:
 8 SELECT prod_name, prod_price
 9 FROM Products
10 WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'
11 ORDER BY prod_name;
12 
13 很明显利用IN能更简洁,清晰
14 */

结果


5.3 NOT 操作符

 1 SELECT prod_name
 2 FROM Products
 3 WHERE NOT vend_id = 'DLL01'
 4 ORDER BY prod_name;
 5 
 6 /*
 7 等价于下面的语句:
 8 
 9 SELECT prod_name
10 FROM Products
11 WHERE vend_id <> 'DLL01'
12 ORDER BY prod_name;
13 */

结果