Sử dụng hàm CONCAT() trong mệnh đề SELECT để nối nhiều cột/chuỗi thành một cột kết quả.
Cú pháp
SELECT CONCAT(cột1, 'chuỗi_cố_định', cột2, ...) AS alias FROM tên_bảng;
Ví dụ minh họa
Tạo bảng demo:
mysql> CREATE TABLE ConcatenatingDemo (
-> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName VARCHAR(20),
-> UserCountryName VARCHAR(20)
-> );
Query OK, 0 rows affected (0.82 sec)
Chèn dữ liệu:
mysql> INSERT INTO ConcatenatingDemo(UserName, UserCountryName) VALUES
-> ('John', 'US'), ('Carol', 'UK'), ('Bob', 'AUS'), ('David', 'US');
Xem dữ liệu:
mysql> SELECT * FROM ConcatenatingDemo;
+--------+----------+-----------------+ | UserId | UserName | UserCountryName | +--------+----------+-----------------+ | 1 | John | US | | 2 | Carol | UK | | 3 | Bob | AUS | | 4 | David | US | +--------+----------+-----------------+
Nối chuỗi: "Tên belongs to ( Quốc_gia )":
mysql> SELECT CONCAT(UserName, ' belongs to ( ', UserCountryName, ' )') AS AddingTextDemo
-> FROM ConcatenatingDemo;
+-------------------------+ | AddingTextDemo | +-------------------------+ | John belongs to ( US ) | | Carol belongs to ( UK ) | | Bob belongs to ( AUS ) | | David belongs to ( US ) | +-------------------------+
CONCAT_WS() - Nối với dấu phân cách (Separator)
SELECT CONCAT_WS(' - ', UserName, UserCountryName) FROM ConcatenatingDemo;
+----------------------------------+
| CONCAT_WS(' - ', UserName, ...) |
+----------------------------------+
| John - US |
| Carol - UK |
| Bob - AUS |
| David - US |
+----------------------------------+
CONCAT_WS = CONCAT With Separator. Tự động bỏ qua NULL.
Xử lý NULL an toàn
-- Nếu UserName NULL, CONCAT trả về NULL
SELECT CONCAT(UserName, ' - ', UserCountryName);
-- Dùng COALESCE
SELECT CONCAT(COALESCE(UserName, 'Unknown'), ' - ', UserCountryName);
-- Hoặc CONCAT_WS (bỏ qua NULL)
SELECT CONCAT_WS(' - ', UserName, UserCountryName);
Ứng dụng thực tế
- Tạo full_name:
CONCAT(first_name, ' ', last_name) - Tạo địa chỉ đầy đủ:
CONCAT_WS(', ', address, city, country) - Tạo slug/URL:
CONCAT('/', category, '/', product_slug) - Log/audit:
CONCAT('User ', user_id, ' updated ', table_name)