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

Giáo trình Cơ sở dữ liệu (Nghề: Kỹ thuật sửa chữa, lắp ráp máy tính - Cao đẳng): Phần 2 - Trường CĐ nghề Việt Nam - Hàn Quốc thành phố Hà Nội

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 (915.71 KB, 83 trang )

Chƣơng 4
Ngôn ngữ thao tác dữ liệu
4.1 Đại số quan hệ
Đại số quan hệ là ngơn ngữ hình thức cho mơ hình quan hệ đƣợc phát triển
trƣớc SQL. Đại số quan hệ cịn có thể hiểu là tập các thao tác trên mơ hình quan
hệ, đƣợc sử dụng nhƣ là cơ sở cho việc cài đặt và tối ƣu các câu lệnh truy vấn.
Một số khái niệm của đại số quan hệ đƣợc tích hợp vào các câu lệnh truy
vấn của SQL, do đó việc tìm hiểu về đại số quan hệ là bệ phóng để xây dựng và
thực thi các câu lệnh SQL một cách có hiệu quả.
Đại số quan hệ đƣợc định nghĩa bằng công thức: α = (R, O)
Trong đó:
R: Là các quan hệ trong CSDL hoặc kết hợp với các phép toán quan hệ
O: Là tập các phép toán quan hệ với đầu vào là một hoặc nhiều quan hệ để
đƣợc đầu ra là một quan hệ mới – quan hệ kết quả.
Các phép toán cơ bản
- Phép tốn một ngơi:
Là phép tốn chỉ thao tác trên một quan hệ. Đầu vào là một quan hệ và trả về kết
quả là một quan hệ mới. Phép tốn một ngơi bao gồm các phép tốn cơ bản:
Phép chọn (Selection): Đƣợc sử dụng để chọn ra một tập hợp con các bộ từ
một quan hệ thoả mãn một điều kiện chọn. Kí hiệu: ϭ
Cho quan hệ R(U) và E – biểu thức logic gồm (<, <=, >, >=, ^, ≠, ⌐, v) à
Phép chọn ϭ trên quan hệ R theo điều kiện E, kí hiệu ϭE(R) có kết quả là một tập
hợp con của R, gồm các bộ t thuộc R thoã điều kiện E.
ϬE(R) = {t / t R ^ t(E) }
Ví dụ: Tìm các sinh viên sinh năm 2000 của quan hệ sinh viên ta làm nhƣ sau:
Ϭsinhvien=2000(SINHVIEN)
Phép chiếu (Projection): Đƣợc sử dụng để chọn một vài cột hay thuộc tính
từ một bảng, ký hiệu π
Cho quan hệ R(U), X là tập con của U, X khác rỗng à Phép chiếu π trên
quan hệ R theo tập thuộc tính X, kí hiệu πX(R) có kết quả là tập hợp các bộ t
thuộc R nhƣng chỉ lấy giá trị trên X.


πX(R) = { t / t R ^ t[X] }
πX(R) chỉ gồm các bộ phân biệt – các bộ trùng nhau trong kết quả chỉ giữ
lại một.
40


Ví dụ:
a) Liệt kê mã số và tên của tất cả sinh viên:
πMSSV, hoten(SINHVIEN)
b) Liệt kê mã và tên của các sinh viên sinh năm 2000:
π MSSV, hoten(ϭnamsinh=2000(SINHVIEN))
Phép đặt lại tên: Là phép dùng để đặt lại tên cho thuộc tính hoặc quan hệ nào đó.
Trong đó:
ᵽS(A1, A2,…An)(R): Đặt lại tên quan hệ và thuộc tính
ᵽS(R) : Đặt lại tên quan hệ và giữ nguyên các thuộc tính
Ví dụ:
ᵽS(πMSSV, hoten(SINHVIEN) )
ᵽS(ma, ten) (πMSSV, hoten(SINHVIEN) ) à MSSV, hoten đƣợc đặt lại là
ma, ten.
Thêm nữa, chúng ta có phép tốn trên tập hợp.
Các phép toán trên tập hợp: Bao gồm giao, hợp, trừ - và chỉ sử dụng đƣợc
khi đó là 2 quan hệ tƣơng thích (hai quan hệ cùng bậc và các thuộc tính thƣ j có
cùng miền giá trị)
Phép hợp: Hợp của hai quan hệ tƣơng thích R và S gồm các bộ thuộc ít
nhất một trong hai quan hệ đã cho.
Ví dụ: Khi dùng phép hợp để liệt kê danh sách tên sinh viên và giáo viên:
πhoten(SINHVIEN) ᴗ πhoten(GIAOVIEN)
Phép giao: Giao của hai quan hệ S và R gồm các bộ thuộc về cả hai quan
hệ đã cho.
Ví dụ: Tìm MSSV vừa học CSDL, vừa học JAVA

πmssv(ϭmonhoc=‟CSDL‟(SINHVIEN)) ᴖ πmssv(ϭmonhoc=‟JAVA‟(SINHVIEN))

