在使用MySQL查詢數據時,我們常常需要從大量數據中篩選出符合特定條件的記錄。這時候,WHERE子句就派上用場了——它能幫我們精準地過濾出想要的數據,就像從一堆蘋果裏挑出紅色的、帶斑點的一樣。本文將用最簡單的語言和例子,帶你快速掌握WHERE子句的用法。

一、WHERE子句是什麼?

WHERE子句是SELECT語句的一部分,緊跟在FROM表名之後,用來指定查詢數據的條件。只有滿足條件的記錄纔會被返回,不滿足條件的會被“過濾”掉。

舉個例子:假設我們有一個students表,裏面存着學生的姓名、年齡、分數。如果想查詢“年齡等於18歲”的學生,就可以用WHERE子句:

SELECT * FROM students 
WHERE age = 18;

這裏的age = 18就是篩選條件,*表示查詢所有列,FROM students指定從students表中查詢。

二、最基礎的條件:等於(=)和不等於(!= 或 <>)

最常用的條件是“等於”和“不等於”,適用於數值、字符串、日期等類型。

  1. 等於(=)
    用於匹配完全相等的值。
    - 數值類型:age = 18(不需要引號)
    - 字符串類型:name = '張三'(必須用單引號' '包裹字符串)

例子:查詢姓名爲“李四”的學生:

   SELECT * FROM students 
   WHERE name = '李四';
  1. 不等於(!= 或 <>)
    用於匹配不相等的值。
    例子:查詢分數不等於60分的學生:
   SELECT * FROM students 
   WHERE score != 60;  -- 或用<>代替!=

三、範圍條件:大於、小於和BETWEEN

當需要篩選“在某個範圍內”的數據時,常用大於(>)、小於(<)、大於等於(>=)、小於等於(<=),或者更簡潔的BETWEEN...AND...

  1. 大於/小於
    - 年齡大於18歲:age > 18
    - 分數小於60分:score < 60

例子:查詢年齡大於18歲且分數大於80分的學生:

   SELECT * FROM students 
   WHERE age > 18 AND score > 80;
  1. BETWEEN…AND…(範圍查詢)
    用於匹配“在A和B之間(包含A和B)”的數據,比>=<=更簡潔。
    例子:查詢年齡在18到22歲之間的學生(包含18和22):
   SELECT * FROM students 
   WHERE age BETWEEN 18 AND 22;

(注意:BETWEEN的兩端值必須是“小值在前,大值在後”,否則會返回空結果)

四、邏輯運算符:AND、OR、NOT

當需要組合多個條件時,用AND(且)、OR(或)、NOT(非) 連接,讓篩選更靈活。

  1. AND(且)
    所有條件必須同時滿足。
    例子:查詢年齡大於18歲性別爲“男”的學生:
   SELECT * FROM students 
   WHERE age > 18 AND gender = '男';
  1. OR(或)
    滿足任一條件即可。
    例子:查詢年齡小於15歲分數大於90分的學生:
   SELECT * FROM students 
   WHERE age < 15 OR score > 90;
  1. NOT(非)
    取反,即“不滿足某個條件”。
    例子:查詢班級不是“高三”的學生:
   SELECT * FROM students 
   WHERE class NOT = '高三';

五、模糊查詢:LIKE(匹配部分字符)

如果想查詢“姓名包含某個字”或“以某個字開頭/結尾”的記錄,可以用LIKE搭配通配符%(任意多個字符)或_(單個字符)。

  • %:代表任意長度的字符(包括0個字符),比如'李%'匹配所有以“李”開頭的名字。
  • _:代表單個字符,比如'張_'匹配“張”+1個任意字符(如“張三”“張四”)。

例子:
1. 查詢姓名包含“張”的學生:

   SELECT * FROM students 
   WHERE name LIKE '%張%';
  1. 查詢姓名以“王”開頭且長度爲2的學生(比如“王五”):
   SELECT * FROM students 
   WHERE name LIKE '王_';

六、特殊條件:處理空值(IS NULL / IS NOT NULL)

在數據庫中,可能存在“沒有值”的情況(空值,用NULL表示,注意不是字符串'NULL')。此時需要用IS NULLIS NOT NULL判斷空值,不能用=!=

例子:查詢班級爲空的學生:

SELECT * FROM students 
WHERE class IS NULL;

七、常見錯誤與注意事項

  1. 字符串必須用單引號:比如name = '張三'(正確),如果寫成name = 張三會報錯。
  2. BETWEEN包含兩端值BETWEEN 18 AND 22包含18和22,若用18 < age < 22則不包含。
  3. 邏輯運算符優先級AND優先級高於OR,不確定時用括號明確順序,比如(age > 18 AND score > 80) OR (age < 15 AND score > 90)
  4. 避免用NULL判斷錯誤class = NULL不會返回結果,必須用class IS NULL

總結

WHERE子句是MySQL數據篩選的核心工具,掌握它能幫你快速從表中提取目標數據。關鍵是理解條件類型(等於、範圍、模糊、邏輯)和特殊處理(空值、字符串引號)。多練習簡單例子(如學生表、訂單表),很快就能熟練運用!

現在,你可以嘗試在自己的MySQL環境中創建一個簡單表,用WHERE子句篩選不同條件的數據,加深理解吧!

小夜