1. บทนำ
หนึ่งในองค์ประกอบสำคัญสำหรับการดำเนินการคิวรีอย่างมีประสิทธิภาพในฐานข้อมูล MySQL คือโอเปอเรเตอร์ BETWEEN โอเปอเรเตอร์นี้มีประโยชน์อย่างยิ่งเมื่อเราต้องตรวจสอบว่าข้อมูลอยู่ในช่วงที่กำหนดหรือไม่ มันใช้เพื่อระบุช่วงสำหรับตัวเลข, วันที่, และสตริง, ทำให้การสกัดข้อมูลในการค้นหาและการกรองฐานข้อมูลทำได้อย่างมีประสิทธิภาพ ในบทความนี้เราจะอธิบายอย่างละเอียดเกี่ยวกับการใช้โอเปอเรเตอร์ BETWEEN ของ MySQL, ตัวอย่างการใช้งานจริง, และข้อควรระวังที่สำคัญ
2. ไวยากรณ์พื้นฐานของโอเปอเรเตอร์ BETWEEN
ภาพรวมของโอเปอเรเตอร์ BETWEEN
โอเปอเรเตอร์ BETWEEN เป็นเงื่อนไขที่ใช้ในคลอส WHERE เพื่อตรวจสอบว่าค่าของคอลัมน์ใดค่าหนึ่งตกอยู่ในช่วงที่กำหนดหรือไม่ ไวยากรณ์พื้นฐานมีดังนี้
SELECT column_name
FROM table_name
WHERE column_name BETWEEN start_value AND end_value;
ตัวอย่างเช่น หากตารางเก็บอายุของพนักงาน คุณสามารถใช้โอเปอเรเตอร์นี้เพื่อสกัดพนักงานที่อยู่ในช่วงอายุที่กำหนด
รูปแบบลบ: NOT BETWEEN
หากต้องการค้นหาค่าที่ ไม่ อยู่ในช่วงที่ระบุ ให้ใช้รูปแบบลบ NOT BETWEEN
SELECT column_name
FROM table_name
WHERE column_name NOT BETWEEN start_value AND end_value;
3. การระบุช่วงตัวเลข
การใช้ BETWEEN สำหรับช่วงตัวเลข
โอเปอเรเตอร์ BETWEEN มีความสะดวกมากสำหรับการระบุช่วงตัวเลข ตัวอย่างเช่น หากต้องการสกัดข้อมูลที่เงินเดือนของพนักงานอยู่ระหว่าง 50,000 ถึง 100,000 ให้เขียนคิวรีดังนี้
SELECT employee_id, name, salary
FROM employees
WHERE salary BETWEEN 50000 AND 100000;
ตัวอย่างข้อมูล:
| employee_id | name | salary |
|---|---|---|
| 1 | Sato | 45000 |
| 2 | Suzuki | 55000 |
| 3 | Takahashi | 75000 |
| 4 | Tanaka | 120000 |
ผลลัพธ์การดำเนินการ:
| employee_id | name | salary |
|---|---|---|
| 2 | Suzuki | 55000 |
| 3 | Takahashi | 75000 |
ในคิวรีข้างต้น จะเลือกเฉพาะพนักงานที่เงินเดือนอยู่ระหว่าง 50,000 ถึง 100,000 เท่านั้น
ความแตกต่างจากโอเปอเรเตอร์เปรียบเทียบ
หากเขียนเงื่อนไขเดียวกันโดยใช้โอเปอเรเตอร์เปรียบเทียบ จะมีลักษณะดังนี้
SELECT employee_id, name, salary
FROM employees
WHERE salary >= 50000 AND salary <= 100000;
การใช้ BETWEEN ทำให้คิวรีสั้นลงและอ่านง่ายขึ้น โดยเฉพาะเมื่อมีเงื่อนไขหลายช่วง BETWEEN จะช่วยให้เข้าใจโครงสร้างคิวรีได้ดียิ่งขึ้น 
4. การระบุช่วงวันที่
การใช้ BETWEEN กับข้อมูลวันที่
BETWEEN สามารถใช้ระบุช่วงวันที่ได้เช่นกัน ตัวอย่างเช่น เพื่อสกัดคำสั่งซื้อจากตาราง orders ระหว่างวันที่ 1 มกราคม 2024 ถึง 31 ธันวาคม 2024 ให้เขียนคิวรีดังนี้
SELECT order_id, customer_id, order_date
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31';
ตัวอย่างข้อมูล:
| order_id | customer_id | order_date |
|---|---|---|
| 1 | 101 | 2024-01-15 |
| 2 | 102 | 2024-05-30 |
| 3 | 103 | 2025-03-01 |
ผลลัพธ์การดำเนินการ:
| order_id | customer_id | order_date |
|---|---|---|
| 1 | 101 | 2024-01-15 |
| 2 | 102 | 2024-05-30 |
ดังที่แสดงด้านบน, โอเปอเรเตอร์ BETWEEN จะสกัดข้อมูลที่อยู่ในช่วงวันที่ที่กำหนด
การจัดการข้อมูลเวลา
หากข้อมูลวันที่รวมเวลา ต้องให้ความระมัดระวังเป็นพิเศษ ตัวอย่างเช่น หากคอลัมน์ order_date มีชนิด DATETIME และบรรจุค่าเวลา การระบุช่วงด้วย BETWEEN จะรวมบันทึกตั้งแต่เที่ยงคืนของวันเริ่มต้นจนถึง 23:59:59 ของวันสิ้นสุด
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_id | product_name |
|---|---|
| 1 | Apple |
| 2 | Banana |
| 3 | Mango |
| 4 | Orange |
ผลลัพธ์การดำเนินการ:
| product_id | product_name |
|---|---|
| 1 | Apple |
| 2 | Banana |
| 3 | Mango |
ข้อควรพิจารณาเรื่องลำดับอักษร
เมื่อระบุช่วงสตริง จะถือว่าข้อความถูกจัดเรียงตามลำดับอักษร เนื่องจากฐานข้อมูลอาจแยกแยะตัวพิมพ์ใหญ่และตัวพิมพ์เล็กตามการตั้งค่า collation จึงต้องระมัดระวัง ตัวอย่างเช่น 'a' และ 'A' อาจถูกพิจารณาเป็นค่าที่แตกต่างกัน
6. ข้อควรระวังสำคัญเมื่อใช้ BETWEEN
ลำดับของช่วงมีความสำคัญ
เมื่อใช้ตัวดำเนินการ BETWEEN ให้ระวังลำดับของค่าต้นและค่าปลาย หากค่าต้นมากกว่าค่าปลาย คำสั่งอาจคืนผลลัพธ์ที่ไม่ต้องการ
SELECT * FROM table_name WHERE column_name BETWEEN 100 AND 50; -- unintended result
นอกจากนี้ เนื่องจาก 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;
คำสั่งนี้ค้นหาผลิตภัณฑ์ที่มีราคาระหว่าง 1,000 ถึง 5,000 และจำนวนสินค้าคงคลังระหว่าง 50 ถึง 200
ตัวอย่างขั้นสูงของ NOT BETWEEN
โดยใช้รูปแบบลบ NOT BETWEEN คุณสามารถดึงข้อมูลที่อยู่นอกช่วงที่กำหนดได้
เช่น เพื่อค้นหาพนักงานที่เงินเดือนต่ำกว่า 50,000 หรือสูงกว่า 100,000 ให้เขียนคำสั่งดังนี้:
SELECT employee_id, name, salary
FROM employees
WHERE salary NOT BETWEEN 50000 AND 100000;
ผลลัพธ์การดำเนินการ:
| employee_id | name | salary |
|---|---|---|
| 1 | Sato | 45000 |
| 4 | Tanaka | 120000 |
คำสั่งนี้ดึงข้อมูลพนักงานที่เงินเดือนไม่อยู่ในช่วง 50,000 ถึง 100,000
การใช้ NOT BETWEEN ทำให้การดึงข้อมูลตามเงื่อนไขตรงข้ามเป็นเรื่องง่าย
8. ตัวอย่างการสืบค้นแบบภาพ
เพื่อแสดงผลลัพธ์ของคำสั่งแบบภาพ การใช้แผนภาพง่าย ๆ สามารถทำให้เห็นชัดเจน
ตัวอย่างเช่น ภาพต่อไปนี้อธิบายการทำงานของ BETWEEN:
Price range: [----- 1000 ---- 5000 -----]
Product A price: 3000 (within range)
Product B price: 6000 (outside range)
การใช้แผนภาพเช่นนี้ทำให้เข้าใจได้อย่างเป็นธรรมชาติว่าข้อมูลอยู่ในช่วงที่กำหนดหรือไม่
9. สรุป
BETWEEN เป็นเครื่องมือที่มีประโยชน์อย่างยิ่งใน MySQL เมื่อทำการค้นหาแบบช่วง
มันสามารถใช้กับข้อมูลเชิงตัวเลข, วันที่, และข้อความ ทำให้คำสั่งสามารถเขียนได้กระชับและมีประสิทธิภาพ
อย่างไรก็ตาม การเข้าใจประเด็นสำคัญเช่นการรวมค่าขอบเขตและการใช้ดัชนีที่เหมาะสมเป็นสิ่งสำคัญ
โดยใช้ความรู้นี้ คุณสามารถเพิ่มประสิทธิภาพการสืบค้นฐานข้อมูลและดึงข้อมูลที่ต้องการได้อย่างมีประสิทธิภาพ
10. แหล่งอ้างอิง
สำหรับรายละเอียดเพิ่มเติมและตัวอย่างการใช้งานเพิ่มเติม โปรดอ้างอิงเอกสารอย่างเป็นทางการของ MySQL และตำราเฉพาะด้านฐานข้อมูล
การฝึกเขียนคำสั่งด้วยตนเองจะทำให้ความเข้าใจในตัวดำเนินการ BETWEEN ลึกซึ้งยิ่งขึ้น