Phép trừ (Hiệu): Của hai quan hệ tƣơng thích R và S, kí hiệu R \ S gồm các
bộ chỉ thuộc R khơng thuộc S.
4.2 Các phép tốn tập hợp
Hai quan hệ khả hợp là 2 quan hệ có cùng bậc (Có số thuộc tính bằng nhau
và thuộc tính thứ i của quan hệ này có cùng miền trị với thuộc tính thứ i của
quan hệ kia.
41


- Phép hợp (Union): Cho 2 quan hệ khả hợp r(U) và s(U). Hợp của 2 quan
hệ r và s cho ta một quan hệ với tập thuộc tính U và các bộ là các bộ thuộc ít
nhất 1 trong 2 quan hệ r hoặc s
r  s= {t | tr hoặc ts}
Ví dụ cho 2 quan hệ r và s nhƣ sau:
SBD

HoTen

K1301

Lê Lan

SBD

HoTen

K1302


Trần Lê

K1305

Thi Hồng

K1303

Nguyễn An

K1304

Mai Ca

K1303

Nguyễn An

r  s=
SBD

HoTen

K1301

Lê Lan

K1302

Trần Lê


K1303

Nguyễn An

K1305

Thi Hồng

K1304

Mai Ca

VD2: r (A

B

C)

s(A

B

C)

a1

b1

c1


a1

b1

c1

a2

b1

c2

a2

b2

c2

a2

b2

c1

r  s = (A B

C)

a1


b1

c1

a2

b1

c2

a2

b2

c1

a2

b2

c2

- Phép giao (Intersect): Giao của 2 quan hệ khả hợp r(U) và S(U) cho ta
một quan hệ mới với tập thuộc tính U, các bộ là các bộ đồng thời thuộc 2 quan
hệ đó.
r  s= {t | tr và ts}
42



Ví dụ có 2 quan hệ r và s nhƣ sau:
SBD

HoTen

K1301

Lê Lan

K1302

Trần Lê

K1303

Nguyễn An

SBD
K1305
K1304
K1303

HoTen
Thi Hồng
Mai Ca
Nguyễn An

r  s=
SBD
K1303


HoTen
Nguyễn An

VD2: r (A

B

C)

s(A

B

C)

a1

b1

c1

a1

b1

c1

a2


b1

c2

a2

b2

c2

a2

b2

c1

r  s = (A

B

C)

a1

b1

c1

- Phép trừ (Substraction): Phép trừ quan hệ r(U) cho quan hệ khả hợp s(U)
cho ta một quan hệ mới với tập thuộc tính U và các bộ là các bộ thuộc r nhƣng

không thuộc s
r- s={t | tr và ts}
Ví dụ có 2 quan hệ r và s nhƣ sau:
SBD

HoTen

K1301

Lê Lan

K1302

Trần Lê

K1303

Nguyễn An

SBD
K1305
K1304
K1303

HoTen
Thi Hồng
Mai Ca
Nguyễn An

r- s =

SBD

HoTen

K1301

Lê Lan

K1302

Trần Lê

VD2: Cũng với 2 quan hệ r và s ở VD2 trên ta có
r- s (A

B

a2 b 1

c2

a2 b 2

c1

C)

43



- Phép tích Đề các (Catersion Product): Cho 2 quan hệ r(U) và s(V). Tích
đề các của r và s cho ta một quan hệ với tập thuộc tính U và V với các bộ
r x s = {tq | t  r và q  s}
Nếu r có t1 bộ, s có t2 bộ thì kết quả của phép tích đề các có bao nhiêu bộ?
(t1.t2 bộ)
Ví dụ có 2 quan hệ r và s nhƣ sau:
SBD
K1301
K1302

HoDem
Lê Lan
Trần Lê

Ten
Anh
Mai

NgaySinh
10/10/91
5/9/90

rxs=
SBD
K1301
K1301
K1302
K1302

HoDem

Lê Lan
Lê Lan
Trần Lê
Trần Lê

Ten
Anh
Mai
Anh
Mai

NgaySinh
10/10/91
5/9/90
10/10/91
5/9/90

VD2:
r(A

B

C)

s(D

E)

a1


b1

1

1

e1

a2

b2

2

2

e2

3

e3

r x s = p(A

B

C

D


E)

a1

b1

1

1

e1

a1

b1

1

2

e2

a1

b1

1

3


e3

a2

b2

2

1

e1

a2

b2

2

2

e2

a2

b2

2

3


e3

- Phép chia (Division): Cho 2 quan hệ r(U) và s(V), V U, s, đặt X=UV. Phép chia quan hệ r cho quan hệ s cho ta một quan hệ mới với tập thuộc tính
X và các bộ có dạng {t[X] | t r, q  s thì t[X],q r }
r s={t[X] | t r, q  s thì t[X],q r }
Ví dụ: cho quan hệ r

Quan hệ s
44


SBD

HoDem

Ten

K1301

Lê Lan

Anh

K1302

Trần Phƣơng

Mai

K1303


Hoàng Vân

Anh

K1301

Trần Lê

Mai

K1302

Lê Lan

Anh

r s=

HoDem
Lê Lan
Trần Lê

Ten
Anh
Mai

SBD
K1301


VD2:
r(A

B

C

D)

s(C

D)

a

b

c

d

c

d

a

b

e


f

e

f

b

c

e

f

e

d

c

d

e

d

e

f


a

b

d

e

rs= (A

B)

a

b

e

d

4.3 Các phép toán đặc biệt trên quan hệ
- Phép chọn (SELECTION)
Cho quan hệ r(U) tập thuộc tính U={A1,A2,…,An}. E là một biểu thức
logic phát biểu trên U. Phép chọn trên E cho ta một quan hệ mới có tập thuộc
tính U và các bộ thoả biểu thức E. Khi đó E gọi là biểu thức chọn (hay điều kiện
chọn) của quan hệ r trên tập thuộc tính U.
+ Các phép tốn trên E có thể là <, >, =, ≥, ≤, ≠, , , .
+ Ký hiệu: E(r)={t | tr và E(t) là đúng}
VD1: với quan hệ r:

45


MaSV
K1301
K1302
K1303

HoDem
Nguyễn An
Trần Lê
Lê Lan

Ten
Anh
Mai
Ninh

NgaySinh
10/10/91
5/9/90
15/3/89

DiaChi
Hoa Lƣ
Hoa Lƣ
Kim Sơn

MaNganh
TT

LK
VS

DiaChi
Hoa Lƣ
Hoa Lƣ

MaNganh
TT
LK

E : “DiaChi = Hoa Lƣ”
phép chọn E(r) sẽ cho ta quan hệ sau:
MaSV
K1301
K1302

HoDem
Nguyễn An
Trần Lê

Ten
Anh
Mai

NgaySinh
10/10/91
5/9/90

? E: “NgaySinh >1/1/1990”

VD2: Cho E: (A=a1)  (B=b2)và quan hệ
r (A

B

C

D)

E(r)= (A

thì

B

C

D)

a1

b1

c1

d1

a1

b2


c2

d1

a1

b2

c2

d1

a1

b2

c2

d2

a1

b2

c2

d2

a2


b1

c2

d1

a2

b2

c1

d1

- Phép chiếu (Project)
Cho quan hệ r(U), X là tập con của U, giả sử t là một bộ thuộc quan hệ r,
phép chiếu t[X] cho ta một quan hệ mới với các bộ là các bộ thuộc quan hệ r và
các thuộc tính là tập X..
Ký hiệu: X(r)={t[X] | t r}
VD3: Với quan hệ cho trong ví dụ của phép chọn ta thực hiện phép chiếu
với tập X: Mã SV, mã ngành
mã SV, mã ngành (r)=
MaSV
K1301
K1302
K1303

MaNganh
TT

LK
VS

VD4: Cho X=AB và quan hệ
r (A
a1

B
b1

C
c1

D)

X(r)=

thì

d1

(A
a1

46

B)
b1



a1

b2

c2

d1

a1

b2

a1

b2

c2

d2

a2

b1

a2

b1

c2


d1

a2

b2

a2

b2

c1

d1

- Phép kết nối (join)
Cho 2 quan hệ r(U) và s(V), giả sử AiU và BjV sao cho
dom(Ai)=dom(Bj). Gọi  là một trong 6 phép toán so sánh {<, >, =, ≥, ≤, ≠}.
Phép kết nối quan hệ r với thuộc tính Ai và quan hệ s với thuộc tính Bj cho ta
một quan hệ mới với tập thuộc tính là U  V và đƣợc các bộ đƣợc xác định bởi
r  s ={tq | tr, q s và t[A]  q[B] là đúng}
AB

Nếu  là phép toán bằng “=” thì phép kết nối gọi là phép kết nối bằng
Nếu  là phép toán bằng “=” và AiBjA gọi là phép kết nối tự nhiên, ký
hiệu là *. Ta có r * s = {tq | tr, q s và t[A] = q[A], AUV}
VD1: Cho quan hệ r1={SBD, Họ đệm, Tên, Ngày sinh, quê quán}
SBD
K1301
K1302
K1303


HoDem
Lê Lan
Trần Lê
Nguyễn An

Ten
Anh
Mai
Ninh

NgaySinh
10/10/91
5/9/90
15/3/89

QueQuan
Hoa Lƣ
Hoa Lƣ
Kim Sơn

Cho quan hệ r2={SBD, Đmôn1, Đmôn2, Đmôn3}
SBD

Dmon1

Dmon 2

Dmon 3


K1301
K1302
K1303

6
9
3

9
9
4

6
8
3

r1 * r2 =
SBD

HoDem

Ten

NgaySinh QueQuan

K1301 Lê Lan
Anh 10/10/91
K1302 Trần Lê
Mai 5/9/90
K1303 Nguyễn An Ninh 15/3/89

VD2: Cho r1 (A

B)

Hoa Lƣ
Hoa Lƣ
Kim Sơn
r2 (B C)

Dmon1 Dmon 2

Dmon 3

6
9
3

6
8
3

9
9
4
r3(A D)

a1 b 1

b 1 c1


a2

d1

a1 b 2

b 1 c2

a2

d2

47


a2 b 1

b 2 c1

a2 b 3

b 2 c2

a3

d3

r1*r3 (A

B


D)

a3 b 3
r1*r2 (A

B

C)

a1

b1

c1

a2

b1

d1

a1

b1

c2

a2


b1

d2

a1

b2

c1

a2

b3

d1

a1

b2

c2

a2

b3

d2

a2


b1

c1

a3

b3

d3

a2

b1

c2

- Phép kết nối ngoài trái (Left Outer Join)
Kết nối ngoài trái của r và s bao gồm không chỉ những bộ là kết quả của
việc xếp cạnh nhau của 2 bộ t,u kết nối tự nhiên đƣợc với nhau, mà cịn bao gồm
những bộ có phần bên trái là một bộ t không kết nối đƣợc với bộ nào trong s,
phần bên phải là các giá trị null
r < s ={(t,u)| (t,u)r*s hoặc ((t, null, null..) và (us:t[A]≠u[A]))}
ở đây A là thuộc tính xuất hiện ở cả 2 lƣợc đồ quan hệ r và s
Ví dụ: Cho 2 quan hệ NCC
MaCty

TenCty

Dia_Chi


S1

Hồng Hồng

Hà nội

S2

Thái học

Ninh Bình

S3

Minh Hƣơng

Nam định

S4

Trần Anh

Hà Nội

S5

Mai Linh

Tp HCM


CUNG_UNG
Ma_Cty
S1
S2
S1
S2
S3
S4

Ma_SP
P1
P1
P2
P3
P3
P5

So_luong
5000
1000
2000
1500
500
3000
48


NCC
MaCty
S1

S1
S2
S2
S3
S4
S5

  CUNG_UNG
TenCty
Hoàng Hồng
Hoàng Hồng
Thái học
Thái học
Minh Hƣơng
Trần Anh
Mai Linh

Dia_Chi
Hà nội
Hà nội
Ninh Bình
Ninh Bình
Nam định
Hà Nội
Tp HCM

Ma_SP
P1
P2
P1

P1
P3
P5
Null

So_luong
5000
2000
1000
1000
1500
3000
null

- Phép kết nối ngoài phải (Right Outer Join)
Tƣơng tự kết nối ngoài trái của r và s bao gồm không chỉ những bộ là kết
quả của việc xếp cạnh nhau của 2 bộ t,u kết nối tự nhiên đƣợc với nhau, mà còn
bao gồm những bộ có phần bên phải là một bộ u không kết nối đƣợc với bộ nào
trong r, phần bên trái là các giá trị null
r



s ={(t,u)| (t,u)r*s hoặc (( null,… null, u) và (tr:t[A]≠u[A]))}

- Đặt lại tên cho quan hệ
Để đạt đƣợc quan hệ kết quả, có thể phải áp dụng nhiều phép toán quan hệ
liên tiếp. trong trƣờng hợp đó, chúng 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ó thể làm cho việc này trở nên đơn
giản hơn bằng cách áp dụng mỗi phép toán tại một thời điểm và tạo ra các quan

hệ kết quả trung gian, những quan hệ trung gian nhƣ vậy cần phải đặt tên.
Ví dụ: KQTG  NCC*CUNG_UNG
KQ  Ma_Sp=‟P2‟(KQTG)
Cũng có thể đặt lại tên thuộc tính trong các quan hệ trung gian và kết quả
cuối cùng, ta liệt kê tên mới của các thuộc tính trong dấu ngoặc đi kèm theo tên
quan hệ kết quả
Ví dụ: CUNG_UNG_P2(CTY, SOLUONG) Ma_Cty, so_luong(KQ)
4.4 Các phép toán quan hệ bổ sung
Các hàm tính tốn
Chúng ta hay gặp những dạng câu hỏi kiểu nhƣ phịng đó có bao nhiêu
nhân viên, trung bình lƣơng của các nhân viên trong một công ty là bao
nhiêu…Sau đây là một số hàm thƣờng dùng
SUM, AVERAGE, MAX, MIN, COUNT
Các hàm gộp nhóm
49


Sử dụng khi cần nhóm dữ liệu theo một tiêu chí nào đó, chẳng hạn tính
tổng số sinh viên q ở mỗi Huyện của Tỉnh Ninh Bình
Ta định nghĩa nhƣ sau:
<Các thuộc tính cơ sở để gộp nhóm>

F

<danh sách hàm tính tốn>(r)

Kết quả của phép gộp nhóm là một quan hệ. Nếu danh sách thuộc tính cơ
sở để gộp nhóm là rỗng thì hàm tính tốn áp dụng cho tất cả các bộ trong quan
hệ và quan hệ kết quả chỉ có một bộ
Ví dụ: có quan hệ NHAN_VIEN nhƣ sau:

Ma_NV
1
2
3
4
5
6
7
8
9
10

HO_TEN
Nguyễn An
Trần Cƣờng
Lê Lan
Trịnh Khanh
Thu Cúc
Xuân Giao
Mai Lan
Lê Chi
Hoàng Hải
Hoàng Minh

NG_SINH
10/10/91
5/9/90
15/3/89
6/7/89
12/10/89

3/7/90
1/3/80
5/3/82
7/12/85
15/7/84

MA_PHONG
P1
P2
P1
P4
P1
P2
P4
P3
P4
P1

LUONG(x100.000)
150
230
170
310
230
180
220
310
80
250


Nếu thực hiện phép gộp nhóm
MA_PHONG

F

COUNT Ma_NV, AVERAGE LUONG(NHANVIEN)

Quan hệ kết quả sẽ là
MA_PHONG
P1
P2
P3
P4

COUNT_MA_NV
4
2
1
3

Nếu thực hiện phép gộp

F

COUNT Ma_NV, AVERAGE LUONG(NHANVIEN)

Quan hệ kết quả sẽ là
COUNT_MA_NV AVERAGE_LUONG
10
213


50

AVERAGE_LUONG
200
205
310
203,33


Chƣơng 5
Ngơn ngữ truy vấn dữ liệu SQL
Giới thiệu:
Để có thể lấy đƣợc thông tin từ một cơ sở dữ liệu quan hệ, ngƣời dùng phải
hiểu rõ ý nghĩa, mục đích của các thao tác trên cơ sở dữ liệu. Cùng với phép tính
đó, ở chƣơng này cịn trình bày một ngôn ngữ đƣợc sử dụng chủ yếu trong các
hệ quản trị cơ sở dữ liệu quan hệ( ngôn ngữ SQL). Những kiến thức cơ bản về
ngôn ngữ SQL giúp ngƣời học có thể diễn đạt đƣợc các câu lệnh truy vấn đối
với cơ sở dữ liệu quan hệ
Mục tiêu:
- Hiểu cách xây dựng cơ sở dữ liệu trên Access.
- Hiểu cấu trúc các câu lệnh truy vấn SQL.
- Xây dựng đƣợc một số cơ sở dữ liệu trên Access.
- Viết các câu lệnh truy vấn đến cơ sở dữ liệu bằng SQL.
- Nghiêm túc, tỉ mỉ trong việc học và làm bài tập.
Nội dung chính:
5.1 Cách tạo quan hệ bằng Access
Trên tab Công cụ Cơ sở dữ liệu, trong nhóm Quan hệ, bấm Quan hệ.

Hình 5.1. Tab Database Tools


Nếu ta vẫn chƣa xác định đƣợc mối quan hệ nào, hộp thoại Hiện Bảng sẽ
tự động xuất hiện. Nếu hộp thoại khơng xuất hiện, trên tab Thiết kế, trong
nhóm Quan hệ, hãy bấm Hiện Bảng.
Hộp thoại Hiện Bảng hiển thị tất cả bảng và truy vấn trong cơ sở dữ liệu.
Để chỉ xem bảng, hãy bấm Bảng.
- Chọn một hoặc nhiều bảng, rồi bấm Thêm. Sau khi bạn đã hoàn thành
việc thêm bảng, hãy bấm Đóng.
- Kéo một trƣờng (thƣờng là khóa chính) từ một bảng sang trƣờng chung
(khóa ngoại) trong bảng khác. Để kéo nhiều trƣờng, hãy nhấn phím Ctrl, bấm
vào mỗi trƣờng rồi kéo chúng.
51


Hộp thoại Sửa Quan hệ xuất hiện.

Hình 5.2. Hộp thoại Edit Relationships

- Xác nhận rằng tên trƣờng đã hiện là trƣờng chung cho mối quan hệ. Nếu
một tên trƣờng không đúng, hãy bấm vào tên trƣờng và chọn trƣờng thích hợp từ
danh sách.
- Để bắt buộc tính tồn vẹn tham chiếu cho mối quan hệ này, hãy chọn
hộp Bắt buộc Tính tồn vẹn Tham chiếu.
- Bấm Tạo.
Access vẽ một đƣờng quan hệ giữa hai bảng. Nếu ta đã chọn hộp kiểm Bắt
buộc Tính tồn vẹn Tham chiếu, đƣờng quan hệ đó sẽ xuất hiện dầy hơn ở hai
đầu cuối. Ngồi ra, chỉ khi nào ta đã chọn hộp kiểm Bắt buộc Tính tồn vẹn
Tham chiếu, số 1 sẽ xuất hiện trên phần dầy ở một bên của đƣờng quan hệ và ký
tự vô cực (∞) sẽ xuất hiện trên phần dầy bên kia của đƣờng quan hệ.
Ghi chú:

+Để tạo quan hệ một đối một: Cả hai trƣờng chung (thƣờng là các trƣờng
khóa chính và khóa ngoại) phải có chỉ mục duy nhất. Điều đó có nghĩa là thuộc
tính Đã lập chỉ mục cho những trƣờng này nên đƣợc đặt là Có (Khơng Trùng
nhau). Nếu cả hai trƣờng đều có một chỉ mục duy nhất, Access sẽ tạo ra mối
quan hệ một đối một.
+ Để tạo quan hệ một đối nhiều: Trƣờng trên một phía (thƣờng là khóa
chính) của mối quan hệ phải có chỉ mục duy nhất. Điều đó có nghĩa là thuộc
tính Đã lập chỉ mục cho trƣờng này nên đƣơc đặt là Có (Khơng Trùng nhau).
Trƣờng ở bên nhiều khơng nên có một chỉ mục duy nhất. Nó có thể có một chỉ
mục nhƣng nó phải cho phép trùng nhau. Điều đó có nghĩa là thuộc tính Đã lập
chỉ mục cho trƣờng này nên đƣợc đặt làKhông hoặc là Có (Đồng ý Trùng nhau).
Khi một trƣờng có một chỉ mục duy nhất mà trƣờng khác khơng có, Access tạo
ra mối quan hệ một- nhiều.
52


Tạo mối quan hệ trong ứng dụng Access
Cửa sổ Mối quan hệ không s n dùng trong ứng dụng Access. Thay vì tạo
một mối quan hệ trong ứng dụng Access, bạn tạo một trƣờng tra cứu, trƣờng này
lấy giá trị từ một trƣờng liên quan trong bảng khác. Ví dụ, giả sử ta có bảng
Nhân viên và bạn muốn thêm tra cứu vào bảng Vùng để có thể hiển thị cho biết
mỗi nhân viên làm việc trong vùng nào.
Ghi chú:
Trƣờng mà tra cứu của ta sẽ dùng làm nguồn giá trị phải tồn tại trƣớc khi
ta có thể tạo trƣờng tra cứu.
Đây là cách để bạn tạo một trƣờng tra cứu:
1. Mở bảng mà ta muốn tạo trƣờng tra cứu mới bằng cách bấm đúp vào
bảng đó trong ngăn dẫn hƣớng. (Mẹo: ta có thể cần bấm vào Trang đầu > Ngăn
Dẫn hƣớng để xem các bảng s n dùng).
Trong ví dụ trên đây, hãy bấm vào bảng Nhân viên.

2. Bấm vào cột Tên Trƣờng ngay bên dƣới trƣờng cuối cùng trong bảng và
nhập tên cho trƣờng tra cứu mới của bạn.
Trong ví dụ này, hãy nhập tên trƣờng là Vùng.
3. Trong cột Kiểu Dữ liệu, bấm vào mũi tên và chọn Tra cứu.

Hình 5.3. Trình hướng d n Tra cứu khởi động

53


4.Trên trang đầu tiên của Trình hƣớng dẫn Tra cứu, hãy chọn Tôi muốn
trƣờng tra cứu lấy giá trị từ một truy vấn hoặc bảng khác. Các tùy chọn khác sẽ
xuất hiện trong hộp thoại.
5. Chọn tên của bảng hoặc truy vấn sẽ cung cấp giá trị cho tra cứu của ta.
Trong ví dụ này, hãy chọn

ng: V ng.

Hình 5.4. Hộp thoại Lookup Wizard

6. Sau khi chọn bảng, ta hãy dùng danh sách Giá trị nào ta muốn hiển thị
trong tra cứu của mình để chọn trƣờng mà bạn muốn dùng làm giá trị hiển thị
cho trƣờng tra cứu của mình. Theo mặc định, Access sẽ chọn trƣờng văn bản
đầu tiên nó tìm thấy trong bảng đã chọn.
7.Trong ví dụ này, ta sẽ giữ nguyên trƣờng đã chọn, trƣờng Tiêu đề, làm
giá trị hiển thị.
8. Nếu ta muốn, hãy dùng danh sách Bạn có muốn sắp xếp mục trong tra
cứu của mình khơng để đặt sắp xếp.
Bên dƣới mục Điều gì sẽ xảy ra khi một bản ghi trong bảng "Vùng" bị xóa
bỏ, hãy đặt kiểu quan hệ mà ta muốn có giữa hai bảng và cho biết liệu ta có

muốn bắt buộc tính tồn vẹn tham chiếu hay khơng. (Tên của bảng trong câu hỏi
này khác nhau phụ thuộc vào việc ta đã chọn bảng nào trong bƣớc 5.)
Trình hƣớng dẫn Tra cứu sẽ mặc định Ngăn chặn việc xóa bỏ nếu có các
bản ghi tƣơng ứng trong bảng “Nhân viên”, vì đây là sự lựa chọn an tồn nhất
trong hầu hết các trƣờng hợp. Trong ví dụ này, tùy chọn này có nghĩa là bạn
khơng thể xóa bỏ một giá trị từ bảng Vùng nếu vùng đó đang đƣợc sử dụng
trong các bản ghi của bảng Nhân viên. Vì vậy, nếu bản ghi nhân viên đang sử
dụng một vùng, chẳng hạn nhƣ vùng "Tây" và bạn tìm cách xóa vùng "Tây"
54


trong bảng Vùng, thì Access sẽ ngăn khơng cho bạn xóa bỏ nó. Trong trƣờng
hợp này, ta cần phải đặt lại tất cả các bản ghi nhân viên vốn đang sử dụng giá trị
đó thành một giá trị khác, trƣớc khi ta có thể xóa bỏ vùng "Tây" trong bảng
Vùng. Tùy chọn cuối cùng có thể hữu ích trong ví dụ này, vì nó sẽ cho phép ta
xóa vùng "Tây" trong bảng Vùng. Giá trị vùng sẽ tự động đƣợc loại bỏ khỏi các
bản ghi Nhân viên đã đƣợc đặt là "Tây", để lại giá trị trống. Chọn tùy chọn thứ
hai sẽ xóa bỏ tất cả các bản ghi nhân viên ra khỏi bảng Nhân viên đã đƣợc đặt
vùng là “Tây”. Điều đó gọi là xóa bỏ xếp tầng và nó sẽ xóa bỏ nhiều dữ liệu hơn
so với ý định của ta trong ví dụ này. Hãy cẩn thận khi chọn tùy chọn đó.
5.2 Câu lệnh truy vấn
5.2.1 Biểu thức
Là sự kết hợp một cách hợp lệ giữa các thuộc tính, các tốn tử và các hàm.
Sau đây sẽ là các tốn tử và các hàm thơng dụng nhất. (Chú ý: Cách sử dụng các
toán tử và các hàm này cịn tùy thộc vào câu lệnh SELECT của ngơn ngữ đƣợc
sử dụng).
5.2.2 Câu lệnh SQL
a. Lệnh CREATE TABLE
Cú pháp: CREATE TABLE Tên_bảng(Tên_cột Loại_dữ_ liệu [Not
Null]),Primary Key( Tên khố chính ),Foreign Key( Tên khố ngồi),…);

