MySQL BETWEEN 運算子完整教學|數值、日期、字串範圍查詢範例

1. 前言

在 MySQL 資料庫中,提升查詢效率的一個重要元素就是 BETWEEN 運算子。這個運算子在檢查資料是否落在特定範圍內時非常方便。它可用於數字、日期以及字串的範圍指定,讓資料庫的搜尋與篩選更加高效。本文將詳細解說 MySQL BETWEEN 運算子的用法、實際範例以及注意事項。

2. BETWEEN 運算子的基本語法

BETWEEN 運算子是什麼

BETWEEN 運算子是 WHERE 子句中的一種條件,用來檢查指定欄位的值是否落在給定範圍內。基本語法如下:

SELECT 欄位名稱
FROM 資料表名稱
WHERE 欄位名稱 BETWEEN 起始值 AND 結束值;

例如,若一個資料表存有員工年齡,就可以使用這個運算子來抽取特定年齡範圍的員工。

否定形式 NOT BETWEEN

若要搜尋不在範圍內的值,可以使用否定形式 NOT BETWEEN

SELECT 欄位名稱
FROM 資料表名稱
WHERE 欄位名稱 NOT BETWEEN 起始值 AND 結束值;

3. 數值的範圍指定

如何在數值範圍中使用 BETWEEN

BETWEEN 運算子在數值範圍查詢中非常實用。例如,若要查詢員工薪資在 50000 到 100000 之間的資料,可以這樣撰寫:

SELECT employee_id, name, salary
FROM employees
WHERE salary BETWEEN 50000 AND 100000;

範例資料

employee_idnamesalary
1佐藤45000
2鈴木55000
3高橋75000
4田中120000

查詢結果

employee_idnamesalary
2鈴木55000
3高橋75000

以上查詢僅選出薪資落在 50000 到 100000 範圍內的員工。

與比較運算子的差異

如果使用比較運算子,條件可以寫成:

SELECT employee_id, name, salary
FROM employees
WHERE salary >= 50000 AND salary <= 100000;

使用 BETWEEN 可以讓查詢更簡潔,尤其當有多個範圍條件時,可大幅提升可讀性。

4. 日期範圍指定

如何在日期資料中使用 BETWEEN

BETWEEN 也可以用於日期範圍。例如,若要從訂單資料表中查詢 2024 年 1 月 1 日到 2024 年 12 月 31 日的訂單,可以這樣寫:

SELECT order_id, customer_id, order_date
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31';

範例資料

order_idcustomer_idorder_date
11012024-01-15
21022024-05-30
31032025-03-01

查詢結果

order_idcustomer_idorder_date
11012024-01-15
21022024-05-30

這樣,BETWEEN 運算子就會選取出在指定日期範圍內的資料。

時間資料的注意事項

如果日期欄位包含時間資訊,則需要特別注意。例如,order_date 欄位為 DATETIME 型別時,使用 BETWEEN 查詢範圍時,會包含起始日期的 00:00:00 到結束日期的 00:00:00。若要完整涵蓋到當天的最後一秒,可以這樣寫:

WHERE order_date BETWEEN '2024-01-01 00:00:00' AND '2024-12-31 23:59:59';

5. 字串範圍指定

如何在字串資料中使用 BETWEEN

BETWEEN 也能用於字串範圍。例如,若要搜尋產品名稱在 ‘A’ 到 ‘M’ 之間的產品,可以這樣寫:

SELECT product_id, product_name
FROM products
WHERE product_name BETWEEN 'A' AND 'M';

範例資料

product_idproduct_name
1Apple
2Banana
3Mango
4Orange

查詢結果

product_idproduct_name
1Apple
2Banana
3Mango

字母順序的注意事項

在字串範圍查詢時,必須以字母順序為基準。並且需要注意大小寫,因為有些資料庫會區分大小寫。例如,'a''A' 可能被視為不同的值。

6. 使用 BETWEEN 的注意事項

範圍指定時的注意事項

使用 BETWEEN 時要留意起始值與結束值的順序。如果起始值大於結束值,可能會得到非預期的結果:

SELECT * FROM table_name WHERE column_name BETWEEN 100 AND 50;  -- 結果可能不符合預期

此外,BETWEEN 會包含範圍的起始值與結束值,因此在設定條件時要特別小心。

索引與效能

BETWEEN 的效能與一般比較運算子相當。不過若要最佳化查詢效能,仍建議正確建立索引。例如,若在日期欄位建立索引,則使用 BETWEEN 查詢日期範圍時會更快。

7. 實務查詢與應用範例

在多個欄位中使用 BETWEEN

BETWEEN 運算子也可以搭配多個欄位來使用。例如,同時指定產品的價格與庫存數量的範圍,可以寫成:

SELECT product_name, price, stock
FROM products
WHERE price BETWEEN 1000 AND 5000
AND stock BETWEEN 50 AND 200;

此查詢會選出價格在 1000 到 5000 之間,並且庫存在 50 到 200 之間的產品。

NOT BETWEEN 的應用

利用否定形式的 NOT BETWEEN 可以查詢不在範圍內的資料。例如,要搜尋薪資低於 50000 或高於 100000 的員工,可以這樣寫:

SELECT employee_id, name, salary
FROM employees
WHERE salary NOT BETWEEN 50000 AND 100000;

查詢結果

employee_idnamesalary
1佐藤45000
4田中120000

這樣的查詢會選出薪資不在 50000 至 100000 範圍內的員工。透過 NOT BETWEEN,可以輕鬆取得反向條件的資料。

8. 查詢的視覺化範例

為了更直觀地展示查詢結果,可以使用簡單的圖示。例如,下圖說明 BETWEEN 的運作方式:

價格範圍: [----- 1000 ---- 5000 -----]
產品A的價格:3000 (範圍內)
產品B的價格:6000 (範圍外)

利用這樣的圖示,可以幫助理解某筆資料是否符合查詢條件。

9. 總結

BETWEEN 運算子在 MySQL 中是一個非常方便的工具,用於執行範圍查詢。它可應用於數值、日期與字串資料,讓查詢語句更簡潔與高效。不過需要注意幾點:BETWEEN 包含範圍的起始值與結束值,以及是否正確建立索引等問題。掌握這些技巧,就能最佳化查詢效能並有效擷取所需資料。

10. 延伸閱讀

若想深入了解更多查詢細節與使用方式,可以參考 MySQL 官方文件或相關專業書籍。此外,親自撰寫並執行查詢範例,也是加深對 BETWEEN 運算子理解的好方法。