SQL (四)高級數據過濾(組合where子句建立高級搜索條件)

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操作符篩選條件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章