5.1 組合 WHERE 子句
第4課介紹的 WHERE 子句在過濾數據時都是用單一的條件。
5.1.1 AND 操作符
檢索由供應商 DLL01 制造且價格小于等于 4 美元的所有產品的名稱和價格:
SELECT PRod_id, prod_price, prod_nameFROM ProductsWHERE vend_id = 'DLL01' AND prod_price <= 4;
5.1.2 OR 操作符
檢索任一個指定供應商制造的所有產品的名稱和價格:
SELECT prod_name, prod_priceFROM ProductsWHERE vend_id = 'DLL01' OR vend_id = 'BRS01';
5.1.3 求值順序(( ))
需要列出價格為 10 美元以上,且由 DLL01 或 BRS01 制造的所有產品:
SELECT prod_name, prod_priceFROM ProductsWHERE vend_id = 'DLL01' OR vend_id = 'BRS01' AND prod_price >= 10;
觀察結果,發現有 4 行價格小于 10 美元的。
【原因】SQL 在處理 OR 操作符前,優先處理 AND 操作符
SELECT prod_name, prod_priceFROM ProductsWHERE (vend_id = 'DLL01' OR vend_id = 'BRS01') AND prod_price >= 10;
【提示】在 WHERE 子句中使用圓括號:
改變優先級;
明確操作順序,增強可讀性。
5.2 IN 操作符
IN 操作符:用來指定條件范圍,范圍中的每個條件都可以進行匹配。
檢索由供應商 DLL01 和 BRS01 制造的所有產品:
SELECT prod_name, prod_priceFROM ProductsWHERE vend_id IN ('DLL01', 'BRS01')ORDER BY prod_name;
-- 用 IN 完成和 OR 同樣的操作SELECT prod_name, prod_priceFROM ProductsWHERE vend_id = 'DLL01' OR vend_id = 'BRS01'ORDER BY prod_name
使用 IN 操作符的原因: --在有很多合法選項時,IN 的語法更直觀; --在與其它 AND 和 OR 組合使用 IN 時,求值順序容易管理; --IN 一般比一組 OR 執行得快; --最大優點--可以包含其它 SELECT 語句,能動態地建立 WHERE 子句。
5.3 NOT 操作符
用來否定其后所跟的任何條件
NOT 從不單獨使用
NOT 可以用在要過濾的列前或后
列出除 DLL01 之外的所有供應商制造的產品:
SELECT prod_nameFROM ProductsWHERE NOT vend_id = 'DLL01'ORDER BY prod_name;
--也可以使用<>,結果一樣SELECT prod_nameFROM ProductsWHERE vend_id <> 'DLL01'ORDER BY prod_name;
5.4 小結
續集:
SQLServer:《SQL必知必會》一書的讀書筆記(六)
SQLServer:《SQL必知必會》一書的讀書筆記(四)
新聞熱點
疑難解答