You are on page 1of 18

Chương 3

ĐẠI SỐ QUAN HỆ

I. GIỚI THIỆU
Trong chương này và chương tiếp theo, ta sẽ đề cập đến các cách tiếp cận với
thiết kế ngôn ngữ để hỏi trên các quan hệ. Khái niệm về trình bày câu hỏi thường là phần
quan trọng nhất của DML. Ngôn ngữ sử dụng dữ liệu (DML) trên mô hình quan hệ
thường được gọi tắt là "ngôn ngữ hỏi" (query language). Trong trường hợp tổng quát
nhất, các câu hỏi thường dùng một ngôn ngữ phong phú, cao cấp để diễn đạt. Phần không
dính líu hỏi đáp của ngôn ngữ hỏi thì liên quan đến phép thêm, xóa và sửa các bộ.
Ngôn ngữ hỏi chia làm 2 loại chính:
- Ngôn ngữ đại số (algebraic languages), trong đó các câu hỏi được biểu diễn
bằng cách áp dụng các toán tử đặc biệt cho các quan hệ.
- Ngôn ngữ tính toán tân từ (predicate calculus languages), trong đó các câu hỏi
mô tả một tập các bộ cần biết bằng cách đặc tả một tân từ (predicate) mà các
bộ phải thỏa mãn.
Các ngôn ngữ hỏi trừu tượng này, tất nhiên khi cài đặt trong các HQTDL hiện tại
không phải giống chính xác như miêu tả ở đây, nhưng chúng được dùng như một thước
đo để đánh giá các hệ đó, vì chúng trưng ra một khả năng tối thiểu phải có ở bất kỳ một
ngôn gnuwc hỏi nào được chấp nhận trên mô hình quan hệ.
Trong chương 3 này, ta sẽ nói đến đại số quan hệ (relational algebra), phần nền
cho loiaj ngôn ngữ đại số.
II. MỘT SỐ KHÁI NIỆM
1. Đại số hệ
a. Định nghĩa
Đại số hệ là một cặp <M, F>, trong đó M là một tập được gọi là tập nền, F là một
tập các phép toán trên M.
Mỗi phép toán f  F là một ánh xạ bộ phận:
f: Mn  M
và được gọi là phép toán n ngôi.
b. Ví dụ
Với F={+, -, *},  = <N, F> tạo thành một đại số hệ.
2. Đại số quan hệ
Tập hợp các phép toán quan hệ đã xét, cùng với một CSDL cho trước, tạo thành
một đại số hệ, gọi là đại số quan hệ.
3. Biểu thức quan hệ
a. Định nghĩa
Biểu thức quan hệ được xây dựng từ các quan hệ trong một CSDL cho trước và
các phép toán quan hệ.
b. Thứ tự ưu tiên trong biểu thức quan hệ
Thông thường, trong một biểu thức quan hệ, người ta coi các phép toán một ngôi
có thứ tự ưu tiên cao hơn các phép toán hai ngôi. Ngoài ra, mỗi HQTDLcuj thể lại có
những qui định riêng. Ví dụ, phép giao có thể được qui định có thứ tự ưu tiên cao hơn
phép hội.
Ví dụ:
Tìm mã và tên các mặt hàng được nhập và xuất trong ngày 24/12/1997:
MA_HANG, TEN_HG ( DVT=”cái” (HANG)) *
(MA_HANG ( NGAY=”24/12/1997” (HANG_NHAP) )
MA_HANG ( NGAY=”24/12/1997” (HANG_XUAT)))
III. CÁC PHÉP TOÁN CƠ BẢN
Trong đại số quan hệ, ta giả thiết các cột có thể không cần đặt tên, và quan tâm
đến thứ tự các thuộc tính. Nếu dùng số thứ tự thuộc tính trong các biểu thức so sánh, để
tránh nhầm lẫn, ta qui ước có dấu $ đứng trước số thứ tự.
Ta cũng đã giả định mọi quan hệ đều hữu hạn. Ràng buộc về tính hữu hạn dẫn đến
vài khó khăn trong đại số quan hệ và phép tính quan hệ. Chẳng hạn, không thể chấp nhận
phép toán bù (complementation) vì –R (tập các bộ không thuộc R) sẽ sinh ra một quan hệ
vô hạn: không cách chi liệt kê được hết –R, cho dù ngôn ngữ hỏi cho phép có một biểu
thức như vậy.
1. Phép chọn
(select operator, selection/ seïlection, restriction)
a. Mục đích
Phép chọn là phép tính để xây dựng một tập con gồm các bộ của quan hệ đã cho,
thỏa biểu thức logic cho trước.
b. Giả thiết
- Cho quan hệ R trên tập thuộc tính U- ký hiệu R(U).
- Cho biểu thức logic F phát biểu trên U, gồm có:
i) Các tác tố (operands): là các hằng, tên hoặc các số thứ tự thuộc tính
ii) Các phép so sánh số học: <, , >, , =, 
iii) Các phép logic:  (hoặc),  (và),  (không).
Nói cách khác, F là một tổ hợp gồm các phép so sánh các tác tố, nối nhau bằng các
phép logic. F sẽ cho kết quả “đúng” hoặc “sai” tùy vào giá trị cụ thể của từng bộ. Ta nói
bộ t thỏa mãn F- ký hiệu F(t) – nếu thay hết mọi thuộc tính trong F bằng các giá trị cụ thể
tương ứng của bộ t thì F sinh ra kết quả đúng. F được gọi là biểu thức chọn hoặc điều
kiện chọn.
c. Định nghĩa
Phép chọn quan hệ R theo điều kiện F cho ta quan hệ P:
P= R(F) = { t R | F(t) }
Ta cũng có thể dùng ký hiệu F(R) thay vì R(F).
a. Ví dụ
Cho quan hệ:

