Hàm CONCAT() cho phép nối chuỗi từ các cột của nhiều bảng thông qua JOIN. Ví dụ ghép FirstName từ bảng 1 và LastName từ bảng 2 thành FullName.
Ví dụ minh họa
Tạo 2 bảng:
CREATE TABLE DemoTable1 (FirstName VARCHAR(20)); CREATE TABLE DemoTable2 (LastName VARCHAR(20));
Chèn dữ liệu:
INSERT INTO DemoTable1 VALUES ('Chris'), ('David');
INSERT INTO DemoTable2 VALUES ('Brown'), ('Miller');
Ghép nối với LEFT JOIN (tạo tích Descartes có điều kiện):
SELECT CONCAT(tbl1.FirstName, ' ', tbl2.LastName) AS FullName FROM DemoTable1 tbl1 LEFT JOIN DemoTable2 tbl2 ON tbl2.LastName = 'Brown' OR tbl2.LastName = 'Miller';
Kết quả
| FullName |
|---|
| Chris Brown |
| David Brown |
| Chris Miller |
| David Miller |
Giải thích
- Điều kiện JOIN
ON tbl2.LastName IN ('Brown','Miller')khớp mọi hàng của tbl1 với 2 hàng tbl2 → 2×2 = 4 kết quả. CONCAT(s1, ' ', s2)nối chuỗi với dấu cách.
⚠️ Cảnh báo: Thiếu điều kiện JOIN đúng
Ví dụ trên dùng điều kiện lọc trên bảng 2 chứ không phải khóa liên kết (foreign key). Trong thực tế, cần cột khóa chung:
-- Thiết kế đúng: có cột liên kết CREATE TABLE Users (id INT PRIMARY KEY, first_name VARCHAR(20)); CREATE TABLE Profiles (user_id INT PRIMARY KEY, last_name VARCHAR(20), FOREIGN KEY (user_id) REFERENCES Users(id)); -- JOIN đúng SELECT CONCAT(u.first_name, ' ', p.last_name) AS full_name FROM Users u JOIN Profiles p ON u.id = p.user_id;
Các hàm nối chuỗi khác
CONCAT_WS(',', col1, col2, col3): Nối với separator, tự bỏ qua NULL.GROUP_CONCAT(): Nối nhiều hàng thành 1 chuỗi (đã thấy ở bài trước).