Bài 14: Phép hợp, toán tử UNION, EXISTS, IN và Truy vấn lồng
14.1.1 Phép hợp và toán tử UNION
Toán tử UNION cho phép ta hợp các kết quả của hai hay nhiều truy vấn thành
Query_1[UNION [ALL] Query_2 ]...[UNION [ALL] Query_N ][ORDER BY clause][COMPUTE
clause]một tập kết quả duy nhất. Cú pháp của phép hợp như sau:
Và Query_i (i = 2,..,N) có dạng SELECT select_list[FROM clause][WHERE clause][GROUP BY clause][HAVING clause]Trong đó Query_1 có dạng như sau:SELECT select_list[INTO clause][FROM clause][WHERE clause][GROUP BY clause][HAVING clause]
Giả sử chúng ta có hai bảng như sau:
1This content is available online at <http://voer.edu.vn/content/m18665/1.2/>.
VẤN LỒNG
Figure 14.1
Khi đó phép hợp
SELECT A, C FROM R UNION SELECT * FROM S Sẽ có kết quả là
Figure 14.2
Theo mặc định, phép toán UNION sẽ loại bỏ những dòng giống nhau trong kết quả. Nếu ta sử dụng tùy chọn ALL thì các dòng giống nhau sẽ không bị loại bỏ. Ta có thể sử dụng các dấu ngoặc để xác định thứ tự
tính toán trong phép hợp.
Các nguyên tắc khi sử dụng toán tử UNION
Khi xây dựng các câu lệnh UNION, ta cần chú ý các nguyên tắc sau:
+ Tất cả các danh sách chọn trong câu lệnh UNION phải có cùng số biểu thức (các tên cột, các biểu thức số học, các hàm gộp,...)
+ Các cột tương ứng trong tất cả các bảng, hoặc tập con bất kỳ các cột được sử dụng trong bản thân mỗi truy vấn phải cùng kiểu dữ liệu.
+ Các cột tương ứng trong bản thân từng truy vấn của một câu lệnh UNION phải xuất hiện theo thứ tự như nhau. Nguyên nhân là do phép hợp so sánh các cột từng cột một theo thứ tự được cho trong mỗi truy vấn.
+ Khi các kiểu dữ liệu khác nhau được kết hợp với nhau trong câu lệnh UNION, chúng sẽ được chuyển sang kiểu dữ liệu cao hơn (nếu có thể được). + Tiêu đề cột trong kết quả của phép hợp sẽ là tiêu đề cột được chỉ định trong truy vấn đầu tiên.