MON_HOC MA_MON TEN_MON SO_TIN_CHI CO_DE_AN


01 Cơ sở dữ liệu 5 .f.
02 Cấu trúc dữ liệu 4 .f.
03 Phân tích hệ thống 6 .f.
04 Cấu trúc máy tính 4 .t.

Chọn ra các môn có 4 tín chỉ và có đề án cho sinh viên thực hiện.
MON_D_A= MON_HOC (SO_ TIN_CHI =4  CO_DE_AN)
Hoặc có thể viết:
MON_D_A= $3=4  $4(MON_HOC)

MON_D_A MA_MON TEN_MON SO_TIN_CH CO_DE_AN


I
04 Cấu trúc máy tính 4 .t.

2. Phép chiếu (projection)


a. Mục đích
Phép chiếu trên một quan hệ, thực chất là loại bỏ đi một số thuộc tính của quan hệ
đó.
b. Giả thiết
Cho quan hệ R(U) n ngôi:
R=(A1, A2, ..., An) Ai  U
và tập thuộc tính X  U:
X={ A ij } j=1,..,m ij=1,..., n

c. Định nghĩa
Phép chiếu quan hệ R trên X là tập hợp:
R[X]={ t[X] | t  R }
Hoặc:
R[X]= { b1b2...bm | ( a1a2...an) (j=1...m) bj= a ij }
Cũng có thể dùng ký hiệu R.X hoặc i1, i2,...im (R) thay cho R[X].
d. Ví dụ
Dùng quan hệ trong ví dụ trên, cho biết mã và tên các môn học:
MON_HOC_2= MON_HOC [MA_MON, TEN_MON]
=  $1, $2(MON_HOC)
MON_HOC_2 MA_MON TEN_MON
01 Cơ sở dữ liệu
02 Cấu trúc dữ liệu
03 Phân tích hệ thống
04 Cấu trúc máy tính

3. Quan hệ tương thích (compatible relations)


a. Định nghĩa
Hai quan hệ được gọi là tương thích với nhau nếu chungs có cùng sơ đồ quan hệ.
b. Ví dụ
Hai quan hẹ MON_HOC và MON_D_A ở mục 1 là hai quan hệ tương thích.
c. Ứng dụng
Với các quan hệ tương thích, ta có thể định nghĩa các phép toán tập hợp như giao,
hiệu và hợp.
4. Phép trừ (substraction, [set] difference)
a. Định nghĩa
Hiệu của hai quan hệ tương thích R(U) và S(U) là quan hệ P(U) gồm các bộ có
trong R nhưng không có trong S.
P= R  S= { t | t R  t S }
b. Ví dụ

NHAN_ MA_NV HO_TEN CHUC_VU DON_VI MUC_LG


VIEN
001 Lê Văn Sỹ GĐ BGĐ 550
002 Ng Chí Thanh PGĐ BGĐ 500
003 Châu Văn Liêm TP HCTH 480
004 Ng An Ninh PP HCTH 475
005 Phan Đình Phùng HCTH 333
006 Ngô Gia Tự TV 290

LANH_ MA_NV HO_TEN CHUC_V DON_VI MUC_LG


DAO U
001 Lê Văn Sỹ GĐ BGĐ 550
002 Ng Chí Thanh PGĐ BGĐ 500
003 Châu Văn Liêm TP HCTH 480
004 Ng An Ninh PP HCTH 475
NHAN_VIEN là quan hệ chứa các bộ về tất các nhân viên trong cơ quan, còn
LANH_DAO chỉ liên quan những lãnh đạo. Tìm các nhân viên quèn (không là lãnh đạo)
trong cơ quan.
NV_QUEN= NHAN_VIEN  LANH_DAO

