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

ใช้ REGEXP แทน WHERE ... OR หลายเงื่อนไขใน MySQL

บทความนี้สาธิตการใช้ 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 สำหรับข้อมูลเยอะ