Hàm CONCAT() cho phép ghép nhiều cột thành một chuỗi duy nhất, rất hữu ích khi cần tìm kiếm, so sánh hoặc hiển thị trên tổ hợp nhiều trường (ví dụ: Họ + Tên).
Tạo bảng khách hàng
mysql> CREATE TABLE DemoTable (
ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientFirstName VARCHAR(20),
ClientLastName VARCHAR(20)
);
mysql> INSERT INTO DemoTable (ClientFirstName, ClientLastName) VALUES
('John', 'Smith'), ('John', 'Miller'), ('Carol', 'Taylor'), ('Adam', 'Smith');
Dữ liệu
mysql> SELECT * FROM DemoTable;
+----------+-----------------+----------------+
| ClientId | ClientFirstName | ClientLastName |
+----------+-----------------+----------------+
| 1 | John | Smith |
| 2 | John | Miller |
| 3 | Carol | Taylor |
| 4 | Adam | Smith |
+----------+-----------------+----------------+
Tìm ClientId của người có Họ 'John' (FirstName bắt đầu bằng 'Jo')
Ghép FirstName + ' ' + LastName rồi dùng LIKE:
mysql> SELECT ClientId FROM DemoTable
WHERE CONCAT(ClientFirstName, ' ', ClientLastName) LIKE 'Jo%';
Kết quả
+----------+
| ClientId |
+----------+
| 1 |
| 2 |
+----------+
Giải thích
CONCAT(ClientFirstName, ' ', ClientLastName): Tạo chuỗi "John Smith", "John Miller", "Carol Taylor", "Adam Smith".LIKE 'Jo%': Khớp chuỗi bắt đầu bằng "Jo" -> "John Smith", "John Miller".
Mở rộng: Tìm kiếm Full Name không phân biệt thứ tự
Nếu người dùng tìm "Smith John" (Họ trước, Tên sau), dùng OR hoặc CONCAT hai chiều:
WHERE CONCAT(ClientFirstName, ' ', ClientLastName) LIKE '%John%Smith%'
OR CONCAT(ClientLastName, ' ', ClientFirstName) LIKE '%John%Smith%'
Hiệu năng & Best Practice
CONCATtrongWHEREkhông dùng index trên cột gốc.- Tạo Generated Column lưu FullName và index trên nó (MySQL 5.7+):
ALTER TABLE DemoTable
ADD FullName VARCHAR(41) AS (CONCAT(ClientFirstName, ' ', ClientLastName)) STORED;
CREATE INDEX idx_fullname ON DemoTable (FullName);
Sau đó query: WHERE FullName LIKE 'Jo%' -> dùng index, rất nhanh.