SQL Between運算符
本教程將演示如何使用SQL BETWEEN
運算符選擇指定範圍內的值。
SQL BETWEEN運算符簡介
BETWEEN
運算符是邏輯運算符。 它返回true
,false
或unknown
值。 BETWEEN
運算符用於SELECT,UPDATE或DELETE語句中以查找範圍內的值。
以下說明了BETWEEN
運算符的語法:
expression BETWEEN low AND high;
在上面語法中,
- 表達式是在低和高定義的範圍內測試的表達式。
-
low
和high
可以是表達式或文字值,要求low
的值小於high
的值。
如果表達式大於或等於(>=
)low
值且小於或等於(<=
)high
值,則BETWEEN
運算符返回true
,這相當於以下條件:
expression >= low and expression <= high
如果要指定獨佔範圍,則必須使用小於(<
)和大於(>
)的比較運算符。
要否定BETWEEN
運算符的結果,可以添加NOT
運算符:
expression NOT BETWEEN low AND high
如果表達式小於低於或大於(>
)的值,則NOT BETWEEN
返回true
; 否則它返回:false
。
可以使用以下條件重寫NOT BETWEEN
:
expression < low OR expression > high
2. SQL BETWEEN運算符示例
我們將使用示例數據庫中的employees
表來演示BETWEEN
運算符的工作原理。
mysql> DESC employees;
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| employee_id | int(11) | NO | PRI | NULL | auto_increment |
| first_name | varchar(20) | YES | | NULL | |
| last_name | varchar(25) | NO | | NULL | |
| email | varchar(100) | NO | | NULL | |
| phone_number | varchar(20) | YES | | NULL | |
| hire_date | date | NO | | NULL | |
| job_id | int(11) | NO | MUL | NULL | |
| salary | decimal(8,2) | NO | | NULL | |
| manager_id | int(11) | YES | MUL | NULL | |
| department_id | int(11) | YES | MUL | NULL | |
+---------------+--------------+------+-----+---------+----------------+
10 rows in set
SQL BETWEEN與數字示例
以下語句使用BETWEEN
運算符查找薪水在2500
和3000
之間的所有員工:
SELECT
employee_id, first_name, last_name, salary
FROM
employees
WHERE
salary BETWEEN 2500 AND 3000;
執行上面查詢語句,得到以下結果 -
請注意,結果集中包含薪水爲2500
和3000
的員工。
以下查詢使用大於或等於(>=
)且小於或等於(<=
)的比較運算符和邏輯運算符AND
,返回相同的結果集:
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
WHERE
salary >= 2500
AND salary <= 3000;
要查找薪水不在2500
和10000
範圍內的所有員工,請在WHERE
子句中使用NOT BETWEEN
運算符,如下所示:
SELECT
employee_id, first_name, last_name, salary
FROM
employees
WHERE
salary NOT BETWEEN 2500 AND 10000
ORDER BY salary;
執行上面查詢語句,得到以下結果 -
SQL BETWEEN日期示例
要查找在1999年1月1日到2000年12月31日之間加入公司的所有員工,查詢僱用日期(hire_date
)是否在以下範圍內:
SELECT
employee_id, first_name, last_name, hire_date
FROM
employees
WHERE
hire_date BETWEEN '1999-01-01' AND '2000-12-31'
ORDER BY hire_date;
執行上面示例代碼,得到以下結果 -
+-------------+------------+-----------+------------+
| employee_id | first_name | last_name | hire_date |
+-------------+------------+-----------+------------+
| 107 | Diana | Chen | 1999-02-07 |
| 178 | Kimberely | Yang | 1999-05-24 |
| 119 | Karen | Zhang | 1999-08-10 |
| 113 | Min | Su | 1999-12-07 |
| 179 | Charles | Yang | 2000-01-04 |
+-------------+------------+-----------+------------+
5 rows in set
要檢索不在1989年1月1日到1999年12月31日這個時間內加入公司的所有員工,請使用NOT BETWEEN
運算符,如下所示:
SELECT
employee_id, first_name, last_name, hire_date
FROM
employees
WHERE
hire_date NOT BETWEEN '1989-01-01' AND '1999-01-30'
ORDER BY hire_date;
執行上面示例代碼,得到以下結果 -
3. SQL BETWEEN運算符使用說明
1. 低和高的值
BETWEEN
運算符需要低值和高值。 當從用戶那裏獲得輸入時,在將其傳遞給查詢之前,應始終檢查低值是否小於高值。 如果低值大於高值,將得到一個空的結果集。
以下查詢不返回任何行,因爲低值大於高值:
SELECT
first_name, last_name, salary
FROM
employees
WHERE
salary BETWEEN 5000 AND 2000;
2. 將BETWEEN運算符與DATETIME數據一起使用
考慮以下tb1
表,結構和數據如下所示:
2019年9月23日至2019年9月30日期間有5
行數據。如果使用BETWEEN
運算符查詢create_time
值介於2019-09-23
和2019-09-30
之間的行記錄,將獲得所期望的內容。
SELECT
id, create_time
FROM
tb1
WHERE
create_time BETWEEN '20190920' AND '20190930';
執行上面查詢語句,得到以下結果 -
結果顯示只返回了4
行。 這是因爲當使用以下條件時:
create_time BETWEEN '20190920' AND '20190930';
數據庫系統將其轉換爲:
create_time BETWEEN '20190920 00:00:00.000000' AND '20190930 00:00:00.000000';
因此,2019-09-30 14:29:55
值的行記錄未包含在結果集中。
在本教程中,我們學習示瞭如何使用SQL BETWEEN
運算符根據範圍選擇數據,通過本教程,可以使用BETWEEN
運算符來組合成爲更復雜的查詢語句。