Trong đó:
- Tên_ b ng: là xâu kí tự khơng chứa các ký tự trống và khơng trùng với
các từ khố
- Tên _cột: là xâu kí tự bất kì khơng chứa kí tự trống, tên cột trong một
bảng là duy nhất, thứ tự các cột không quan trọng
- Loại_dữ_liệu: gồm một số loại dữ liệu sau:
+ integer: số nguyên từ - 2147483648 đến 2147483647
+ smallinteger: số nguyên từ - 32768 đến 32767
+ decimal(n, p): số thập phân với độ dài tối đa là n kể cả p chữ số phần
thập phân (khơng tính dấu chấm thập phân). Từ khoá Number trong SQL đƣợc
dùng trong dạng dữ liệu này.
+ Float: số dấu phẩy động
+ Char(n): xâu kí tự có độ dài cố định n, (n<=255)
+ Varchar(n): xâu ký tự có độ dài biến đổi, độ dài xâu có thể từ 0 đến n và
đƣợc xác định tại thời điểm đƣa dữ liệu vào lƣu trữ.
55


+ Longvarchar: xâu kí tự có độ dài khơng cố định. Độ dài này có thể từ
4Kbs đến 32 Kbs
+ Date: dữ liệu dạng ngày tháng
- Ví dụ:
+ Tạo bảng sinh viên nhƣ sau:CREATE TABLE sinhvien(Hodem
Varchar(20) Not Null,Ten Varchar(15) Not Null,Nsinh Date,MaSV Varchar(5)
Not Null,Que Varchar(25),Hocluc Decimal(4,2),PRIMARY KEY (MaSV));
+ Tạo bảng đề tài nhƣ sau:
CREATE TABLE detai(MaDT Varchar(10) Not Null,TenDT Varchar(30)
Not Null,ChuNhiem Varchar(25),Kinhphi Decimal(10,2),KetQua Decimal(4,2),
PRIMARY KEY (MaDT));
+ Tạo bảng sinh viên đề tài nhƣ sau:

