เมื่อต้องการ Query ข้อมูลที่อยู่ในช่วง (Range) ของค่า ID หรือตัวเลขติดต่อกัน ใช้ BETWEEN Operator จะเขียนสั้นกว่าและอ่านง่ายกว่าการใช้ >= และ <= แยกกัน
ตัวอย่างการใช้งาน BETWEEN
1. สร้างตารางนักเรียน (มี Auto Increment ID)
mysql> CREATE TABLE DemoTable1537 (
-> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName VARCHAR(20)
-> );
Query OK, 0 rows affected (0.72 sec)
2. เพิ่มข้อมูลนักเรียน 7 คน
mysql> INSERT INTO DemoTable1537(StudentName) VALUES('Chris');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable1537(StudentName) VALUES('Bob');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable1537(StudentName) VALUES('Sam');
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable1537(StudentName) VALUES('Mike');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable1537(StudentName) VALUES('David');
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable1537(StudentName) VALUES('John');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable1537(StudentName) VALUES('Carol');
Query OK, 1 row affected (0.12 sec)
3. แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable1537;
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Chris | | 2 | Bob | | 3 | Sam | | 4 | Mike | | 5 | David | | 6 | John | | 7 | Carol | +-----------+-------------+ 7 rows in set (0.00 sec)
4. Query ข้อมูล ID 3 ถึง 6 ด้วย BETWEEN
mysql> SELECT StudentName FROM DemoTable1537 WHERE StudentId BETWEEN 3 AND 6;
+-------------+ | StudentName | +-------------+ | Sam | | Mike | | David | | John | +-------------+ 4 rows in set (0.00 sec)
รายละเอียดเพิ่มเติม
- BETWEEN เป็น Inclusive: รวมค่าทั้งปลายทาง (3 และ 6)
- เทียบเท่ากับ:
WHERE StudentId >= 3 AND StudentId <= 6 - ใช้กับ Date ได้:
WHERE OrderDate BETWEEN '2024-01-01' AND '2024-12-31' - ใช้กับ String ได้: เรียงตามลำดับ Lexicographical (ตัวอักษร)
เมื่อไหร่ควรใช้ BETWEEN / เมื่อไหร่ควรใช้ IN()
| สถานการณ์ | Operator ที่เหมาะสม |
|---|---|
| ค่าติดต่อกันเป็นช่วง (1-100, วันที่ 1-31) | BETWEEN |
| ค่าไม่ติดต่อกัน เลือกเฉพาะบางค่า (1,5,10,20) | IN() |
| ค่ามากมาย (หลายร้อยขึ้นไป) | JOIN กับ Temp Table / VALUES() |