Để kết hợp nhiều điều kiện LIKE trên các cột khác nhau trong một truy vấn, dùng toán tử logic AND, OR và ngoặc đơn để nhóm đúng thứ tự ưu tiên.
Cú pháp chung
SELECT * FROM ten_bang WHERE (cot1 LIKE '%gia_tri1%' OR cot2 LIKE '%gia_tri2%') OR (cot3 LIKE '%gia_tri3%');
Ví dụ minh họa
Tạo bảng khách hàng:
mysql> CREATE TABLE DemoTable1534 (
-> ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ClientName VARCHAR(20), ClientAge INT, ClientCountryName VARCHAR(20)
-> );
mysql> INSERT INTO DemoTable1534(ClientName,ClientAge,ClientCountryName) VALUES
-> ('Chris Brown',29,'AUS'), ('David Miller',49,'UK'),
-> ('John Doe',43,'US'), ('Adam Smith',38,'US'), ('Carol Taylor',36,'UK');
Truy vấn: Khách hàng có tên chứa 'Doe' **HOẶC** tuổi chứa '38' **HOẶC** quốc gia kết thúc bằng 'S':
mysql> SELECT * FROM DemoTable1534
-> WHERE ClientName LIKE '%Doe%'
-> OR ClientAge LIKE '%38%'
-> OR ClientCountryName LIKE '%S';
Kết quả (3 hàng khớp ít nhất 1 điều kiện):
+----------+-------------+-----------+-------------------+ | ClientId | ClientName | ClientAge | ClientCountryName | +----------+-------------+-----------+-------------------+ | 1 | Chris Brown | 29 | AUS | -- AUS kết thúc S | 3 | John Doe | 43 | US | -- tên có Doe, US kết thúc S | 4 | Adam Smith | 38 | US | -- tuổi có 38, US kết thúc S +----------+-------------+-----------+-------------------+
Lưu ý: MySQL cảnh báo "5 warnings" do so sánh số (ClientAge INT) với chuỗi LIKE '%38%' – MySQL tự ép kiểu, nên dùng ClientAge = 38 cho chính xác.
Best practice
- Dùng ngoặc đơn rõ ràng:
(A OR B) AND (C OR D). - Tránh
LIKEtrên cột số – dùng so sánh bằng (=,BETWEEN). - Index không hỗ trợ
LIKE '%...%'(bắt đầu bằng wildcard). ChỉLIKE 'abc%'(prefix) mới dùng được index. - Với tìm kiếm toàn văn bản phức tạp, dùng Full-Text Search (
MATCH ... AGAINST).