CHƯƠNG 2. MÔ HÌNH DỮ LIỆU QUAN HỆ
2.3. C ÁC PHÉP TOÁN ĐẠI SỐ QUAN HỆ
2.3.3. Các phép toán khác
Mục này trình bày 3 phép toán kết nối mở rộng khác đặc biệt quan trọng, mà bản chất của chúng vẫn là kết nối. Chúng đã được cài đặt trong một số hệ quản trị CSDL như MicroSoft Access, SQL-Server, Oracle. Các phép kết nối đó là: Kết nối nội (Inner Join), Kết nối trái (Left Join) và Kết nối phải (Right Join).
a. Phép kết nối nội (Inner Join)
Thực chất là phép kết nối bằng đã trình bày. Tuy nhiên, trong trường hợp hai thuộc tính so sánh có cùng tên thì kết quả phép kết nối vẫn giữ lại 2 tên thuộc tính đó.
Ví dụ 2.25.
Quan hệ SINH_VIEN
MaSV HoTenSV NamSinh GioiTinh QueQuan MaLop 1361030001 Lê Ngọc Bích 1996 Nam Thanh Hoá 136103A 1361030007 Lê Thị Hà 1996 Nữ Ninh Bình 136103A 1561030008 Trần Văn Hậu 1997 Nam Thanh Hóa 156103A
Quan hệ LOP
MaLop TenLop MaKhoa
57
136103A ĐH CNTT K16 CNTT 146103A ĐH CNTT K17 CNTT 156103A ĐH CNTT K18 CNTT 166103A ĐH CNTT K19 CNTT
Kết quả phép kết nối nội của 2 quan hệ SINH_VIEN và LOP đưa ra danh sách sinh viên lớp “ĐH CNTT K16” là quan hệ SV_LOP với các bộ giá trị như sau:
MaSV HoTenSV NamSinh GioiTinh QueQuan MaLop TenLop MaKhoa
1361030001 Lê Ngọc Bích 1996 Nam Thanh Hoá 136103A ĐH CNTT K16 CNTT 1361030007 Lê Thị Hà 1996 Nữ Ninh Bình 136103A ĐH CNTT K16 CNTT
b. Phép kết nối trái (Left Join)
Giả sử có 2 quan hệ R (A1, A2,..., An) và S (B1, B2,..., Bm).
t = (a1, a2,..., an) và u = (b1, b2,..., bm) là hai bộ giá trị của R và S. Gọi v là bộ ghép nối u vào t (hay bộ giá trị t và u được "xếp cạnh nhau") và ký hiệu là:
v = (t, u) = (a1, a2,..., an, b1, b2,..., bm).
Bộ tNULL = (NULL, NULL, ..., NULL) là một bộ đặc biệt của R gồm n giá trị của các thuộc tính A1, A2,..., An đều là không xác định và uNULL = (NULL, NULL,..., NULL) là một bộ đặc biệt của S gồm m giá trị của các thuộc tính B1, B2,..., Bm đều là không xác định.
A ϵ R+ và B ϵ S+ là hai thuộc tính có thể so sánh được.
Định nghĩa 2.20. Phép kết nối trái hai quan hệ R với S trên các thuộc tính A và B với phép so sánh bằng (=), với giả thiết là giá trị cột R[A] có thể so sánh tương đương được với mỗi giá trị của cột S[B], được định nghĩa là:
R S= {v = (t, u)|(tϵR , uϵS và t.Aθu.B) hoặc (tϵR, u = uNULL với t.AS[B])}
Nghĩa là, tất cả các bộ v có được nhờ cách đặt bộ giá trị của R và S xếp cạnh nhau, nếu có giá trị giống nhau trên 2 thuộc tính kết nối; và các bộ v có được nhờ cách đặt bộ của R với các bộ NULL của S, nếu không tìm được giá trị tương ứng của thuộc tính kết nối trên quan hệ S.
Ví dụ 2.26.
Quan hệ SINH_VIEN
MaSV HoTenSV NamSinh GioiTinh QueQuan MaLop 1361030001 Lê Ngọc Bích 1996 Nam Thanh Hoá 136103A 1361030007 Lê Thị Hà 1996 Nữ Ninh Bình 136103A 1561030008 Trần Văn Hậu 1997 Nam Thanh Hóa 156103A
Quan hệ LOP
MaLop TenLop MaKhoa 136103A ĐH CNTT K16 CNTT
58
146103A ĐH CNTT K17 CNTT 156103A ĐH CNTT K18 CNTT 166103A ĐH CNTT K19 CNTT
Kết quả phép kết trái – left join của 2 quan hệ SINH_VIEN và LOP là quan hệ SV_LOP với các bộ giá trị như sau:
MaSV HoTenSV NamSinh GioiTinh QueQuan MaLop TenLop MaKhoa
1361030001 Lê Ngọc Bích 1996 Nam Thanh Hoá 136103A K16 CNTT 1361030007 Lê Thị Hà 1996 Nữ Ninh Bình 136103A K16 CNTT 1561030008 Trần Văn Hậu 1997 Nam Thanh Hóa 156103A K18 CNTT
c. Phép kết nối phải (Right Join)
Vẫn với các quan hệ R, S; các thuộc tính A, B; và các bộ giá trị v, t, u, tNULL, uNULL được xác định như trên.
Định nghĩa 2.21. Phép kết nối phải hai quan hệ R với S trên các thuộc tính A và B với phép so sánh =, với giả thiết là giá trị cột R[A] có thể so sánh tương đương được với mỗi giá trị của cột S[B], được định nghĩa là:
R S={v = (t, u)|(tϵR , uϵS và t.Aθu.B) hoặc (t = tNULL, uϵS, với t.BR[A])}
Nghĩa là, tất cả các bộ v có được nhờ cách đặt bộ giá trị của R và S xếp cạnh nhau nếu chúng có giá trị giống nhau trên 2 thuộc tính kết nối, và các bộ NULL của R với các bộ của S, nếu không tìm được giá trị tương ứng của thuộc tính kết nối trên quan hệ R.
Ví dụ 2.27.
Quan hệ SINH_VIEN
MaSV HoTenSV NamSinh GioiTinh QueQuan MaLop 1361030001 Lê Ngọc Bích 1996 Nam Thanh Hoá 136103A 1361030007 Lê Thị Hà 1996 Nữ Ninh Bình 136103A 1561030008 Trần Văn Hậu 1997 Nam Thanh Hóa 156103A
Quan hệ LOP
MaLop TenLop MaKhoa 136103A ĐH CNTT K16 CNTT 146103A ĐH CNTT K17 CNTT 156103A ĐH CNTT K18 CNTT 166103A ĐH CNTT K19 CNTT
Kết quả phép kết phải – right join của 2 quan hệ SINH_VIEN và LOP kết nối trái là quan hệ SV_LOP với các bộ giá trị như sau:
MaSV HoTenSV NamSinh GioiTinh QueQuan MaLop TenLop MaKhoa
1361030001 Lê Ngọc Bích 1996 Nam Thanh Hoá 136103A ĐH CNTT K16 CNTT
59
1361030007 Lê Thị Hà 1996 Nữ Ninh Bình 136103A ĐH CNTT K16 CNTT
NULL NULL NULL NULL NULL 146103A ĐH CNTT K17 CNTT
1561030008 Trần Văn Hậu 1997 Nam Thanh Hóa 156103A ĐH CNTT K18 CNTT
NULL NULL NULL NULL NULL 166103A ĐH CNTT K19 CNTT
Trong một số ngôn ngữ truy vấn CSDL (MicroSoft SQL Server, Oracle ...) người ta gọi 2 phép toán kết nối trái (Left Join) và kết nối phải (Right Join) bằng chung một từ là “phép kết nối ngoài” (Outer Join). Mục đích của phép kết nối này là cho phép giữ lại tất cả các bản ghi (hoặc bộ giá trị) của 2 quan hệ có cùng giá trị của các thuộc tính kết nối và những bộ giá trị của cả 2 quan hệ không tìm được bộ giá trị giống nhau trên các thuộc tính kết nối thuộc quan hệ đối ứng.
2.3.4. Các phép toán quan hệ bổ sung
Có nhiểu truy vấn CSDL không thể thực hiện được bằng các phép toán đại số cơ bản trình bày ở trên. Hầu hết các ngôn ngữ thao tác dữ liệu của các hệ quản trị CSDL được thương mại hoá đã có những phép toán bổ sung. Trong phần này ta sẽ trình bày các phép toán bổ sung để biểu diễn các truy vấn đó. Các phép toán này làm tăng cường sức mạnh của đại số quan hệ.
a. Các hàm kết tập
Kiểu truy vấn đầu tiên không thể biểu diễn được trong đại số quan hệ cơ sở là kiểu đặc tả được bằng các hàm toán học có tính kết tập trên một tập hợp các giá trị của CSDL. Các ví dụ về các hàm như vậy có thể là: đưa ra điểm trung bình của từng sinh viên, hoặc cho biết số các bộ của bảng sinh viên. Các hàm hay áp dụng để thu thập các giá trị số là:
- Hàm tính tổng (SUM)
- Hàm tính trungbình cộng (AVERAGE) - Hàm tính giá trị lớn nhất (MAX)
- Hàm tínhgiá trị bé nhất (MIN)
- Hàm đếm số các bộ (COUNT) được sử dụng để đếm các bộ giá trị.
b. Các phép gộp nhóm
Có một kiểu yêu cầu khác nữa ta hay gặp mà cũng không thể hiện được trong đại số quan hệ. Đó là kiểu yêu cầu nhóm các bộ trong một quan hệ theo một giá trị của một số các thuộc tính của chúng và sau đó áp dụng các hàm kết tập trên từng nhóm một cách độc lập.
Ví dụ, nhóm các bộ của quan hệ SINH_VIEN theo MaLop. Như vậy, mỗi nhóm bao gồm các sinh viên học trong một lớp (về mặt quản lí hành chính). Sau đó ta có thể đưa ra mỗi giá trị của MaLop cùng với điểm trung bình của các sinh viên ở trong lớp.
Ta có thể định nghĩa một phép toán nhóm như sau:
< các thuộc tính nhóm>< danh sách các hàm>(R) Trong đó:
60
<các thuộc tính nhóm> là một danh sách các thuộc tính của quan hệ được chỉ ra trong R,
là ký hiệu phép toán hàm nhóm,
<danh sách hàm> là danh sách các cặp (<hàm><thuộc tính)>).
Trong các cặp như vậy, <hàm> là một trong các hàm cho phép như SUM, AVERAGE, MAX, MIN, COUNT, và <thuộc tính> là một thuộc tính của quan hệ được chỉ ra trong R. Quan hệ kết quả có các thuộc tính nhóm cộng với một thuộc tính cho mỗi phần tử trong danh sách hàm.
Ví dụ 2.28. Lấy theo MaLop các sinh viên và tuổi trung bình của các sinh viên theo từng lớp, ta có thể viết: MaLopCOUNT ( ), AVERAGE(NgaySinh)(SINH_VIEN)