Giải pháp: Toán tử LIKE
Sử dụng LIKE 'A%' để tìm chuỗi bắt đầu bằng 'A'. Ký tự % đại diện cho bất kỳ chuỗi nào (kể cả rỗng).
Ví dụ minh họa
Tạo bảng và dữ liệu
mysql> CREATE TABLE DemoTable (
StudentName VARCHAR(100)
);
mysql> INSERT INTO DemoTable VALUES('John Smith');
mysql> INSERT INTO DemoTable VALUES('Adam Smith');
mysql> INSERT INTO DemoTable VALUES('Aaron Taylor');
mysql> INSERT INTO DemoTable VALUES('Chris Brown');
Truy vấn
mysql> SELECT * FROM DemoTable
-> WHERE StudentName LIKE 'A%';
Kết quả
+--------------+ | StudentName | +--------------+ | Adam Smith | | Aaron Taylor | +--------------+
Các pattern LIKE phổ biến
| Pattern | Ý nghĩa | Ví dụ khớp |
|---|---|---|
'A%' | Bắt đầu bằng A | Adam, Apple, A |
'%A' | Kết thúc bằng A | Anna, Maria, A |
'%A%' | Chứa A ở bất kỳ vị trí | Adam, Maria, Banana |
'A_' | Bắt đầu A, đúng 2 ký tự | Al, Am, A1 |
'A__%' | Bắt đầu A, ít nhất 3 ký tự | Adam, Apple |
'[A-C]%' | Bắt đầu A, B, hoặc C (REGEXP) | Adam, Bob, Cat |
Phân biệt chữ hoa/thường
- Mặc định: Không phân biệt (case-insensitive) với collation *_ci
- Phân biệt:
WHERE StudentName LIKE 'A%' COLLATE utf8mb4_bin - Hoặc:
WHERE BINARY StudentName LIKE 'A%'
Hiệu năng & Index
LIKE 'A%'(prefix) → Sử dụng được indexLIKE '%A'hoặcLIKE '%A%'→ Không dùng index (full table scan)- Cần index trên cột:
CREATE INDEX idx_name ON DemoTable(StudentName)
Mở rộng: REGEXP cho phức tạp hơn
-- Bắt đầu bằng A hoặc B
WHERE StudentName REGEXP '^[AB]'
-- Bắt đầu bằng chữ cái
WHERE StudentName REGEXP '^[A-Za-z]'
-- Bắt đầu bằng A, theo sau là 2-5 ký tự bất kỳ
WHERE StudentName REGEXP '^A.{2,5}'