16 SQL Between & In
1. 定義
解釋:
Between
和In
操作符一般與 Where 搭配,用於操作某個範圍
內的資料。
2. 前言
本小節中,我們將一起學習 SQL Between
和 SQL In
的基本使用。
前面的小節中,我們學習了諸多運算子的使用,如 = 和 Like ,這些運算子都只能作用於單個條件值。有時候,資料篩選的條件是一個範圍
,如找出年齡在18~24之間的使用者
,為了更加方便地解決這些問題,SQL 提供了 Between 和 In 兩個關鍵字。
提示: Between 和 In 不僅可以用在 int 等數值型別上,還可以用於字元和日期型別。
本小節測試資料如下,請先在資料庫中執行:
DROP TABLE IF EXISTS imooc_user;
CREATE TABLE imooc_user
(
username varchar(20),
age int
);
INSERT INTO imooc_user(username,age) VALUES('pedro', 23), ('peter', 18), ('faker', 20), ('lucy', 29);
3. SQL Between
Between 必須與 And 一起使用,表示在某某與某某之間,常與 Where 搭配,用於查詢某個範圍內的資料。
SQL Between 的使用語法如下:
SELECT [col] FROM [ table_name] WHERE [col] BETWEEN [val1] AND [val2];
其中table_name
代表資料表名稱,col
代表欄位名稱,val
表示條件值,數字 1、2 表示多字條件值。
3.1 例1、單獨使用 Between
Between 常用於查詢某個範圍
內的資料記錄。
請書寫 SQL 語句,找出imooc_user
表中年齡在 18~24 之間的使用者。
分析:
分析題幹可知年齡
是條件欄位,而條件值是一個範圍,即18~24
,符合 Between 和 And 的使用。
語句:
整理可得語句如下:
SELECT username, age FROM imooc_user WHERE age BETWEEN 18 AND 24;
查詢結果如下:
+----------+-----+
| username | age |
+----------+-----+
| pedro | 23 |
| peter | 18 |
| faker | 20 |
+----------+-----+
3.2 例2、Between 與 Not 搭配使用
Between 可以很好的處理範圍操作,還可以與 Not 搭配表示不在某個範圍內的記錄。
請書寫 SQL 語句,找出imooc_user
表中年齡不在 18~24 之間的使用者。
分析:
與例1剛好相反,在符合 Between 和 And 的前提下,增加NOT
修飾即可。
語句:
整理可得語句如下:
SELECT username, age FROM imooc_user WHERE age NOT BETWEEN 18 AND 24;
查詢結果如下:
+----------+-----+
| username | age |
+----------+-----+
| lucy | 29 |
+----------+-----+
提示: Between 不僅可以和 Select 搭配使用,還可以搭配 Update 與 Delete。
3.3 例3、Between 與 Delete 搭配使用
Between 也可與 Delete 搭配用於刪除某個範圍內的記錄。
請書寫 SQL 語句,刪除imooc_user
表中年齡在18~24之間的使用者。
分析:
幾乎與例1一致,只需將 Select 改為 Delete 即可。
語句:
DELETE FROM imooc_user WHERE age BETWEEN 18 AND 24;
刪除成功後,imooc_user 表中的資料如下:
+----------+-----+
| username | age |
+----------+-----+
| lucy | 29 |
+----------+-----+
4. SQL In
In 與 Between 都可以用於範圍操作,與 Between 不同的是,In 表示某某之中
,且必須顯示的羅列出所有的值。
SQL In 的語法如下:
SELECT [col] FROM [table_name] WHERE [col] IN (val...);
4.1 例4、連續範圍內使用 In
In 常用於查詢某個範圍內的資料記錄,但這個範圍中的值都必須在()
中羅列出來。
請書寫 SQL 語句,找出imooc_user
表中年齡在 18~24 之間的使用者。
分析:
分析題幹可知年齡是條件欄位,而條件值是一個範圍,即 18~24,可以用 In 表示該範圍。
語句:
整理可得語句如下:
SELECT username, age FROM imooc_user WHERE age IN (18,19,20,21,22,23,24);
查詢結果如下:
+----------+-----+
| username | age |
+----------+-----+
| pedro | 23 |
| peter | 18 |
| faker | 20 |
+----------+-----+
4.2 例5、非連續範圍內使用 In
In 不僅可以查詢連續範圍內的記錄,也可查詢非連續範圍內的記錄。
請書寫 SQL 語句,找出imooc_user
表中年齡是 18 或 23 的使用者。
分析:
與例4幾乎一致,不過括號內的範圍值從連續範圍變成了(18,23)
。
語句:
整理可得語句如下:
SELECT username, age FROM imooc_user WHERE age IN (18,23);
查詢結果如下:
+----------+-----+
| username | age |
+----------+-----+
| pedro | 23 |
| peter | 18 |
+----------+-----+
4.3 例6、In 搭配 Not 使用
In 還可以搭配 Not 使用,查詢不在範圍內的資料記錄。
請書寫 SQL語句,找出imooc_user
表中年齡不是 18 或 23 的使用者。
分析:
與例5恰好相反,只需在 In 前加上 Not 即可。
語句:
整理可得語句如下:
SELECT username, age FROM imooc_user WHERE age NOT IN (18,23);
查詢結果如下:
+----------+-----+
| username | age |
+----------+-----+
| faker | 20 |
| lucy | 29 |
+----------+-----+
提示: In 也可與 Update、Delete 一起搭配使用,與 Between 相比,In 更加靈活,使用也更為廣泛。
5. 個人經驗
- 如果範圍條件是連續的,優先考慮使用 Between,不僅語句更為簡潔,而且效能更加優異。
- Between 只可用於連續範圍的操作,而 In 還支援非連續範圍的操作。
- 當 Delete 和 Update 使用範圍操作是較
危險
的,容易引起批量資料更新和刪除,在使用前,請仔細斟酌。