Header Ads

Seo Services

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ượngthứ 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à table1table2 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 customersemployees mình mong muốn sẽ kết hợp trường firstName, lastName của bảng employeescontactFirstName, 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:

Được tạo bởi Blogger.