คำอธิบาย
ใช้ 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" ตัวสุดท้าย