有時,當您使用 SQL 時,您不需要對整個記錄范圍進行操作?;蛘?,如果您不小心更改或刪除了所有內(nèi)容,那將導致非常嚴重的后果。在這些情況下,您只需選擇要處理的記錄部分,即滿足特定條件的記錄部分。這就是 SQL 的WHERE子句有用的地方。
SQL WHERE子句語法
你這樣寫WHERE子句:
SELECT column1, column2...
FROM table_name
WHERE condition;
請注意,這里我使用SELECT語句編寫了它,但它的使用不僅限于SELECT. 您也可以將它與其他語句一起使用,例如DELETE和UPDATE。
演示數(shù)據(jù)庫
讓我們使用這個users表作為如何使用WHERE子句的示例。
ID | NAME | AGE | STATE | |
---|---|---|---|---|
1 | Brian | 15 | Michigan | brian@example.com |
2 | Leonard | 55 | Mississippi | leonard@example.com |
3 | Anvil | 31 | South Dakota | anvil@example.com |
4 | Jo | 44 | Maine | jo@example.com |
5 | Meredith | 43 | Delaware | meredith@example.com |
6 | Cody | 16 | Michigan | cody@example.com |
7 | Dilara | 50 | Ohio | dilara@example.com |
8 | Corbin | 47 | Wisconsin | corbin@example.com |
9 | Gin | 63 | Illinois | gin@example.com |
10 | Alice | 50 | Nevada | alice@example.com |
11 | Zachary | 21 | Massachusetts | zachery@example.com |
12 | Delmar | 56 | Idaho | delmar@example.com |
13 | Dennie | 96 | Ohio | dennie@example.com |
14 | Aaron | 50 | Florida | aaron@example.com |
15 | Busrah | 18 | South Dakota | busrah@example.com |
16 | Aveline | 88 | Nevada | aveline@example.com |
17 | Aherin | 72 | Arkansas | aherin@example.com |
18 | Viola | 66 | Maine | viola@example.com |
19 | Nadya | 22 | Florida | nadya@example.com |
20 | Izabela | 61 | Arizona | izabela@example.com |
SELECT帶有WHERE語句的 SQL子句 示例
當您想確保某個事件會影響 50 歲或以上的人時,您可以僅選擇具有以下代碼的用戶:
SELECT *
FROM users
WHERE age >= 50;
這將給出一個如下表,只列出 50 歲或以上的用戶:
ID | NAME | AGE | STATE | |
---|---|---|---|---|
2 | Leonard | 55 | Mississippi | leonard@example.com |
7 | Dilara | 50 | Ohio | dilara@example.com |
9 | Gin | 63 | Illinois | gin@example.com |
10 | Alice | 50 | Nevada | alice@example.com |
12 | Delmar | 56 | Idaho | delmar@example.com |
13 | Dennie | 96 | Ohio | dennie@example.com |
14 | Aaron | 50 | Florida | aaron@example.com |
16 | Aveline | 88 | Nevada | aveline@example.com |
17 | Aherin | 72 | Arkansas | aherin@example.com |
18 | Viola | 66 | Maine | viola@example.com |
20 | Izabela | 61 | Arizona | izabela@example.com |
DELETE帶有WHERE語句的 SQL子句示例
假設(shè) Cody 已決定將自己從該列表中刪除。您可以使用一條DELETE語句更新表,WHERE以確保只刪除 Cody 的記錄。
DELETE FROM users
WHERE name IS "Cody";
該users表現(xiàn)在看上去像下面,沒有線6(其中科迪的信息是):
ID | NAME | AGE | STATE | |
---|---|---|---|---|
1 | Brian | 15 | Michigan | brian@example.com |
2 | Leonard | 55 | Mississippi | leonard@example.com |
3 | Anvil | 31 | South Dakota | anvil@example.com |
4 | Jo | 44 | Maine | jo@example.com |
5 | Meredith | 43 | Delaware | meredith@example.com |
7 | Dilara | 50 | Ohio | dilara@example.com |
8 | Corbin | 47 | Wisconsin | corbin@example.com |
9 | Gin | 63 | Illinois | gin@example.com |
10 | Alice | 50 | Nevada | alice@example.com |
11 | Zachary | 21 | Massachusetts | zachery@example.com |
12 | Delmar | 56 | Idaho | delmar@example.com |
13 | Dennie | 96 | Ohio | dennie@example.com |
14 | Aaron | 50 | Florida | aaron@example.com |
15 | Busrah | 18 | South Dakota | busrah@example.com |
16 | Aveline | 88 | Nevada | aveline@example.com |
17 | Aherin | 72 | Arkansas | aherin@example.com |
18 | Viola | 66 | Maine | viola@example.com |
19 | Nadya | 22 | Florida | nadya@example.com |
20 | Izabela | 61 | Arizona | izabela@example.com |
現(xiàn)在也許您已經(jīng)收到通知,說 Anvil 已經(jīng)老了,現(xiàn)在 32 歲了。您可以使用該UPDATE語句更改 Anvil 的記錄,并且您可以使用它WHERE來確保僅更新 Anvil 的記錄。
UPDATE帶有WHERE語句的 SQL子句示例
UPDATE users
SET age = 32
WHERE name IS "Anvil";
現(xiàn)在該表將如下所示:
ID | NAME | AGE | STATE | |
---|---|---|---|---|
1 | Brian | 15 | Michigan | brian@example.com |
2 | Leonard | 55 | Mississippi | leonard@example.com |
3 | Anvil | 32 | South Dakota | anvil@example.com |
4 | Jo | 44 | Maine | jo@example.com |
5 | Meredith | 43 | Delaware | meredith@example.com |
7 | Dilara | 50 | Ohio | dilara@example.com |
8 | Corbin | 47 | Wisconsin | corbin@example.com |
9 | Gin | 63 | Illinois | gin@example.com |
10 | Alice | 50 | Nevada | alice@example.com |
11 | Zachary | 21 | Massachusetts | zachery@example.com |
12 | Delmar | 56 | Idaho | delmar@example.com |
13 | Dennie | 96 | Ohio | dennie@example.com |
14 | Aaron | 50 | Florida | aaron@example.com |
15 | Busrah | 18 | South Dakota | busrah@example.com |
16 | Aveline | 88 | Nevada | aveline@example.com |
17 | Aherin | 72 | Arkansas | aherin@example.com |
18 | Viola | 66 | Maine | viola@example.com |
19 | Nadya | 22 | Florida | nadya@example.com |
20 | Izabela | 61 | Arizona | izabela@example.com |
可以與WHERE子句一起使用的運算符來選擇記錄
您可以使用=, >, <, >=, <=, <>(或!=取決于您的 SQL 版本), BETWEEN, LIKE,等運算符IN。
我們已經(jīng)>=在上面的例子中看到了“大于或等于”的作用。
=是“等于”、>“大于”、<“小于”、<=“小于或等于”、<>(或!=)是“不等于”。
大于、小于、大于或等于、小于或等于四個運算符在處理數(shù)字時最有用。
等于和不等于這兩個運算符對于數(shù)字和其他數(shù)據(jù)類型都很有用。
如何在 SQL 中使用運算符
BETWEEN允許您指定一個數(shù)字范圍。例如WHERE age BETWEEN 24 and 51將選擇該年齡范圍內(nèi)的所有記錄。
SELECT * FROM users
WHERE age BETWEEN 24 AND 51;
有 7 個用戶的年齡在此范圍內(nèi):
ID | NAME | AGE | STATE | |
---|---|---|---|---|
3 | Anvil | 32 | South Dakota | anvil@example.com |
4 | Jo | 44 | Maine | jo@example.com |
5 | Meredith | 43 | Delaware | meredith@example.com |
7 | Dilara | 50 | Ohio | dilara@example.com |
8 | Corbin | 47 | WIsconsin | corbin@example.com |
10 | Alice | 50 | Nevada | alice@example.com |
14 | Aaron | 50 | Florida | aaron@example.com |
如何在 SQL 中使用LIKE運算符
LIKE允許您指定模式。例如,WHERE name LIKE "A%"將選擇名稱以 A 開頭的所有記錄。
SELECT * FROM users
WHERE name LIKE "A%";
在我們的列表中有 5 個名字以 A 開頭的用戶:
ID | NAME | AGE | STATE | |
---|---|---|---|---|
3 | Anvil | 32 | South Dakota | anvil@example.com |
10 | Alice | 50 | Nevada | alice@example.com |
14 | Aaron | 50 | Florida | aaron@example.com |
16 | Aveline | 88 | Nevada | aveline@example.com |
17 | Aherin | 72 | Arkansas | aherin@example.com |
如何制作要使用的圖案 LIKE
您可以使用字符%和制作圖案_。該字符%表示任意數(shù)量的字符(零、一個或多個)。字符_正好代表一個字符。
例如"_ook"可以是“書”、“看”、“角落”。但"%ook"也可以是“ok”或“電話簿”。
如何IN在 SQL 中使用運算符
IN讓您在一系列可能性之間進行選擇。例如,讓我們看看哪些用戶在東海岸。
SELECT * FROM users
WHERE state IN ("Maine", "New Hampshire", "Massachusetts", "Rhode Island", "Connecticut", "New York", "New Jersey", "Delaware", "Maryland", "Virginia", "North Carolina", "South Carolina", "Georgia", "Florida");
該IN運營商的檢查,如果在值state列等于在東海岸各州的列表中的一個值。
只有六個用戶住在東海岸:
ID | NAME | AGE | STATE | |
---|---|---|---|---|
4 | Jo | 44 | Maine | jo@example.com |
5 | Meredith | 43 | Delaware | meredith@example.com |
11 | Zachery | 21 | Massachusetts | zachery@example.com |
14 | Aaron | 50 | Florida | aaron@example.com |
18 | Viola | 66 | Maine | viola@example.com |
19 | Nadya | 22 | Florida | nadya@example.com |
我們不要忘記IS, NOT, AND,OR運算符
我們已經(jīng)IS在上面的示例之一中使用了運算符。就像WHERE name IS "Cody",它檢查列是否具有該確切值。
您可以NOT在條件前使用使其相反。例如,WHERE age NOT BETWEEN 24 AND 51將僅選擇 24 歲以下和 51 歲以上的用戶。使用此標準,將選擇 12 個用戶:
ID | NAME | AGE | STATE | |
---|---|---|---|---|
1 | Brian | 15 | Michigan | brian@example.com |
2 | Leonard | 55 | Mississippi | leonard@example.com |
9 | Gin | 63 | Illinois | gin@example.com |
11 | Zachary | 21 | Massachusetts | zachery@example.com |
12 | Delmar | 56 | Idaho | delmar@example.com |
13 | Dennie | 96 | Ohio | dennie@example.com |
15 | Busrah | 18 | South Dakota | busrah@example.com |
16 | Aveline | 88 | Nevada | aveline@example.com |
17 | Aherin | 72 | Arkansas | aherin@example.com |
18 | Viola | 66 | Maine | viola@example.com |
19 | Nadya | 22 | Florida | nadya@example.com |
20 | Izabela | 61 | Arizona | izabela@example.com |
您可以使用AND到條件,結(jié)合這兩個必須是真實的,例如WHERE name LIKE "A%" AND age > 70會選擇使用一個名稱的用戶以A開頭的和是超過70只2用戶滿足這個條件:
ID | NAME | AGE | STATE | |
---|---|---|---|---|
16 | Aveline | 88 | Nevada | aveline@example.com |
17 | Aherin | 72 | Arkansas | aherin@example.com |
您可以使用OR組合條件,以便只有兩者之一需要為真。例如,WHERE name LIKE "A%" OR age > 70將選擇名稱以 A 開頭或年齡超過 70 歲的用戶(兩部分中只有一個必須為真,但兩者也可以為真)。
有 6 個用戶名以 A 開頭或年齡超過 70 歲(或兩者兼有)。
ID | NAME | AGE | STATE | |
---|---|---|---|---|
3 | Anvil | 32 | South Dakota | anvil@example.com |
10 | Alice | 50 | Nevada | alice@example.com |
13 | Dennie | 96 | Ohio | dennie@example.com |
14 | Aaron | 50 | Florida | aaron@example.com |
16 | Aveline | 88 | Nevada | aveline@example.com |
17 | Aherin | 72 | Arkansas | aherin@example.com |
指定要在表中操作的記錄非常重要。
結(jié)論
通過本文,您已經(jīng)學會了如何使用該WHERE子句來做到這一點。
感謝您的閱讀!