CREATE TABLE sv_detai(MaSV Varchar(5) Not Null,MaDT
Varchar(10)
Not
Null,NoiTT
Varchar(30)
Not
Null,KM
Decimal(10,2),PRIMARY KEY (MaDT, MaSV),FOREIGN KEY (MaDT)
REFERENCES detai(MaDT),FOREIGN KEY (MaSV) REFERENCES
sinhvien(MaSV));
b. Lệnh INSERT INTO
- Cú pháp:INSERT INTO Tên_bảng
VALUES(gia trị1, giá trị 2, …, giá trị n);
trong đó: giá trị1, giá trị 2, …, giá trị n là những giá trị để chèn vào các cột
tƣơng ứng từ cột 1 đến cột n của một bản ghi trong bảng
- Chức năng:Chèn một bản ghi vào bảng
- Ví dụ:Chèn vào bảng sinh viên một bản ghi nhƣ sau:
INSERT INTO sinhvien
VALUES(“Nguyễn Hồng”, “Sơn”, “2/12/1976”,”A420”,”Hà Nội”,9.5);
c. Lệnh DELETE
- Cú pháp:DELETE FROM Tên_bảng
WHERE <Điều kiện xoá >;
- Chức năng:Xoá các bản ghi trong bảng thoả mãn điều kiện xố
- Ví dụ:Xóa những sinh viên có học lực <5 trong bảng sinh viên
DELETE FROM sinhvien
WHERE (HocLuc<5);
56


