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

กรองข้อมูล MySQL ด้วย RLIKE หลายคำ (OR Logic)

ใช้ RLIKE (หรือ REGEXP) พร้อม Pattern 'word1|word2|word3' เพื่อกรองแถวที่คอลัมน์มีคำใดคำหนึ่งจากหลายคำ (OR Logic)

Syntax

SELECT * FROM table_name WHERE column_name RLIKE 'value1|value2|value3';

ตัวอย่างการใช้งาน

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

mysql> create table DemoTable1935 ( Subject varchar(20) ); Query OK, 0 rows affected (0.00 sec)

mysql> insert into DemoTable1935 values('MySQL'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1935 values('Python'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1935 values('MongoDB'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1935 values('SQL Server'); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1935 values('PL SQL'); Query OK, 1 row affected (0.00 sec)

ข้อมูลทั้งหมด:

mysql> select * from DemoTable1935;
+------------+
| Subject    |
+------------+
| MySQL      |
| Python     |
| MongoDB    |
| SQL Server |
| PL SQL     |
+------------+
5 rows in set (0.00 sec)

2. กรอง Subject ที่มี 'SQL' หรือ 'Python'

mysql> select * from DemoTable1935 where Subject rlike 'SQL|Python';

ผลลัพธ์:

+------------+
| Subject    |
+------------+
| MySQL      |
| Python     |
| SQL Server |
| PL SQL     |
+------------+
4 rows in set (0.00 sec)

อธิบาย Pattern 'SQL|Python'

  • | = OR operator ใน Regular Expression
  • จับคู่ 'SQL' หรือ 'Python' ที่ตำแหน่งไหนในสตริงก็ได้
  • Case-insensitive โดยค่าเริ่มต้น (MySQL default collation)

RLIKE vs LIKE vs REGEXP

OperatorPatternใช้เมื่อ
LIKE%SQL%Pattern 简单, Wildcard % _
RLIKE / REGEXPSQL|PythonMultiple patterns, Complex regex

ตัวอย่าง Pattern เพิ่มเติม

-- เริ่มต้นด้วย SQL หรือ Python
WHERE Subject RLIKE '^(SQL|Python)'

-- จบด้วย SQL
WHERE Subject RLIKE 'SQL$'

-- คำเต็ม Word Boundary
WHERE Subject RLIKE '[[:<:]]SQL[[:>:]]'  -- MySQL 8.0: \bSQL\b

-- Case Sensitive
WHERE Subject RLIKE BINARY 'SQL|Python'

สรุป: ใช้ RLIKE 'word1|word2|word3' สำหรับกรอง OR หลายคำใน MySQL รองรับ Regex เต็มรูปแบบ ใช้ BINARY สำหรับ Case-sensitive