3.1 比較值:<、>、=、<>
編寫 SQL 查詢時最常用的關鍵字之一是WHERE
. 正是在它的幫助下,我們告訴 MySQL 我們要過濾(選擇)哪些表行。
在關鍵字之後,WHERE
您可以編寫非常複雜和棘手的條件。那麼這個條件可以包含哪些操作呢?
操作員 | 描述 | 例子 |
---|---|---|
< | 較少的 | 工資 < 40000 |
> | 更多的 | 工資 > 100000 |
<= | 小於或等於 | 年齡 <= 25 |
>= | 大於或等於 | 年齡 >= 18 |
= | 等於 | 職業='程序員' |
<>, != | 不等於 | 年(加入日期)!= 2015 |
與 Java 語言不同,為了嚴格相等,這裡使用一個等號字符,而不是兩個。
如果要檢查值是否不相等,那麼這可以通過兩種方式完成:<>
要么!=
第一種方式用於 Pascal 等語言,第二種方式典型用於 C++ 等語言和爪哇。
對於 SQL 中的賦值,它與 Pascal 中一樣使用:=
,但很少使用賦值本身。
讓我們編寫一個查詢,顯示 2015 年未僱用的所有員工。
SELECT * FROM employee WHERE YEAR(join_date) != 2015
我們得到以下查詢結果:
ID | 姓名 | 職業 | 薪水 | 年齡 | 加入日期 |
---|---|---|---|---|---|
1個 | 伊万諾夫伊万 | 程序員 | 100,000 | 25 | 2012-06-30 |
2個 | 彼得羅夫彼得 | 程序員 | 80,000 | 23 | 2013-08-12 |
3個 | 伊万諾夫謝爾蓋 | 測試儀 | 40,000 | 三十 | 2014-01-01 |
6個 | 瓦斯卡 | 貓 | 1,000 | 3個 | 2018-01-01 |
3.2 邏輯運算AND、OR、NOT
您還可以WHERE
使用邏輯運算AND
,OR
和NOT
。它們的寫法與我在這裡描述的一模一樣。無&&
,||
或!
讓我們編寫一個 SQL 查詢,我們在其中選擇 20 歲以上且薪水低於 50K 的員工。
SELECT * FROM employee WHERE age > 20 AND salary < 50000
我們得到以下查詢結果:
ID | 姓名 | 職業 | 薪水 | 年齡 | 加入日期 |
---|---|---|---|---|---|
3個 | 伊万諾夫謝爾蓋 | 測試儀 | 40,000 | 三十 | 2014-01-01 |
5個 | 基連科阿納斯塔西婭 | 辦公室主管 | 40,000 | 25 | 2015-10-10 |
太容易了。讓我們編寫一個查詢,在其中選擇收入超過 100K 且不擔任董事的員工:
SELECT * FROM employee WHERE salary >= 100000 AND NOT occupation = 'Director'
這裡我們特地!=
使用了運算符而不是符號NOT
。
我們得到以下查詢結果:
ID | 姓名 | 職業 | 薪水 | 年齡 | 加入日期 |
---|---|---|---|---|---|
1個 | 伊万諾夫伊万 | 程序員 | 100,000 | 25 | 2012-06-30 |
3.3 BETWEEN:取值範圍
在 SQL 中還有一個特殊的運算符BETWEEN
,您可以使用它來檢查變量是否位於兩個值之間。此運算符在布爾表達式中使用。這種運算符的一般形式是:
variable BETWEEN bottom line AND top_bound
在這種情況下,與 Java 語言不同,下邊界和上邊界都包含在允許的區間內。
讓我們寫一個例子,我們選擇薪水從 40K 到 100K 的所有員工。該請求將如下所示:
SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000
我們得到以下查詢結果:
ID | 姓名 | 職業 | 薪水 | 年齡 | 加入日期 |
---|---|---|---|---|---|
1個 | 伊万諾夫伊万 | 程序員 | 100,000 | 25 | 2012-06-30 |
2個 | 彼得羅夫彼得 | 程序員 | 80,000 | 23 | 2013-08-12 |
3個 | 伊万諾夫謝爾蓋 | 測試儀 | 40,000 | 三十 | 2014-01-01 |
5個 | 基連科阿納斯塔西婭 | 辦公室主管 | 40,000 | 25 | 2015-10-10 |
該運算符BETWEEN
不僅支持數值類型,還支持日期甚至字符串類型。在使用字符串的情況下,使用字典順序:aaba 在 aabb 之前
3.4 IN:值列表
此外,SQL 有一個特殊的運算符IN
,可以用來檢查一個變量是否包含在指定的列表中。此運算符在布爾表達式中使用。這種運算符的一般形式是:
variable IN (value 1 , value 2 , ... value N)
讓我們編寫一個查詢,在其中選擇 20、25 或 30 歲的員工。該請求將如下所示:
SELECT * FROM employee WHERE age IN (20, 25, 30)
我們得到以下查詢結果:
ID | 姓名 | 職業 | 薪水 | 年齡 | 加入日期 |
---|---|---|---|---|---|
1個 | 伊万諾夫伊万 | 程序員 | 100,000 | 25 | 2012-06-30 |
3個 | 伊万諾夫謝爾蓋 | 測試儀 | 40,000 | 三十 | 2014-01-01 |
5個 | 基連科阿納斯塔西婭 | 辦公室主管 | 40,000 | 25 | 2015-10-10 |
現在讓我們編寫一個查詢,相反,我們選擇年齡為not
20、25 或 30 的員工。查詢將如下所示:
SELECT * FROM employee WHERE age NOT IN (20, 25, 30)
我們得到以下查詢結果:
ID | 姓名 | 職業 | 薪水 | 年齡 | 加入日期 |
---|---|---|---|---|---|
2個 | 彼得羅夫彼得 | 程序員 | 80,000 | 23 | 2013-08-12 |
4個 | 拉比諾維奇·莫伊沙 | 導演 | 200,000 | 35 | 2015-05-12 |
6個 | 瓦斯卡 | 貓 | 1,000 | 3個 | 2018-01-01 |
一切都按預期進行。美麗。
3.5 LIKE:字符串模式
最後,另一個重要且經常使用的運算符 - LIKE
。它在比較字符串時使用。它可用於設置字符串模式。此運算符在布爾表達式中使用。這種運算符的一般形式是:
variable LIKE 'sample'
模式中可以使用特殊字符:%
和_
。
- 下劃線表示任何字符,總是 1 個。
- 百分比表示任意字符和任意次數(包括0次)。
讓我們編寫一個查詢,選擇所有姓氏以字母“I”開頭的人。該請求將如下所示:
SELECT * FROM employee WHERE name LIKE 'I%'
我們得到以下查詢結果:
ID | 姓名 | 職業 | 薪水 | 年齡 | 加入日期 |
---|---|---|---|---|---|
1個 | 伊万諾夫伊万 | 程序員 | 100,000 | 25 | 2012-06-30 |
3個 | 伊万諾夫謝爾蓋 | 測試儀 | 40,000 | 三十 | 2014-01-01 |
現在讓任務複雜化——名稱應包含“o”且名稱應以“a”結尾。該請求將如下所示:
SELECT * FROM employee WHERE name LIKE '%o%a'
我們得到以下查詢結果:
ID | 姓名 | 職業 | 薪水 | 年齡 | 加入日期 |
---|---|---|---|---|---|
4個 | 拉比諾維奇·莫伊沙 | 導演 | 200,000 | 35 | 2015-05-12 |
好吧,讓我們讓它更難一點。讓我們過濾掉所有年齡以數字“3”開頭的員工。該請求將如下所示:
SELECT * FROM employee WHERE age LIKE '3%'
我們得到以下查詢結果:
ID | 姓名 | 職業 | 薪水 | 年齡 | 加入日期 |
---|---|---|---|---|---|
3個 | 伊万諾夫謝爾蓋 | 測試儀 | 40,000 | 三十 | 2014-01-01 |
4個 | 拉比諾維奇·莫伊沙 | 導演 | 200,000 | 35 | 2015-05-12 |
6個 | 瓦斯卡 | 貓 | 1,000 | 3個 | 2018-01-01 |
順便說一下,我們的age列是 type int
,所以LIKE
它不僅適用於字符串。不能不慶幸什麼。