Để lọc các tên thành phố không bắt đầu bằng nguyên âm (a, e, i, o, u - cả hoa và thường), bạn dùng toán tử RLIKE (hoặc REGEXP) với biểu thức chính quy phủ định.
Cú pháp
SELECT DISTINCT ten_cot_thanh_pho
FROM ten_bang
WHERE ten_cot_thanh_pho NOT RLIKE '^[AEIOUaeiou].*$';
Giải thích Regex
^: Bắt đầu chuỗi[AEIOUaeiou]: Một trong các ký tự nguyên âm (hoa hoặc thường).*: Bất kỳ ký tự nào, số lượng bất kỳ$: Kết thúc chuỗiNOT RLIKE: Phủ định - không khớp với pattern trên
Ví dụ minh họa
1. Tạo bảng nhân viên
CREATE TABLE Employee_Information (
Id INT NOT NULL AUTO_INCREMENT,
EmployeeName VARCHAR(20),
CityName VARCHAR(20),
PRIMARY KEY(Id)
);
2. Chèn dữ liệu
INSERT INTO Employee_Information(EmployeeName, CityName) VALUES
('Larry', 'New York'),
('Sam', 'Indianapolis'),
('Carol', 'El Paso'),
('John', 'Austin'),
('Mike', 'Denver'),
('David', 'Las Vegas'),
('James', 'Albuquerque'),
('Robert', 'Portland'),
('Richard', 'Irvine'),
('Michael', 'Garland');
3. Xem toàn bộ dữ liệu
SELECT * FROM Employee_Information;
Kết quả:
+----+--------------+--------------+
| Id | EmployeeName | CityName |
+----+--------------+--------------+
| 1 | Larry | New York |
| 2 | Sam | Indianapolis |
| 3 | Carol | El Paso |
| 4 | John | Austin |
| 5 | Mike | Denver |
| 6 | David | Las Vegas |
| 7 | James | Albuquerque |
| 8 | Robert | Portland |
| 9 | Richard | Irvine |
| 10 | Michael | Garland |
+----+--------------+--------------+
4. Truy vấn: Thành phố KHÔNG bắt đầu bằng nguyên âm
SELECT DISTINCT CityName
FROM Employee_Information
WHERE CityName NOT RLIKE '^[AEIOUaeiou].*$';
Kết quả:
+-----------+
| CityName |
+-----------+
| New York |
| Denver |
| Las Vegas |
| Portland |
| Garland |
+-----------+
Các thành phố bị loại (bắt đầu bằng nguyên âm): Indianapolis (I), El Paso (E), Austin (A), Albuquerque (A), Irvine (I).
Cách viết khác
Dùng REGEXP (tương đương RLIKE)
WHERE CityName NOT REGEXP '^[AEIOUaeiou]'
Dùng NOT LIKE (đơn giản hơn, không cần regex)
WHERE CityName NOT LIKE 'A%'
AND CityName NOT LIKE 'E%'
AND CityName NOT LIKE 'I%'
AND CityName NOT LIKE 'O%'
AND CityName NOT LIKE 'U%'
AND CityName NOT LIKE 'a%'
AND CityName NOT LIKE 'e%'
AND CityName NOT LIKE 'i%'
AND CityName NOT LIKE 'o%'
AND CityName NOT LIKE 'u%'
Dùng SUBSTRING + NOT IN
WHERE UPPER(SUBSTRING(CityName, 1, 1)) NOT IN ('A','E','I','O','U')
Lưu ý hiệu năng
RLIKE/REGEXPkhông sử dụng index → quét toàn bảng- Với bảng lớn, cân nhắc cột computed/index chức năng hoặc xử lý ở application layer
DISTINCTloại bỏ trùng lặp nếu nhiều nhân viên cùng thành phố