NHAN_VIEN MA_ HO_TEN CHUC_ DON_VI MUC_LG


_QUEN NV VU
005 Phan Đình Phùng HCTH 333
006 Ngô Gia Tự TV 290

5. Phép hội/ hợp (union)


a. Định nghĩa
Hợp của hai quan hệ tương thích R(U) và S(U) là quan hệ P(U) gồm các bộ thuộc
ít nhất một trong hai quan hệ đã cho.
P= R U S= { t | t R  t S }
c. Ví dụ
Trong cơ quan, có hai loại nhân viên: biên chế và hợp đồng.

BIEN_ MA_NV HO_TEN CHUC_VU DON_VI MUC_


CHE LG
001 Lê Văn Sỹ GĐ BGĐ 550
002 Ng Chí Thanh PGĐ BGĐ 500
003 Châu Văn Liêm TP HCTH 480
004 Ng An Ninh PP HCTH 475
005 Phan Đình Phùng HCTH 333
006 Ngô Gia Tự TV 290

HOP_ MA_NV HO_TEN CHUC_VU DON_VI MUC_


DONG LG
011 Lê Văn Tám BV 290
012 Phạm Văn Đồng BV 255
013 Ng Văn Linh ĐTTH 310
014 Kim Đồng ĐTTH 310

Danh sách chung toàn bộ nhân viên của cơ quan là:


NHAN_VIEN= BIEN_CHE  HOP_DONG

NHAN_VIEN MA_NV HO_TEN CHUC_VU DON_VI MUC_LG


001 Lê Văn Sỹ GĐ BGĐ 550
002 Ng Chí Thanh PGĐ BGĐ 500
003 Châu Văn Liêm TP HCTH 480
004 Ng An Ninh PP HCTH 475
005 Phan Đình HCTH 333
Phùng
006 Ngô Gia Tự TV 290
011 Lê Văn Tám BV 290
012 Phạm Văn Đồng BV 255
013 Ng Văn Linh ĐTTH 310
014 Kim Đồng ĐTTH 310

6. Phép lấy tích Đề- các (Cartesian product/ produit cartésien)


a. Giả thiết
Cho quan hệ R(U) n ngôi có r bộ :
R=(A1, A2, ..., An) Ai  U
Và quan hệ S(V) m ngôi có s bộ:
S=(B1, B2, ..., Bm) Bj  V
Trong đó, U và V không giao nhau:
UV=
b. Định nghĩa
Tích Đề-các của R và S là tập gồm (r.s) bộ, mỗi bộ có (n+m) thuộc tính, với n
thuộc tính đầu có dạng của một u R và m thuộc tính sau có dạng của một bộ vS.
Nói cách khác, mỗi bộ của R kết nối với mọi bộ của S.
R x S= { <u,v> | u R  v S }
c. Ví dụ

DM_HANG MA_HANG TEN_HANG DVT


A01 Dầu lửa lít
A02 Xăng lít
B01 Đường trắng kg
B02 Đường vàng kg

NV_BAN NGAY MA_NV


20/09/1994 013
21/09/1994 014
DM= NV_BAN x DM_HANG

DM NGAY MA_NV MA_HANG TEN_HANG DVT


20/09/1994 013 A01 Dầu lửa lít
20/09/1994 013 A02 Xăng lít
20/09/1994 013 B01 Đường trắng kg
20/09/1994 013 B02 Đường vàng kg
21/09/1994 014 A01 Dầu lửa lít
21/09/1994 014 A02 Xăng lít
21/09/1994 014 B01 Đường trắng kg
21/09/1994 014 B02 Đường vàng kg
7. Phép đặt tên lại biểu thức quan hệ
a. Nhu cầu đặt tên lại
 Kết quả của các biểu thức quan hệ không có tên để ta có thể gọi đến chúng dễ
dàng. Do đó, cần phải đặt tên cho chúng.
 Ta có thể sử dụng nhiều lần cùng một quan hệ trong một bieerut hwusc quan
hệ (ví dụ: tích Đề-các R x R), neenc ó thể muốn đặt tên lại một trong các tác tố
cùng tên để dễ dùng ở nhiều công đoạn khác nhau, hoặc để tránh lẫn lộn, hoặc
để tránh lưu nó tỏng nhiều vùng nhớ khác nhau, mặc dù chỉ dùng một vùng lưu
trữ cho quan hệ.
 Cần gán quan hệ kết quả trở lại vào quan hệ ban đầu. Ví dụ: P= P-1.
 Khi muốn thực hiện một trong các phép toán kết nối, phép chia, phép giao,
