Hế lô anh em ✌️✌️✌️
Có lẽ chúng ta đã quá quen thuộc với các lệnh như SELECT
, UPDATE
hay INSERT
trong MySQL nói riêng và các hệ quản trị cơ sở dữ liệu khác nói chung rồi.
Vậy anh em đã bao giờ dùng câu lệnh UNION
chưa? Khi nào chúng ta phải dùng câu lệnh này? Và điều kiện cũng như cách thức hoạt động của câu lệnh này ra sao?
Trong bài viết này mình sẽ cùng anh em trả lời các câu hỏi đó ha!
1/ Khi nào thì dùng câu lệnh UNION?
UNION
có nghĩa là liên hợp, kết hợp vì vậy mục đích của câu lệnh này là để gộp kết quả của hai hay nhiều câu truy vấn lại thành một kết quả duy nhất.
Mà câu truy vấn để lấy dữ liệu thường là câu lệnh SELECT
nên có thể hiểu nôm na câu lệnh UNION
dùng để gộp kết quả của hai hay nhiều câu SELECT
lại.
Cú pháp tổng quan của lênh UNION
như sau:
SELECT column_list
UNION [DISTINCT | ALL]
SELECT column_list
UNION [DISTINCT | ALL]
SELECT column_list
...
2/ Điều kiện và cách thức hoạt động?
2.1 - Điều kiện của câu lệnh UNION là gì?
- Số lượng và thứ tự của các cột trong những câu lệnh SELECT là phải giống nhau.
- Kiểu dữ liệu của mỗi cột tương ứng trong các câu SELECT cũng phải giống nhau.
Okay, mình sẽ lấy ví dụ cho anh em dễ hình dung nhé!
Đầu tiên anh em tạo cho mình hai bảng là table1
và table2
như sau:
DROP TABLE IF EXISTS table1;
DROP TABLE IF EXISTS table2;
CREATE TABLE table1 (
id INT NOT NULL AUTO_INCREMENT,
value VARCHAR(25) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE table2 (
id INT NOT NULL AUTO_INCREMENT,
value VARCHAR(25) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO table1 (value) VALUES ("A"), ("B"), ("C");
INSERT INTO table2 (value) VALUES ("C"), ("D"), ("E");
Ở đây anh em có thể thấy hai bảng này có cấu trúc giống nhau, chỉ khác nhau về dữ liệu mình thêm vào mỗi bảng thôi.
Bây giờ mình sẽ dùng câu lệnh UNION
để lấy ra toàn bộ dữ liệu của trường value ở cả hai bảng trong hai trường hợp là:
TH1 - Lấy ra hết kể cả trùng cũng lấy.
SELECT value
FROM table1
UNION ALL
SELECT value
FROM table2
Output sẽ là:
value|
-----+
A |
B |
C |
C |
D |
E |
TH2 - Những bản ghi trùng ở hai bảng thì chỉ lấy một lần.
SELECT value
FROM table1
UNION DISTINCT
SELECT value
FROM table2
Output sẽ là:
value|
-----+
A |
B |
C |
D |
E |
Đây chính là ví dụ cơ bản nhất về câu lệnh UNION
! Qua ví dụ này chắc anh em cũng đã hình dung được về điều kiện của câu lệnh này rồi.
Note:
- Mặc định nếu anh em không dùng ALL
hay DISTINCT
thì MySQL sẽ tự hiểu là anh em UNION DISTINCT
nhé.
- Tên các cột trong các câu SELECT
không nhất thiết phải giống nhau (ví dụ ở table1
mình đặt là table1_value
, ở table2
mình đặt là table2_value
cũng không sao hết)
2.2 - Câu lệnh UNION hoạt động như thế nào?
Để hiểu được cách thức hoạt động của câu lệnh UNION
thì mình muốn các bạn liên tưởng hay nói cách khác là so sánh với lệnh JOIN
(INNER JOIN) một chút.
SELECT
t1.value
FROM table1 t1 JOIN table2 t2 ON t1.value = t2.value
Anh em thấy rằng thực chất lệnh INNER JOIN
kết hợp các kết quả theo chiều ngang. Trong khi lệnh UNION
thì kết hợp các kết quả theo chiều dọc.
3/ Ví dụ?
Ở đây mình có sử dụng một bộ dữ liệu mẫu, anh em có thể tải bộ dữ liệu đó tại đây.
Với hai bảng customers
và employees
mình mong muốn sẽ kết hợp trường firstName
, lastName
của bảng employees
và contactFirstName
, contactLastName
của bảng customers
làm một.
Khi đó mình sẽ viết câu lệnh sử dụng lệnh UNION như sau:
SELECT
firstName,
lastName
FROM
employees
UNION
SELECT
contactFirstName,
contactLastName
FROM
customers;
Và output sẽ như sau:
firstName |lastName |
-----------+---------------+
Diane |Murphy |
Mary |Patterson |
Jeff |Firrelli |
William |Patterson |
Gerard |Bondur |
Anthony |Bow |
Leslie |Jennings |
... |... |
Tương tự thì anh em hoàn toàn có thể ghép hai cột đó thành một cột duy nhất là fullName
như sau:
SELECT
CONCAT(firstName,' ',lastName) fullname
FROM
employees
UNION
SELECT
CONCAT(contactFirstName,' ',contactLastName)
FROM
customers;
Khi đó output sẽ như sau:
fullname |
------------------------+
Diane Murphy |
Mary Patterson |
Jeff Firrelli |
William Patterson |
Gerard Bondur |
Anthony Bow |
Leslie Jennings |
... |
4/ Lời kết
Hi vọng là qua bài viết này sẽ giúp anh em hiểu được cách sử dụng câu lệnh UNION trong MySQL nói riêng và các hệ quản trị cơ dữ liệu khác nói chung.
Hẹn gặp lại anh em trong các bài viết tiếp theo nhé.
Tham khảo:
https://www.mysqltutorial.org/sql-union-mysql.aspx
Thanks all ❤️❤️❤️
Không có nhận xét nào: