สถานการณ์
ตารางมีข้อมูลซ้ำหลายค่า ต้องการแสดงเฉพาะข้อมูลซ้ำของค่าเฉพาะ (เช่น 'John' ทั้งหมด) ไม่ใช่ข้อมูลซ้ำทั้งหมด
วิธีแก้: ใช้ WHERE ... LIKE
กรองด้วย WHERE column LIKE 'value' (Exact match) หรือ WHERE column LIKE '%value%' (Partial match)
ตัวอย่างการใช้งาน
1. สร้างตาราง
mysql> CREATE TABLE DemoTable (
-> Name VARCHAR(20)
-> );
Query OK, 0 rows affected (1.03 sec)
2. เพิ่มข้อมูล (มี John และ Chris ซ้ำ)
mysql> INSERT INTO DemoTable VALUES('John');
Query OK, 1 row affected (0.32 sec)
mysql> INSERT INTO DemoTable VALUES('Chris');
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable VALUES('John');
Query OK, 1 row affected (0.23 sec)
mysql> INSERT INTO DemoTable VALUES('Bob');
Query OK, 1 row affected (0.42 sec)
mysql> INSERT INTO DemoTable VALUES('Chris');
Query OK, 1 row affected (0.30 sec)
3. แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+-------+ | Name | +-------+ | John | | Chris | | John | | Bob | | Chris | +-------+ 5 rows in set (0.00 sec)
4. แสดงเฉพาะ 'John' (ทั้งหมดที่เป็น John)
mysql> SELECT * FROM DemoTable WHERE Name LIKE 'John';
ผลลัพธ์:
+------+ | Name | +------+ | John | | John | +------+ 2 rows in set (0.03 sec)
LIKE Patterns
| Pattern | ความหมาย | ตัวอย่าง Match |
|---|---|---|
| 'John' | เท่ากับ 'John' อย่างแน่นอน | John |
| 'John%' | ขึ้นต้นด้วย John | John, Johnny, Johnson |
| '%John' | ลงท้ายด้วย John | John, StJohn, LongJohn |
| '%John%' | มี John อยู่ที่ไหนก็ได้ | John, Johnny, StJohn, LongJohnSilver |
| 'Jo_n' | _ = ตัวอักษรเดี่ยว | John, Joan |
ค้นหาข้อมูลซ้ำทั้งหมด (ทุกค่าที่ซ้ำ)
SELECT Name, COUNT(*) as cnt FROM DemoTable GROUP BY Name HAVING COUNT(*) > 1;
Case Sensitivity
- Default Collation (utf8mb4_general_ci, utf8mb4_0900_ai_ci) → Case-insensitive
- Binary Collation (utf8mb4_bin) → Case-sensitive
- บังคับ Case-sensitive:
WHERE Name LIKE 'John' COLLATE utf8mb4_bin - บังคับ Case-insensitive:
WHERE Name LIKE 'john' COLLATE utf8mb4_general_ci
Performance
- LIKE 'exact_value' → ใช้ Index ได้ (ถ้ามี)
- LIKE 'prefix%' → ใช้ Index ได้
- LIKE '%suffix' หรือ LIKE '%middle%' → Full Table Scan (ไม่ใช้ Index)