SQL教學
SQL RDBMS概念
SQL簡介
SQL NOT NULL約束
SQL DEFAULT約束
SQL唯一約束
SQL主鍵
SQL外鍵
SQL CHECK約束
SQL示例數據庫
SQL索引約束
SQL NULL值
數據庫 - 第一範式(1NF)
數據庫 - 第二範式(2NF)
數據庫 - 第三範式(3NF)
SQL RDBMS數據庫
SQL語法
SQL數據類型
SQL操運算符
SQL算術運算符
SQL比較運算符
SQL邏輯運算符
SQL表達式
SQL創建數據庫(CREATE DATABASE)
SQL丟棄或刪除數據庫(DROP DATABASE)
SQL選擇數據庫(SELECT Database, USE語句)
SQL創建表(CREATE Table)
SQL從現有表創建表
SQL刪除表(DROP或DELETE Table)
SQL INSERT INTO插入查詢
SQL SELECT查詢語句
SQL WHERE子句
SQL AND和OR運算符
SQL UPDATE更新查詢
SQL DELETE刪除查詢
SQL LIKE子句
SQL TOP,LIMIT,ROWNUM子句
SQL ORDER BY排序子句
SQL GROUP BY(分組)
SQL Distinct關鍵字
SQL排序結果
SQL約束
SQL Join聯接
SQL INNER JOIN(內部連接)
SQL LEFT JOIN(左連接)
SQL RIGHT JOIN(右連接)
SQL FULL JOIN(全連接)
SQL自連接
SQL笛卡爾或交叉連接
SQL UNION子句/操作符
SQL INTERSECT子句
SQL EXCEPT子句
SQL別名語法
SQL索引
SQL ALTER TABLE(修改表)
SQL TRUNCATE TABLE(截斷表)
SQL View(視圖)
SQL Having子句
SQL事務
SQL通配符運算符
SQL日期函數
SQL ADDDATE()函數
SQL ADDTIME()函數
SQL CONVERT_TZ()函數
SQL CURDATE()函數
SQL CURRENT_DATE()函數
SQL CURTIME()函數
SQL CURRENT_TIME()函數
SQL CURRENT_TIMESTAMP()方法
SQL DATE(expr)函數
SQL DATEDIFF()方法
SQL DATE_ADD()和DATE_SUB()方法
SQL DATE_FORMAT()函數
SQL DATE_SUB()方法
SQL DAY()函數
SQL DAYNAME()函數
SQL DAYOFMONTH()函數
SQL DAYOFWEEK()函數
SQL DAYOFYEAR()函數
SQL EXTRACT()函數
SQL FROM_DAYS()函數
SQL FROM_UNIXTIME()函數
SQL HOUR()方法
SQL LAST_DAY()函數
SQL LOCALTIME和LOCALTIME()函數
SQL LOCALTIMESTAMP和LOCALTIMESTAMP()函數
SQL MAKEDATE()函數
SQL MAKETIME()函數
SQL MICROSECOND()函數
SQL MINUTE()函數
SQL MONTH()函數
SQL MONTHNAME()函數
SQL NOW()函數
SQL PERIOD_ADD()函數
SQL PERIOD_DIFF()函數
SQL QUARTER()函數
SQL SECOND()函數
SQL SEC_TO_TIME()函數
SQL STR_TO_DATE()函數
SQL SUBDATE()函數
SQL SUBTIME()函數
SQL SYSDATE()函數
SQL TIME()函數
SQL TIMEDIFF()函數
SQL TIMESTAMP()函數
SQL TIMESTAMPADD()函數
SQL TIMESTAMPDIFF()函數
SQL TIME_FORMAT()函數
SQL TIME_TO_SEC()函數
SQL TO_DAYS()函數
SQL UNIX_TIMESTAMP()函數
SQL UTC_DATE()函數
SQL UTC_TIME()函數
SQL UTC_TIMESTAMP()函數
SQL WEEK()函數
SQL WEEKDAY()函數
SQL WEEKOFYEAR()函數
SQL YEAR()函數
SQL YEARWEEK()函數
SQL臨時表
SQL克隆表
SQL子查詢
SQL使用序列(自動遞增)
SQL DISTINCT重複處理
SQL注入
SQL實用函數
SQL MAX()函數
SQL MIN()函數
SQL AVG()函數
SQL SUM()函數
SQL SQRT()函數
SQL RAND()函數
SQL CONCAT()函數
SQL數值函數
SQL ABS()函數
SQL ACOS()函數
SQL ASIN(X)函數
SQL ATAN(X)函數
SQL ATAN2()函數
SQL BIT_AND()函數
SQL BIT_COUNT()函數
SQL BIT_OR()函數
SQL CEIL()函數
SQL CONV()函數
SQL COS()函數
SQL COT()函數
SQL DEGREES()函數
SQL EXP(X)函數
SQL FLOOR(X)函數
SQL FORMAT(X,D)函數
SQL GREATEST()函數
SQL INTERVAL()函數
SQL LEAST()函數
SQL LOG()函數
SQL LOG10(X)函數
SQL MOD()函數
SQL OCT(N)函數
SQL PI()函數
SQL POW()函數
SQL RADIANS()函數
SQL ROUND()函數
SQL SIGN(X)函數
SQL SIN(X)函數
SQL SQRT(X)函數
SQL STD()函數
SQL TAN(X)函數
SQL TRUNCATE()函數
SQL字符串函數
SQL ASCII(str)函數
SQL BIN(N)函數
SQL BIT_LENGTH()函數
SQL CHAR()函數
SQL CHAR_LENGTH()函數
SQL CHARACTER_LENGTH()函數
SQL字符串CONCAT()函數
SQL CONCAT_WS()函數
SQL CONV(N,from_base,to_base)函數
SQL ELT()函數
SQL EXPORT_SET()函數
SQL FIELD()函數
SQL FIND_IN_SET()函數
SQL FORMAT()函數
SQL HEX()函數
SQL INSERT()函數
SQL INSTR()函數
SQL LCASE()函數
SQL LEFT()函數
SQL LENGTH()函數
SQL LOAD_FILE()函數
SQL LOCATE()函數
SQL LOWER()函數
SQL LPAD()函數
SQL LTRIM()函數
SQL MAKE_SET()函數
SQL MID()函數
SQL OCT()函數
SQL OCTET_LENGTH()函數
SQL ORD()函數
SQL POSITION()函數
SQL QUOTE()函數
SQL REGEXP模式
SQL REPEAT()函數
SQL REPLACE()函數
SQL REVERSE()函數
SQL RIGHT()函數
SQL RPAD()函數
SQL SOUNDEX()函數
SQL SPACE()函數
SQL STRCMP()函數
SQL SUBSTRING()函數
SQL SUBSTRING_INDEX()函數
SQL TRIM()函數
SQL UCASE()函數
SQL UNHEX()函數
SQL UPPER()函數

