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

แสดงเฉพาะข้อมูลซ้ำที่ต้องการด้วย LIKE ใน MySQL


สถานการณ์

ตารางมีข้อมูลซ้ำหลายค่า ต้องการแสดงเฉพาะข้อมูลซ้ำของค่าเฉพาะ (เช่น '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)