phép hiệu, trong khi các thuộc tính liên quan ở các quan hệ lại khác tên nhau
tuy cùng miền giá trị, ta có thể đổi tên thuộc tính cho một trong các quan hệ để
có thể thực hiện được phép toán như ý muốn.
Ví dụ
R(A,C) muốn kết nối với S(B), hoặc chia cho S(B), thì ta phải đổi tên thuộc tính
theo một trong hai cách sau:
R (A, C| B)
Hoặc S (B| C)
b. Định nghĩa
Dạng 1:
Cho biểu thức quan hệ E, biểu thức:
x (E)
trả lại kết quả là biểu thức E dưới tên x.
Dạng 2:
Cho biểu thức quan hệ E có bậc n. Biểu thức:

x (A1, A2, ..., An) (E)


trả lại kết quả là biểu thức E dưới tên x, và các thuộc tính được đặt tên lại là A1, A2, ...,
An.
c. Ví dụ
Cho sơ đồ quan hệ:
NHAN_VIEN (MA_NV, HO_NV, TEN_NV, MUC_LG, PHONG, DON_VI)
 Tìm mức lương lớn nhất trong công ty.
Như vậy, trước tiên, ta sẽ tìm ra một quan hệ tạm thời chứa các mức lương không
phải là lớn nhất trong công ty, rồi sau đó sẽ thực hiện phép toán trừ giữa  MUC_LG
(NHAN_VIEN) và quan hệ tạm vừa tính được.
Quan hệ tạm:
MUC_LG
(NHAN_VIEN.MUC_LG<d.MUC_LG(NHAN_VIENx d (NHAN_VIEN)))
Kết quả:
 MUC_LG (NHAN_VIEN) -
MUC_LG
(NHAN_VIEN.MUC_LG<d.MUC_LG(NHAN_VIENx d (NHAN_VIEN)))
III. CÁC PHÉP TOÁN KHÁC
1. Phép giao (intersection)
a. Định nghĩa
Giao của hai quan hệ tương thích R(U) và S(U) là quan hệ P(U) gồm các bộ thuộc
về cả hai quan hệ đã cho:
P= R  S= { t | t R  t S }
b. Ví dụ

NHA_ TEN DIA_CHI PHUONG QUAN


HANG
Huy Hoàng 504 Điện biên phủ 14 10
Tương Lai 229 Ng Chí Thanh 6 5
Ngon 25 Võ Thị Sáu 9 10
Lành 130 Trương Định Phạm Ngũ Lão 1

KHACH_ TEN DIA_CHI PHUONG QUAN


SAN
Viễn Đông 2 Lê Lợi Bến Nghé 1
Huy Hoàng 504 Điện biên phủ 14 10
Ánh Hồng 151 Đặng Dung 2 PN
Tương Lai 229 Ng Chí Thanh 6 5

Tìm các nơi vừa là khách sạn, vừa là nhà hàng.


NH_KS= KHACH_SAN  NHA_HANG

NH_KS TEN ÂIA_CHI PHUONG QUAN


Huy Hoàng 504 Điện biên phủ 14 10
Tương Lai 229 Ng Chí Thanh 6 5

2. Phép chia (division)


a. Giả thiết
Cho hai quan hệ R(U) n ngôi và S(V) m ngôi, với VU và S.
Đặt X=U-V.
b. Định nghĩa
Kết quả của phép chia quan hệ R cho S là một quan hệ gồm các bộ t có (n-m)
thuộc tính, sao cho với mọi bộ v trong S, thì <t,v> là một bộ thuộc R.
R  S= { t=u[X] | u  R  (vS) (<t,v> R ) }
c. Ví dụ
c1) Cho quan hệ:

DM NGAY MA_NV MA_HANG TEN_HANG DVT


x 20/09/1994 013 A01 Dầu lửa lít
20/09/1994 013 A02 Xăng lít
20/09/1994 013 B01 Đường trắng kg
20/09/1994 013 B02 Đường vàng kg
x 21/09/1994 014 A01 Dầu lửa lít
21/09/1994 014 A02 Xăng lít
21/09/1994 014 B01 Đường trắng kg
21/09/1994 014 B02 Đường vàng kg
22/09/1994 015 B01 Đường trắng kg
22/09/1994 015 B02 Đường vàng kg

HANG MA_HANG TEN_HANG DVT


A01 Dầu lửa lít
A02 Xăng lít
B01 Đường trắng kg
B02 Đường vàng kg

Tçm DM  HANG

DM  HANG NGAY MA_NV


20/09/1994 013
21/09/1994 014
c2) Cho quan hệ:

