Tải bản đầy đủ (.pdf) (58 trang)

Giáo trình Cơ sở dữ liệu (Tập 1): Phần 2 - TS. Nguyễn Thị Thu Thuỷ (Chủ biên)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.22 MB, 58 trang )

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à Nội
Bắc Ninh

Oanh

Thanh Hóa

Tùng
Mận

Nam Định
Bắc Giang



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



Bắc Ninh

Oanh

Thanh Hóa


Tùng

Nam Định

Mận

Bắc Giang



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



Bắc Ninh

Oanh

Thanh Hóa

Mận

Bắc Giang



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



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



TV01

Ti vi LCD


101



MG01

Máy giặt

101



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




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à Nội
Bắc Ninh

Tùng

Nam Định

101



Bắc Ninh

Lan

Hà Nội

101



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



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


×