Công đoàn là gì?
Các liên hiệp kết hợp các kết quả từ nhiều truy vấn SELECT thành một tập hợp kết quả tổng hợp.
Yêu cầu duy nhất để điều này hoạt động là số lượng cột phải giống nhau từ tất cả các truy vấn SELECT cần được kết hợp.
Giả sử chúng ta có hai bảng như sau
Bây giờ hãy tạo một truy vấn UNION để kết hợp cả hai bảng bằng cách sử dụng DISTINCT
SELECT column1, column2 FROM `table1`UNION DISTINCTSELECT column1,column2 FROM `table2`;
Tại đây các hàng trùng lặp sẽ bị loại bỏ và chỉ các hàng duy nhất được trả lại.
Lưu ý: MySQL sử dụng mệnh đề DISTINCT làm mặc định khi thực hiện các truy vấn UNION nếu không có gì được chỉ định.
Bây giờ hãy tạo một truy vấn UNION để kết hợp cả hai bảng bằng cách sử dụng ALL
SELECT `column1`,` column1` FROM `table1`UNION ALLSELECT ` column1`,` column1` FROM `table2`;
Ở đây các hàng trùng lặp được bao gồm và vì chúng tôi sử dụng TẤT CẢ.
Tại sao sử dụng công đoàn
Giả sử có một lỗ hổng trong thiết kế cơ sở dữ liệu của bạn và bạn đang sử dụng hai bảng khác nhau cho cùng một mục đích. Bạn muốn hợp nhất hai bảng này thành một trong khi loại bỏ bất kỳ bản ghi trùng lặp nào chuyển vào bảng mới. Bạn có thể sử dụng UNION trong những trường hợp như vậy.
Tóm lược
- Lệnh UNION được sử dụng để kết hợp nhiều kết quả truy vấn SELECT thành một truy vấn duy nhất chứa các hàng từ tất cả các truy vấn chọn.
- Số lượng cột và kiểu dữ liệu trong câu lệnh SELECT phải giống nhau để lệnh UNION hoạt động.
- Mệnh đề DISTINCT được sử dụng để loại bỏ các giá trị trùng lặp khỏi tập kết quả truy vấn UNION. MySQL sử dụng mệnh đề DISTINCT làm mặc định khi thực hiện các truy vấn UNION nếu không có gì được chỉ định.
- Mệnh đề ALL được sử dụng để trả về tất cả các hàng thậm chí trùng lặp trong truy vấn UNION.
Ví dụ thực tế sử dụng MySQL workbench
Trong myFlixDB của chúng tôi, hãy kết hợp
Member_number và full_names từ bảng Thành viên
với
movie_id và tiêu đề từ bảng phim
Chúng ta có thể sử dụng truy vấn sau
SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `movie_id`,`title` FROM `movies`;
Thực thi tập lệnh trên trong MySQL workbench so với myflixdb cho chúng ta kết quả sau được hiển thị bên dưới.
membership_number | full_names |
---|---|
1 | Janet Jones |
2 | Janet Smith Jones |
3 | Robert Phil |
4 | Gloria Williams |
5 | Leonard Hofstadter |
6 | Sheldon Cooper |
7 | Rajesh Koothrappali |
8 | Leslie Winkle |
9 | Howard Wolowitz |
16 | 67% Guilty |
6 | Angels and Demons |
4 | Code Name Black |
5 | Daddy's Little Girls |
7 | Davinci Code |
2 | Forgetting Sarah Marshal |
9 | Honey mooners |
19 | movie 3 |
1 | Pirates of the Caribean 4 |
18 | sample movie |
17 | The Great Dictator |
3 | X-Men |