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

MySQL: ค้นหาชื่อ-นามสกุลเฉพาะด้วย LIKE 2 ครั้ง (FirstName และ LastName)


คำอธิบาย

ใช้ LIKE 2 ครั้ง ร่วมกับ AND เพื่อค้นหาเรคคอร์ดที่มีชื่อ (FirstName) และนามสกุล (LastName) ตรงตามที่ต้องการในคอลัมน์รวมเดียว

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

mysql> create table DemoTable ( 
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    StudentName varchar(30) ); 
Query OK, 0 rows affected (0.70 sec)

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

mysql> insert into DemoTable(StudentName) values('John Smith'); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(StudentName) values('David Miller'); 
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(StudentName) values('Carol Taylor'); 
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(values('John Doe'); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(StudentName) values('Chris Brown'); 
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(StudentName) values('Adam Doe'); 
Query OK, 1 row affected (0.11 sec)

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

mysql> select * from DemoTable;

ผลลัพธ์:

+-----------+---------------+
| StudentId | StudentName   |
+-----------+---------------+
| 1         | John Smith    |
| 2         | David Miller  |
| 3         | Carol Taylor  |
| 4         | John Doe      |
| 5         | Chris Brown   |
| 6         | Adam Doe      |
+-----------+---------------+
6 rows in set (0.00 sec)

คิวรี่ค้นหา FirstName='John' และ LastName='Doe'

mysql> select * from DemoTable 
where StudentName LIKE '%John%' and StudentName LIKE '%Doe%';

ผลลัพธ์

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 4         | John Doe    |
+-----------+-------------+
1 row in set (0.00 sec)

คำอธิบาย

  • LIKE '%John%': มีคำว่า John อยู่ตรงไหนก็ได้
  • LIKE '%Doe%': มีคำว่า Doe อยู่ตรงไหนก็ได้
  • AND: ต้องตรงทั้งคู่
  • John Smith มี John แต่ไม่มี Doe → ตัดออก
  • Adam Doe มี Doe แต่ไม่มี John → ตัดออก

ข้อจำกัดและการปรับปรุง

  • อาจ Match ผิด เช่น 'Johnny Doe' หรือ 'John Doer' → ใช้ REGEXP แทน
  • แยกคอลัมน์ FirstName, LastName แยกกันดีกว่า (Normalized)
  • Full-Text Search สำหรับข้อมูลขนาดใหญ่

ปรับปรุงด้วย REGEXP

WHERE StudentName REGEXP '^John .* Doe$'

Match เฉพาะ "John" ตัวแรก และ "Doe" ตัวสุดท้าย