CHUYEN MA_CH NGAY NOI_DI NOI_DEN SO_XE MA_TXE SO_HK


01 01/08 TP HCM Đà Lạt 51 5025A A1 50
02 01/08 TP HCM Phan Rang 50 3421H B2 18
03 01/08 TP HCM Cần Thơ 65 1074A A3 52
04 02/08 Cần Thơ TP HCM 65 1074A A3 56
05 03/08 Phan Rang Vĩnh long 49 9836B I1 30
06 04/08 Đà Lạt TP HCM 51 5025A A1 48
07 04/08 Đà Lạt Cần Thơ 54 7690B I1 48
08 05/08 Vĩnh long TP HCM 64 0342C I1 15

* Câu hỏi:
Tìm mã các tài xế có nơi đến ít ra là như tài xế có mã A3.
* Giải:
Danh sách nơi đến của tài xế A3:
DS_ND= CHUYEN (MA_TXE='A3') [NOI_DEN]

DS_ND NOI_DEN
Cần Thơ
TP HCM

- Danh sách các nơi đến kèm theo các tài xế:
TX_ND= CHUYEN [ NOI_DEN, MA_TXE ]

TX_ND NOI_DEN MA_TXE


Đà Lạt A1
Phan Rang B2
Cần Thơ A3
TP HCM A3
Vĩnh long I1
TP HCM A1
Cần Thơ I1
TP HCM I1

- Danh sách mã các tài xế có nơi đến ít ra là như tài xế có mã A3:


DS_TX= TX_ND  DS_ND

DS_TX MA_TXE
A3
I1
Ta thấy ngoài tài xế A3 có nơi đến là Cần Thơ và TP HCM, còn có tài xế I1 lái xe
đến 3 nơi Vĩnh long, Cần Thơ và TP HCM (rộng hơn của A3).
3. Phép kết nối bình thường (join, inner join)
a. Định nghĩa
Gọi  là một trong các phép so sánh số học (<, , >, , =, ). Cho hai quan hệ
R(U) và S(V). Phép kết nối- giữa quan hệ R đối với thuộc tính A (AU) và quan hệ S
đối với thuộc tính B (BV), được định nghĩa như sau:
R S = { <u,v> | u  R  vS  u[A]  v[B] }
AB
Phép kết nối này chỉ thực hiện được khi  thực hiện được giữa A và B.
Nếu không dựa trên phép so sánh , thì R S trở thành tích Đề-các của R và S.
Nếu  là phép so sánh "=", ta gọi đây là phép kết nối bằng (equijoin).
Phép kết nối là phương tiện chủ yếu cho sự thông thương giữa các quan hệ.
b. Ví dụ
Cho hai quan hệ:

GIAO_VIEN MA_GV HO_TEN SO_TIET_DA_DAY


01 Phạm Thúc Trung 200
02 Phạm Gia Tiến 150
03 Phạm Xuân Lạc 280
04 Võ Văn Chín 260

MON_HOC MA_MON TEN_MON SO_DVHT CO_DE_AN


07 Cơ sở dữ liệu 5 .F.
08 Cấu trúc dữ liệu 4 .F.
09 Phân tích hệ thống 6 .T.
10 Cấu trúc máy tính 4 .T.

* Câu hỏi:
Biết rằng mỗi đơn vị học trình chiếm 15 tiết. Hãy lập bảng dự kiến phân công
giảng dạy thêm các môn trong danh sách đã cho, sao cho nếu các giáo viên có dạy thêm
thì cũng không vượt quá số giờ chuẩn (280 tiết).
* Giải:
- Trước tiên, ta nhận xét bảng phân công chỉ cần mã giáo viên, số giờ đã dạy, mã
môn học và số đơn vị học trình. Như vậy, nó sẽ là kết quả của phép kết nối giữa hai quan
hệ có sơ đồ sau:
GIAO_VIEN_2 (MA_GV, SO_TIET_DA_DAY)
MON_HOC_2 (MA_MON, SO_DVHT)
Với điều kiện kết nối là :
SO_TIET_DA_DAY + SO_DVHT * 15<= 280
hay:
SO_TIET_DA_DAY <= 280 - SO_DVHT * 15
- Như vậy, ta phải thwujc hiện các phép chiếu trên GIAO_VIEN vaì MON_HOC,
vì:
GIAO_VIEN_2 = GIAO_VIEN [ MA_GV, SO_TIET_ÂA_DAY ]
MON_HOC_2 = MON_HOC [ MA_MON, SO_DVHT ]

GIAO_VIEN_2 MA_GV SO_TIET_ÂA_DAY


01 200
02 150
03 280
04 260

MON_HOC_2 MA_MON SO_DVHT


07 5
08 4
09 6
10 4

