CÁC PHÉP TOÁN TẬP HỢP VÀ TRUY VẤN LỒNG

Một phần của tài liệu Đề cương bài giảng học phần: Cơ sở dữ liệu (2014 - 2015) (Trang 94 - 97)

12.1. Các phép toán tập hợp

12.1.1. 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 một tập kết quả duy nhất. Cú pháp của phép hợp nhƣ sau:

Trong đó Query_1 có dạng nhƣ sau: SELECT select_list [INTO clause] [FROM clause] [WHERE clause] [GROUP BY clause] [HAVING clause] Và Query_i (i = 2,..,N) có dạng SELECT select_list [FROM clause] [WHERE clause] [GROUP BY clause] Query_1

[UNION [ALL] Query_2 ] ...

[UNION [ALL] Query_N ] [ORDER BY clause]

Giả sử chúng ta có hai bảng nhƣ sau: Khi đó phép hợp SELECT A, C FROM R UNION SELECT * FROM S Sẽ có kết quả là (b¶ng kÕt qu¶)

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.

12.1.2. Toán tử EXCEPT và INTERSECT

12.2. Truy vấn lồng

Cú pháp của câu truy vấn lồng Bảng R A B C A1 B1 1 A2 B1 2 A3 B2 3 A4 B2 4 Kết quả E F A1 1 A2 2 A3 3 A4 4 A5 5 Bảng S E F A3 3 A4 4 A5 5 SELECT <danh sách các cột> FROM <danh sách các bảng> WHERE <so sánh tập hợp> ( SELECT <danh sách các cột> FROM <danh sách các bảng>

WHERE <điều kiện>) Câu truy vấn cha

(Outer query)

Câu truy vấn con (Subquery)

Ví dụ: trong cơ sở dữ liệu quản lý vật tƣ, hiển thị mã và tên vật không đƣợc xuất trong năm 2007, chúng ta sẽ thiết kế câu truy vấn nhƣ sau:

SELECT MA_VTU, TEN_VTU FROM VAT_TU

WHERE MA_VTU NOT IN (SELECT MA_VTU

FROM PHIEU_XUAT AS PX, DONG_XUAT AS DX WHERE PX.SO_PXUAT =DX.SO_PXUAT AND

NGAY_XUAT BETWEEN '1/1/2007' AND '12/31/2007' )  Các câu lệnh SELECT có thể lồng nhau ở nhiều mức.  Câu truy vấn con thƣờng trả về một tập các giá trị.

 Các câu truy vấn con trong cùng một mẹnh đề WHERE đƣợc kết hợp bằng phép nối logic.

 Mệnh đề WHERE của câu truy vấn cha

- <biểu thức><so sánh tập hợp><truy vấn con> - So sánh tập hợp thƣờng đi cùng một số toán tử

 IN, NOT IN  ALL

 ANY hoặc SOME - Kiểm tra sự tồn tại (adsbygoogle = window.adsbygoogle || []).push({});

 EXISTS  NOT EXISTS

12.2.1. Truy vấn lồng phân cấp

+ Mệnh đề WHERE của truy cập con không tham chiếu đến thuộc tính của các quan hệ trong mệnh đề FORM ở truy vấn cha.

+ Khi thực hiện, câu truy vấn con sẽ đƣợc thực hiện trƣớc.

12.2.2. Truy vấn lồng tương quan

+ Mệnh đề WHERE của truy vấn con tham chiếu ít nhất một thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn cha

+ Khi thực hiện, câu truy vấn con sẽ đƣợc thực hiện nhiều lần, mỗi lần tƣơng ứng với một bộ của truy vấn cha

 IN

- <tên cột>IN<câu truy vấn con>

- Thuộc tính ở mệnh đề SELECT của truy vấn con phải có cùng dữ liệu với thuộc tính ở mệnh đề WHERE của truy vấn cha.

 EXISTS

- Không cần có thuộc tính, hằng số hay biểu thức nào khác đứng trƣớc. - Không nhất thiết liệt kê thuộc tính ở mệnh đề SELECT của truy vấn con. - Những câu lệnh truy vấn có ANY hay IN đều có thể chuyển thành câu

truy vấn có EXISTS

12.3. Bài tập liên quan đến các phép toán tập hợp và truy vấn lồng

Xét cơ sở dữ liệu “Quản lý vật tƣ” nhƣ vẽ dƣới đây

Hãy sử dụng ngôn ngữ truy vấn (SQL) để trả lời các câu hỏi sau:

Câu 1: Hiển thị tên nhân viên, ngày sinh của những nhân viên đã xuất vật tƣ trong tháng 8 năm 2008.

Câu 2: Hiển thị tên nhân viên, ngày sinh của những nhân viên đã xuất vật tƣ có tên là „Màn hình máy tính‟

Câu 3: Hiển thị mã, tên vật tƣ đã đƣợc xuất với khối lƣợng lớn nhất.

Một phần của tài liệu Đề cương bài giảng học phần: Cơ sở dữ liệu (2014 - 2015) (Trang 94 - 97)