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

MySQL ค้นหาค่าที่ขึ้นต้นด้วยข้อความเฉพาะด้วย LIKE

ใช้ LIKE 'prefix%' เพื่อค้นหาค่าที่ขึ้นต้นด้วยข้อความที่ระบุ (Prefix Search) % คือ Wildcard แทนตัวอักษรจำนวนใดก็ได้

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

1. สร้างตาราง

mysql> CREATE TABLE DemoTable1809 (
    Name VARCHAR(20)
);
Query OK, 0 rows affected (0.00 sec)

2. เพิ่มข้อมูล

mysql> INSERT INTO DemoTable1809 VALUES('John');
mysql> INSERT INTO DemoTable1809 VALUES('David');
mysql> INSERT INTO DemoTable1809 VALUES('Mike');
mysql> INSERT INTO DemoTable1809 VALUES('Johnson');

3. แสดงข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable1809;
+---------+
| Name    |
+---------+
| John    |
| David   |
| Mike    |
| Johnson |
+---------+

4. ค้นหาชื่อขึ้นต้นด้วย 'Johnson'

mysql> SELECT * FROM DemoTable1809 WHERE Name LIKE 'Johnson%';

5. ผลลัพธ์

+---------+
| Name    |
+---------+
| Johnson |
+---------+

รูปแบบ LIKE Pattern

Patternความหมายตัวอย่าง Match
'John%'ขึ้นต้นด้วย JohnJohn, Johnson, Johnny
'%John'ลงท้ายด้วย JohnJohn, Longjohn
'%John%'มี John อยู่ตรงไหนก็ได้John, Johnson, Longjohnson
'J_hn'J + ตัวอักษร 1 ตัว + hnJohn, Jkhn
'J__n'J + ตัวอักษร 2 ตัว + nJohn, Jkln

ประสิทธิภาพ (Performance)

  • LIKE 'prefix%' : ใช้ Index ได้ (Prefix Index / Full Index)
  • LIKE '%suffix' : ไม่ใช้ Index (Full Table Scan)
  • LIKE '%middle%' : ไม่ใช้ Index (Full Table Scan)

Case Sensitivity

  • Default Collation (utf8mb4_general_ci, latin1_swedish_ci) : Case Insensitive (john = JOHN)
  • Binary Collation (utf8mb4_bin) หรือ BINARY keyword : Case Sensitive
  • บังคับ Case Sensitive: WHERE Name LIKE BINARY 'Johnson%'

สรุป

LIKE 'prefix%' ใช้ค้นหาค่าที่ขึ้นต้นด้วยข้อความเฉพาะ ใช้ Index ได้ เร็ว เหมาะสำหรับ Autocomplete, Search Suggest ต้องระวัง % นำหน้า (%suffix) จะช้าเพราะ Full Scan