- Sau đó, sẽ thực hiện phép kết nối:


PH_CONG_DAY= GIAO_VIEN_2 MON_HOC_2
SO_TIET_DA_DAY <= 280 - SO_DVHT *15

PH_CONG_DAY MA_GV SO_TIET_DA_DAY MA_MON SO_DVHT


01 200 07 5
01 200 08 4
01 200 10 4
02 150 07 5
02 150 08 4
02 150 09 6
02 150 10 4

4. Phép kết nối tự nhiên (natural join)


a. Định nghĩa
Trường hợp kết nối bằng được thực hiện tại thuộc tính cùng tên của hai quan hệ,
và một trong hai thuộc tính đó bị loại bỏ qua phép chiếu, thì phép kết nối được gọi là
phép kết nối tự nhiên, và sử dụng ký hiệu "*".
b. Ví dụ
Đã có một lịch thi và bảng phân công chính thức, hãy phân công dự kiến cho các
giáo viên gác môn mình sắp dạy hoặc đã dạy.
LICH_THI MA_MON NGAY PHONG
01 12/07/1994 B
02 14/07/1994 B
03 16/07/1994 B
04 17/07/1994 C
05 12/07/1994 C
06 14/07/1994 C
07 16/07/1994 D
08 17/07/1994 E
09 12/07/1994 D
10 14/07/1994 E

PH_CONG_CT MA_GV MA_MON


01 01
01 07
01 08
02 03
02 09
02 10
03 04
03 05
04 02
04 06

Ta thực hiện một phép kết nối tự nhiên như sau:


PH_CONG_GAC= LICH_THI * PH_CONG_CT

PH_CONG_GAC MA_MON NGAY PHONG MA_GV


01 12/07/1994 B 01
02 14/07/1994 B 04
03 16/07/1994 B 02
04 17/07/1994 C 03
05 12/07/1994 C 03
06 14/07/1994 C 04
07 16/07/1994 D 01
08 17/07/1994 E 01
09 12/07/1994 D 02
10 14/07/1994 E 02

5. Phép kết nối mở rộng (outer join)


a. Định nghĩa
Phép toán này cho phép làm việc với thông tin bị thiếu, tức là vẫn thực hiện phép
kết nối tự nhiên trên các thuộc tính trống của thuộc tính dùng để kết nối. Như vậy sẽ
tránh làm mất thông tin như trong trường hợp kết nối bình thường.
Có 3 loại kết nối mở rộng: mở rộng trái, mở rộng phải và mở rộng toàn bộ.

Loại Ký hiệu Định nghĩa


Mở rộng trái Kết quả = P  ( R S ), với:
R S
(left outer P = {<u, v> | uR, u không tương ứng với bộ nào của S
join) & vS, các trị của các thuộc tính trong v đều được gán
trị trống }
Mở rộng Kết quả = Q  ( R S ), với:
phải R S Q = {<u, v> | vS, v không tương ứng với bộ nào của R
(right outer & uR, các trị của các thuộc tính trong u đều được gán
join ) trị trống }
Mở rộng Kết quả = P  Q  ( R S)
toàn bộ (full Với P và Q được định nghĩa như trên.
outer join)

a. Ví dụ
Cho hai quan hệ:

NHAN_VIEN MA_NV HO_NV TEN_NV PHAI PHONG


A12 Lê Trình Nam H.chánh
A13 Phan Đán Nam K.nghiệm
A14 Trần Mai Nữ K.nghiệm
A15 Nguyễn Minh Nam Thiết bị

VO_CHG_NV MA_NV HO_NV TEN_NV


A16 Tống Đào
A13 Lê Lan Anh
A14 Phạm Tuấn
A17 Lê Trang

Gọi:
TAM NHAN_VIEN VO_CHG_NV
=
NHAN_VIEN VO_CHG_NV
TRAI =
NHAN_VIEN VO_CHG_NV
PHAI =
NHAN_VIEN VO_CHG_NV
HAI_BEN =

TAM MA_NV HO_NV TEN_NV PHAI PHONG HO_VC TEN_VC


A13 Phan Đán Nam K.nghiệm Lê Lan Anh
A14 Trần Mai Nữ K.nghiệm Phạm Tuấn

TRAI MA_NV HO_NV TEN_NV PHAI PHONG HO_VC TEN_VC


A12 Lê Trình Nam H.chánh
A13 Phan Đán Nam K.nghiệm Lê Lan Anh
A14 Trần Mai Nữ K.nghiệm Phạm Tuấn
A15 Nguyễn Minh Nam Thiết bị

PHAI MA_NV HO_NV TEN_NV PHAI PHONG HO_VC TEN_VC


