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

ค้นหาชื่อที่ขึ้นต้นด้วย A, B หรือ C ใน MySQL

การค้นหาข้อมูลขึ้นต้นด้วยตัวอักษรเฉพาะด้วย 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))))