d. Lệnh UPDATE

- Cú pháp:UPDATE Tên_bảng
SET Giá_trị_mới
WHERE <Điều kiện sửa đổi>;
- Chức năng:Sửa đổi giá trị các trƣờng của các bản ghi trong bảng
- Ví dụ:Sửa học lực của sinh viên có MaSV = “B401” lên 8
UPDATE sinhvien
SET HocLuc = 8
WHERE MaSV = “B401”;
e. Lệnh SELECT
SELECT là một lệnh hỏi dữ liệu cơ bản trong SQL. Có rất nhiều mệnh đề
con tuỳ chọn trong câu lệnh SELECT, vì vậy chúng ta sẽ làm quen lần lƣợt từng
bƣớc một.
Cấu trúc SELECT – FROM – WHERE
Cấu trúc SELECT – FROM – WHERE là cấu trúc đơn giản nhất của SQL.
- Cú pháp:
SELECT <Danh sách các cột>
FROM <Danh sách bảng>
WHERE <Điều kiện>;
Trong đó:
+ <Danh sách các cột>: Là danh sách các cột hoặc biểu thức của các cột
đƣợc đƣa vào kết quả truy vấn
+ <Danh sách bảng>: Là danh sách các bảng mà từ đó các cột đƣợc lấy ra
+ <Điều kiện>: Là một biểu thức logic xác định các bản ghi thoả mãn điều
kiện của câu lệnh.
- Ví dụ 1: Hiển thị họ đệm, tên của bảng sinh viên:
SELECT Hodem,Ten
FROM sinhvien;
- Ví dụ 2: Hiển thị họ đệm, tên, học lựccủa những sinh viên có học lực >=8
trong bảng sinh viên:
SELECT Hodem, Ten, HocLuc