A16 Tống Đào
A13 Phan Đán Nam K.nghiệm Lê Lan Anh
A14 Trần Mai Nữ K.nghiệm Phạm Tuấn
A17 Lê Trang

HAI_ MA_NV HO_NV TEN_NV PHAI PHONG HO_VC TEN_VC


BEN
A12 Lê Trình Nam H.chánh
A13 Phan Đán Nam K.nghiệm Lê Lan Anh
A14 Trần Mai Nữ K.nghiệm Phạm Tuấn
A15 Nguyễn Minh Nam Thiết bị
A16 Tống Đào
A17 Lê Trang

6. Các hàm kết tập (aggregate functions)


a. Các hàm kết tập bình thường
Định nghĩa:
Các hàm kết tập bình thường là các hàm thực hiện trên một tập các giá trị và trả lại
kết quả là giá trị duy nhất. Tập hợp được xét có thể có nhiều lần xuất hiện cho một giá trị
và được gọi là tập bội (multiset); hoặc nó cũng có thể chỉ có một lần xuất hiện cho một
giá trị, đó là tập hợp ta thường gặp (set).
Nếu xét trên tập bội, nhưng ta muốn loại trừ các trị trùng nhau, thì phải thêm từ
khóa distinct vào sau tên hàm và dấu gạch ngang.
Danh sách hàm:

Tên hàm Ý nghĩa


sum Tính tổng của một tập giá trị số
avg Tính trung bình của một tập giá trị số
count Đếm số giá trị của một tập hợp
max Tính giá trị lớn nhất của một tập giá trị
min Tính giá trị nhỏ nhất của một tập giá trị

Ví dụ:
Dùng quan hệ GIAO_VIEN mà ta đã biết:

GIAO_VIEN MA_GV HO_TEN SO_TIET_DA_DAY


01 Phạm Thúc Trung 200
02 Phạm Gia Tiến 150
03 Phạm Xuân Lạc 280
04 Võ Văn Chín 260

Câu hỏi Hàm Kết quả


Tổng số tiết các giáo viên đã dạy sum SO_TIET_DA_DAY (GIAO_VIEN) 890
Trung bình số tiết đã dạy/ giáo viên avg SO_TIET_DA_DAY (GIAO_VIEN) 222.5
Tổng số giáo viên đã dạy count (GIAO_VIEN) 4
Số tiết đã dạy nhiều nhất / giáo viên max SO_TIET_DA_DAY (GIAO_VIEN) 280
Số tiết đã dạy ít nhất / giáo viên min SO_TIET_DA_DAY (GIAO_VIEN) 150

Ví dụ:

LICH_THI MA_MON NGAY SO_TS PHONG


01 12/07/1994 25 B
02 14/07/1994 30 B
03 16/07/1994 50 B
04 17/07/1994 40 C
05 12/07/1994 20 C
06 14/07/1994 15 C
07 16/07/1994 65 D
08 17/07/1994 50 E
09 12/07/1994 35 D
10 14/07/1994 40 E

Câu hỏi Hàm Kết quả


Số môn có trong lịch thi count (LËCH_THI) 10
Số phòng được xếp cho thi count-distinct PHONG (LËCH_THI) 4
Tổng số thí sinh đi thi sum SÄO_TS (LËCH_THI) 370
Ngày thi trễ nhất max-distinct NGAY(LËCH_THI) 17/07/1994
Ngày thi sớm nhất min-distinct NGAY (LËCH_THI) 12/07/1994
b. Hàm kết tập trên nhóm các bộ
Nhu cầu:
Có những trường hợp ta muốn áp dụng hàm kết tập không phải chỉ trong một tập
các bộ thôi, mà trên nhiều nhóm, mỗi nhóm là một tập các bộ.
Định nghĩa:
Gọi E là một biểu thức đại số quan hệ bất kỳ. G1, G2, ..., Gm tạo thành danh sách
các thuộc tính mà việc chia nhóm dựa trên đó. Với mỗi i=1, ..., n, mỗi Fi là một hàm kết
tập và mỗi Ai là một tên thuộc tính.
Hàm kết tập trên nhóm có dạng:
G1, G2, ..., Gm Ģ F1 A1, F2A2, ..., FnAn (E)
Các bộ trong biểu thức E sẽ được chia thành các nhóm sao cho:
+ Tất cả các bộ trong cùng một nhóm sẽ có cùng giá trị trên G 1, G2, ..., Gm.
+ Các bộ ở các nhóm khác nhau sẽ có trị khác nhau trên G1, G2, ..., Gm.
Như vậy, các nhóm có thể được xác định bằng giá trị của các thuộc tính G1, G2, ...,
Gm.
Đối với mỗi nhóm (g1, g2, ..., gm), kết quả sẽ có một bộ
(g1, g2, ..., gm, a1, a2, ..., an)
Trong đó, với mỗi i, ai là kết quả của việc áp dụng hàm Fi trên tập bội các trị của
Ai trong nhóm.
Ví dụ 1
Dùng quan hệ LICH_THI ở trên.

