Giới thiệu
Kết hợp CONCAT() gộp nhiều cột thành một chuỗi, sau đó dùng LIKE tìm mẫu trên chuỗi gộp đó.
1. Tạo bảng và dữ liệu
mysql> create table DemoTable (
-> StudentName varchar(20),
-> StudentSubject varchar(20)
-> );
Query OK, 0 rows affected (0.58 sec)
mysql> insert into DemoTable values('John','MySQL');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Adam','MySQL');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('John','Java');
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable values('Carol','Java');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('John','MongoDB');
Query OK, 1 row affected (0.12 sec)
2. Dữ liệu gốc
mysql> select *from DemoTable;
+-------------+----------------+ | StudentName | StudentSubject | +-------------+----------------+ | John | MySQL | | Adam | MySQL | | John | Java | | Carol | Java | | John | MongoDB | +-------------+----------------+ 5 rows in set (0.00 sec)
3. Tìm "John MySQL" (tên John VÀ môn MySQL)
mysql> select *from DemoTable
-> where concat(StudentName, ' ', StudentSubject) like '%John MySQL%';
4. Kết quả
+-------------+----------------+ | StudentName | StudentSubject | +-------------+----------------+ | John | MySQL | +-------------+----------------+ 1 row in set (0.00 sec)
Phân tích:
CONCAT(StudentName, ' ', StudentSubject)tạo chuỗi: "John MySQL", "Adam MySQL", "John Java"...LIKE '%John MySQL%'khớp chuỗi chứa "John MySQL"- Chỉ hàng 1 thỏa mãn
Cách thay thế tốt hơn (dùng AND):
WHERE StudentName = 'John' AND StudentSubject = 'MySQL'
Ưu điểm: Tận dụng index trên từng cột, chính xác, nhanh hơn, dễ đọc.
Khi nào dùng CONCAT+LIKE? Khi cần tìm mẫu phức tạp xuyên cột, ví dụ: tìm "John" ở đầu VÀ "SQL" ở cuối bất kể cột nào.