บทความนี้สาธิตการใช้ REGEXP เป็นทางเลือกแทนการเขียน WHERE ... OR ... OR ... หลายเงื่อนไข ทำให้โค้ดสั้นและอ่านง่ายกว่า
สร้างตารางและข้อมูลพนักงาน
mysql> CREATE TABLE DemoTable684 (EmployeeInformation TEXT);
Query OK, 0 rows affected (0.68 sec)
mysql> INSERT INTO DemoTable684 VALUES('John 21 Google');
mysql> INSERT INTO DemoTable684 VALUES('Carol 23 Amazon');
mysql> INSERT INTO DemoTable684 VALUES('Carol 26 Flipkart');
mysql> INSERT INTO DemoTable684 VALUES('David 29 Microsoft');
คิวรีเดิม: WHERE ... OR (ยาว)
SELECT * FROM DemoTable684
WHERE EmployeeInformation LIKE '%David%'
OR EmployeeInformation LIKE '%29%'
OR EmployeeInformation LIKE '%Microsoft%';
คิวรีใหม่: ใช้ REGEXP (สั้น)
mysql> SELECT * FROM DemoTable684
WHERE EmployeeInformation REGEXP '(David|29|Microsoft)';
ผลลัพธ์
+---------------------+
| EmployeeInformation |
+---------------------+
| David 29 Microsoft |
+---------------------+
คำอธิบาย:
(David|29|Microsoft)- Pattern แบบ Alternation (OR) ใน Regex- จับคู่ได้หากพบคำใดคำหนึ่งในวงเล็บ
- Case-insensitive โดย Default (ใช้
REGEXP BINARYสำหรับ Case-sensitive) - เร็วกว่า OR หลายตัวในบางกรณี เนื่องจาก Regex Engine ทำงาน Optimize ได้ดีกว่า
ข้อจำกัด: REGEXP ไม่ใช้ Index ได้ (Full Table Scan) เหมือน LIKE '%pattern%' ควรพิจารณา Full-Text Search สำหรับข้อมูลเยอะ