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

ค้นหา First Name และ Last Name พร้อมกันด้วย LIKE และ AND ใน MySQL

ภาพรวม

การค้นหาข้อมูลที่ต้องตรงเงื่อนไขหลายคอลัมน์พร้อมกัน ใช้ 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 % หน้าหลังควบคุมรูปแบบการค้นหา