Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ตัวเลือกแทน BETWEEN ใน MySQL สำหรับดึงข้อมูลในช่วงค่า

การดึงข้อมูลในช่วงค่าโดยไม่ใช้ BETWEEN ใช้ AND แทน

คำสั่ง BETWEEN สามารถแทนที่ได้ด้วยการใช้ AND รวมเงื่อนไข >= และ <=

รูปแบบเทียบเท่า

-- ใช้ BETWEEN
WHERE column BETWEEN low_value AND high_value

-- ใช้ AND (เทียบเท่า)
WHERE column >= low_value AND column <= high_value

ตัวอย่าง: หาตัวเลขระหว่าง 15 ถึง 80

1. สร้างตารางและเพิ่มข้อมูล

CREATE TABLE DemoTable (Number INT);
INSERT INTO DemoTable VALUES (10), (20), (60), (100), (90), (85);

2. ดูข้อมูลทั้งหมด

SELECT * FROM DemoTable;

ผลลัพธ์: 10, 20, 60, 100, 90, 85

3. ใช้ AND แทน BETWEEN

SELECT * FROM DemoTable WHERE 15 <= Number AND Number <= 80;

ผลลัพธ์:

+--------+
| Number |
+--------+
| 20     |
| 60     |
+--------+

ความแตกต่างเล็กน้อย: BETWEEN vs AND

กรณีที่ควรใช้ AND แทน BETWEEN

  • ต้องการขอบเขตแบบ Exclusive: WHERE Number > 15 AND Number < 80 (ไม่รวม 15 และ 80)
  • ผสมเงื่อนไข: WHERE Number >= 15 AND Number < 100 AND Number != 50
  • Dynamic SQL: สร้างเงื่อนไขแบบไดนามิกง่ายกว่า
  • บาง Database Engine: BETWEEN อาจมีพฤติกรรมต่างออกไปกับชนิดข้อมูล Date/Time

การใช้งานกับ Date/Time

-- BETWEEN
WHERE CreatedAt BETWEEN '2024-01-01' AND '2024-01-31 23:59:59'

-- AND (แม่นยำกว่าสำหรับ DateTime)
WHERE CreatedAt >= '2024-01-01' AND CreatedAt < '2024-02-01'

วิธี AND ใช้ < '2024-02-01' ครอบคลุมเวลาทั้งวัน 31 มกราคม ได้ครบถ้วน ไม่ต้องคำนวณวินาทีสุดท้าย

ประสิทธิภาพ

  • ทั้งคู่ใช้ Index ได้เหมือนกัน (Range Scan)
  • Optimizer แปลง BETWEEN เป็น >= และ <= ภายในอยู่แล้ว
  • ไม่มีความแตกต่างด้าน Performance
ลักษณะBETWEENAND (>= & <=)
รวมขอบเขตรวมทั้งสองข้าง (Inclusive)รวมทั้งสองข้าง (Inclusive)
NULL handlingNULL BETWEEN ... = UNKNOWNNULL >= ... = UNKNOWN
ลำดับค่าlow ต้อง <= highเขียนได้สลับกัน แต่ Logic ผิด
ความชัดเจนอ่านง่ายกว่ายืดหยุ่นกว่า (เช่น > และ <=)