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,ORNOT。它們的寫法與我在這裡描述的一模一樣。無&&||!

讓我們編寫一個 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 = 'Директор'
        

這裡我們特地!=使用了運算符而不是符號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

現在讓我們編寫一個查詢,相反,我們選擇年齡為не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 'И%'

我們得到以下查詢結果:

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它不僅適用於字符串。不能不慶幸什麼。