在使用MySQL查詢數據時,我們常常需要從大量數據中篩選出符合特定條件的記錄。這時候,WHERE子句就派上用場了——它能幫我們精準地過濾出想要的數據,就像從一堆蘋果裏挑出紅色的、帶斑點的一樣。本文將用最簡單的語言和例子,帶你快速掌握WHERE子句的用法。
一、WHERE子句是什麼?¶
WHERE子句是SELECT語句的一部分,緊跟在FROM表名之後,用來指定查詢數據的條件。只有滿足條件的記錄纔會被返回,不滿足條件的會被“過濾”掉。
舉個例子:假設我們有一個students表,裏面存着學生的姓名、年齡、分數。如果想查詢“年齡等於18歲”的學生,就可以用WHERE子句:
SELECT * FROM students
WHERE age = 18;
這裏的age = 18就是篩選條件,*表示查詢所有列,FROM students指定從students表中查詢。
二、最基礎的條件:等於(=)和不等於(!= 或 <>)¶
最常用的條件是“等於”和“不等於”,適用於數值、字符串、日期等類型。
- 等於(=)
用於匹配完全相等的值。
- 數值類型:age = 18(不需要引號)
- 字符串類型:name = '張三'(必須用單引號' '包裹字符串)
例子:查詢姓名爲“李四”的學生:
SELECT * FROM students
WHERE name = '李四';
- 不等於(!= 或 <>)
用於匹配不相等的值。
例子:查詢分數不等於60分的學生:
SELECT * FROM students
WHERE score != 60; -- 或用<>代替!=
三、範圍條件:大於、小於和BETWEEN¶
當需要篩選“在某個範圍內”的數據時,常用大於(>)、小於(<)、大於等於(>=)、小於等於(<=),或者更簡潔的BETWEEN...AND...。
- 大於/小於
- 年齡大於18歲:age > 18
- 分數小於60分:score < 60
例子:查詢年齡大於18歲且分數大於80分的學生:
SELECT * FROM students
WHERE age > 18 AND score > 80;
- 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(非) 連接,讓篩選更靈活。
- AND(且)
所有條件必須同時滿足。
例子:查詢年齡大於18歲且性別爲“男”的學生:
SELECT * FROM students
WHERE age > 18 AND gender = '男';
- OR(或)
滿足任一條件即可。
例子:查詢年齡小於15歲或分數大於90分的學生:
SELECT * FROM students
WHERE age < 15 OR score > 90;
- NOT(非)
取反,即“不滿足某個條件”。
例子:查詢班級不是“高三”的學生:
SELECT * FROM students
WHERE class NOT = '高三';
五、模糊查詢:LIKE(匹配部分字符)¶
如果想查詢“姓名包含某個字”或“以某個字開頭/結尾”的記錄,可以用LIKE搭配通配符%(任意多個字符)或_(單個字符)。
%:代表任意長度的字符(包括0個字符),比如'李%'匹配所有以“李”開頭的名字。_:代表單個字符,比如'張_'匹配“張”+1個任意字符(如“張三”“張四”)。
例子:
1. 查詢姓名包含“張”的學生:
SELECT * FROM students
WHERE name LIKE '%張%';
- 查詢姓名以“王”開頭且長度爲2的學生(比如“王五”):
SELECT * FROM students
WHERE name LIKE '王_';
六、特殊條件:處理空值(IS NULL / IS NOT NULL)¶
在數據庫中,可能存在“沒有值”的情況(空值,用NULL表示,注意不是字符串'NULL')。此時需要用IS NULL或IS NOT NULL判斷空值,不能用=或!=。
例子:查詢班級爲空的學生:
SELECT * FROM students
WHERE class IS NULL;
七、常見錯誤與注意事項¶
- 字符串必須用單引號:比如
name = '張三'(正確),如果寫成name = 張三會報錯。 - BETWEEN包含兩端值:
BETWEEN 18 AND 22包含18和22,若用18 < age < 22則不包含。 - 邏輯運算符優先級:
AND優先級高於OR,不確定時用括號明確順序,比如(age > 18 AND score > 80) OR (age < 15 AND score > 90)。 - 避免用NULL判斷錯誤:
class = NULL不會返回結果,必須用class IS NULL。
總結¶
WHERE子句是MySQL數據篩選的核心工具,掌握它能幫你快速從表中提取目標數據。關鍵是理解條件類型(等於、範圍、模糊、邏輯)和特殊處理(空值、字符串引號)。多練習簡單例子(如學生表、訂單表),很快就能熟練運用!
現在,你可以嘗試在自己的MySQL環境中創建一個簡單表,用WHERE子句篩選不同條件的數據,加深理解吧!