การรวม LIKE กับ OR Operator
ใน MySQL คุณสามารถใช้ LIKE ร่วมกับ OR ได้ เพื่อค้นหาข้อมูลที่ตรงกับ Pattern ใด Pattern หนึ่งจากหลาย Pattern
รูปแบบคำสั่ง
กรณีที่ 1: LIKE กับ OR
SELECT * FROM your_table_name
WHERE your_column LIKE 'pattern1%'
OR your_column LIKE 'pattern2%'
OR your_column LIKE 'pattern3%';
กรณีที่ 2: ใช้ IN Operator (สำหรับค่า Exact Match)
SELECT * FROM your_table_name
WHERE your_column IN ('value1', 'value2', 'value3');
ตัวอย่างการใช้งานจริง
1. สร้างตาราง
CREATE TABLE LikeDemo (
Id VARCHAR(20)
);
2. เพิ่มข้อมูล
INSERT INTO LikeDemo VALUES
('John123'), ('Smith205'), ('Bob999'),
('Carol9091'), ('Johnson2222'), ('David2345');
3. ใช้ LIKE กับ OR (Prefix Search)
SELECT * FROM LikeDemo
WHERE Id LIKE 'John123%'
OR Id LIKE 'Carol9091%'
OR Id LIKE 'David2345%';
4. ใช้ IN (Exact Match)
SELECT * FROM LikeDemo
WHERE Id IN ('John123', 'Carol9091', 'David2345');
ผลลัพธ์ทั้งสองวิธี (ในกรณีนี้เหมือนกัน)
| Id |
| John123 |
| Carol9091 |
| David2345 |
ความแตกต่างสำคัญ: LIKE vs IN
| คุณสมบัติ | LIKE + OR | IN |
| Pattern Matching | ✅ รองรับ Wildcard (%, _) | ❌ Exact Match เท่านั้น |
| Prefix Search | ✅ LIKE 'abc%' ใช้ Index ได้ | ❌ ไม่ได้ |
| Substring Search | ✅ LIKE '%abc%' | ❌ ไม่ได้ |
| Performance | Prefix ใช้ Index ได้ | ใช้ Index ได้ (Equality) |
| ความยาวโค้ด | ยาวกว่า | สั้นกว่า |
ตัวอย่าง LIKE ที่ IN ทำไม่ได้
-- หาชื่อขึ้นต้นด้วย J, C, D
SELECT * FROM LikeDemo
WHERE Id LIKE 'J%' OR Id LIKE 'C%' OR Id LIKE 'D%';
-- หาชื่อมี 'son' อยู่กลาง
SELECT * FROM LikeDemo
WHERE Id LIKE '%son%';
ข้อควรระวัง
- ⚠️
LIKE '%pattern%' (Leading Wildcard) ไม่ใช้ Index ได้ → Full Table Scan
- 🔧 ใช้
FULLTEXT INDEX สำหรับ Full-text Search
- 📝
IN สำหรับรายการค่าที่แน่นอน, LIKE สำหรับ Pattern
- 🎯
REGEXP สำหรับ Pattern ซับซ้อนกว่า LIKE