首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 多條件查詢完全指南:AND、OR、IN、NOT 邏輯組合與優先級陷阱

     編輯:MySQL 綜合教學

MySQL 多條件查詢完全指南:AND、OR、IN、NOT 邏輯組合與優先級陷阱

WHERE 子句支援多條件組合,核心操作符為 AND(且)、OR(或)、IN(集合)、NOT(非)。理解運算符優先級(AND 高於 OR)與括號分組是寫出正確查詢的關鍵。以下以 products 表演示。

示例表數據

products 表

1. AND 多條件並列

同時滿足廠商 ID 為 1003 且 價格 ≤ 10:

SELECT * FROM products WHERE vend_id = 1003 AND prod_price <= 10;

三條件並列同理:WHERE vend_id = 1003 AND prod_price <= 10 AND prod_name LIKE 'Jet%'

AND 多條件結果

2. OR 任一條件滿足

廠商為 1002 或 1003:

SELECT * FROM products WHERE vend_id = 1002 OR vend_id = 1003;

OR 條件結果

3. AND/OR 混合:優先級陷阱與括號修正

需求:廠商為 1002 或 1003,且 價格 > 10。

錯寫(AND 優先級高,實際成:vend_id=1002 或 (vend_id=1003 且 price>10)):

SELECT * FROM products WHERE vend_id = 1002 OR vend_id = 1003 AND prod_price > 10;

錯誤結果

正確寫法(用括號明確分組):

SELECT * FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price > 10;

正確結果

4. IN 操作符:簡化多值 OR

WHERE vend_id IN (1002, 1003) 等價於 vend_id = 1002 OR vend_id = 1003,語義更清晰,值列表長時更易維護。

SELECT * FROM products WHERE vend_id IN (1002, 1003);

IN 操作符結果

5. NOT 否定條件

排除特定廠商:WHERE vend_id NOT IN (1002, 1003) 或 WHERE NOT (vend_id = 1002 OR vend_id = 1003)。

NOT 條件結果

最佳實踐總結

  • 混合 AND/OR 務必加括號,避免優先級導致邏輯錯誤。
  • 多個離散值匹配優先用 IN,可讀性強且優化器易轉換為範圍查詢。
  • NOT IN 子查詢若包含 NULL 會導致結果為空,改用 NOT EXISTS 或 LEFT JOIN ... IS NULL。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved