SQL必知必会(5)高级过滤数据

操作符(operator):用来连接或改变WHERE子句中的子句的关键字,也称为逻辑操作符(logical operator)。

AND操作符:要通过不止一个列进行过滤。

1
2
3
SELECT prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = ‘DLL01’ AND prod_price <= 4;
prod_id prod_price prod_name
BNBG01 3.49 Fish bean bag toy
BNBG02 3.49 Bird bean bag toy
BNBG03 3.49 Rabbit bean bag toy

OR操作符:多个条件,满足任意一个即可。

1
2
3
SELECT prod_name, prod_price
FROM Products
WHERE vend_id = ‘DLL01’ OR vend_id = ‘BRS01’;
prod_name prod_price
8 inch teddy bear 5.99
12 inch teddy bear 8.99
18 inch teddy bear 11.99
Fish bean bag toy 3.49
Bird bean bag toy 3.49
Rabbit bean bag toy 3.49
Raggedy Ann 4.99

求值顺序:
目标:想要列出价格为10美元及以上,且由DLL01或BRS01制造的所有产品。

1
2
3
4
5
/*------------错误示例------------*/
SELECT prod_name, prod_price
FROM Products
WHERE vend_id = ‘DLL01’ OR vend_id = ‘BRS01’
AND prod_price >= 10;
prod_name prod_price
18 inch teddy bear 11.99
Fish bean bag toy 3.49
Bird bean bag toy 3.49
Rabbit bean bag toy 3.49
Raggedy Ann 4.99

SQL在处理OR操作符之前,优先处理AND操作符。

1
2
3
4
5
/*------------正确示例------------*/
SELECT prod_name, prod_price
FROM Products
WHERE (vend_id = ‘DLL01’ OR vend_id = ‘BRS01’)
AND prod_price >= 10;
prod_name prod_price
18 inch teddy bear 11.99

圆括号比AND或OR具有更高的优先级,任何时候使用具有AND、OR的WHERE子句,都可以使用圆括号消除歧义。

IN操作符:用来指定条件范围,范围中的每个条件都可以进行匹配。

1
2
3
4
SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN (‘DLL01’, ‘BRS01’)
ORDER BY prod_name;
prod_name prod_price
12 inch teddy bear 8.99
18 inch teddy bear 11.99
8 inch teddy bear 5.99
Bird bean bag toy 3.49
Fish bean bag toy 3.49
Rabbit bean bag toy 3.49
Raggedy Ann 4.99

IN操作符与OR具有相同功能。

使用IN操作符的优点:

  • 在有很多合法选项时,IN更加清楚直观;
  • 在于其他AND、OR组合使用IN时,求值顺序易管理;
  • IN比一组OR执行更快;
  • IN可以包含其他SELECT语句,能够更动态的建立WHERE子句。

NOT操作符:WHERE子句中用来否定其后条件的关键字。

1
2
3
4
SELECT prod_name 
FROM Products
WHERE NOT vend_id = ‘DLL01’
ORDER BY prod_name;
prod_name
12 inch teddy bear
18 inch teddy bear
8 inch teddy bear
King doll
Queen doll

+——————–+

上面的例子,也可以用<>来完成。