Câu hỏi Hàm Kết quả

PHÒNG B 3
Số môn có trong PHONG Ģ count PHÒNG C 3
lịch thi/ phòng MA_MON PHÒNG D 2
(LICH_THI) PHÒNG E 2
12/07/1994 80
Tổng số thí sinh đi NGAY Ģ sum SO_TS 14/07/1994 85
thi/ ngày (LICH_THI) 16/07/1994 115
17/07/1994 90
PHÒNG B 16/07/1994
Ngày thi trễ nhất / PHONG Ģ max NGAY PHÒNG C 17/07/1994
phòng (LICH_THI) PHÒNG D 16/07/1994
PHÒNG E 17/07/1994
PHÒNG B 12/07/1994
Ngày thi sớm nhất PHONG G min NGAY PHÒNG C 12/07/1994
/ phòng (LICH_THI) PHÒNG D 12/07/1994
PHÒNG E 14/07/1994

Ví dụ 2
GVIEN (MS_GV, HO, TEN, MA_KHOA, CHUC_VU, HOC_VI, CHUC DANH)
GTRINH (MS_GT, TEN, SO_TC, SO_TRG, TH_DIEM_P_HANH)
VIET_GT (MS_GT, MS_GV, LA_TG_CHINH)
KHOA (MA_KHOA, TEN_KHOA)
1. Tìm số giáo trình mà hiệu trưởng Nguyễn Anh Tuấn đã phát hành từ năm
1998 đến 2008.
2. Tìm ngày phát hành sớm nhất của giáo trình “Mạng máy tính” viết bởi giáo
viên Phan Thượng Cang.
3. Tìm số giáo trình mà mỗi giáo viên ở Khoa Nông nghiệp đã viết.
4. Tìm số trang dày nhất trong số các giáo trình mang tên “Dinh dưỡng cho cá”.
5. Tìm thời điểm phát hành gần nhất trong số các giáo trình viết bởi mỗi giáo
viên.
6. Tìm tổng số tín chỉ mà mỗi giáo viên Khoa Khoa học đã viết giáo trình.
7. Tìm tổng số giáo viên có học vị thạc sĩ hoặc tiến sĩ ở mỗi khoa đã viết giáo
trình trong khoảng thời gian từ năm 2004 đến nay.
8. Tìm trung bình số tín chỉ của các giáo trình viết bởi các giáo viên có chức vụ
Trưởng bộ môn.
9. Tìm tên các giáo trình mà thạc sĩ Lê Văn Lâm đã viết.
10. Tìm họ tên và tên khoa của giáo viên viết được nhiều giáo trình nhất từ năm
2007 đến nay.
11. Tìm mã và tên của các quyển giáo trình có số tín chỉ nhiều nhất Khoa CNTT-
TT.
12. Tìm tổng số giáo trình đã viết trong khoa có nhiều giáo viên nhất.
13. Tìm tên các khoa có trung bình số giáo trình viết bởi mỗi giáo viên lớn hơn
3.

Ví dụ 3
THI_SINH (MS_TS, HO, TEN, NAM_SINH, TRĐO_VH, TINH)
GIAM_KHAO (MS_GK, PHAI, HO, TEN, NAM_SINH, NGHE, NOI_CGTAC)
SO_THÍCH (MS_ST, DGIAI)
THÍCH (MS_TS, MS_ST)
CHAM (VONG, MS_GK, MS_TS, DIEM)

14. Tìm số thí sinh có sở thích về thời trang.


15. Tìm sở thích có nhiều thí sinh chọn nhất.
16. Tìm mã số và họ tên các thí sinh lọt vào vòng bán kết (giả sử đạt trung bình
trên 9 điểm).
17. Tìm họ tên các vị giám khảo đã cho ở vòng 2 thí sinh Huỳnh Thị Hồng Loan
điểm bằng với điểm cao nhất.
18. Tìm thí sinh thích đi du lịch nhưng không thích nấu ăn.
19. Tìm những thí sinh có nhiều sở thích nhất.
20. Tìm vị giám khảo ở vòng chung kết vừa cho điểm cao nhất cho thí sinh
Nguyễn Thùy Lâm, vừa cho điểm cao nhất cho thí sinh Mai Phương Thúy.
21. Tìm vị giám khảo cao tuổi nhất và có số vòng chấm điểm nhiều nhất.

You might also like