57


FROM sinhvien
WHERE HocLuc>=8;
f. Truy vấn sử dụng các hàm MAX, MIN, AVG, SUM, COUNT
* Hàm MAX
- Chức năng:Cho giá trị lớn nhất trong cột
- Ví dụ:Hiển thị học lực cao nhất trong danh sách sinhvien
SELECT Max(HocLuc) AS DiemCaoNhat
FROM sinhvien;
( AS để đặt tên cho cột Max(HocLuc))
* Hàm MIN
- Chức năng:Cho giá trị nhỏ nhất trong cột
- Ví dụ:Hiển thị học lực nhỏ nhất trong danh sách sinhvien
SELECT Min(HocLuc) AS DiemThapNhat
FROM sinhvien;
* Hàm AVG
- Chức năng: Cho giá trị tung bình cộng trong cột
- Ví dụ: Hiển thị học lực trung bình của cột học lực trong danh sách
sinhvien
SELECT AVG(HocLuc) AS DiemTB
FROM sinhvien;
* Hàm SUM
- Chức năng: Cho tổng giá trị trong cột
- Ví dụ: Hiển thị tổng học lực của cột học lực trong danh sách sinhvien
SELECT SUM(HocLuc) TongHL
FROM sinhvien;
* Hàm COUNT
- Chức năng: Cho biết số phần tử ( hàng) trong cột

