Chương 3
NGƠN NGỮ KHAI THẤC CSDL QUAN HỆ
Chương này trình bày khái quát những kiến thức cơ bản về các
ngôn ngữ cho phép định nghĩa các đối tượng của một cơ sở dữ liệu và
biểu diễn các yêu cầu trên cơ sở dữ liệu đó mà một hệ quàn trị cơ sở dữ
liệu có thể hỗ trợ. Cụ thể, chúng ta sẽ đi tìm hiểu hai ngơn ngữ khai thác
cơ sở dữ liệu quan hệ đó là đại số quan hệ và ngơn ngữ truy vấn có cấu
trúc SQL.
3.1. Các phép tốn quan hệ
Ngơn ngữ đại số quan hệ là cơ sở quan trọng của một ngôn ngữ bậc
cao được sử dụng để thao tác ữên các quan hệ. Với dữ liệu được lưu trữ
là những quan hệ nào đó, có thể sử dụng các phép tốn của đại số quan
hệ để tạo ra các quan hệ mới, quan hệ mới này là thông tin được hiển thị
ra theo yêu cầu của người dùng.
Đại số quan hệ là loại ngôn ngữ thủ tục, bao gồm tập hợp các phép
toán được áp dụng trên các thể hiện cùa quan hệ. Kết quả trả về của một
câu truy vấn là một thể hiện của quan hệ. Chuỗi các phép toán đại sổ
quan hệ hình thành nên biểu thức đại số quan hệ (câu truy vấn) mà kết
quả của nó cũng trà về một thể hiện của quan hệ.
Đối với ngôn ngữ này, mỗi câu hỏi được biểu diễn thông qua việc
áp dụng một tập hợp các phép toán đặc biệt đối với các quan hệ. Các
phép toán của đại số quan hệ thường được chia thành ba nhóm. Nhóm
thứ nhất gồm các phép toán tập hợp (phép hợp, phép giao, phép trừ và
phép tích Đề-các). Nhóm thứ hai gồm các phép tốn đặc biệt trên quan
hệ (phép chọn, phép chiếu, phép chia, phép kết nối và phép đặt lại tên).
Nhóm thứ ba gồm các phép toán quan hệ bổ sung (các hàm kết tập và các
phép gộp nhóm).
125
3.1.1. Các phép toán tập hợp
Một quan hệ là một tập hợp các n-bộ được tạo ra với n là số ngôi
hay bậc cố định của một quan hệ. Trong lý thuyết tập hợp, nhóm các
phép tốn tập hợp bao gồm phép hợp, phép giao, phép trừ, và phép tích
Đề-các của hai tập hợp là những phép tốn hai ngơi. Khi sử dụng các
phép toán này trong các cơ sở dữ liệu quan hệ cần phải có các điều kiện
đảm bảo ràng quan hệ kết quả cùa các phép toán cũng phải là một quan
hệ hợp lệ. Điều kiện này gọi là điều kiện khả hợp.
Định nghĩa 3.1: Cho hai lược đồ quan hệ R(A1, A2,..., An) và S(B1,
B2, ..., Bm) là khả hợp nếu chúng cùng bậc (có nghĩa là n=m) và có cùng
miền giá trị DOM(Aj) = DOM(Bj), 1< i < n.
Định nghĩa 3.2: Cho r và s là hai quan hệ. Khi đó, r và s được gọi
là khả hợp nếu chúng được xác định ưên cùng tập thuộc tính và các
thuộc tính cùng tên có cùng miền giá trị.
Ví dụ 3.1: Cho 2 quan hệ NHANVIEN và THANNHAN với các
thể hiện:
NHAN.VIEN
THAN NHAN
TENNV
NGSINH
GT
Tung
12/08/1955
Nam
Hang
07/19/1968
Nu
Nhu
06/20/1951
Nu
Hung
09/15/1962
Nam
TENTN
NG SINH
GTTN
Trinh
04/05/1986
Nu
Khang
10/25/1983
Nam
Phuong
05/03/1958
Nu
Minh
02/28/1942
Nam
Chau
12/30/1988
Nu
126
Khi đó ta có:
- Bậc của hai quan hệ: n=3;
- Miền giá tri của các thuộc tính:
o DOM(TENNV) = DOM(TENTN)
o DOM(NGSINH) = DOM(NG_SINH)
o DOM(GT) = DOM(GTTN)
Vì vậy hai quan hệ đã cho là khả hợp.
• Phép hợp
Cho 2 quan hệ r và s khả hợp. Khi đó, phép hợp cùa r và s là một
quan hệ gồm tập tất cả các bộ thuộc r hoặc thuộc s, hoặc cả hai (các bộ
trùng lặp sẽ bị bỏ) và được ký hiệu là r u s.
Biểu diễn hình thức của phép này có dạng: r u s = { 11 ter V tes}
Ví dụ 3.2: Cho 2 quan hệ NHACC và KHACHHANG với các
thể hiện:
NHACC
lliỉỉẨ >55?
Lan
Hà
Hà Nội
Bắc Ninh
Oanh
Thanh Hóa
Tùng
Mận
Nam Định
Bắc Giang
Lê
Hải Dương
Tùng
Nam Định
Lâm
Hải Phòng
Lan
Hà Nội
Đào
Phú Thọ
KỐACHHANG
127
Khi đó, phép hợp của 2 quan hệ NHACC và KHACHHANG được
biểu diễn và có kết quả như sau:
'UõdỊỈ-'
NHACC u KHACHHANG
Lan
Hà Nội
Hà
Bắc Ninh
Oanh
Thanh Hóa
Tùng
Nam Định
Mận
Bắc Giang
Lê
Hải Dương
Lâm
Hài Phịng
Đào
Phú Thọ
• Phép giao
Cho 2 quan hệ r và s khả hợp. Khi đó, phép giao của r và s là một
quan hệ gồm tập tất cả các bộ thuộc cà hai quan hệ r và s và được ký hiệu
làrn s.
Biểu diễn hình thức của phép này có dạng: rn s = { 11 ter A tes)
Ví dụ 3.3: Cho 2 quan hệ NHACC và KHACHHANG với các thể
hiện như ví dụ 3.2.
Khi đó, phép giao của 2 quan hệ NHACC và KHACHHANG được
biểu diễn và có kết quả như sau:
NHACC n KHACHHANG
"Ten
Lan
Tùng
Diaẹhi
Hà Nội
Nam Định
• Phép trừ
Cho 2 quan hệ r và s khả hợp. Khi đó, phép trừ của r và s là một
quan hệ gồm tập tất cả các bộ thuộc r nhưng không thuộc s và được ký
hiệu là r - s.
128
Biểu diễn hình thức của phép này có dạng: r - s = {11 ter A tỂs}
Ví dụ 3.4: Cho 2 quan hệ NHACC và KHACHHANG với các thể
hiện như ví dụ 3.2.
Khi đó, phép trừ của 2 quan hệ NHACC và KHACHHANG được
biểu diễn và có kết quà như sau:
iHKii
NHACC -KHACHHANG‘
KHACHHANG - NHACC
Hà
Bắc Ninh
Oanh
Thanh Hóa
Mận
Bắc Giang
Lê
Hải Dương
SIB
Lâm
Hải Phịng
Đào
Phú Thọ
Một số các tính chất trong quan hệ tập họp:
- Tính chất giao hoán:
rus=sur
rns=snr
- Tỉnh chất kết hợp:
r u (s u t) = (r u s) u t
r n (s n t) = (r n s) n t
• Phép tích Đề - các
Được dùng để kết hợp các bộ của các quan hệ lại với nhau. Cho
lược đồ quan hệ R, s tương ứng xác định frên tập thuộc tính
129
{A],A2,...,An} và {Bl,Bĩ, —, Bm) và r và s là hai quan hệ thuộc hai lược
đồ R và s tương ứng. Khi đó phép tích Đề - các cùa 2 quan hệ r và s là
một quan hệ gồm tập tất cả các (m+n) - bộ có n thành phần đầu tiên là
một bộ thuộc r và m thành phần sau là một bộ thuộc s và được ký hiệu là
rx s.
Biểu diễn hình thức của phép này có dạng:
r X s = {t I t=(ai,..an,b1,..bni) A (ab..an) e r A (b15..bm) e s}
Kết quà trả về là một quan hệ q. Mỗi bộ của q là tổ hơp giữa 1 bộ
trong r và 1 bộ trong s:
- Nếu r có u bộ và s có V bộ thì q sẽ có U X V bộ
- Nếu r có n thuộc tính và s có m thuộc tính thì q sẽ có n + m thuộc
tính (r+ n s+* 0 )
Ví dụ 3.5: Cho 2 quan hệ NHACC và HANGHOA với các thể hiện
như sau.
NHACC > '■ MaNÇC ;
HANGIĨOA
Ten
100
Lan
101
Hà
102
Oanh
103
Tùng
MaHH
TV01
Ti vi LCD
MG01
Máy giặt
TL01
Tủ lạnh
Khi đó, tích Đề-các của 2 quan hệ NHACC và HANGHOA được
biểu diễn và có kết quả như dưới đây:
130
NHACC X HANGHOA
MaNCC
Ten
MaHH
TenHH
100
Lan
TV01
Ti vi LCD
100
Lan
MG01
Máy giặt
100
Lan
TL01
Tủ lạnh
101
Hà
TV01
Ti vi LCD
101
Hà
MG01
Máy giặt
101
Hà
TL01
Tủ lạnh
102
Oanh
TV01
Ti vi LCD
102
Oanh
MG01
Máy giặt
102
Oanh
TL01
Tủ lạnh
103
Tùng
TV01
Ti vi LCD
103
Tùng
MG01
Máy giặt
103
Tùng
TL01
Tủ lạnh
• Phép chia
Cho lược đồ quan hệ R, s tương ứng xác định trên tập thuộc tính
{Ab A2,..., Am, Am+b...An) và {Ab A2,
Am}, r và s là hai quan hệ
thuộc hai lược đồ R và s tương ứng. Khi đó phép chia 2 quan hệ r và s là
một quan hệ gồm tập tất cả các (n-m) - bộ sao cho mỗi bộ này khi được
ghép với một bộ bất kỳ ưong quan hệ s thì sẽ cho một bộ trong quan hệ r
và được ký hiệu là r -ỉ- s.
Biểu diễn hình thức của phép này có dạng:
r -5- s={t I t=(am+b..an): V (a^.a™) e s, (aba2,....,am,am+b...an) e r}
Ví dụ 3.6: Cho 2 quan hệ CUNGCAP và HANGHOA với các thể
hiện như sau.
131
MaHH
¿ MaHH
100
TVOI
TV01
101
TVOI
MG01
101
MGOl
TL01
102
TV01
100
TL01
103
MG01
102
MG01
100
MG01
102
TL01
103
TV01
CUNGCAP MaNCÇ
Khi đó, tích phép chia của quan hệ CUNGCAP cho quan hệ
HANGHOA được biểu diễn và có kết q như dưới đây:
CGCAP + HÀNGHOA
MaNCC
100
102
3.1.2. Các phép tốn đặc biệt trên quan hệ
Các phép toán đặc biệt trên quan hệ bao gồm các phép toán liên
quan chặt chẽ đến các thao tác cơ bàn làm thay đổi quan hệ (như các thao
tác thêm, sửa, xóa các bộ giá trị trong một quan hệ). Các phép toán này là
một cách tiếp cận khác trong việc biểu diễn câu truy vấn của ngơn ngữ
đại số quan hệ.
• Phép chọn
Phép chọn được dùng để lọc ra một tập con các bộ của quan hệ đã
cho thỏa mãn một điều kiện xác định. Điều kiện đó được gọi là điều kiện
chọn hay biểu thức chọn.
132
Biểu thức chọn F được biểu diễn bởi một biểu thức logic bao gồm
các toán hạng, mỗi toán hạng là một phép so sánh đơn giản giữa hai biến
là hai thuộc tính hoặc giữa một biến là một thuộc tính và một biến là giá
trị hằng. Biểu thức chọn F cho giá trị là đúng hoặc sai (TRUE hoặc
FALSE) đối với mỗi bộ đã kiểm ứa.
Như vậy, điều kiện chọn F là một biểu thức logic gồm các mệnh đề
có dạng:
- <tên thuộc tính>
<hằng số>
- <tên thuộc tính> <tên thuộc tính>
Các phép so sánh trong điều kiện chọn F là <, >, <, >,
=
Các mệnh đề được nối lại nhờ các phép logic A (và), V (hoặc), -I
(phủ định).
Cho r là một quan hệ và F là một biểu thức logic trên các thuộc
tính của r. Phép chọn trên quan hệ r các bộ thỏa mãn điều kiện chọn F,
kỉ hiệu là ơf(r) là tập tất cả các bộ của r thỏa mãn F.
Biểu diễn hình thức của phép này có dạng:
ơF(r) = {11 ter A F(t) = TRUE}
Ví dụ 3.7: Cho quan hệ HANGHOA với các thể hiện như sau.
HANGHOA
MailH
XpTenHH,.
.Trongluong
TV01
Ti vi LCD
Đen
2.5
MG01
Máy giặt
Xám
7
TL01
Tủ lạnh
Xanh
10
TV02
Ti vi LCD
Xám
3.5
MG02
Máy giặt
Trắng
8
Khi đó, yêu cầu 1: Đưa ra thơng tin về các mặt hàng có màu xám
được biểu diễn và có kết quả như dưới đây:
133
ƠMausac= “Xám”
(HANGHOA)
Mausac Trongluoog
MaHH
Xám
MG01
Máy giặt
TV02
Ti vỉ LCD Xám
7
3.5
Yêu cầu 2: Đưa ra thơng tin về các mặt hàng có màu xám hoặc
trọng lượng nhỏ hơn 5 kg được biểu diễn và có kết quả như dưới đây:
■ 1 -Z.
'
'
TeriHH
^(Mausac^Xám^^^rongluong^ỉCHANGHOA)
Mausac Trohgluong
MG01
Máy giặt
Xám
7
TL01
Tủ lạnh
Xanh
10
TV02
Ti vi LCD
Xám
3.5
MG02
Máy giặt
Trắng
8
Chú ý:
- Kết quả trả về của phép chọn là một quan hệ có cùng danh sách
thuộc tính với r và có số bộ ln ít hơn hoặc bằng số bộ của r.
- Phép chọn có tính chất giao hoán: ơ F1 (ơ F2 (r)) = ơ F2 (ơ F1 (r)) =
ơ F1 A F2 (r).
• Phép chiếu
Phép chiểu một quan hệ trên một tập các thuộc tỉnh của quan hệ đó
thực chất là phép tốn dùng để xây dựng một quan hệ mới bằng cách
loại bỏ đi một sổ thuộc tính và chỉ giữ lại những thuộc tỉnh cịn lại của
quan hệ đó.
Cho r là một quan hệ n ngơi xác định trên tập thuộc tính U={Ai,A2,
và một tập con thuộc tínhXcU. Phép chỉếu của quan hệ r trên
tập thuộc tính X được ký hiệu là Iĩx(R, là một quan hệ gồm tập tất cả các
bộ của r xác định trên tập thuộc tỉnh X).
Biểu diễn hình thức của phép này có dạng: nx(r)={t[X] I ter}
134
Ví dụ 3.8: Cho quan hệ HANGHOA với các thể hiện như sau:
HANGHOA MaHH .
TV01
Ti vi LCD
.Másac
• ;,;'í Trongluong,
Đen
2.5
MG01
Máy giặt
Xám
7
TL01
Tủ lạnh
Xanh
10
TV02
Ti vi LCD
Xám
3.5
MG02
Máy giặt
Trắng
8
Khi đó, u cầu đưa ra thơng tin về mã hàng, tên hàng của các mặt
hàng sẽ được biểu diễn và có kết quả như sau:
nMarai,TenHH (HẤNGHốẨ)^
TV01
Ti vi LCD
MG01
Máy giặt
TL01
Tủ lạnh
TV02
Ti vi LCD
MG02
Máy giặt
Yêu cầu 2: Đưa ra thông tin về mã hàng, màu sắc của những hàng
hóa có trọng lượng lớn hơn 7 kg được biểu diễn và có kết q như dưới
đây:
n^aHH, Mausac(ƠTrongluong>7 (BÌẰNGHỮẤ)^ *
ỊỊSS
TL01
Xanh
MG02
Trắng
Phép chiếu tổng quát là sự mở rộng phép chiếu bằng cách cho
phép sử dụng các phép toán sổ học trong danh sách thuộc tỉnh, và được
kí hiệu.là nFI F2'Fn (E) trong đó:
- E là biểu thức đại sổ quan hệ;
135
- Fl, F2,...,Fn là các biểu thức số học liên quan đến hằng số hoặc
các thuộc tính trong E.
Ví dụ 3.9: Cho quan hệ THETINDUNG (Mathe, trigiathe,
SotienSD)
Yêu cầu: Hãy cho biết số tiền cịn lại trong mỗi thẻ?
Khi đó ta có câu truy vấn: n Mathe, trigiathe - SotienSD
(THETINDƯNG)
Chú ý:
- Kết quả trả về của phép chiếu là một quan hệ có danh sách thuộc
tính thuộc tập X và có số bộ ln ít hơn hoặc bằng số bộ của r.
- Phép chiếu khơng có tính chất giao hốn:
nx,Y(r)
n
*
x(nY(r)).
• Phép kết nối
Phép kết nối được dùng để tổ hợp hai bộ có liên quan từ hai quan
hệ thành một bộ mới trong một quan hệ mới.
Khái niệm “ghép bộ”: giả sử cho hai bộ u =(ai, a2,..., a„) và V =(bi,
b2,
bm), phép ghép bộ u với bộ V được kí hiệu là (u,v) được định nghĩa
như sau: (u,v)= (ab a2,..., an,bb b2,bm).
Phép kết nổi hai quan hệ thực chất là phép ghép các cặp bộ của hai
quan hệ thỏa mãn một điều kiện nào đó trên chúng. Điều kiện đó được
gọi là điều kiện kết nối hay biểu thức kết nổi.
Cho quan hệ r xác định trên tập thuộc tính (Aị, A2, .... A„), s là
quan hệ xác định trên tập thuộc tỉnh (Bj, B2, ..., Bn), và 6 là một trong
các phép so sảnh *
,=,<,>,<,> Kết quả của phép kết nổi 0 quan hệ r
với quan hệ s theo điều kiện Ai ỡ Bj và được kí hiệu r [>A10 Bj
xác định như sau:
r l>
136
Tất nhiên ở đây cần giả thiết rằng các phép so sánh của các cặp
thuộc tính của hai quan hệ là có nghĩa, tức là mỗi giá trị thuộc Dom(Ai)
có thể so sánh được với mỗi giá trị thuộc Dom(Bj) qua phép so sánh 0.
Ta có thể sử dụng kí hiệu r [><1 s nếu F được kí hiệu thay cho
F
Ai 0 Bj.
Trường hợp 0 là “=“ thi phép kết nối đó được gọi là phép kết nổi
bằng. Trường hợp kết nối bằng trên các thuộc tính cùng tên của hai quan
hệ r và s và một trong hai thuộc tính đó được loại bỏ khỏi kết quả thì
phép kết nối này được gọi là phép kết nối tự nhiên và được kí hiệu là r *
s (hoặc r [X]s) cho quan hệ kết quả.
Ví dụ 3.10: Cho 4 quan hệ NHACC, CUNGCAP, HANGHOA và
KHACHHANG với cầc thể hiện.
NHACC MaNCC TenNCC DiachiNCC
KHACHHANG
TenKH
DiachiKH
100
Lan
Hà Nội
Tùng
Nam Định
101
Hà
Bắc Ninh
Lan
Hà Nội
102
Oanh
Thanh Hóa
Đào
Phú Thọ
103
Tùng
Nam Định
CUNGCAP MaNCC
MaHH
HANGHOA MaHH
TenHH
NoiSX
100
TV01
TV01
Ti vi LCD Hà Nội
101
MG01
MG01
Máy giặt
Hải Dương
102
TV01
TL01
Tủ lạnh
Thanh Hóa
100
TL01
TV02
Ti vi LCD Bắc Ninh
102
MG01
MG02 Máy giặt
Hải Phịng
Khi đó giả sử ta có các truy vấn sau:
Truy vấn 1: Đưa ra thơng tin về các nhà cung cấp có tên khác với
tên khách hàng
137
NHACC lI KBACHHANG
TenNCOTenKH ■
„
'
. ,
;■
MaNCC
TenNCC
DiachiNCC
100
Lan
Hà Nội
Tùng
Nam Định
100
Lan
Đào
Phú Thọ
101
Hà
Hà Nội
Bắc Ninh
Tùng
Nam Định
101
Hà
Bắc Ninh
Lan
Hà Nội
101
Hà
Bắc Ninh
Đào
Phú Thọ
102
Oanh
Thanh Hóa
Tùng
Nam Định
102
Oanh
Thanh Hóa
Lan
Hà Nội
102
Oanh
Thanh Hóa
Đào
Phú Thọ
103
Tùng
Nam Định
Lan
Hà Nội
103
Tùng
Nam Định
Đào
Phú Thọ
PịạchiKH
Truy vấn 2: Đưa ra thông tin về các nhà cung cấp đã cung ứng các
mặt hàng
NHACC * CUNGCAP
liii
MạỉỊB
100
Lan
Hà Nội
TV01
101
Hà
Bắc Ninh
MG01
102
Oanh
Thanh Hóa
TV01
100
Lan
Hà Nội
TL01
102
Oanh
Thanh Hóa
MG01
• Phép đặt lại tên
Để có được quan hệ kết quả, chúng ta có thể phải áp dụng nhiều
phép tốn quan hệ liên kết trên nhiều quan hệ khác nhau dẫn đến biểu
thức đại số quan hệ được viết rất dài. Trong những trường hợp như vậy,
ta có thể viết một biểu thức đại số quan hệ mà các phép tốn có thể xếp
lồng với nhau. Cách viết biểu thức này có thể đon giản hon bằng cách sử
138
dụng những quan hệ kết quà trung gian tương ứng với mỗi phép tốn tại
một thịi điểm và tạo ra các quan hệ là các kết quả trung gian đó. Những
quan hệ trung gian như vậy ẹần phải được đặt tên.
Ví dụ 3.11: Đưa ra thơng tin về Mã nhà cung cấp, tên nhà cung cấp
đã cung ứng mặt hàng MG01. Khi đó ta có thể viết theo các cách như sau:
Không dùng quan hệ trung gian:
ri-MaNCC, TenNCc(^MaHH=“MG01”
(NHACC * CUNGCAP))
Dùng quan hệ trung gian:
TG <-
ƠMaHH=“MGOi”
(NHACC * CUNGCAP))
KQ <— nMaNCC> TenNCc(TG)
Ta cũng có thể đặt lại tên cho các thuộc tính trong các quan hệ
trung gian và kết quả. Để đạt lại tên cho các thuộc tính trong một quan hệ
kết quả, chúng ta có thể liệt kê tên mới của các thuộc tính trong cặp dấu
“0” theo tên quan hệ kết quả hoặc sử dụng phép đặt lại tên p..
Xét quan hệ r với các thuộc tính B, c, D.
Đổi tên quan hệ'. Phép đổi tên quan hệ r thành quan hệ s được kí
hiệu là Pr(s).
Đổi tên thuộc tính: Phép đổi tên thuộc tính B trong quan hệ r thành
thuộc tính X được kí hiệu là Px, c, D (r).
Đổi tên thuộc tỉnh và đổi tên quan hệ'. Phép đổi tên quan hệ r thành
quan hệ s và thuộc tính B thành thuộc tính X được kí hiệu là ps(X) c, D (r)
Ví dụ 3.12: Xét lại ví dụ 3.9 trong trường hợp sử dụng phép đặt
lại tên:
TG <— ơMaHH=“MG0i” (NHACC * CUNGCAP))
KQ (Ma, Ten) <- nMaNcc, TenNcc(TG)
Hoặc p kq (Ma, Ten) (nMaNCC, TenNCc(TG))
139
3.1.3. Các phép tốn quan hệ bổ sung
Trong ngơn ngữ đại số quan hệ nếu chỉ sử dụng các phép tốn cơ
bản ở trên thì có nhiều truy vấn cơ sở dữ liệu sẽ khơng thực hiện được.
Vì vậy, ưong các hệ quản trị cơ sở dữ liệu thì hầu hết các ngơn ngữ thao
tác dữ liệu đã có những phép toán quan hệ bổ sung để thực hiện được
những truy vấn như vậy. Các phép toán quan hệ bổ sung thường dùng là
các hàm kết tập và các phép gộp nhóm. Các phép tốn này làm tăng
cường sức mạnh khai thác cơ sở dữ liệu của đại số quan hệ.
- 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ệ là các truy vấn mơ tà bằng các hàm tốn học có tính
chất kết hợp trên một tập hợp các giá trị của cơ sờ dữ liệu. Ví dụ như các
yêu cầu được truy vấn là “cho biết tổng doanh thu đã bán?” hay “thống
kê tổng số lượng hàng hóa đã được bán?” hoặc “cho biết giá cả trung
bình của các mặt hàng được bán?”,... Mỗi hàm kết tập nhận vào tập hợp
các giá trị và trả về một giá trị đơn. Các hàm hay áp dụng để thu thập các
giá trị số đó là:
o Hàm tính tổng (SUM)
o Hàm tính trung bình cộng (AVERAGE)
o Hàm tính giá trị lớn nhất (MAX)
o Hàm tính giá trị nhỏ nhất (MIN)
o Hàm đếm các bộ giá trị (COUNT)
Ví dụ 3.13: Cho quan hệ CUNGCAP với các thể hiện:
címgW OK mổ®
SqIdjj
100
TVOI
10
101
MGOl
20
102
TV01
15
100
TL01
30
102
MG01
25
140
Với truy vấn đưa ra tổng số hàng hóa đã được bán, ta có truy vấn:
SUM(Soluong) -> kết quả là 100.
Chú ý: Kết quả trà về của việc áp dụng một hàm kết tập đó là một
quan hệ. Các bộ trùng lặp trong mỗi nhóm khơng bị loại bỏ khỏi nhóm
khi thực hiện một hàm kết tập.
- Các phép gộp nhóm'. Một kiểu truy vấn hay dùng khác cũng
khơng thực hiện được trong đại số quan hệ với các phép tốn cơ bản ở
trên là 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 nhóm một cách
độc lập cho từng nhóm. Ví dụ, nhóm các bộ của quan hệ CUNGCAP
theo MaNCC như vậy mỗi nhóm bao gồm các mặt hàng đã được cung
cấp bởi mỗi nhà cung cấp. Sau đó chúng ta có thể đưa ra thơng tin: Đối
với mỗi nhà cung cấp đã cung ứng bao nhiêu loại mặt hàng với tổng sổ
lượng các mặt hàng đã cung ứng. Ta có thể định nghĩa một phép gộp
nhóm như sau:
<Các thuộc tính gộp nhóm>3<Danh sách hàm kết tập> (r)
Trong đó:
o 3 là kí hiệu của phép tốn gộp nhóm
o <Các thuộc tính gộp nhóm> là danh sách các thuộc tính của
quan hệ r;
o <Danh sách hàm kết tập> là danh sách các cặp hàm
(<hàm><thuộc tính>).
Ví dụ 3.14: Cho quan hệ CUNGCAP với các thể hiện như trong ví
dụ 3.12.
Yêu cầu truy vấn: Thống kê số mặt hàng cùng với số lượng các
hàng hóa đã được cung ứng.
Ta có truy vấn: 3c0UNT(MaHH), suM(Soiuong) (CUNGCAP)
141
Quan hệ kết quả là:
COUNT(MaHH)
SUM(Soluong)
03
100
J Yêu càu truy vấn: Với mỗi nhà cung cấp hãy thống kê số mặt
hàng cùng với số lượng các hàng hóa đã được cung ứng
Ta có truy vấn: MaNCC3 couNT(MaHH), suM(Soiuong) (CUNGCAP)
Quan hệ kết quả là:
MaNCC
100
101
102
COUNT(MaHH)
02
01
02
SUM(Soluong)
40
20
40
3.2. Ngôn ngữ SQL
SQL (Structured Query Language) là một ngôn ngữ máy tính dùng
để tạo, chỉnh sửa, và truy vấn dữ liệu từ một hệ quàn trị cơ sở dữ liệu
quan hệ.
Ngôn ngữ SQL xuất phát từ bài báo “Mô hình quan hệ cho dữ liệu
dùng trong ngân hàng dữ liệu dùng chung có khối lượng lớn” của tiến
sĩ Edgar F. Codd, 1970, và mơ hình này sau đó đã được chấp nhận rộng
rãi là mơ hình tiêu chuẩn dùng cho hệ thống quàn lý cơ sở dữ liệu quan hệ.
Giữa những năm 1970, một nhóm các nhà phát triển thuộc trung
tâm nghiên cứu của IBM dựa trên mơ hình của tiến sT Edgar F. Codd
đã phát triển một hệ thống quàn lý và truy vấn cơ sở dữ liệu được đặt
t'ên là Structured English Query Language, viết tắt là “SEQUEL”. Sau
này, tên viết tắt SEQUEL được rút gọn thành SQL. Mặc dù SQL bị ảnh
hưởng bởi cơng trình của tiến sĩ Codd nhưng nó khơng do tiến sĩ Codd
thiết kế mà được thiết kế bởi Donald D. Chamberlin và Raymond F.
Boyce tại IBM.
142
Năm 1986, SQL được thừa nhận là tiêu chuẩn của ANSI (American
National Standards Institute) và được ISO (International Organization for
Standardization) thừa nhận một năm sau đó, năm 1987. Tiêu chuẩn SQL
đã trải qua một số phiên bản: SQL-86, SQL-89, SQL-92,
SQL:1999, SQL:2003, SQL:2008, SQL:2011.
3.2.1. Tổng quan về ngôn ngữ SQL
Bất kỳ một ngôn ngữ xây dựng và khai thác cơ sở dữ liệu quan hệ
nào phải cho phép người dùng thực hiện các công việc sau:
- Tạo một cơ sở dữ liệu và cấu trúc các quan hệ.
- Thực hiện các thao tác quản lý dữ liệu cơ bản, như thêm mới, hiệu
chỉnh và xóa dữ liệu thuộc một quan hệ nào đó.
- Thực hiện các truy vấn đơn giản và phức tạp.
SQL giúp cho người dùng thực hiện các nhiệm vụ trên một cách dễ
dàng, với các cấu trúc và cú pháp lệnh đơn giản dễ học.
SQL cũng là một ngơn ngữ có tính dịch chuyển cao, do ngơn ngữ
tn theo những chuẩn đã được xác định nên người dùng có thể sử dụng
cùng một cấu trúc và cú pháp lệnh khi họ chuyển từ một hệ quản trị cơ sở
dữ liệu này sang một hệ quản trị cơ sở dữ liệu khác.
SQL là một “ngôn ngữ hướng chuyển đổi” (transform - oriented
language), ngôn ngữ được thiết kế để sử dụng các quan hệ trong việc
chuyển đổi các đầu vào thành các đầu ra yêu cầu.
Theo chuẩn ISO, ngôn ngữ SQL có hai thành phần chính:
- Thành phần ngơn ngữ định nghĩa dữ liệu (Data Definition
Language - DDL) dùng để định nghĩa các cấu trúc cơ sở dữ liệu và quản
lý các truy cập đến dữ liệu. Chi tiết về thành phần DDL sẽ được trình bày
ở phần 3.2.3.
- Thành phần ngôn ngữ quản trị dữ liệu (Data Manipulation
Language - DML) dùng để truy vấn và cập nhật dữ liệu. Chi tiết về thành
phần DML sẽ được trình bày ở phần 3.2.4 và 3.2.5.
143
Cho đến phiên bản SQL: 1999, ngôn ngữ SQL chi bao gồm các lệnh
định nghĩa và quàn trị dữ liệu mà không bao gồm các câu lệnh điều khiển
luồng công việc như IF ... THEN ... ELSE, GO TO, hay While. Những
câu lệnh này được càỉ đặt bằng các ngôn ngữ lập trình hay ngơn ngữ
quản lý cơng việc, hoặc được người dùng quyết định thông qua các tương
tác trực tiếp. Do sự thiếu hụt này, SQL có thể được sử dụng theo 2 cách.
Cách thứ nhất là dùng SQL cùng với các chỉ thị được thêm vào tại thiết
bị đầu cuối hoặc cách thứ hai là nhúng SQL vào một ngơn ngữ lập trình
nào đó (cách này được sử dụng rộng rãi trong việc xây dựng các hệ thống
thông tin trong doanh nghiệp).
Ngôn ngữ SQL là một ngôn ngữ dễ học:
- SQL là ngôn ngữ không hướng thủ tục: người dùng sẽ chỉ rõ đâu
là thông tin họ cần, mà khơng cần chì ra làm cách nào để có được thơng
tin đó. Nói cách khác, SQL khơng u cầu người dùng chi rõ phương
thức truy cập dữ liệu một cách tường minh. Do chi cần xác định yêu cầu
thông tin nên ngôn ngữ SQL trở nên đơn giản với người học.
- Giống hàu hết các ngôn ngữ hiện đại khác, SQL là ngơn ngữ
khơng có định dạng, có nghĩa là các phần khác nhau của một chi thị
không cần phải đặt tại một vị trí cụ thể frên màn hình.
- Cấu trúc các câu lệnh bao gồm những từ tiếng Anh đơn giản như
CREATE TABLE, INSERT, UPDATE, SELECT .v.v...
- SQL có thể sừ dụng bởi nhiều đối tượng người dùng, như người
quản trị cơ sở dữ liệu (DBA), người quàn lý, người phát triển ứng dụng,
và rất nhiều kiểu người dùng khác.
Trong ngôn ngữ SQL không sử dụng các khái niệm quan hệ, thuộc
tính và các thể hiện như đã định nghĩa ưong phần đại số quan hệ mà thay
vào đó SQL sử dụng các khái niệm bàng, cột và hàng. Một bảng tương
đương với một quan hệ, một cột tương đương với một thuộc tính và một
hàng tương đương với một thể hiện. Cũng nên chú ý răng, SQL khơng
tuyệt đối tn theo định nghĩa của mơ hình quan hệ được miêu tả ở
144
chương trước. Ví dụ, SQL cho phép một bảng kết quả của một phép “tìm
kiếm” có thể bao gồm những hàng giống nhau (duplicate rows), SQL còn
quy định thứ tự trên các cột, và cho phép người dùng sử dụng một số
phép tốn ưên bảng kết quả, ví dụ sử dụng phép sắp xếp các hàng trong
bảng kết quả.
3.2.2. Các kiểu dữ liệu
Các thuộc tính trong cơ sở dữ liệu quan hệ, hay các cột trong một
bảng của SQL luôn thuộc một kiểu dữ liệu xác định. Trong ngôn ngữ
SQL, thành phàn ngôn ngữ định nghĩa dữ liệu (DLL) xây dựng sẵn các
kiểu dữ liệu cơ bản. Các kiểu dữ liệu cơ bản của DLL được chỉ ra trong
bảng sau:
Kiểu dữ liệu
Khai từ khóa dùng trong khai báo
Logic
BOOLEAN
Xâu ký tự
CHAR
VARCHAR
Nhị phân
BIT
BIT VARYING
Số chính xác
NUMERIC DECIMAL INTEGER
Sổ gần đúng
FLOAT
REAL
DOUBLE PRECISION
Ngày tháng
DATE
TIME
TIMESTAMP
Interval
INTERVAL
Đối tượng lớn CHARACTER
OBJECT
SMALLINT
LARGE BINARY LARGE OBJECT
Chi tiết về miền giá trị của các kiểu dữ liệu trong ngôn ngữ SQL
như sau:
Kiểu logic: Dữ liệu thuộc kiểu logic thường nhận một trong hai giá
trị TRUE hoặc FALSE. Ngoại trừ trường hợp dữ liệu được mặc định bởi
rằng buộc NOT NULL, dữ liệu kiểu logic còn hỗ trợ một giá trị khác là
giá trị UNKNOWN (không xác định) và được coi như là giá trị trống.
Kiểu logic frong SQL hỗ trợ các phép tốn so sánh và gán, trong đó giá
145
tri TRUE lớn hơn giá trị FALSE, và các phép so sánh bao gồm giá trị
UNKNOWN sẽ trà về kết quả UNKNOWN.
Kiểu xâu ký tự: Dữ liệu thuộc kiểu xâu ký tự bao gồm một chuỗi
các ký tự thuộc nhóm ký tự đã định nghĩa trước, phụ thuộc vào bảng mã
mà nhà phát triển ứng dụng SQL lựa chọn, thường là ASCII và EBCDIC.
Khi định nghĩa một cột trong bảng thuộc kiểu xâu ký tự, có thể chỉ rõ số
ký tự tối đa mà cột đó có thể chứa. Một xâu ký tự có thể có độ dài cố
định hoặc độ dài động. Trong trường hợp sử dụng độ dài cố định, nếu
người dùng nhập vào một chuỗi ký tự có độ dài nhỏ hơn số ký tự tối đa,
các ký tự trắng sẽ được thêm vào cuối để chuỗi đó đạt được kích thước
tối đa. Ngược lại, trong trường hợp sử dụng độ dài động, nếu người dùng
nhập vào một chuỗi ký tự nhỏ hơn số ký tự tối đa, chì các ký tự nhập vào
được lưu trữ, do đó tiết kiệm được bộ nhớ sử dụng.
Trong ngơn ngữ SQL, kiểu dữ liệu CHAR là kiểu dữ liệu có độ dài
cố định và kiểu dữ liệu VARCHAR là kiểu dữ liệu có độ dài thay đổi.
Kiểu nhị phân: Dữ liệu thuộc kiểu nhị phân là một dãy tuần tự các
bit (binary digits), mỗi bit nhận một trong hai giá trị 0 hoặc 1. Định dạng
dùng để khai báo kiểu nhị phân giống với khai báo của kiểu ký tự: BIT
[VARYING] (length). Trong đó, length là độ dài tối đa của của kiểu dữ
liệu và từ khóa VARYING dùng để chỉ độ dài dữ liệu thuộc kiểu độ dài
cố định hay độ dài động.
Kiểu sổ chính xác: Là kiểu dữ liệu được sử dụng để định nghĩa các
số một cách chính xác. Các số thuộc kiểu này bao gồm một phần số
nguyên, có thể có phần thập phân và dấu. Một kiểu dữ liệu chính xác bao
gồm hai thành phần precision và scale. Thành phần presision chì ra tổng
số các chữ số thuộc kiểu và thành phần scale chỉ ra số các số sau dấu
phẩy thuộc kiểu này. Ví dụ, giá trị số -12.345 có precision = 5 và scale = 3.
Trong các kiểu dữ liệu thuộc nhóm kiểu số chính xác, kiểu
NUMERIC và DECIMAL chứa các số thập phân, trong đó phần scale có
giá trị mặc định là 0. Kiểu INTEGER dùng cho các số nguyên lớn và
SMALLINT dùng cho các số nguyên nhỏ.
146
Ví dụ: DECIMAL (7,2), là kiểu dữ liệu có tổng số ký tự tối đa là 7,
trong đó có thể có 2 ký tự phần thập phân. Dữ liệu được định nghĩa theo
định nghĩa này có thể chứa giá trị tối đa 99999,99.
Kiểu số gần đúng: Các kiểu dữ liệu số gần đúng được sử dụng để
xác định con số mà khơng thể có một thể hiện chính xác, chẳng hạn như
các số thực. Số gần đúng sử dụng trong SQL bởi khai báo kiểu sau:
FLOAT (precision); REAL; DOUBLE PRECISION.
Trong đó, thành phần [precision] (độ chính xác) là một số nằm
trong khoảng [l-^-ốS] qui định kích thước bộ nhớ dùng để lưu trữ các giá
trị số trong kiểu định nghĩa. Độ chính xác của kiểu FLOAT do người
dùng tự định nghĩa, trong khi độ chính xác của kiểu REAL và DUBLE
PRECISION được quy định sẵn bởi hệ thống.
Kiểu dữ liệu thòi gian: Các kiểu dữ liệu về thời gian được sử dụng
để xác định các thời gian trong ngày ở một mức độ chính xác nhất định:
Ví dụ như ngày, giờ, và thời điểm trong ngày. Tiêu chuẩn ISO chia nhỏ
dữ liệu về thời gian thành nhiều kiểu như: YEAR, MONTH, DAY,
HOUR, MINUTE, SECOND, TIMEZONE HOUR, và TIMEZONE _
MINUTE. Trong SQL hỗ frợ các kiểu thời gian sau: DATE; TIME
[presicion] [múi giờ]; TIMESTAMP [độ chính xác] [múi giờ].
Trong đó, độ chính xác là số lượng các chữ số phần thập phân của
giá trị đo thời gian. Trong kiểu TIME, độ chính xác ngầm định là 0 (đo
thời gian theo từng giây) và trong kiểu TIMESTAMP, độ chính xác
ngầm định là 6 (đo thời gian theo một phần triệu giây). Trong kiểu thời
gian, múi giờ mặc định là múi giờ của hệ thông.
3.2.3. Các lệnh định nghĩa dữ liệu
Thành phần ngôn ngữ định nghĩa dữ liệu (DDL) trong SQL cho
phép định nghĩa và hiệu chỉnh các đối tượng trong một cơ sở dữ liệu
quan hệ như các lược đồ, cơ sở dữ liệu, bàng (quan hệ), các chỉ mục.
Trong phần này, chúng tôi chỉ giới thiệu ngắn gọn cách xây dựng hiệu
chỉnh và hủy các bảng trong một cơ sờ dữ liệu quan hệ. Các câu lệnh chính
được dùng là: CREATE TABLE; ALTER TABLE và DROP TABLE.
147
Tạo bảng
Trong quá trình xây dựng cơ sở dữ liệu quan hệ bằng ngôn ngữ
SQL, một trong những yêu cầu quan trọng nhất là xây dựng các bảng
nằm trong cơ sở dữ liệu đó. Xây dựng các bảng trong cơ sở dữ liệu bao
gồm việc chỉ rõ chi tiết thành phần của bảng và mối quan hệ giữa các
bảng. Trong ngôn ngữ SQL, các bảng và mối quan hệ được định nghĩa
bởi câu lệnh CREATE TABLE.
Cú pháp của câu lệnh CREATE TABLE:
CREATE TABLE tênbàng
(
[Cột 1] [kiểu dữ liệu 1] [NOT NULL] [UNIQUE]...,
[Cột 2] [kiểu dữ liệu 2] [NOT NULL] [UNIQUE]...,
[Cột n] [kiểu dữ liệu n] [NOT NULL] [UNIQUE]...,
[ CONSTRAINT [tên_khóa_chính]
PRIMARY KEY ( [Cột làm khóa chinhl]..... [Cột làm khóa chính n]),]
[ CONSTRAINT [tên_khóa_ngồi]
FOREIGN KEY ( [Cột làm khóa ngồil], ...,[Cột làm khóa ngồi n])
REFERENCES tên_bảng_tham_chiếu ([tên khóa chính
bảng tham chiếu])]
);
Trong đó, các thành phần được in đậm là từ khóa của SQL, các
thành phần được viết trong dấu đỏng ngoặc vng [] là các thành phần có
thể có xuất hiện hoặc không.
148
Chức năng của câu lệnh CREATE TABLE:
Câu lệnh CREATE TABLE thực hiện việc tạo một bảng có tên [tên
bảng] bao gồm một hoặc nhiều thuộc tính (cột) được liệt kê trong dấu
ngoặc đơn tiếp theo. Một cột bất kỳ được định nghĩa như sau: [ Cột i]
[kiểu dữ liệu i] [NOT NULL] [UNIQUE]
trong đó kiểu dữ liệu là một
trong các kiểu dữ liệu cơ sở được giới thiệu tại phần 3.2.2, từ khóa NOT
NULL được dùng để chỉ dữ liệu thuộc cột tương ứng khơng được để
trống, từ khóa UNIQUE được dùng để chỉ dữ liệu thuộc cột tương ứng
không được lặp lại trong các hàng khác nhau.
Một bàng trong cơ sở dữ liệu có thể có khóa chính hoặc khơng. Khi
muốn liệt kê các thuộc tính được sử dụng làm khóa chính, sử dụng cú pháp:
CONSTRAINT [tên_khóa_chính]
PRIMARY KEY ([Cột làm khóa chínhl], ...,[Cột làm khóa chính n]),
Trong đó tên khóa chính có thề có hoặc khơng, và được chỉ rõ sau
từ khóa CONSTRAINT và danh sách tên thuộc tính dùng làm khóa chính
được liệt kê sau từ khóa PRIMARY KEY và cách nhau bởi dấu phẩy.
Các thuộc tính được sử dụng làm khóa chính phải được định nghĩa trước
trong danh sách thuộc tính của bảng.
Chú ý: trong câu lệnh tạo bảng, nếu một thuộc tính được chọn làm
khóa chính thì thuộc tính đó phải được định nghĩa NOT NULL.
Ví dụ 3.15: Tạo bảng một bảng khơng có khóa chính.
CREATE TABLE Nhanvien
(
Manv char(10),
Ho_ten vachar(30),
Ngay_sinh datetime,
Luong decimal(7,2),
);
149