21 WHERE 條件查詢
前面介紹瞭如何對錶數查詢、更新、刪除,本小節介紹如何在查詢、更新、刪除操作加上 WHERE 條件約束,使這些語句的操作更加準確,滿足業務需求。WHERE 條件的操作符型別有如下:
符號 | 說明 | 舉例 |
---|---|---|
< | 小於,< 左邊的值如果小於右邊的值,則結果為 TRUE,否則為 FALSE |
如 : 滿足年齡小於 18 的條件 age < 18 |
= | 等於,= 左邊的值如果等於右邊的值,則結果為 TRUE,否則為 FALSE |
如 : 姓名為 小明 的條件 name = '小明' |
> | 大於,> 左邊的值如果大於右邊的值,則結果為 TRUE,否則為 FALSE |
如 : 時間戳大於 2020-03-30 00:00:00 time > 1585497600 |
<> | 不等於,<> 還可寫成 != ,左邊的值如果不等於右邊的值,則結果為 TRUE,否則為 FALSE |
如 : 年份不等於2012 的條件 year != 或 year <> 2012 |
<= | 小於等於,<= 左邊的值如果大於右邊的值,則結果為 FALSE,否則為 TRUE |
如 : 滿足年齡小於等於 18 的條件 age <= 18 |
>= | 大於等於,>= 左邊的值如果小於右邊的值,則結果為 FALSE,否則為 TRUE |
如 : 滿足年齡大於等於 18 的條件 age >= 18 |
LIKE | 模糊條件,LIKE 右邊的值如果包含左邊的值,則結果返回TRUE,否則為 FALSE |
如 : 滿足身份證號為 420 開頭的條件 id_number LIKE '420%' ,其中 % 表示任意值 |
NOT LIKE | 不滿足模糊條件,LIKE 右邊的值如果不包含左邊的值,則結果返回TRUE,否則為 FALSE |
如 : 滿足身份證號不是 X 結尾的條件 id_number NOT LIKE '%X' ,其中 % 表示任意值 |
BETWEEN AND | 在兩個值之間(包含兩端值) | 如 : 年齡滿足 大於等於20 和 小於等於30 的條件 age BETWEEN 20 AND 30 |
NOT BETWEEN AND | 不在在兩個值之間(不包含兩端值) | 如 : 年齡滿足 小於20 和 大於30 的條件 age NOT BETWEEN 20 AND 30 |
IS NULL | 空,IS NULL 左邊的值如果為空,則返回TRUE,否則為FALSE |
如 : 年齡滿足 郵箱為空 的條件 email IS NULL |
IS NOT NULL | 不是空,IS NOT NULL 左邊的值如果不為空,則返回TRUE,否則為FALSE |
如 : 年齡滿足 郵箱不為空 的條件 email IS NOT NULL |
1.單條件查詢
以 teacher 表為例,查詢年齡大於 18
的教師資訊:
SELECT * FROM teacher WHERE age > 18;
執行結果如下圖:
再比如使用 LIKE
模糊查詢身份證號以 020X
結尾的教師資訊:
SELECT * FROM teacher WHERE id_number LIKE '%020X';
執行結果如下圖:
2.AND 多條件查詢
以 teacher 表為例,查詢年齡大於 18
和 教師姓氏 王
的教師資訊:
SELECT * FROM teacher WHERE age > 18 AND name LIKE '王%';
執行結果如下圖:
Tips:這裡還想加更多的條件可以在後面繼續跟
AND
,LIKE
後面表示式中%
表示指代任意內容。
3.OR 多條件查詢
以 teacher 表為例,查詢年齡大於 25
或 教師姓氏 王
的教師資訊:
SELECT * FROM teacher WHERE age > 25 OR name LIKE '王%';
執行結果如下圖:
Tips:這裡還想加更多的條件可以在後面繼續跟
OR
,若AND
和OR
混合使用則需要把同一組表示式用()
包起來,如 :(age > 25 AND name LIKE '王%') OR (age < 20 AND name LIKE '劉%')
。
4.BETWEEN AND 更新資料
以 teacher 表為例,將 age 在 20 和 30 之間的教師身份證設定為無
:
UPDATE teacher SET id_number = '無' WHERE age BETWEEN 20 AND 30;
Tips:注意
BETWEEN AND
包含兩端的值。
5.IS NULL 查詢
為了演示方便,我們先給 teacher 表增加一個欄位 email
:
ALTER TABLE `item_name`.`teacher`
ADD COLUMN `email` varchar(50) NULL AFTER `id_number`;
執行結果如下圖:
清空表資料:
TRUNCATE TABLE teacher;
然後往 teacher 表插入幾條測試資料:
INSERT INTO teacher
(name,age,id_number,email)
VALUES
('姓名甲',19,'42011720200604077X',NULL),
('姓名乙',18,'42011720200604099X','[email protected]'),
('姓名丙',20,'42011720200604020X',NULL),
('姓名丁',21,'42011720200604022X','[email protected]'),
('姓名戊',22,'42011720200604033X',NULL)
然後查詢 email
為 NULL 的教師資訊結果集:
SELECT * FROM teacher WHERE email IS NULL;
執行結果如下圖:
6.小結
本小節介紹瞭如果在查詢、更新語句後面加上 WHERE
條件約束,需要注意的是當使用 >
、<
、這樣的操作符和空值比較的時候,NULL值與任何其它值的比較(即使是NULL)永遠不會為 TRUE
,例如要查詢 name
為 NULL 的結果集要寫成 name IS NULL
,而不能使用 name=NULL
。