更強的過濾控制:and 子句方式和 or 子句方式
操作符(operator)用來聯結或改變where 字句中的字句的關鍵字。也成邏輯操作符(logical operator)
1、AND操作符:通過不止一個條件進行過濾
where 與and 連用可以不止通過一個列進行過濾,將兩個過濾條件組合在一起,用來檢索滿足所給定條件的行,兩個條件后增加一個條件就要加一個and
用到的表
-- 將供應商是 1003 價格小於等於10 的商品檢索出來,順便排個序 select prod_name,vend_id,prod_price from products where vend_id=1003 and prod_price<=10 order by prod_price;
2、OR操作符 : 檢索匹配任一條件的行
你要是對數學熟悉,且,或,非有所了解,那么and 就是且,or 就是或
-- 檢索供應商是 1002 或 1003 的商品 select prod_name,vend_id,prod_price from products where vend_id=1003 or vend_id =1002 order by prod_price;
3、and 與 or 連用
where 可包含任意數目的and 和or 操作符,允許兩個結合進行更復雜過濾
注意:
1、SQL(與其他語言一樣)也有自己的計算次序,and 比or 的 優先級更高。
2、不要依賴默認的計算順序,任何使用具有AND 和 OR 操作符的WHERE 字句,都應該使用圓括號進行明確的分組操作,圓括號沒有壞處,還能消除歧義
如:檢索出價格為8 (含8) 以上且由1002 或1003制造的所有商品
4、IN 操作符 : 指定條件范圍,范圍中的每個條件都可以進行匹配
注意: in 取的 合法值由逗號分隔,放在括號里
-- 查詢價格是2.5 和 10 的商品 select prod_name,vend_id,prod_price from products where prod_price in (2.5,10) order by prod_price;
IN操作符 優點:
1、in 操作符 一般比or 操作符執行的更快
2、語法更清楚且更直觀
3、計算的次序更易管理(因為使用的操作符更少)
4、可以包含其他select 語句,使其能更動態的建立where 子句
in關鍵字也可以與子查詢一塊結合使用,使父查詢匹配子查詢返回多個單字段值。當與比較運算符聯合使用時,要求子查詢只能返回一條或空的記錄。
5、EXISTS 操作符: 是否存在
在創建庫和表時,用來檢測數據庫對象是否存在。
當與where 子句一塊使用時,用來確認后面的查詢是否繼續進行,返回值 true 或false
-- 如果存在表 tb_stu ,先刪除在重新創建 drop table if exists tb_stu; -- 與where子句一塊使用 select ······ from 表名 where exists (子查詢);
exists 關鍵字后面的參數是一個任意的子查詢,如果該子查詢有返回行,則exists子查詢結果為true,此時在執行外層查詢語句
如果子查詢沒有返回行,則exists 子查詢的結果為false,此時不再執行外層查詢語句
not exists 表示不存在對應查詢條件的記錄。
exists 和 not exists 結果只取決於是否有返回記錄,不取決於這些記錄的內容,所以exists 或 not exists 子查詢后select語句中的字段類表通常無關緊要
6、NOT 操作符 : 否定他之后所跟的條件
注意:MySQL中支持使用not 對 in、between 和exists 子句取反,與其他DBMS允許使用NOT 對各種條件取反有很大的差別。
-- 查詢價格不是2.5 和 10 的商品 select prod_name,vend_id,prod_price from products where prod_price not in (2.5,10) order by prod_price;