- Ví dụ: Đếm số bản ghi (hàng) của cột học lực trong danh sách sinhvien
SELECT COUNT(HocLuc) AS SoSinhVien
58


FROM sinhvien;
* Truy vấn sử dụng các phép AND, OR, IN, BETWEEN, NOT, ALL
+ AND: Phép và logic
+ OR: Phép hoặc logic
+ IN: Là phần tử của…
+ BETWEEN: Là phần tử giứa các phần tử …
+ NOT: Phép phủ định
+ ALL: Là tất cả những phần tử …
- Ví dụ 1: Đƣa ra danh sách những sinh viên có điểm >= 9 và có quê = “Hà
Nội”
SELECT *
FROM sinhvien
WHERE (diem>=9) AND ( que = “Hà Nội‟);
- Ví dụ 2: Đƣa ra danh sách những sinh viên có quê = “Thái Bình” hoặc
“Thái Nguyên”
SELECT *
FROM sinhvien
WHERE (que = “Thái Bình”) OR (que = “Thái Nguyên”);
- Ví dụ 3: Đƣa ra danh sách những nhân viên có kết quả là 8,9,10
SELECT *
FROM sv_dtai
WHERE KetQua IN (8, 9, 10);
- Ví dụ 4: Đƣa ra danh sách những sinh viên có kết quả nằm trong khoảng
[8,10]
SELECT *

FROM sv_dtai
WHERE KetQua BETWEEN 8 and 10;
- Ví dụ 5: Đƣa ra danh sách những sinh viên có quê không phải là “Hà
Nội”
SELECT *
FROM sinhvien
59


WHERE que NOT(SELECT que
FROM sinhvien
WHERE (que = ”Hà Nội”));
- Ví dụ 6: Hiển thị tất cả kết quả của sinh viên
SELECT ALL KetQua
FROM sv_detai;
Truy vấn thay đổi tên cột, tên bảng và hiển thị các cột từ nhiều bảng khác
nhau.
- Muốn hiển thị các cột từ nhiều bảng khác nhau thì trong câu lệnh
SELECT chúng ta phải làm nhƣ sau:
SELECT < Danh sách Tên_bang.Tên_cột>
FROM <Danh sách Tên_bảng>
WHERE <Điều kiện nối bảng>;
- Có thể đặt tên các cột trong kết quả các truy vấn bằng cách đặt tên mới
vào sau cột đƣợc chọn ngăn cách bởi từ khoá AS, tƣơng tự ta có thể đặt tên mới
cho các bảng
Ví dụ: Hiển thị danh sách sinh viên bao gồm họ đệm, tên, kết quả từ bảng
sinhviên và bảng sv_dt:
SELECT sinhvien.HoDem AS Ho, sinhvien.Ten AS Ten, sv_dt.KetQua AS
KQ
FROM sinhvien AS sv, sv_dt AS sd

WHERE (sv.MaSV = sd.MaSV);
Truy vấn sử dụng lƣợng từ DISTINCT/ ALL
* Để tránh tình trạng đƣa ra các bộ (hàng/bản ghi) trùng lặp trong các kết
quả truy vấn thì SQL có lƣợng từ DISTINCT.
Ví dụ: Hiển thị các mã đề tài đƣợc sinh viên đăng ký trong bảng đề tài
SELECT DISTINCT MaDT
FROM sinhvien;
* Để hiển thị tất cả các hàng (lấy cả các hàng có giá trị trùng nhau ) ta
dùng lƣợng từ ALL
Ví dụ: Hiển thị tất cả các MaDT mà bảng sv_dtai có
60


