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

MySQL: LIKE ค้นหาค่าที่ขึ้นต้นด้วย 'Joh' (John, Johnson)


คำอธิบาย

ใช้ LIKE 'Joh%' ค้นหาค่าที่ขึ้นต้นด้วย 'Joh' ร่วมกับ UNION เพื่อรวมผลลัพธ์ (แม้ในตัวอย่างมีตารางเดียว)

ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง

mysql> create table DemoTable ( 
    Name varchar(40) ); 
Query OK, 0 rows affected (0.55 sec)

การเพิ่มข้อมูล

mysql> insert into DemoTable values('John'); 
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Sam'); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Mike'); 
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Ethan'); 
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Johnson'); 
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Bob'); 
Query OK, 1 row affected (0.12 sec)

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

mysql> select * from DemoTable;

ผลลัพธ์:

+---------+
| Name    |
+---------+
| John    |
| Sam     |
| Mike    |
| Ethan   |
| Johnson |
| Bob     |
+---------+
6 rows in set (0.00 sec)

คิวรี่ค้นหาขึ้นต้น 'Joh' ด้วย UNION

mysql> select * from (
    select Name as myValue from DemoTable 
    union 
    select Name from DemoTable
) tbl where myValue like 'Joh%';

ผลลัพธ์

+---------+
| myValue |
+---------+
| John    |
| Johnson |
+---------+
2 rows in set (0.00 sec)

คำอธิบาย

  • UNION (ไม่มี ALL): รวมและลบค่าซ้ำ (Distinct)
  • ในตัวอย่าง UNION ตารางเดียวกัน 2 ครั้ง → ไม่มีผล (Distinct แล้ว)
  • LIKE 'Joh%': ขึ้นต้นด้วย Joh
  • Match: John, Johnson
  • ไม่ Match: Sam, Mike, Ethan, Bob

วิธีง่ายกว่า (ไม่ต้อง UNION)

SELECT Name FROM DemoTable WHERE Name LIKE 'Joh%';

ให้ผลลัพธ์เหมือนกัน UNION ในที่นี้ซ้ำซ้อน

Case Insensitive Search

Default Collation (utf8mb4_general_ci) เป็น Case Insensitive:

WHERE Name LIKE 'joh%'  -- หา john, JOHN, John ได้ทั้งหมด