文章目錄
where子句的and,or操作符
需要更強的過濾控制,之前都是用的單一條件,即只用一個where子句,現在用多個where子句組合更多的條件。組合方式有兩隻在種:and子句的方式,或者or子句的方式
and, or就是邏輯操作符
and邏輯操作符
select prod_id, prod_price, prod_name
from products
where vend_id = 'DLL01' AND prod_price <=4;
可以有更多條件
select prod_id, prod_price, prod_name
from products
where vend_id = 'DLL01' AND prod_price <=4 and prod_id='BNBG03';
or邏輯操作符
有的實現裏,有短路性質,有的沒有,比如mysql就沒有
select prod_name, prod_price,vend_id
from products
where vend_id = 'DLL01' OR vend_id = 'BRS01';
從這裏的實際輸出來看,並沒有短路,第一個條件和第二個條件都執行了的
求值順序:and 和 or相遇,用圓括號對操作符明確分組
主要是涉及到優先級,and的優先級比or高,所以要用括號,括號的優先級比and更高
select prod_name, prod_price, vend_id
from products
where vend_id = 'DLL01' OR vend_id = 'BRS01'
AND prod_price >= 10;
看來,最後一個and條件只作用於了vend_id = 'BRS01’條件。
select prod_name, prod_price, vend_id
from products
where (vend_id = 'DLL01' OR vend_id = 'BRS01')
AND prod_price >= 10;
IN 操作符:指定條件範圍,和OR功能一樣
select prod_name, prod_price, vend_id
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 prod_name;
not操作符:複雜子句中非常有用
select prod_name, vend_id
from products
where not vend_id = 'DLL01'
ORDER BY prod_price;
和下面的兩段代碼功能一樣
select prod_name, vend_id
from products
where vend_id != 'DLL01'
ORDER BY prod_price;
select prod_name, vend_id
from products
where vend_id <> 'DLL01'
ORDER BY prod_price;
總結
- 注意用圓括號管理求值順序
- 用and,or操作符組合where子句
- 用in和not操作符篩選條件