SELECT ALL MaDT
FROM sv_dtai;`
Chú ý: Ngầm định (nếu không viết Distinct/All) thì máy hiểu là All
g. Truy vấn sử dụng mệnh đề GROUP BY
- Để hiển thị các bản ghi theo nhóm ta dùng mệnh đề GROUP BY
- Ví dụ: Hiển thị bảng đề tài theo nhóm mã đề tài
SELECT MaDT
FROM detai
GROUP BY MaDT;
h. Truy vấn có sử dụng mệnh đề HAVING
- Mệnh đề HAVING thƣờng đƣợc sử dụng cùng mệnh đề GROUP BY.
Sau HAVING là biểu thức điều kiện. Biểu thức điều kiện này khơng tác động
vào tồn bảng đƣợc chỉ ra ở mệnh đề FROM mà chỉ tác động lần lƣợt từng
nhóm các bản ghi đã chỉ ra tại mệnh đề GROUP BY.
- Ví dụ: Đếm xem có bao nhiêu đề tài đã đƣợc sinh viên đăng ký tham gia
SELECT MaDT
FROM detai

GROUP BY MaDT
HAVING COUNT(*);
i. Truy vấn có sử dụng mệnh đề ORDER BY
- Mệnh đề ORDER BY đƣợc dùng để sắp xếp dữ liệu trong bảng theo
chiều tăng hoặc giảm (ASC hoặc DESC) của một cột nào đó.
- Mệnh đề ORDER BY nếu đứng sau GROUP BY thì miền tác động của
sắp xếp là trong từng nhóm của cột đƣợc chỉ ra trong GROUP BY.
- Ví dụ: Sắp xếp bảng sinhvien theo chiều giảm dần của cột học lực
SELECT *
FROM sinhvien
ORDER BY hl DESC;
Truy vấn lồng nhau
- Trong lệnh SELECT có thể đƣợc lồng nhiều mức
- Ví dụ1: Hiển thị sinh viên có học lực cao nhất
61


SELECT *
FROM sinhvien
WHERE hl = (SELECT MAX (hl)
FROM sinhvien);
- Ví dụ 2: Hiển thị hođệm,tên của những sinh viên có kết quả >= 9 và có
tên đề tài là Access
SELECT hodem,ten
FROM sinhvien
WHERE MaSV IN (SELECT MaSV
FROM sv_dtai
WHERE (kq >= 9) AND
( MaDT IN ( SELECT MaDT
FROM detai

WHERE tendt = “Access”)));
BÀI TẬP CHƢƠNG 5
Bài 1: Trình bày cú pháp và chức năng của câu lệnh SQL.
Bài 2: QUẢN LÝ THI TỐT NGHIỆP PTCS
Một phòng giáo dục huyện muốn lập một hệ thống thông tin để quản lý
việc làm thi tốt nghiệp phổ thông cơ sở. Công việc làm thi đƣợc tổ chức nhƣ
sau:
Lãnh đạo phòng giáo dục thành lập nhiều hội đồng thi (mỗi hội đồng thi
gồm một trƣờng hoặc một số trƣờng gần nhau). Mỗi hội đồng thi có một mã số
duy nhất (MAHĐT), một mã số hội đồng thi xác định tên hội đồng
thi(TENHĐT), họ tên chủ tịch hội đồng(TENCT), địa chỉ (ĐCHĐT),điện
thoại(ĐTHĐT).
Mỗi hội đồng thi đƣợc bố trí cho một số phịng thi, mỗi phịng thi có một
số hiệu phòng(SOPT) duy nhất, một phòng thi xác định địa chỉ phòng thi
(ĐCPT). Số hiệu phòng thi đƣợc đánh số khác nhau ở tất cả các hội đồng thi.
Giáo viên của các trƣờng trực thuộc phòng đƣợc điều động đến các hội
đồng để coi thi, mỗi trƣờng có thể có hoặc khơng có thí sinh dự thi, mỗi trƣờng
có một mã trƣờng duy nhất (MATR), mỗi mã trƣờng xác định một tên
trƣờng(TENTR),địa chỉ (ĐCTR), loại hình đào tạo (LHĐT) (Cơng lập, chuyên,
bán công, dân lập, nội trú,…). Giáo viên của một trƣờng có thể làm việc tại
nhiều hội đồng thi. Một giáo viên có một mã giáo viên(MAGV), một mã giáo
62


viên xác định tên giáo viên (TENGV), chuyên môn
(CHUYENMON), chức danh trong hội đồng thi(CHUCDANH)

giảng

dạy


Các thí sinh dự thi có một số báo danh duy nhất(SOBD), mỗi số báo danh
xác định tên thí sinh(TENTS), ngày sinh (NGSINH), giới tính (PHAI), mỗi thí
sinh đƣợc xếp thi tại một phịng thi nhất định cho tất cả các mơn, mỗi thí sinh có
thể có chứng chỉ nghề (CCNGHE) hoặc khơng (thuộc tính CCNGHE kiểu chuỗi,
CCNGHE=”x” nếu thí sinh có chứng chỉ nghề và CCNGHE bằng rỗng nếu thí
sinh khơng có chứng chỉ nghề).Thí sinh của cùng một trƣờng chỉ dự thi tại một
hội đồng thi.
Mỗi mơn thi có một mã mơn thi duy nhất(MAMT), mỗi mã môn thi xác
định tên môn thi(TENMT). Giả sử tồn bộ các thí sinh đều thi chung một số
môn do sở giáo dục quy định. Mỗi môn thi đƣợc tổ chức trong một buổi của một
ngày nào đó.
Ứng với mỗi mơn thi một thí sinh có một điểm thi duy nhất(ĐIEMTHI)
Dựa vào phân tích ở trên, giả sử ta có lƣợc đồ CSDL sau:
Q1: HĐ(MAHĐT,TENHĐT, TENCT, ĐCHĐT,ĐTHĐT)
Q2: PT(SOPT,ĐCPT,MAHĐT)
Q3: TS(SOBD, TENTS,NGSINH,PHAI,CCNGHE, MATR,SOPT)
Q4: MT(MAMT,TENMT,BUOI,NGAY)
Q5:GV(MAGV,TENGV,CHUYENMON,CHUCDANH,MAHĐT,MATR)
Q6: TR(MATR,TENTR,ĐCTR,LHĐT)
Q7: KQ(SOBD,MAMT,ĐIEMTHI)
Yêu cầu:
a) Hãy xác định khóa cho từng lƣợc đồ quan hệ.
b) Tìm tất cả các ràng buộc tồn vẹn có trong CSDL trên.
c) Dựa vào lƣợc đồ CSDL đã thành lập, hãy thực hiện các câu hỏi sau đây
bằng ngôn ngữ đại số quan hệ.
Bài 3: Danh sách các thí sinh thi tại phịng thi có số hiệu phịng thi (SOPT)
là “100”. u cầu các thơng tin:SOBD,TENTS,NGSINH,TENTR
Bài 4: Kết quả của mơn thi có mã mơn thi (MAMT) là “T” của tất cả các
thí sinh có mã trƣờng(MATR) là “NTMK”, kết quả đƣợc sắp theo chiều giảm

dần của điểm thi(ĐIEMTHI). Yêu cầu các thông tin:SOBD,TENTS, ĐIEMTHI

63


Bài 5: Kết quả thi của một học sinh có SOBD là MK01. Yêu cầu :
TENMT,ĐIEMTHI
Bài 6: Tổng số thí sinh có chứng chỉ nghề(CCNGHE) của mỗi trƣờng,
thơng tin cần đƣợc sắp theo chiều tăng dần của TENTR. Yêu cầu các thông tin:
MATR, TENTR, SOLUONGCC

64


×