ภาพรวม
การค้นหาข้อมูลที่ต้องตรงเงื่อนไขหลายคอลัมน์พร้อมกัน ใช้ LIKE ร่วมกับ AND ในเงื่อนไข WHERE
ตัวอย่างสมบูรณ์
1. สร้างตารางและข้อมูล
CREATE TABLE DemoTable (
EmployeeFirstName VARCHAR(50),
EmployeeLastName VARCHAR(50)
);
INSERT INTO DemoTable VALUES ('John', 'Smith');
INSERT INTO DemoTable VALUES ('David', 'Miller');
INSERT INTO DemoTable VALUES ('John', 'Doe');
INSERT INTO DemoTable VALUES ('Adam', 'Smith');
INSERT INTO DemoTable VALUES ('Carol', 'Taylor');
2. ข้อมูลทั้งหมด
SELECT * FROM DemoTable;
+-------------------+------------------+
| EmployeeFirstName | EmployeeLastName |
+-------------------+------------------+
| John | Smith |
| David | Miller |
| John | Doe |
| Adam | Smith |
| Carol | Taylor |
+-------------------+------------------+
3. ค้นหา: FirstName เริ่มต้น "Joh" AND LastName เริ่มต้น "Sm"
SELECT * FROM DemoTable
WHERE EmployeeFirstName LIKE 'Joh%'
AND EmployeeLastName LIKE 'Sm%';
4. ผลลัพธ์
+-------------------+------------------+
| EmployeeFirstName | EmployeeLastName |
+-------------------+------------------+
| John | Smith |
+-------------------+------------------+
ตัวอักษร Wildcard ใน LIKE
| สัญลักษณ์ | ความหมาย | ตัวอย่าง |
|---|---|---|
| % | ตัวอักษรใดๆ 0 ตัวขึ้นไป | 'Joh%' = เริ่มต้น Joh |
| _ (Underscore) | ตัวอักษรใดๆ 1 ตัวพอดี | 'Jo_n' = John, Joan |
| [...] | ชุดตัวอักษร (บาง Version) | '[Jj]ohn' = John, john |
ตัวอย่างเพิ่มเติม
ค้นหาชื่อที่มี "oh" อยู่กลาง
SELECT * FROM DemoTable
WHERE EmployeeFirstName LIKE '%oh%';
ค้นหานามสกุลลงท้าย "th"
SELECT * FROM DemoTable
WHERE EmployeeLastName LIKE '%th';
ค้นหาแบบ Case Insensitive (Default ใน MySQL)
-- ค้นหา 'john' 'JOHN' 'John' ได้ทั้งหมด
SELECT * FROM DemoTable
WHERE EmployeeFirstName LIKE 'john%';
ค้นหาแบบ Case Sensitive (ใช้ COLLATE)
SELECT * FROM DemoTable
WHERE EmployeeFirstName COLLATE utf8mb4_bin LIKE 'John%';
ประสิทธิภาพและ Index
LIKE 'prefix%'(ขึ้นต้นด้วย) → ใช้ Index ได้LIKE '%suffix'(ลงท้ายด้วย) → ไม่ใช้ Index (Full Table Scan)LIKE '%middle%'(อยู่กลาง) → ไม่ใช้ Index
เพิ่มประสิทธิภาพด้วย Full-Text Search
ALTER TABLE DemoTable ADD FULLTEXT(EmployeeFirstName, EmployeeLastName);
SELECT * FROM DemoTable
WHERE MATCH(EmployeeFirstName, EmployeeLastName) AGAINST('John Smith');
สรุป
ใช้ LIKE กับ AND เพื่อค้นหาหลายคอลัมน์พร้อมกัน Wildcard % หน้าหลังควบคุมรูปแบบการค้นหา