SQL Between運算符

本教程將演示如何使用SQL BETWEEN運算符選擇指定範圍內的值。

SQL BETWEEN運算符簡介

BETWEEN運算符是邏輯運算符。 它返回truefalseunknown值。 BETWEEN運算符用於SELECT,UPDATE或DELETE語句中以查找範圍內的值。

以下說明了BETWEEN運算符的語法:

expression BETWEEN low AND high;

在上面語法中,

  • 表達式是在低和高定義的範圍內測試的表達式。
  • lowhigh可以是表達式或文字值,要求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運算符查找薪水在25003000之間的所有員工:

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    salary BETWEEN 2500 AND 3000;

執行上面查詢語句,得到以下結果 -
SQL

請注意,結果集中包含薪水爲25003000的員工。

以下查詢使用大於或等於(>=)且小於或等於(<=)的比較運算符和邏輯運算符AND,返回相同的結果集:

SELECT
    employee_id,
    first_name,
    last_name,
    salary
FROM
    employees
WHERE
    salary >= 2500
AND salary <= 3000;

要查找薪水不在250010000範圍內的所有員工,請在WHERE子句中使用NOT BETWEEN運算符,如下所示:

SELECT 
    employee_id, first_name, last_name, salary
FROM
    employees
WHERE
    salary NOT BETWEEN 2500 AND 10000
ORDER BY salary;

執行上面查詢語句,得到以下結果 -

SQL

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;

執行上面示例代碼,得到以下結果 -

SQL

3. SQL BETWEEN運算符使用說明

1. 低和高的值

BETWEEN運算符需要低值和高值。 當從用戶那裏獲得輸入時,在將其傳遞給查詢之前,應始終檢查低值是否小於高值。 如果低值大於高值,將得到一個空的結果集。

以下查詢不返回任何行,因爲低值大於高值:

SELECT 
    first_name, last_name, salary
FROM
    employees
WHERE
    salary BETWEEN 5000 AND 2000;

2. 將BETWEEN運算符與DATETIME數據一起使用

考慮以下tb1表,結構和數據如下所示:

SQL

2019年9月23日至2019年9月30日期間有5行數據。如果使用BETWEEN運算符查詢create_time值介於2019-09-232019-09-30之間的行記錄,將獲得所期望的內容。

SELECT 
    id, create_time
FROM
    tb1
WHERE
    create_time BETWEEN '20190920' AND '20190930';

執行上面查詢語句,得到以下結果 -

SQL

結果顯示只返回了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運算符來組合成爲更復雜的查詢語句。