การค้นหาข้อมูลขึ้นต้นด้วยตัวอักษรเฉพาะด้วย LIKE และ OR
ใช้ LIKE ร่วมกับ OR เพื่อกรองข้อมูลที่ขึ้นต้นด้วย A, B หรือ C (Case-insensitive โดยค่าเริ่มต้น)
ไวยากรณ์
SELECT * FROM yourTableName
WHERE yourColumn LIKE 'A%'
OR yourColumn LIKE 'B%'
OR yourColumn LIKE 'C%';
ตัวอย่างการใช้งาน
สร้างตาราง:
CREATE TABLE AllNamesStartWithAorBorC (
Id INT NOT NULL AUTO_INCREMENT,
EmployeeName VARCHAR(20),
PRIMARY KEY(Id)
);
เพิ่มข้อมูล:
INSERT INTO AllNamesStartWithAorBorC(EmployeeName) VALUES('Adam');
INSERT INTO AllNamesStartWithAorBorC(EmployeeName) VALUES('Bob');
INSERT INTO AllNamesStartWithAorBorC(EmployeeName) VALUES('baden');
INSERT INTO AllNamesStartWithAorBorC(EmployeeName) VALUES('Carol');
INSERT INTO AllNamesStartWithAorBorC(EmployeeName) VALUES('Mike');
INSERT INTO AllNamesStartWithAorBorC(EmployeeName) VALUES('Larry');
INSERT INTO AllNamesStartWithAorBorC(EmployeeName) VALUES('Chris');
ค้นหาชื่อขึ้นต้น A, B, C:
SELECT * FROM AllNamesStartWithAorBorC
WHERE EmployeeName LIKE 'A%'
OR EmployeeName LIKE 'B%'
OR EmployeeName LIKE 'C%';
ผลลัพธ์:
+----+--------------+
| Id | EmployeeName |
+----+--------------+
| 1 | Adam |
| 2 | Bob |
| 3 | baden |
| 4 | Carol |
| 7 | Chris |
+----+--------------+
วิธีอื่นที่สั้นกว่า: REGEXP / RLIKE
SELECT * FROM AllNamesStartWithAorBorC
WHERE EmployeeName REGEXP '^[ABCabc]';
หรือ Case-sensitive:
SELECT * FROM AllNamesStartWithAorBorC
WHERE EmployeeName REGEXP '^[ABC]'; -- เฉพาะพิมพ์ใหญ่
-- ต้องตั้ง collation เป็น case-sensitive (เช่น utf8_bin) หรือใช้ BINARY
SELECT * FROM AllNamesStartWithAorBorC
WHERE BINARY EmployeeName REGEXP '^[ABC]';
วิธีอื่น: IN กับ SUBSTRING/LEFT
SELECT * FROM AllNamesStartWithAorBorC
WHERE UPPER(LEFT(EmployeeName, 1)) IN ('A', 'B', 'C');
เปรียบเทียบประสิทธิภาพ
| วิธี | Index Usage | ความเร็ว | ความยืดหยุ่น |
|---|---|---|---|
| LIKE 'A%' OR LIKE 'B%' ... | ได้ (Range scan) | เร็ว | คงที่ |
| REGEXP '^[ABC]' | ไม่ได้ (Full scan) | ช้า | สูง (Regex ได้) |
| LEFT(col,1) IN (...) | ไม่ได้ (Function on column) | ช้า | ปานกลาง |
คำแนะนำ
- ใช้
LIKE 'A%' OR LIKE 'B%' ...สำหรับ production (ใช้ index ได้) - ใช้
REGEXPสำหรับ ad-hoc query หรือ pattern ซับซ้อน - สร้าง Functional Index (MySQL 8.0+) สำหรับ LEFT/UPPER:
INDEX ((UPPER(LEFT(name,1))))