Ngôn ngữ đại số quan hệ (tiếp theo)
Giả sử có 2 quan hệ R (A 1 , A 2 , ..., A n ) và S (B 1 , B 2 , ..., B m ). t = (a 1 , a 2 , ..., a n ) là một bộ giá trị của R và u = (b 1 , b 2 , ..., b m ) là một bộ giá trị của S. Gọi v là bộ ghép nối u vào t (hay bộ ...
Giả sử có 2 quan hệ R (A1, A2, ..., An) và S (B1, B2, ..., Bm).
t = (a1, a2, ..., an) là một bộ giá trị của R và u = (b1, b2, ..., bm) là một bộ giá trị của 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" để tạo thành bộ giá trị mới v) được định nghĩa như sau:
v = (t, u) = (a1, a2, ..., an, b1, b2, ..., bm).
A Ỵ R+ và B Ỵ S+ là hai thuộc tính có thể so sánh được.
Gọi q là một trong các phép toán so sánh { <, <=, >, >=, =, ¹ }.
Phép kết nối hai quan hệ (có thể nói tắt là phép kết) R với S trên các thuộc tính A và B với phép so sánh q , với giả thiết là giá trị cột R[A] có thể so sánh được (qua phép so sánh q ) với mỗi giá trị của cột R[B], được định nghĩa qua:
RS = { v = (t, u) ½ t Ỵ R , u Ỵ S và t.A q u.B }
Hoặc:
R S = (R x S) : (A q B).
Phép kết nối 2 quan hệ R và S có thể xem như được thực hiện qua 2 bước:
Bước 1: Thực hiện tích Đề-các hai quan hệ R và S.
Bước 2: Chọn các bộ giá trị thỏa mãn điều kiện A q B.
Ngữ nghĩa: Định nghĩa trên cho ta kết quả của phép kết nối hai quan hệ R và S với phép so sánh q trên 2 thuộc tính A và B là một quan hệ mới, Đó là kết quả cuối cùng của phép toán quan hệ (phép Chọn) trên quan hệ kết quả của phép toán tập hợp (tích Đề-các).
Nếu q là phép toán so sánh bằng nhau (=) thì ta gọi đó là phép kết nối bằng (Equi Join). Nếu các thuộc tính so sánh là giống tên nhau thì trong kết quả của phép kết nối sẽ loại bỏ đi một trong 2 thuộc tính đó, khi đó phép kết nối được gọi là phép kết nối tự nhiên (Natural Join) và sử dụng ký hiệu cho phép toán là " * " hoặc chỉ ký hiệu I><I (không có A q B) ở phía trên của phép toán. Trong các trường hợp còn lại, phép toán được gọi chung là phép kết nối theta (q -Join).
Phép kết nối được biểu diễn bằng sơ đồ như sau:
Hình 5.3.3. Sơ đồ biểu diễn phép kết nối
Ví dụ 5.3.3:
Cho 2 quan hệ R và S với các bộ giá trị cho trong bảng ở cột lớn thứ nhất và thứ hai bên trái. Kết quả phép kết nối theta (q -Join) của 2 quan hệ trên được cho trong bảng ở cột lớn thứ ba dưới đây:
R | (A | B | C) | ||||||||
a1 | 1 | 1 | |||||||||
a2 | 2 | 1 | |||||||||
a3 | 2 | 2 | |||||||||
S | (C | D | E) | R![]() |
=Q | (A | B | C | C | D | E) |
1 | d1 | e1 | a1 | 1 | 1 | 1 | d1 | e1 | |||
2 | d2 | e2 | a2 | 2 | 1 | 1 | d1 | e1 | |||
3 | d3 | e3 | a2 | 2 | 1 | 2 | d2 | e2 | |||
a3 | 2 | 2 | 1 | d1 | e1 | ||||||
a3 | 2 | 2 | 2 | d2 | e2 |
Kết quả phép kết nối tự nhiên của 2 quan hệ R và S là quan hệ Q’ với các bộ giá trị như sau:
R I><I S | = Q | (A | B | C | D | E) |
a1 | 1 | 1 | d1 | e1 | ||
a2 | 2 | 1 | d1 | e1 | ||
a3 | 2 | 2 | d2 | e2 |
Ví dụ 5.3.4:
Cho CSDL về cán bộ - viên chức Nhà nước (CBVC) với các quan hệ sau đây:
-Quan hệ ĐƠN-VỊ:
Mã-ĐV | Tên-đơn-vị | Loại |
10002 | Trường Kỹ thuật nghiệp vụ máy tính | 3 |
10003 | Phòng quản lý hành chánh | 2 |
10022 | Văn phònh đại diện Thanh niên | 2 |
10070 | Ban quản lý vốn sinh viên | 5 |
10071 | Lực lượng quản lý thị trường | 5 |
-Quan hệ loại hình tổ chức của đơn vị LOAI-ĐV:
Loại | Tên-loại-hình |
2 | Hành chánh |
3 | Sự nghiệp hoàn toàn |
5 | Hạch toán độc lập |
-Quan hệ Ngạch-CBVC:
Ngạch | Tên ngạch |
01002 | Chuyên viên chính |
01003 | Chuyên viên |
01004 | Cán sự |
01005 | Kỹ thuật viên đánh máy |
01008 | Nhân viên văn thư |
01010 | Lái xe cơ quan |
-Quan hệ Ngạch-Bậc-lương:
Ngạch | Bậc | Hệ-số-lương |
01002 | 01 | 3.35 |
01002 | 02 | 3.63 |
01002 | 03 | 3.91 |
01003 | 05 | 2.82 |
01003 | 07 | 3.31 |
01003 | 08 | 3.56 |
01004 | 07 | 2.18 |
01004 | 08 | 2.30 |
01004 | 10 | 2.55 |
01004 | 11 | 2.68 |
01005 | 04 | 2.06 |
01005 | 05 | 2.18 |
01005 | 06 | 2.30 |
01008 | 11 | 2.12 |
01010 | 08 | 2.47 |
01010 | 11 | 2.80 |
01010 | 13 | 3.02 |
-Quan hệ danh sách CBVC với các bộ giá trị sau:
Mã-ĐV | Mã-CC | Họ-lót | Tên | Giới | Ngày-sinh | Ngạch | Bậc | Ngày-xếp |
10002 | 1000028 | Trần Tứ | Hải | Nam | 05/09/40 | 01003 | 08 | 01/12/96 |
10002 | 1000040 | Trần Ngọc | Sơn | Nam | 04/08/57 | 01003 | 05 | 01/12/97 |
10002 | 1000042 | Nguyễn Văn | Sang | Nam | 20/04/61 | 01004 | 10 | 01/01/97 |
10002 | 1000043 | Nguyễn Văn | Thành | Nam | 04/10/44 | 01004 | 10 | 01/01/97 |
10002 | 1000065 | Huỳnh Thị | Hoa | Nữ | 06/04/61 | 01004 | 07 | 01/01/97 |
10003 | 1000156 | Huỳnh Ngọc | Thúy | Nữ | 28/10/54 | 01005 | 06 | 01/09/97 |
10003 | 1000134 | Nguyễn Văn | Bạc | Nam | 08/09/42 | 01010 | 13 | 01/12/97 |
10003 | 1000159 | Lâ Văn | Sang | Nam | 15/06/50 | 01008 | 11 | 01/03/96 |
10003 | 1000160 | Trịnh Ngọc | Tâm | Nam | 18/11/66 | 01010 | 08 | 01/02/96 |
10022 | 1000218 | Nguyễn Cửu | Châu | Nam | 19/11/47 | 01010 | 11 | 01/10/96 |
10022 | 1000219 | Nguyễn Văn | Hùng | Nam | 15/05/55 | 01003 | 05 | 01/12/95 |
10022 | 1000220 | Nguyễn Kim | Lưu | Nữ | 22/07/55 | 01004 | 12 | 01/12/95 |
(Các quan hệ 4 và 5 đã được nêu trong các ví dụ 4.2.3 và 4.2.5 trong Chương IV, mục 4.2, bài 5).
Phép kết nối tự nhiên 2 quan hệ ĐƠN-VI và LOẠI-ĐV là một quan hệ gồm 4 thuộc tính: Mã-ĐV, Tên-đơn-vị, Loại và Tên-loại với các bộ giá trị sau:
Mã-ĐV | Tên-đơn-vị | Loại | Tên-loại-hình |
10002 | Trường Kỹ thuật nghiệp vụ máy tính | 3 | Sự nghiệp hoàn toàn |
10003 | Phòng quản lý hành chánh | 2 | Hành chánh |
10022 | Văn phònh đại diện Thanh niên | 2 | Hành chánh |
10070 | Ban quản lý vốn sinh viên | 5 | Hạch toán độc lập |
10071 | Lực lượng quản lý thị trường | 5 | Hạch toán độc lập |
Ghi chú **: Học viên cần ghi nhận lại các quan hệ trong ví dụ này. Chúng sẽ được dùng lại trong các chương tới.
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ệ quan 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).
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 trên. Tuy nhiên, ngay cả 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ụ 5.4.1.1:
Cho 2 quan hệ R (A, B, C) và S (A, D, E, F) với các bộ giá trị như dưới đây. Kết quả của phép kết nối nội được cho trong bảng phía bên phải.
R | (A | B | C) | S | (A | D | E | F) | R | ![]() |
S | =Q | (A | B | C | A | D | E | F) |
a1 | b1 | c1 | a1 | d1 | e1 | f1 | a1 | b1 | 1 | a1 | d1 | e1 | f1 | ||||||
a2 | b2 | c2 | a2 | d2 | e2 | f2 | a2 | b2 | c2 | a2 | d2 | e2 | f2 | ||||||
a3 | b3 | c3 | a4 | d4 | e4 | f4 | a7 | b7 | c7 | a7 | d7 | e7 | f7 | ||||||
a5 | b5 | c5 | a6 | d6 | e6 | f6 | |||||||||||||
a7 | b7 | c7 | a7 | d7 | e7 | f7 |
Ví dụ 5.4.1.2 :
Phép kết nối nội 2 quan hệ ĐƠN-VỊ và LOẠI-ĐV cho kết quả là một bảng sau:
Mã-ĐV | Tên-đơn-vị | Loại | Loại | Tên-loại-hình |
10002 | Trường K.thuật nghiệp vụ máy tính | 3 | 3 | SN hoàn toàn |
10003 | Phòng quản lý hành chánh | 2 | 2 | Hành chánh |
10022 | Văn phònh đại diện Thanh niên | 2 | 2 | Hành chánh |
10070 | Ban quản lý vốn sinh viên | 5 | 5 | Hạch toán đ.lập |
10071 | Lực lượng quản lý thị trường | 5 | 5 | Hạch toán đ.lập |
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.
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 q u.B) hoặc (t Ỵ R, u = uNULL với t.A S[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ụ 5.4.2.1:
Với hai quan hệ R và S cùng các bộ giá trị của chúng đã được cho trong ví dụ 5.4.1, kết quả của phép kết nối trái của R và S là:
R S = Q (A, B, C, A, D, E, F)
a1 b1 1 a1 d1 e1 f1
a2 b2 c2 a2 d2 e2 f2
a3 b3 c3 - - - -
a5 b5 c5 - - - -
a7 b7 c7 a7 d7 e7 f7
Ký hiệu dấu trừ (-) trong các thuộc tính của S được hiểu là giá trị không xác định (giá trị Null).
Các dòng có giá trị thuộc tính A của R là a3 và a5 không tìm được giá trị của thuộc tính A tương ứng trong quan hệ S, nên phần còn lại của nó được để là không xác định. Qua bảng kết quả trình bày trên, chúng ta thấy ý nghĩa của phép toán này là nhằm xác định các bộ giá trị của quan hệ bên trái nhưng không có bộ giá trị tương ứng trong quan hệ phía bên phải.
Ví dụ 5.4.2.2 :
Giả sử chúng ta thêm một bộ mới cho bảng ĐƠN-VỊ gồm có Mã-ĐV là 10090, Tên-đơn-vị là Hội khuyến nông Quận X và loại hình đơn vị là 7. Khi đó phép kết nối trái (Left Join) hai quan hệ ĐƠN-VỊ và LOẠI-ĐV cho kết quả là quan hệ có thể hiện như sau:
Mã-ĐV | Tên-đơn-vị | Loại | Loại | Tên-loại-hình |
10002 | Trường K.thuật nghiệp vụ máy tính | 3 | 3 | SN hoàn toàn |
10003 | Phòng quản lý hành chánh | 2 | 2 | Hành chánh |
10022 | Văn phònh đại diện Thanh niên | 2 | 2 | Hành chánh |
10070 | Ban quản lý vốn sinh viên | 5 | 5 | Hạch toán đ.lập |
10071 | Lực lượng quản lý thị trường | 5 | 5 | Hạch toán đ.lập |
10090 | Hội khuyến nông Quận X | 7 | Null | Null |
Bởi vì trong quan hệ LOẠI-ĐV không có bộ nào có giá trị ở cột Loại là 7, do đó ở dòng cuối cùng của quan hệ trên, một bộ gồm toàn giá trị NULL ở cả hai cột Loại và Tên-loại-hình được đặt cạnh bộ giá trị mới được bổ sung trong thể hiện của quan hệ ĐƠN-VỊ.
Ứng dụng của phép kết nối này có thể thấy rõ trong bài toán quản lý CBVC nêu trên: Trước hết cần xác định những đơn vị có loại hình tổ chức không có trong danh mục Loại-ĐV. Câu trả lời rất đơn giản: chỉ việc chọn ra các dòng của bảng kết nối có giá trị NULL ở cột Loại trong phần đuôi của bộ giá trị là NULL.
Cũng trong bài toán quản lý CBVC nêu trên: Theo yêu cầu quản lý, mỗi CBVC có tên trong danh sách của đơn vị phải có một bản khai lý lịch, tức là một bộ giá trị về lý lịch chi tiết. Mỗi CBVC có một mã số CBVC để phân biệt và nhận dạng đồng thời khóa của quan hệ lý lịch cũng là mã số này. Có thể ứng dụng phép kết nối trái để xác định những CBVC nào có tên trong danh sách mà chưa có lý lịch trong CSDL.
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.
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 q u.B) hoặc (t = tNULL , u Ỵ S, với t.B R[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ụ 5.4.3.1:
Giả sử với các quan hệ R và S cùng các bộ giá trị của chúng được xác định như trong ví dụ 5.4.2 nêu trên. Kết quả của phép kết nối phải R với S là quan hệ với các bộ giá trị sau:
R S = Q (A, B, C, A, D, E, F)
a1 b1 1 a1 d1 e1 f1
a2 b2 c2 a2 d2 e2 f2
- - - a4 d4 e4 f4
- - - a6 d6 e6 f6
a7 b7 c7 a7 d7 e7 f7
Ký hiệu dấu trừ (-) trong các thuộc tính của R được hiểu là giá trị không xác định (giá trị Null).
Các dòng có giá trị tại thuộc tính A của S là a4 và a6 không tìm được giá trị của thuộc tính A tương ứng trong quan hệ R, do đó phần đầu của nó được để là không xác định. Qua bảng kết quả trình bày trên, chúng ta thấy ý nghĩa của phép toán này là nhằm xác định các bộ giá trị của quan hệ bên phải không có bộ giá trị tương ứng trong quan hệ phía bên trái.
Ví dụ 5.4.3.2 :
Giả sử chúng ta thêm một bộ mới cho quan hệ LOẠI_ĐV gồm có mã Loại là 6, Tên-loại-hình là Cơ quan Đảng / Đoàn. Khi đó phép kết nối phải (Right Join) hai quan hệ ĐƠN-VỊ và LOẠI-ĐV cho kết quả là quan hệ có thể hiện như sau:
Mã-ĐV | Tên-đơn-vị | Loại | Loại | Tên-loại-hình |
10002 | Trường K.thuật nghiệp vụ máy tính | 3 | 3 | SN hoàn toàn |
10003 | Phòng quản lý hành chánh | 2 | 2 | Hành chánh |
10022 | Văn phònh đại diện Thanh niên | 2 | 2 | Hành chánh |
10070 | Ban quản lý vốn sinh viên | 5 | 5 | Hạch toán đ.lập |
10071 | Lực lượng quản lý thị trường | 5 | 5 | Hạch toán đ.lập |
10090 | Hội khuyến nông Quận X | 7 | Null | Null |
Null | Null | Null | 6 | Cơ quan Đảng |
Vì không có đơn vị nào có loại hình tổ chức đơn vị là 6, nên ở dòng cuối cùng trong bảng trên, cả 3 cột thuộc phần của quan hệ ĐƠN-VỊ đã bị để trống bằng các giá trị Null không xác định.
Một ứng dụng của phép kết nối này là: xác định những CBVC nào có lý lịch trong CSDL (do nhập sai mã số CBVC) nhưng không có tên trong danh sách (tức là các lý lịch vô chủ). Hoặc: xác định các loại hình đơn vị (Loại) mà không có đơn vị nào thuộc vào.
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.