Chương 2 NGÔN NGỮ THAO TÁC DỮ LIỆU
Đ
ố
i
v
ớ
i
đ
a
s
ố
n
g
ư
ờ
i
s
ử
d
ụ
ng,SQL
đ
ư
ợ
cx
e
mnhưlàc
ô
n
g
c
ụ
h
ữuhiệu
đ
ểt
h
ự
c
h
iệncácyêu
c
ầutruyvấnvàthaotáctrêndữliệu.T
r
ongc
h
ươngn
à
y,ta
s
ẽbànl
u
ậ
n
đ
ếnnhómcáccâu
l
ệnhtrong
SQ
L
đượ
c
s
ử
d
ụ
ngcho
m
ụ
c
đ
íchn
à
y.Nhómcáccâu
l
ệ
nh
nàyđư
ợ
c
g
ọ
ichunglàngônn
g
ữ
t
h
a
o
tá
c
d
ữliệu(D
M
L
:DataMan
i
pulationL
a
ngu
a
ge) baog
ồ
m các câu lệnh sau:
•
SELECT: Sử
d
ụ
ng
đ
ểtruy x
u
ất
d
ữ liệu từ
m
ô
t
h
oặc nhiều
b
ả
ng.
•
INSERT:
B
ổ sung
d
ữ
li
ệu.
•
UPDATE:Cập
nh
ật
d
ữ liệu
•
DELETE:Xoá
d
ữ liệu
Trong
s
ốcáccâulệnhnày,cót
h
ể
nó
iS
EL
E
C
Tlàcâu
l
ệ
n
htương
đố
ip
hứ
c
t
ạp vàđư
ợ
c
s
ử
d
ụ
ngnhi
ề
utrong
c
ơ
s
ở
d
ữliệu.V
ớ
icâu
lệ
nhn
à
y,takhông
c
h
ỉ
t
hự
chiện cácyêucầutruyxuất
d
ữliệu
đơ
n
t
hu
ầ
n
m
àcòn
c
ót
h
ểt
hự
c
h
i
ệ
nđư
ợ
ccácyêucầu t
h
ố
ngkê
d
ữliệup
hứ
ctạp.C
ũ
ngchínhvìvậy,p
h
ần
đ
ầ
uc
ủ
ac
h
ươngnày
s
ẽ
t
ậptrung tư
ơ
ng
đố
inhiều
đ
ếnc
â
ulệnhSELECT.Cáccâu
l
ệnh
I
N
SERT,U
P
D
A
TEvàDELETE
đ
ư
ợ
c b
à
n l
u
ận
đ
ến ở
c
u
ố
i c
h
ươ
ng
2.1Truy xuất dữ l
i
ệu với câu lệnh SELECT
Câu
lệnh
SELECT
đ
ư
ợ
c
s
ử
d
ụ
ng
đ
ể
truy
xu
ấ
t
d
ữ
liệu
từ
các
dòng
và
các
c
ộ
t
củ
a
m
ộ
t hay nhiều
b
ảng, khung nhìn. Câu lệnh này có t
h
ể dùng
đ
ể t
h
ự
c
h
iện
phép
c
h
ọ
n (t
ứ
c là
truy
xuất
m
ộ
t
tập
con
các
dòng
trong
m
ộ
t
hay
nh
i
ều
b
ảng),
phép
chi
ế
u
(tức
là
truy
xu
ất
m
ộ
t
tập
con
các
c
ộ
t
trong
m
ộ
t
hay
nhiều
b
ảng)
và
phép
n
ố
i
(t
ứ
c
là
liên
k
ết
các dòng
trong
hai
hay
nh
i
ều
b
ả
ng
đ
ể
truy
x
u
ất
d
ữ
liệu).
N
goài
ra,
c
â
u
lệnh
n
à
y
còn
cung cấp k
h
ả
n
ă
n
g
t
hự
c
hiện các thao tác truy v
ấ
n và t
h
ố
ng kê
d
ữ liệu
p
h
ứ
c tạp khác.
Cúph
á
p chung
c
ủ
a câu
l
ệnhSELE
C
T códạng:
SELECT [ALL | DISTINCT][TOP n] danh_sach_chon
[INTO ten_bang_moi]
FROM danh_sach_bang/khung_nhin
[WHERE dieu_kien]
[HAVING dieu_kien]
[ORDER BY cot_sap_xep]
[COMPUTER danh_sach_ham_gop [BY danh_sach_cot]]
Điềuc
ầ
n
l
ư
uý
đ
ầ
ut
i
ên
đố
i
v
ớ
icâu
l
ệnhnàylàcácthànhphầnt
r
ongc
â
ul
ệ
nh
SELECT
n
ếuđư
ợ
c
s
ử
d
ụ
ngphảituântheo
đ
úng
t
hứ
t
ự
n
h
ưtrong
c
úph
á
p.N
ế
ukhông, câu lệ
n
h
s
ẽ
đ
ư
ợ
c xemlà không h
ợ
p lệ.
Câu
lệ
nh
S
E
LE
C
T
đư
ợ
c
s
ử
d
ụ
n
g
đ
ểtác
đ
ộ
nglêncác
b
ảng
d
ữliệuvà
k
ếtq
u
ả c
ủ
acâulệ
n
hc
ũ
ngđượchiểnt
h
ị
d
ư
ớ
i
d
ạng
b
ảng,t
ứ
clà
m
ộ
ttập
hợ
pcácdòngvàcác c
ộ
t (ng
o
ại trừ trườ
n
g
h
ợ
p
s
ử
d
ụ
ngcâu
l
ệnh
S
E
LE
C
Tv
ớ
i
m
ệ
n
h
đ
ề
C
OM
PU
TE).
2.1.1Mệ
n
h
đ
ềFROM
Mệnh
đ
ề
FROM
trong
câu
lệ
nh
S
E
LE
C
T
đư
ợ
c
s
ử
dung
n
h
ằm
c
h
ỉ
đ
ịnh
các
b
ả
ng và
khung
nh
ì
n
cầ
n
t
r
uy
x
u
ất
d
ữ
liệu.
S
a
u
F
R
OM
là
danh
sách
tên
c
ủ
a
cá
c
bảng
và khung
nhìn
tham
gia
vào
truy
v
ấn,
tên
c
ủ
a
cá
c
b
ảng
và
khung
nhìn
đ
ư
ợ
c
phân
cách
nh
a
u
b
ở
i
d
ấ
u p
h
ẩy.
Tacó
t
hể
s
ử
d
ụ
ngc
á
cbíd
a
nhchocácb
ả
ngh
a
ykhungnh
ì
nt
r
ongcâu
l
ệ
nh SELE
C
T
.Bíd
a
nh
đư
ợ
cg
á
ntrong
m
ệnh
đ
ềFROMbằ
n
g
các
h
c
h
ỉ
đ
ị
nhbídanhng
a
y sau tên
b
ảng.
Ví d ụ2.3: câu l ệnh s a u g á n bí danh làa c h obảng khoa SELECT * FROM khoa a 2.1.2Danhsáchc h ọ ntrongcâulệnhSELECT Danh sách c h ọ n t r ong câu l ệnh SELECT đư ợ c s ử dụ ng đ ể c h ỉ đ ịnh các tr ư ờ ng, các b i ểu t h ứ c cần h iển t h ị trong các c ộ t c ủ a k ết q u ả truy v ấ n. Các trư ờ ng, các b i ểu t h ứ c đ ư ợ c c h ỉ đ ị nh ng a y sau t ừ khoá SELECT và phân cách nhau b ở i d ấu p h ẩ y. Sử d ụ ng danh sách c h ọ n trong câu l ệnh SELECT bao g ồ m cá c t rườ n g h ợ p sau: a.C họ n t ấ t cả các c ộ ttrong b ảng Khic ầ n h iểnt h ịtất c ảcáctrư ờ ngtrongcácbảng, s ử d ụ ngkýtự*trongdanh sáchc họ n t h ayvìp h ải l iệtkêdanhsách t ấtcảcác c ộ t. Trongt r ườ n g h ợ pnày,các c ộ t đ ư ợ chi ể n t h ịtrong k ế tq u ảtruy v ấn s ẽtuântheothứ t ự m àchúng đ ãđư ợ c t ạorakhi b ảng đư ợ c đ ịnh ng h ĩa. b.Tên c ộ t trong danhsáchch ọ n Trongtr ư ờng hợ pcầnc h ỉ đ ị nhcụt h ểcác c ộ t cần h i ể n t h ịtrong k ết q u ả truy v ấn, tac h ỉ đ ịnhdanhsáchcáctên c ộ ttrongd a nhsáchc họ n.T h ứ t ực ủ acác c ộ ttrongkết qu ảtruy v ấntuân theo t h ứ tự c ủ a các trư ờ ng trong danh sách c h ọ n Lưu ý: N ếu truy v ấ n đư ợ c t h ự c hiện trên nh iề u b ảng/khung nhìn và trong các b ảng/khungnhìncócáct r ư ờ ngt r ùngtên t h ìtên c ủ an h ữ ngtr ư ờ ngnàyn ế ux u ấthiện trong d a nh sách ch ọ n p h ải đ ư ợ c v i ết d ư ớ i d ạ ng: tên_b ả ng.tên_tr ườ ng Ví d ụ2.6: SELECTmalop, tenlop, lop.makhoa, tenkhoa FROMlop, khoa WHERElop.malop = khoa.makhoa c.Thay đổ i tiêu đề các c ộ t Trong k ếtq u ảtruy v ấ n,tiêu đ ề c ủ acácc ộ t m ặc đ ị n h s ẽlàtên củ acáct r ư ờ ng tư ơ ng ứ ngtrongb ả ng.Tuynhi ê n , đ ểcáctiêu đ ềtrởn ê nth â nth iệ n h ơ n,tacót h ể đổ i tên các tiêu đ ề c ủ a các c ộ t. Để đ ặt tiêu đ ềcho m ộ t c ộ t nào đ ó, ta sử d ụ ngcáchviết: tieu_de_cot = ten_truong hoặc ten_truong AS tieu_de_cot hoặc ten_truong tieu_de_cot d. S ử d ụ n g c ấ utrúc CASEtrong danhsáchch ọ n Cấutrúc C A S Eđư ợ c s ử d ụ ngtrongdanhs á chch ọ nn h ằm t h a y đổ i k ếtq u ả c ủ a truyvấn t u ỳ th u ộ cvàocáctrư ờ ng h ợ p khác nhau. C ấ u trúc n à y có c ú pháp nhưsau: CASEbi ể u_th ứ c WHENbi ể u_th ứ c_ki ể m_tra THEN k ế t_qu ả [... ] [ELSEk ế t_qu ả _c ủ a_else] END ho ặc: CASE WHEN đ i ề u_ki ệ n THEN k ế t_qu ả [... ] [ELSEk ế t_qu ả _c ủ a_else] END e.H ằ ng và biểu thức trong danh sách ch ọ n Ngoàidanhsáchtrư ờ ng,trongd a nhsáchc h ọ nc ủ acâu l ệnh S E LECTcòncót h ể s ử d ụ ngcácb i ểut h ứ c. M ỗ i m ộ t biểut hứ ctrongdanhsáchc h ọ ntrở thành m ộ tc ộ ttro n g k ết q u ả truy v ấ n. f.Lo ạ ibỏ cácdòng d ữ liệu trùng nhau trong k ết q u ảtruy v ấ n Trong k ết q u ảc ủ a tru y v ấn c ó t h ể x u ất hiện các dòng d ữliệutrùngnhau. Để l o ại b ỏ bớ t các dòng này, ta c h ỉ đ ịnh thêm từ khóa DISTINCT ngay sau từ khoá SE LECT g.Giới h ạ n s ố lượng dòng t r ong kết quả truy v ấ n Kếtq u ảc ủ atruyvấn đ ư ợ chiểnt h ịt h ư ờ ng s ẽlà tấtcảcácdòng d ữliệutruyv ấ n đ ư ợ c.T r ongt rư ờ ng h ợ pc ầ n h ạnc h ế s ố l ượngcácdòngxuấthiệntrongkếtq u ả truy v ấn, ta c h ỉ đ ịnh thêm m ệ n h đ ềTOP ng a y trư ớ c danh sách c h ọ n c ủ a câu l ệnh SELECT. Ví d ụ2.12: Câu lệ nh d ư ớ i đ â y h iểnt h ị h ọ t ênvàngàysinh c ủ a5sinhviên đ ầutiên trong d a nh sách SELECTTOP 5 hodem,ten,ngaysinh FROMsinhvien Ngoài cách c h ỉ đ ịnh c ụ s ố lượng dòng cần h iển t h ị t r ong kết q u ả truy v ấ n, ta có t h ể c h ỉ đ ị nh s ố l ư ợ ng các dòng c ần h iển th ị theo tỷ lệ ph ầ n trăm b ằng cách s ử d ụ ng thêm từ khoá P E R C ENT n h ư ở v í d ụ d ư ớ i đ ây. Vídụ 2.13: Câu l ệnh d ư ớ i đ â y h i ể nt h ị h ọtênvàngàysinh c ủ a10% s ốlượngsinhvi ê n h iện có trong bảng S I NHVIEN SELECTTOP 10 PERCENT hodem,ten,ngaysinh FROMsinhvien 2.1.3C h ỉ địn h đ iềukiệntruy vấ n d ữl i ệu Mệnh đ ềW H E R Et r ongc â u l ệnhSELECT đ ư ợ c s ử d ụ ngnhằm x ác đ ị n h các đ iều k iện đ ố i v ớ iviệctruyxuất d ữliệu.S a u m ệ n h đ ềW H E R Elà m ộ tbiểu t hứ c l ogic vàc h ỉ nh ữngdòngdữliệun à oth o ả mã n đ iều k i ệ n đ ư ợ cc h ỉ đ ị nh m ớ iđư ợ chiển t h ị trong kết q u ảtruy v ấn. Vídụ2.14: Câu l ệnh d ư ớ i đ âyh i ểnt h ịd a nhsáchcác m ôn h ọ ccó s ố đ ơn v ị họ ctrình l ớ n hơ n 3 SELECT* FROM monhoc WHEREsodvht>3 Trong m ệ n h đ ề WHERE t h ường sử d ụ ng: • Các toán tử k ết h ợ p đ i ề u k iện (AND, OR) • Các toán tửso sánh • Kiểm tr a giớ i h ạn c ủ a d ữ liệu(BETWEEN/ NOTBETWEEN) • Danh sách • Kiểm tra k h uôn d ạ n g d ữ liệu. • Các giá trị N U LL a.Các toán tử so sánh Toántử ýng h ĩa = Bằng > L ớ n h ơ n < N h ỏ h ơ n >= L ớ n h ơ nh o ặc b ằ ng <= N h ỏ h ơ nh o ặc b ằng <> Khác !> Không lớ n h ơ n !< Khôngn h ỏ h ơ n Ví d ụ2.15: Câu lệnh: SELECTmasv,hodem,ten,ngaysinh FROMsinhvien WHERE(ten='Anh') AND(YEAR(GETDATE())-YEAR(ngaysinh)<=20) chobiết m ã, h ọtênvàngàysinh c ủ acác s inhviêncótênlàAnh v à c ó tu ổ in h ỏ h ơ n ho ặc b ằng20 b.Kiểm tra g i ới h ạ ncủa dữ liệu Để k iểm tr a x em g iá t rị d ữliệu n ằmtrong(ngoài) m ộ tkh o ảngnào đ ó,ta s ử d ụ ng toán tử BETWEEN (NOT BETWEEN) như sau: Cá c h sử dụng Ýn gh ĩ a giá_trị BET W EEN a AND b a≤ giá_trị ≤ b giá_trị NOT BETWEEN a AND b (giá_t r ị < a) AND ( g iá_trị>b) Ví d ụ2.16: Câulệnh d ư ớ i đ âychob i ết h ọ t ênvàt u ổ ic ủ acácsinhviêncótênlàBình vàcó tu ổ i n ằmtrong kho ả ng từ 20 đ ế n 22 SELECThodem,ten,year(getdate())-year(ngaysinh) AS tuoi FROM sinhvien WHERE ten='Bình' AND YEAR(GETDATE())-YEAR(ngaysinh)BETWEEN 20 AND 22 c.Danh sách (IN và NOT IN) T ừkhoá I Nđư ợ c s ử d ụ ngkhitacầnc h ỉ đ ị n h đ iều k iệntìmk i ếm d ữliệuchocâu lệnhSELECTlà m ộ tdanhsáchcácgiátrị.Sau I N ( h o ặcNOTIN)cót h ểlà m ộ tdanh sách các giá trị h o ặc là m ộ t câu l ệ nhSELE C T khác. Vídụ2.17: Để b iếtdanhsáchcácmôn h ọ ccósố đ ơn v ị h ọ ctrìnhlà2,4h o ặc5,thay vì sử d ụ ngcâu l ệ nh SELECT* FROM monhoc WHEREsodvht=2 OR sodvht=4 OR sodvht=5 tacó t h ể s ử d ụ ng câu lệ nh SELECT* FROM monhoc WHEREsodvht IN (2,4,5) d.Toán tửLIKE và c á c k ý tự đ ạ i diện T ừk ho áLIKE(NOT L IK E ) s ử d ụ ngtrongcâulệnhSELECTnhằm m ôtả khuôndạngc ủ a d ữliệucầntìmk i ế m .Chúngt h ường đ ư ợ c k ết h ợ p v ớ icácký t ự đ ại d iện sau đ ây: Kýtự đ ạ i diện ý n g h ĩ a % Ch u ỗ i ký t ự b ất k ỳ gồ m không h o ặc nhiều ký tự _ Kýtự đ ơ n b ất k ỳ [] Ký t ự đ ơn b ất k ỳtrongg i ớ i h ạ n đ ư ợ cc h ỉ đ ị nh ( v ídụ [a-f])hay m ộ t tập (ví d ụ [abcdef]) [^] Kýtự đ ơ n b ất k ỳkhông n ằmtronggi ớ i h ạ n đ ư ợ cc h ỉ đ ịnh ( ví dụ[^a-f] hay m ộ t tập (ví d ụ [^abcdef]). e.Giá t r ị NULL Dữliệutrong m ộ tc ộ tchoph é p N ULL s ẽ n h ậngiátrịNULLtrongcáctrư ờn g h ợ p sau: • Nếukhôngcódữliệu đ ư ợ cn h ậ pcho c ộ tvàkhôngcó m ặc đ ịnhcho c ộ th a y k iểu d ữ liệu trên c ộ t đ ó. • N g ư ờ i s ử d ụ ng tr ự c tiếp đ ư a giá trị NULL vào cho c ộ t đ ó. • M ộ tc ộ tcók i ểu d ữli ệ ulàk i ểu s ố s ẽc hứ agiát r ịNULL n ếugiátrị đ ư ợ cc h ỉ đ ịnh g â y tràn s ố . Trong m ệnh đ ềWHERE, đ ể k i ể mtragiát r ịc ủ a m ộ tc ộ tcógiátrịN U LLh a ykhông,ta s ử d ụ ng cách viết: WHERE tên_c ộ t IS NULL ho ặc: WHEREtên_c ộ t IS NOT NULL 2.1.4 T ạ omớib ả ng d ữl i ệu t ừ k ết qu ả củ acâulệnhSELECT Câul ệ nhSELECT...INTOcótác d ụ ngt ạ o m ộ t b ả ng m ớ icócấutrúcvà d ữ l iệu đ ư ợ cxác đ ịnhtừ k ếtq u ảc ủ atruy v ấ n .B ả ng m ớ iđư ợ ctạora s ẽ c ó s ốc ộ t b ằ ng s ốc ộ t đ ư ợ c c h ỉ đ ị nh t r ong d a nh sách c h ọ n và số dòng s ẽ là s ố dòng k ết q u ảc ủ atruyvấn Vídụ2 . 19: Câu l ệnh d ư ớ i đ â ytruyv ấ n d ữliệutừ b ả ngS I NHV I ENvàtạo m ộ t b ảng T U OI S V bao g ồ m cá c t rư ờ ng HODEM,T E N v à T U OI SELECThodem,ten,YEAR(GETDATE())-YEAR(ngaysinh) AS tuoi INTOtuoisv FROMsinhvien Lưuý: N ế utrongdanhsáchc họ ncócácb i ểut h ứ cthìn h ữ n g b iểut hứ cnàyp h ảiđư ợ c đ ặt tiêu đ ề. 2.1.5S ắ p x ếp k ết qu ảtruyv ấ n Mặc đ ịnh,cácdòng d ữliệutrongkếtq u ả c ủ acâutruyvấn t u â n t h e o t hứtực ủ a chúngtrongbảng d ữ l iệuh o ặcđư ợ c s ắp x ế p t h e o c h ỉ m ụ c( n ếut r ênb ả ngcóc h ỉ m ụ c). Trongtrườ n g h ợ p mu ố n d ữliệu đ ư ợ c s ắp x ếptheo c h i ềută n g ho ặ cgiảmc ủ agiátrịc ủ a m ộ t h o ặc nhi ề u trường, ta s ử d ụ ng thêm m ệ n h đ ề ORDER BY trong câu l ệnh SE L E C T ;Sau ORD E RBYlàda n hsáchcácc ộ tcần s ắp x ếp(t ố i đ alà16c ộ t) .Dữliệu đ ư ợ c s ắp x ếpcóthểtheochiều t ăng( A SC)h o ặcgiảm (DE S C) ,mặc đ ịnh l à s ắp x ếp theo chi ề u tăng. Ví dụ2.20: Câu l ệnh d ư ớ i đ â y h i ểnt h ịd a nhsáchcác m ôn h ọ cvà s ắp x ếp t h eo c h i ều g iảm d ần c ủ a s ố đ ơn v ị họ c trình SELECT* FROM monhoc ORDERBY sodvht DESC Nếusau O R D E RBYcónh i ều c ộ tthìviệc s ắp x ế p d ữl i ệu s ẽ đ ư ợ c ư utiêntheot h ứtự từ trái qua p h ải. Th a yvìchỉ đ ịnhtênc ộ tsauORDERBY, t acóthể c h ỉ đ ịnh s ố t h ứ t ự c ủ a c ộ t cấn đ ư ợ c s ắp x ế p. C â u lệ n hở ví d ụ trên có t h ể đư ợ c vi ế t lại n h ư sau: SELECThodem,ten,gioitinh, YEAR(GETDATE())-YEAR(ngaysinh)AS tuoi FROM ten='Binh' ORDER BY 3,4 2.1.6Phép h ợp Ph é p hợ pđư ợ c s ử d ụ ngtrongt r ư ờ ng h ợ pta c ần g ộ p k ế tq u ả c ủ ahaihaynh iề u truyv ấ n th ành m ộ tt ậ p k ếtq u ảduyn h ất.SQLcung c ấpto á n t ửUNION đ ểt h ự chiện ph é p h ợ p.Cúph á pnhư sau Câu_l ệ nh_1 UNION[ALL] Câu_l ệ nh_2 [UNION [ALL] Câu_ lệnh_3] ... [UNION [ALL] câu_lệnh_n] [ORDER BY cột_sắp_xếp] [COMPUTE danh_sách_hàm_g ộ p [BY danh_sách_c ộ t ]] Trong đ ó Câu_lệnh_1 có d ạng SELECT danh_sách_c ộ t [INTOtên_b ả ng_m ớ i ] [FROM danh_sách_bảng | khung_nhìn] [WHERE điều_kiện] [GROUP BY danh_sách_cột] [HAVING điều_kiện] và C â u _ lệnh_i d ạ ng SELECT danh_sach_cot [FROM danh_sach_bang | khung_nhin] [WHERE dieu_kien] [GROUP BY danh_sach_cot] [HAVING dieu_kien] Mặc đ ị nh, n ếu trong các truy v ấ n t h ành p h ần c ủ a p h é p h ợ p x u ất hiện nh ữ ng dòng d ữ li ệ u g i ố ng nhau thì trong kết q u ả truy v ấn c h ỉ g iữ lại m ộ t dòng. N ếu m uố n g i ữ lại các dòng này, ta p h ải s ử d ụ ng t h êm từ khoá ALL trong truy v ấ n thành ph ầ n. Khisử d ụ ng toán t ử UNION đ ể t h ự c hiện ph é p h ợ p, ta cần chú ý cácnguyên t ắc sau: • Danh sách c ộ t trong các truy v ấ n thành ph ầ n ph ải có cùng số l ư ợ ng. • Cácc ộ t t ươngứngtrongtấtcả cá cb ả ng,h o ặctập c o n b ất k ỳcác c ộ t đ ư ợ c s ử d ụ ngtrongbản th â n m ỗ itruyvấnthànhphần ph ải cùng kiểu d ữ liệ u. • Cácc ộ tt ư ơ n gứngtrong b ả n t h ân t ừ ngtruyv ấ nthànhph ầ nc ủ a m ộ tcâu l ệ nh UNIONp h ảix u ấthiệntheothứtự n h ưnhau.Nguyênn h ânlàdophép h ợ p s o sánh các cộ tt ừn g c ộ t m ộ t theo thứ tự đư ợ c c ho t r ong m ỗ itruyvấ n. • Khicáckiểu d ữliệukhácnhauđư ợ c k ết hợ p vớ inh a utrongcâu l ệ nh UNI O N, chúng s ẽ đ ư ợc chu y ển sang k i ểu d ữ l iệu cao h ơ n ( n ế u có t h ể đư ợ c). • Tiêu đ ềc ộ ttrongkếtq u ảc ủ aphép h ợ p s ẽlàtiêu đ ề c ộ t đ ư ợ c c h ỉ đ ịnht r ong truyvấn đ ầu tiên. • Truy v ấ n t h ànhph ầ n đ ầutiêncót h ểcóINTO đ ểtạo m ớ i m ộ t b ả n gtừ k ết qu ả c ủ achínhphép h ợ p. • Mệnh đ ềORD E RBY v àCOMPUTE d ùng đ ể s ắp x ếp k ếtq u ảtruy v ấnh o ặc tínhtoáncácgiát r ị th ố ngkêchỉ đượ c s ử d ụ ngởc u ố icâu l ệnhUNION. Chúngkhông đ ư ợ c s ử d ụ ng ở trong b ất k ỳtruy v ấ n th à n h ph ầ n n à o. • Mệnh đ ềGROUPBY v àHAVINGc h ỉcóthể đượ c s ử d ụ ngtrong b ảnthân t ừ ngtruy v ấnth à nhp h ần.Chúngkhôngđượcph é psử d ụ ng đ ể tá c đ ộ nglên k ết q u ả c h ung c ủ a phép h ợ p. • P h é p t o á n UNI O N c ó t hể đ ư ợ c s ử d ụ ng b ê n trong câu l ệ nh I N S E R T . • Ph é p to á n UNI O N không đ ư ợ c s ử d ụ ng trong câu l ệnhC R E A TEVIEW. 2.1.7Phép nố i Khicần th ự chiện mộ tyêu c ầut r uy v ấn d ữliệutừhaihaynh i ều b ả ng,tap h ải s ử d ụ ng đ ế nphép n ố i. M ộ tcâulệ n h nố i k ết hợ pcácdòngdữli ệ utrongcác bả ngkhác nh a u lại theo m ộ t h o ặc nhi ề u đ iều k iện n à o đ ó và hiển t h ịchúng trong kết q u ảtruy v ấn. Giả s ửtacần b iếtmã l ớ pvàtên l ớ p c ủ acácl ớ pth u ộ cKhoaCôngng h ệ Th ôngtin ph ải làm n h ư sau: • C họ nradòngtrongb ả ngKHOAcótênkhoalàKhoaCôngng h ệThôngtin, từ đ ó xác đ ị n h đ ư ợ c mã khoa ( M AKHOA)là DHT02. N h ư v ậy, đ ểt hự chiện đượ cy ê ucầutruyv ấ n d ữliệutrên,taphảit hự chiệnphép n ố i g i ữ ahai b ả ngKHOAvàLOP vớ i đ iều k iện nố ilàMAKHOAc ủ aKHOA b ằng v ớ i MAKHOAc ủ a LOP. Câu lệnh sẽ đ ư ợ c viết n h ư sau: SELECTmalop,tenlop FROMkhoa,lop WHEREkhoa.makhoa = lop.makhoa AND tenkhoa='KhoaCông ng h ệ Thông tin' 2. Sử dụng phép nối Ph é p n ố ilàcơ s ở đ ể thự chi ệ ncácyêu c ầutruyv ấ n d ữliệuliênquan đ ến nh i ề u b ảng. M ộ tcâulệnh n ố it h ự chiệnlấycácdòngdữliệutrongcácb ả ngthamgiatr u y v ấn,sosánhgiátrịc ủ acácdòngnàytrên m ộ th o ặcnhiềuc ộ tđượcc h ỉ đ ịnhtrong đ i ề u k iện n ố ivàkết h ợ pcácdòngth o ả mã n đ iềukiệnthànhn h ữngdòngtrongkếtq u ảtruy v ấn. Đểt hự chiện đư ợ c m ộ t ph é p n ố i, cần p h ải xá c đ ịnh đư ợ cn h ữ n g y ếutố sau: • N h ữ ng c ộ t nào cần h i ể n t h ịtrongkết q u ả truy v ấ n • N h ữ ng b ảng n à o có thamgia vào truy vấn. • Điều k i ệ n đ ể t hự c hiện ph é p n ố i g i ữ a các b ảng dữ liệu là gì Trongcác y ếutố k ể trê n , v i ệcxác đ ị n h chín h xá c đ i ề u k iện đ ể t hự c h iệnphép nố igi ữ a cá cbảng đ óngvaitròquant r ọ ngn h ất.Trong đ a s ốcáctrư ờ ng h ợ p, đ i ều k iện c ủ aphépn ố iđư ợ cxác đ ịnhn h ờvào m ố iquan h ệ g i ữ acác b ả n g c ầnp h ảitruyx u ất d ữ liệu.Thôngt h ường, đ ólà đ iều k iện b ằ n g nh a u g i ữ akhoáchínhvàkhoángoài c ủ ahai b ảngcó m ố iquan h ệ vớ inh a u.N h ư v ậ y, đ ểcót h ể đ ưara m ộ tcâulệnh n ố it hự chiện chínhxácyêu c ầutruyv ấ n d ữliệu đ òi h ỏ ip h ảihi ể uđư ợ c m ố iquan h ệc ũ ngn h ưý ng h ĩa c ủ a chúng g i ữ a các b ả n g d ữ l iệu. Danhsá c h c h ọ ntrongphép nố i M ộ tcâul ệ n h n ố ic ũ ngđư ợ c b ắt đ ầu vớ itừkhóa S ELE C T .Cácc ộ tđư ợ c c h ỉ đ ịnhtênsau t ừkhoáSELECTlàcácc ộ tđượchiển t h ịtrongkếtq u ảtruyv ấ n. Việc s ử d ụ ng tên các c ộ t trong danh sách c h ọ n có t h ể là: • Tên c ủ a m ộ t s ốc ộ tnào đ ótrongcácbảngcóthamgiavàotruyv ấ n.Nếut ê n c ộ t trong các bảng trùng tên nhau thì tên c ộ t p h ải đ ư ợ c v i ết d ư ớ i d ạ ng tên_b ả ng.tên_c ộ t • Dấusao(*)đư ợ c s ử d ụ ngtrongdanhsáchc h ọ nkhi c ần h iển t h ịtấtcảcác c ộ t c ủ a các bảng thamgia truy v ấn. • Trongtrườ n g h ợ pcần h iểnt h ịtấtcảcácc ộ t củ a m ộ t b ảngn à o đ ó,ta s ử d ụ ng cách v i ết: tên_b ả ng.* Mệnhđề FROM trong phép n ố i Sau m ệnh đ ềFROMc ủ acâu lệ nh n ố ilàdanhsáchtêncác bả ng(haykhung nh ì n)thamgiavàot r uy v ấ n.N ế uta s ử d ụ n g d ấu*trongdanhsáchch ọ nthìt h ứtực ủ a cácbảngl i ệtkêsauFROM s ẽảnh h ưở n g đ ế nt h ứtựcác c ộ t đượ c hiểnt h ị trong k ết q u ả truyvấn. Mệnhđề WH E RE t ro n g p hép n ố i Khihaih a ynhiều b ả n g đ ư ợ c n ố i vớ inh a u,taphảic h ỉ đ ị n h đ iều k iện đ ểt h ự c h iện phép n ố ingaysau m ệnh đ ềW H E R E.Điều k iện n ố iđư ợ cbiểu d iễn d ư ớ i d ạ ng b iểu t h ứ c logic so sánh giá t r ị d ữ l iệu g i ữ a các c ộ t c ủ a các bảng th a mgia truy v ấn. Cáctoán tửso sánh d ư ớ i đ ây đ ư ợc s ử d ụ n g đ ể xác đ ịnh đ iều k i ệ n n ố i Phéptoán Ý ngh ĩ a = Bằng > L ớ n h ơ n >= L ớ n h ơ nh o ặc b ằ ng < N h ỏ h ơ n <= N h ỏ h ơ nh o ặc b ằng <> Khác !> K hô n g l ớ n h ơ n !< Khôngn h ỏ h ơ n Ví d ụ 2.24 : Câu lệ n h d ư ớ i đ â y h i ểnt h ịdanhsáchcácsinhviênv ớ icácthôngtin:mã sinh vi ê n , h ọ và tên, m ã l ớ p, tên l ớ p và tên khoa SELECTmasv,hodem,ten,sinhvien.malop,tenlop,tenkhoa FROMsinhvien,lop,khoa WHEREsinhvien.malop = lop.malop AND lop.makhoa=khoa.makhoa Trongcâulệnhtrên,cácbảng t h amgiav à otruyv ấ nbao g ồ mSINHV I EN,LOPvà KHOA.Đ i ều k iện đ ể t hự chiện phép n ố i gi ữ a cá c b ảng bao g ồ m h ai đ iều k i ệ n: sinhvien.malop= lop.malop và lop.malop= khoa.malop Điều k iện nố i gi ữ a cá cbảngtrongc â u l ệnhtrênlà đ iều k i ệ n b ằ ngg i ữ akhoángoàivà khoáchínhc ủ acácb ả ngcó m ố iqu a n h ệ vớ inhau. H a ynóicáchkhác, đ iều k iệnc ủ a ph é p n ố i đư ợ c xác đ ịnh d ự a v à o m ố i qu a n h ệ gi ữ a các b ảngtrong c ơ s ở d ữ li ệ u. 2.1 . 7.2 Cácl oạ iphép n ố i Ph é p n ố i b ằ ng và phép n ố i tự nhiên M ộ tphép n ố i b ằ n g(equi-join)là m ộ tph é p n ố itrong đ ógiátrịc ủ acácc ộ t đư ợc s ử d ụ ng đ ể nố iđư ợ csosánhv ớ inh a u d ự atrêntiêuch u ẩn b ằngvàtấtcảcác cộ ttrong các b ảng th amgia nố i đ ều đ ư ợ c đ ư a ra trong k ết q u ả. Ví d ụ2.25: Câu lệnh dư ớ i đ â y th ực hiện phép n ố i b ằ ng gi ữ a hai b ảng LOP và KHOA SELECT* FROMlop,khoa WHERElop.makhoa=khoa.makhoa Trong k ếtq u ả c ủ acâu l ệnhtrên, cộ t m a k h o a( m ãkho a )xuấthiệnhailầnt r ongkếtq u ả ph é p n ố i(c ộ t ma k h o ac ủ a b ảng k h o avàc ộ tma k h oac ủ a b ả n g l op )vàn h ư v ậ ylàkhông cầnth i ế t . T a c ó t h ểl o ạ i b ỏ bớ t đ in h ữngc ộ t t rùngt ê ntrongkết q u ảtruyv ấ n b ằ ngcách c h ỉ đ ịnh d a nh sách c ộ t cần đ ư ợ chiển t h ị trong d a nh sách ch ọ n c ủ a câu l ệnh. M ộ tdạng đ ặcbiệtc ủ aph é p nố i b ằng đ ư ợ c s ử d ụ ngnhiềulàphép n ố itựnhiên (natural-join).T r ongphép n ố itựnhi ê n , đ i ề ukiện n ố igi ữ ahai b ảngchínhlà đ iều k i ệ n b ằngg i ữ akhoángoàivàkhoá c h ính c ủ ahaibảng; V àtrongd a nhsách c h ọ nc ủ acâu lệnh c h ỉ g iữ lại m ộ t cộ t trong hai c ộ t thamgia vào đ iều k iện c ủ aphépn ố i Ví d ụ2 . 26: Đểt h ự chiệnph é p n ố itựnhiên, c âu l ệnhtrongvídụ2 . 25đư ợ cv i ếtlạin h ư sau SELECTmalop,tenlop,khoa,hedaotao,namnhaphoc, siso,lop.makhoa,tenkhoa,dienthoai FROMlop,khoa WHERElop.makhoa=khoa.makhoa ho ặcviết d ư ớ i d ạ ngn g ắn g ọ n h ơ n: SELECTlop.*,tenkhoa,dienthoai FROMlop,khoa WHERElop.makhoa=khoa.makhoa Ph é p n ố i v ới các điều k iện bổ sung Trongcáccâulệ n h nố i,ngoài đ i ề u k iệnc ủ aph é p n ố iđư ợ cc h ỉ đ ịnhtrong m ệ nh đ ềWHEREcòncót h ểc h ỉ đ ịnhcác đ iều k i ệntìmk i ếm d ữliệukhác ( đ iềukiệnc h ọ n). Thông t h ư ờ ng,các đ iều k iện n à yđư ợ c k ết h ợ p vớ i đ iều k iện nố ithôngquatoán t ử AND. Vídụ2.27: Câu l ệ n h d ư ớ i đ âyh i ểnt h ị h ọtênvàng à ysinh c ủ acácsinhviên khoa công nghệ thông tin SELECThodem,ten,ngaysinh FROMsinhvien,lop,khoa WHEREtenkhoa='Khoa Công ng h ệ Thông tin' AND sinhvien.malop = lop.malop AND lop.makhoa = khoa.makhoa Ph é p nối và các bí danh Phép tự n ố i là phép n ố i m à trong đ ó đ iều k i ệ n n ố i đ ư ợ c c h ỉ đ ịnh liên qu a n đ ế n các c ộ t c ủ a cùng m ộ t b ảng. Trong trường h ợ p này, s ẽ có s ự xu ất hiện tên c ủ a cùng m ộ t b ảng nhiều lần trong m ệ n h đ ề F R OM và do đ ó các b ả ng cần p h ải đ ư ợ c đ ặt bí danh. Ví d ụ2.28: Để b iếtđư ợ c h ọtênvàng à ysinh c ủ acácsinhviêncócùngngàysinhv ớ i sinhviênT rầ n T h ị Kim Anh,taphải t h ựchiện ph é ptự n ố ingaytrênchínhbả ng sinhvie n .Trongcâu l ệ n h n ố i, b ả ngsinhvi e n x u ấthiệntrong m ệ n h đ ề FRO M vớ ibí danhlà avà b .Bả n gsinhvien v ớ i bídanhlà a s ử d ụ ng đ ểch ọ nrasinhviêncó h ọtênlà T rầ n T h ịKimA n h và b ảngsinhvien v ớ ibídanhlàb s ử d ụ ng đ ểx á c đ ịnhcácsinhvi ê n trùng ngày sinh v ớ i sinh viênT rầ n T h ịKimAn h .Câulệnh đư ợ cviết n h ư sau: SELECTb.hodem,b.ten,b.ngaysinh FROMsinhvien a, sinhvien b WHEREa.hodem='Tr ầ n Th ị Kim' AND a.ten='Anh' AND a.ngaysinh=b.ngaysinhAND a.masv<>b.masv Ph é p n ố ikhôngdựa trên tiêu chu ẩ n b ằ ng Trongphép n ố inày, đ iều k i ệ n đ ểt hự ch i ệnphép nố igi ữ acácbảng d ữliệu khôngp h ảilà đ iều k i ệnsosànhbằngg i ữ a cá cc ộ t.L o ạiphépn ố inàytrongt h ự ctế t h ường ít đư ợ c s ử dụ ng. Ph é p n ố i ngoài (outer-join) Trongcácphép n ố i đ ã đ ềcậpởtrên,c h ỉ n h ữ ngdòng cógiátrịtrongcác c ộ t đ ư ợ cc h ỉ đ ị n h t ho ả mã n đ iều k iện k ết nố i mớ i đượ chi ể nt h ịtrong k ếtq u ảtruyvấn,và đ ư ợ c g ọ ilàphép n ố itrong( i nnerjoin)Theo m ộ tnghĩanào đ ó,n h ữ n g ph é p n ố in à y l o ại b ỏthôngtinc h ứ a trongnhữngdòngkhôngth o ả mã n đ iều k iện nố i. Tuynhiên, đ ôi khita c ũ ngcần g iữl ạ in h ữngthôngt i nnàybằngcáchchophépnhữngdòngkhông th o ả mã n đ iều k i ệ n n ố icó m ặttrongkếtq u ảc ủ aph é p nố i.Để là m đ iềunày,tacót h ể s ử d ụ ng phép n ố i ngoài. S Q L cung c ấp các loại ph é p n ố i ngoài sau đ ây: • Ph é p n ố ingoàitrái ( k ý h i ệ u:* = ):Ph é pn ố inàyhi ể n t h ịtrong k ế tq u ảtruy v ấntấtcảcácdòng d ữliệu c ủ a b ả ng n ằmbêntráitrong đ iều k iện n ố i ch o dù n h ững dòng n à y không thoả mã n điều k i ệ n c ủ aphép n ố i • Ph é p n ố ingoàiph ả i i ệ u : = * ):P h ép n ố inàyh i ển t h ịtrongkết qu ảtruy v ấntấtcảcácdòng d ữliệuc ủ a b ảng n ằmbênp h ảitrong đ i ề u k i ện nố icho dùn h ữngdòngnàykhôngth o ả đ i ều k iện c ủ a ph é p n ố i. 2.1 . 7.4Sử d ụ ngphép nố itrongSQL2 Ở p h ầntr ư ớ c đ ã đ ềcập đ ếnp h ư ơ ngpháp s ử d ụ ngphép n ố itrongvàph é p n ố i ngoàitrongtruyv ấ nS Q L. Nh ư đ ãtrìnhbày, đ i ề u k iệnc ủ aphép n ố itrongcâu l ệnh đ ư ợ cc h ỉ đ ị nhtrong m ệnh đ ềWHEREthôngquacácb i ểut h ứ c s osánhg i ữ a cá cbảng thamgia truy v ấn. Ch u ẩn SQ L 2 ( S Q L -9 2 ) đ ư ara m ộ tcáchkhác đ ể b iểudiễnchophép n ố i,trong cáchb iể u d iễnn à y, đ iều k iệnc ủ aphép n ốikhôngđư ợ c c h ỉ đ ịnhtrong m ệ n h đề W H E R E m à đượ c c h ỉ đ ịnhngaytrong m ệ n h đ ềFROMc ủ acâu l ệnh.Cá c h s ử dụng ph é p nố inàychoph é ptab i ểu d i ễnphép nố ic ũ ngnhư đ iều k iện n ố iđư ợ c r õràng, đặ c b iệt là trong trường h ợ p phép n ố i đ ư ợ c t hự chiện trên babảng trở lên. Ph é p n ố i tro n g Điều k iện đ ểt hự chi ệ nph é p nố itrong đ ư ợ cc h ỉ đ ị nht r ong m ệ n h đ ềFROMth e o cúphápn h ư sau: tên_b ả ng_1 [INNER] JOIN tên_b ả ng_2 ON đ i ề u_ki ệ n_n ố i Ví d ụ2 . 31: Để h iển t h ị h ọtênvàngàysinhc ủ acácsinhviên l ớ pTinK2 4 ,thayvì s ử d ụ ng câu lệnh: SELECThodem,ten,ngaysinh FROMsinhvien,lop WHEREtenlop='Tin K24' AND sinhvien.malop =lop.malop tacó t h ể s ử d ụ ng câu lện như sau: SELECT ho, tendem, ngaysinh FROM sinhvien, lop WHERE TENLOP>='Tin K24' Ph é p n ố i ngoài SQL2cung cấp các phép n ố i ngo à i sau đ ây: • Ph é p n ố i ngoài trái (LEFT OUTER JOIN) • Ph é p n ố i ngoài p h ải (RIGHT OUTER JOIN) • Ph é p n ố i ngoài đ ầ y đ ủ(FULL OUTER JOIN) C ũ ngt ư ơ ngtự nh ưphép n ố itrong, đ i ề u k iệnc ủ a p h é p nố i ngoà ic ũ ngđư ợ c c h ỉ đ ị nh ng a y trong m ệ n h đ ề FROMt h eocúpháp: tên_b ả ng_1 LEFT|RIGHT|FULL [OUTER]JOIN tên_ b ả ng_2 ON đ i ề u_ki ệ n_n ố i Nếu phép n ố i ngoài trái ( t ư ơ ng ứ ng p h ải) h i ển t h ị t r ong kết q u ả truy vấn cả nh ữ ng dòng d ữ liệu không t h oả đ iều k iện n ố i c ủ a b ảng bên trái ( t ư ơn g ứ ng ph ả i) trong phép n ố i thì ph é p n ố i ngoài đ ầ y đ ủ h iển t h ị t rong kết q u ả truy v ấn cả n h ững dòng d ữ liệu không th o ả đ i ề u k i ện n ố i c ủ a cả hai b ảng tham gia vào phép nố i. Thực hiệnphépn ố i trên nh i ều b ả ng M ộ t đ ặc đ iểm nổ i b ậtc ủ aS Q L2 làchophépb i ểu d iễn ph é p n ố i trênnhi ề u b ảng d ữliệu m ộ tcáchrõràng.Thứtựt hự chiện ph é p nố igi ữ acácbả n g đ ư ợ cxác đ ị nh theo ng h ĩa k ết q u ả c ủ a ph é p n ố i nàyđư ợ c s ử d ụ ngtrong m ộ t ph é p n ố i khác. Vídụ2 . 34: Câu l ệnh d ư ớ i đ â y h iểnt h ị h ọtênvàng à ysinh c ủ acácsinhviênth u ộ c KhoaCông ng h ệ Thông tin SELECThodem,ten,ngaysinh FROM(sinhvien INNER JOIN lop ONsinhvien.malop=lop.malop) INNER JOIN khoa ON lop.makhoa=khoa.makhoa WHEREtenkhoa=N'Khoa công ng h ệ thông tin' Trongcâulệnhtrên,t h ứtựt h ự chiệnphépn ố ig i ữ acácbả n g đ ư ợcc h ỉ đ ịnhrõràng: ph é p n ố ig i ữ ahai b ảngsinhvienvàlop đ ư ợct hự chiệntrư ớ cvàkếtq u ảc ủ aph é p n ố i này l ại tiếp t ụ c đ ư ợ c n ố i vớ i b ả n gkho a . 2.1.8T hố ng k ê d ữ l i ệu v ớiGROUPBY Ngoàikhả n ă n g t hự c h iệncácyêu c ầu tru y v ấ n d ữliệuthôngt h ường(ch iế u, c h ọ n, n ố i,…)n h ư đ ã đ ềcập n h ưởcácp h ầntrư ớ c,câu l ệnh SE LECT c ònchoph é p t hự chiệncácthaotáctruyvấnvàtính t o ánth ố ngkêtrên d ữliệu n hư : c hob iế tt ổ ng s ố tiết dạ y c ủ am ỗ i giáo viên, đ iểm trung bình các môn h ọ c c ủ am ỗ i sinh viê n ,… Mệnh đ ề GROU P B Ysử d ụ ngtrongcâu l ệnh SE LE C Tn h ằmphânhoạ c h các dòng d ữli ệ utrongb ả ngthànhcácnhómdữ l iệu,vàtrên m ỗ inhómdữliệut h ự chi ệ n tính toán các giá t r ị t hố ngkên h ư t ính t ổ ng,tính giá trịtrungbình,... Cáchàmg ộ pđư ợ c s ử d ụ ng đ ểt í nhgiátrịt h ố ngkêchotoànbảngh o ặctrên m ỗ i nhómdữl i ệu.Chúngcót h ể đ ư ợ c s ử d ụ ngn h ưlàcác cộ ttrongd a nhsáchc h ọ n c ủ acâu lệnh SE LECThoặcx u ấthiệntrong m ệnh đ ềHAV I NG,nh ư ngkhông đ ư ợ cphépxu ấ t h iện trong m ệ n h đ ề W H ERE S Q L cung c ấp các hàm gộ p d ư ớ i đ ây: Hàm g ộ p Chức n ă ng SUM( [ A L L | D I S T IN C T ] b iể u_ t h ức) Tínht ổ ng c ác giá trị. AVG([ALL| DISTINCT] b iể u_ t h ức) Tínhtrung bình c ủ a các giá t r ị COUNT([ALL|DISTINCT] b iể u_ t h ức) Đếm s ố các giá trị trong biểu t hứ c. COUNT(*) Đếm s ố các dòng đư ợ c c h ọ n. MAX ( b iểu_t h ức) Tínhgiá trị l ớ n n h ất MIN ( b i ể u_t h ức) Tínhgiá trị nhỏ n h ất Trong đ ó: • Hàm SUMvà AVGchỉ làm v i ệc v ớ i các b i ểu t hứ c s ố . • HàmSUM,AVG,COUNT,MINvàMAX b ỏquacácgiátrịNULLkhitính toán. • HàmCO U NT ( *) không b ỏ qua các giá trị N ULL. Mặc đ ịnh,cáchàm g ộ pt h ự chiệntínhtoánt h ố ngkêtrêntoàn b ộ d ữliệ u . T r ong trư ờ ng h ợ pcầnl o ại b ỏ b ớ tcácgiát r ịtrùngnh a u(chỉ g iữlại m ộ tgiátrị),tachỉ đ ịnh thêm từ khoá DI S T I N CTở tr ư ớ cbiểu t h ứ c là đố i s ố c ủ a hàm. T h ố ng kê trên toàn bộ dữ liệu Khicầntínhtoángiát r ịt hố ngkêtrêntoàn b ộ d ữliệu,ta s ử dụ ngcáchàm gộ p trongdanhsáchc họ nc ủ acâu lệ nh SE LE C T .Trongt r ường hợ pnày,t r ongdanhsách c h ọ n không đ ư ợ c s ử dụ n g b ất k ỳ m ộ t tên c ộ t hay b i ểu t h ứ c nào ngoài các hàm g ộ p. Vídụ2.35: Đểt h ố ngkêtrungb ì nh đ iểml ầ n1c ủ atấtcảcácmôn họ c,ta s ử d ụ ngcâu lệnh như sau: SELECTAVG(diemlan1) FROM diemthi còncâulệnh d ư ớ i đ â y c h o b iếtt u ổ il ớ n nh ấ t , t u ổ i nh ỏ n h ấtvà đ ộ t u ổ itrungbình c ủ atất cả các sinh viên sinh tại H u ế: SELECTMAX(YEAR(GETDATE())-YEAR(ngaysinh)), MIN(YEAR(GETDATE())-YEAR(ngaysinh)), AVG(YEAR(GETDATE())-YEAR(ngaysinh)) FROMsinhvien WHEREnoisinh=’Hu ế ’ T h ố n g k êdữ liệu trên các nhóm Trongtrườ n g h ợ pcầnt hự chiệntínhto á ncácgiát r ịt hố ngkêtrêncácnhóm d ữ liệu,ta s ử d ụ ng m ệ n h đ ềGROUPBY đ ểphânh o ạch d ữli ệ uv à otrongcácnhó m .Các hàm g ộ pđư ợ c s ử dụ ng s ẽt hự ch i ệnthaotáctínhtoántrên m ỗ inhómvàchobiếtgiát r ị t h ố ng kê theo các nhóm dữ liệu. còncâu l ệ nh: SELECTsinhvien.masv,hodem,ten, sum(diemlan1*sodvht)/sum(sodvht) FROMsinhvien,diemthi,monhoc WHEREsinhvien.masv=diemthi.masv AND diemthi.mamonhoc=monhoc.mamonhoc GROUPBY sinhvien.masv,hodem,ten chob i ếttrungbình đ iểm thi lần 1 các môn h ọ c c ủ a các sinh viên Lưuý: Trongtrường h ợ pd a nhsách c h ọ n c ủ acâulệnhSELECTcócả cá c hà m g ộ pvà n h ữ n g b iểut hứ ckhôngp h ải l à hà m gộ p t h ì n h ữ n g b i ể ut h ứ cn à yphảicó mặ t đ ầy đủ trong m ệnh đ ềGROUPBY, n ếu không c â u l ệ n h s ẽkhông h ợ p lệ. Ví d ụ2.37: Dư ớ i đ ây là m ộ t câu lệnh sai SELECTlop.malop,tenlop,COUNT(masv) FROM lop,sinhvien WHERElop.malop=sinhvien.malop GROUPBY lop.malop d o t h iếu tr ư ờ ng TENLOP sau m ệ n h đ ề GROUP BY. Chỉ định đ iều kiện đ ố i v ớihàm g ộ p Mệnh đ ềHAVING đư ợ c s ử d ụ ngnhằm c h ỉ đ ịnh đ iềukiện đố i v ớ icácgiát r ị t h ố ngkêđư ợ c s ảnsinh t ừcáchàm gộ pt ư ơngtự nh ưcácht hứ c m ệ n h đ ềW H E R Eth i ết lậpcác đ iều k iện c hocâu l ệnh S E LE C T . M ệ n h đ ềHAVING t h ư ờngkhông t h ự c s ựcó ng h ĩa n ế u n h ưkhông s ử d ụ ng k ế t hợ p vớ i m ệ n h đ ềGROUPBY. Mộ t đ iểmkhácbiệt g i ữ aHAV I NGvà W HERElàtrong đ i ề ukiệnc ủ a W HEREkhông đ ư ợ ccócáchàm g ộ p trong khi HAVING lại cho phép sử d ụ ng các hàm g ộ p trong đ iều k iện c ủ a m ình. Vídụ 2.38 : Để b iếttrungb ì nh đ i ểmthilần1c ủ acácsinhviêncó đ iểmtrungbình l ớ n h ơ n h o ặc b ằng 5, ta sử d ụ ng câu lệ n h n h ư sau: SELECTsinhvien.masv,hodem,ten, SUM(diemlan1*sodvht)/sum(sodvht) FROMsinhvien,diemthi,monhoc WHEREsinhvien.masv=diemthi.masv AND diemthi.mamonhoc=monhoc.mamonhoc GROUPBY sinhvien.masv,hodem,ten HAVINGsum(diemlan1*sodvht)/sum(sodvht)>=5 2.1.9T hố ng k ê d ữ l i ệu v ớiCOMPUTE Khith ự chiệnthaotácth ố ngkê vớ iGROUPBY, k ếtq u ảt hố ngkê( đ ư ợ c s ản sinhb ở i hà m g ộ p)x u ấ thiện d ư ớ i m ộ tc ộ ttrong k ếtq u ảtruyvấn.Thôngqua d ạngt r uy v ấnnày,tab i ết đ ư ợ cgiát r ịt hố ngkêtrên m ỗ inhóm d ữl i ệun h ư ngkhôngb i ếtđư ợ cchi tiết d ữ liệu trên m ỗ i nhóm n h ư n g c ụ t h ể m ỗ ikhoabao g ồ m n h ữ n g l ớ pnàothìchúngtakhôngt h ể b iếtđư ợ ctrong k ết q u ả truy v ấ n trên. Mệnh đ ề COMPU TE sử dụ ng k ế t h ợ p vớ i cá c hà m g ộ p (dòng) và ORDER BY trong câu l ệnh SE LECT cũ ng cho chúng t a các kết qu ả t h ố ng kê (c ủ a hàm g ộ p) trên các nhóm d ữ liệu. Đi ể m khác biệt g i ữ a COMPU TE v à G R OUP BY là k ết q u ả t h ố ng kê xu ất hi ệ n d ư ớ i d ạ n g m ộ t dòng trong kết q u ả truy v ấ n và còn cho chúng ta c ả chi tiết v ề d ữ liệu t r ong m ỗ i nhóm. Như v ậy, câu l ệnh SELECT vớ i COMPUTE cho chúng ta c ả chi tiết d ữ liệu và giá trị t hố ng kê trên m ỗ i nhó m . Mệnh đ ề C OM PU TE …BY c ó cúphápn h ưsau: COMPUTEhàm_g ộ p(tên_c ộ t)[,…, hàm_g ộ p(tên_c ộ t)]BY danh_sách_c ộ t Trong đ ó: • Các hàm gộ p c ó t h ể s ử d ụ ngbao g ồ m SUM,AVG, M I N, MAX và COUNT. • danh_ s ách_ c ộ t ộ t s ử d ụ ng đ ể ph â n nhómdữ liệu Ví d ụ2.40: Câu lệ nh d ư ớ i đ â y c h o b iếtdanhsáchcácl ớ p c ủ a m ỗ ikhoavàt ổ ng s ố cácl ớ p c ủ a m ỗ i khoa: SELECTkhoa.makhoa,tenkhoa,malop,tenlop FROM khoa,lop WHEREkhoa.makhoa=lop.makhoa ORDERBY khoa.makhoa COMPUTECOUNT(malop) BY khoa.makhoa Khisử d ụ ng m ệ n h đ ề COMPUTE ... BY cần tuân theo các qui t ắc d ư ớ i đ ây: • T ừ khóa D I ST I N C Tkhông cho phép s ử d ụ ng v ớ i các hàm gộ pdòng • HàmCO U NT ( *) không đ ư ợ c s ử d ụ ngtrongCOMPUTE. • SauCO MP UTEcóthể s ử d ụ ngnhiềuhàm g ộ p,khi đ ócáchàmphảiph â n cáchnhaub ở i d ấ u p h ẩ y. • Cácc ộ t s ử d ụ ngtrongcáchàmg ộ p xu ấthi ệ ntrong m ệ n h đ ềCOMPUTE ph ải có m ặt trong d a nh sách ch ọ n. • Khôngsử d ụ ngSELECTI N TOtrong m ộ tcâu l ệnhSELECTcó s ử d ụ ng CO M PUTE. • Nếu s ử dụ n g m ệnh đ ềCOMPUTE...BYthì cũ ngphải s ử d ụ ng m ệ n h đề ORDER BY. Các c ộ tliệt kê trong C O M PU TE … B Y p h ải g i ố ng h ệt hay là m ộ ttậpcon c ủ an h ữnggìđư ợ c l iệtkêsau O R DER B Y. C h úngphảicó cùngthứ t ựtừtráiquaphải, b ắt đ ầu vớ i c ù ng m ộ tbi ể ut h ứ cvàkhôngbỏ qua b ất k ỳ m ộ t biểu t h ứ c nào. C h ẳ n g h ạn n ếu m ệnh đ ềORDERBYcó d ạng: ORDERBY a, b, c Thì m ệ n h đ ềCO MP UTEBY v ớ ihàm g ộ pFtrên c ộ tXtheom ộ ttrongcác cách d ư ớ i đ ây là h ợ p lệ: COMPUTEF(X) BY a, b, c COMPUTE F(X) BY a, b COMPUTE F(X) BY a Vàcác cách s ử dụ n g d ư ớ i đ ây là sai: COMPUTEF(X) BY b, c COMPUTE F(X) BY a, c COMPUTE F(X) BY c • P h ải s ử d ụ ng m ộ ttênc ộ th o ặc m ộ tbiểu t h ứctrong mệ nh đ ề ORD E R BY , v i ệ c s ắp x ếpkhông đ ư ợ c t hự chiện d ự a trên tiêu đ ề c ộ t. Trongtrườ n g h ợ p s ử d ụ ngCOMPUTEmàkhôngcóBYthìcót h ể không c ần s ử d ụ ng ORD E RBY,k h i đ ó ph ạmvitính toán củ a hàm g ộ p là trên toàn b ộ d ữ liệu. Ví d ụ2.41: Câu lệnh dư ớ i đ â y h iể n t h ị danh s ách các l ớ p và t ổ ng sốl ớ p h i ệ n có: SELECTmalop,tenlop,hedaotao FROMlop ORDERBY makhoa COMPUTECOUNT(malop) Ví d ụ2.42: Câu lệnh: SELECTkhoa.makhoa,tenkhoa,malop,tenlop FROM khoa,lop WHEREkhoa.makhoa=lop.makhoa ORDERBY khoa.makhoa COMPUTECOUNT(malop) BY khoa.makhoa COMPUTECOUNT(malop) Chob i ếtdanhsáchcác l ớ p c ủ a m ỗ ikhoa,t ổ ng s ốl ớ ptheo m ỗ ikhoavà tổ ng s ố l ớ p h iện có 2.1.10Truy vấ ncon(Subqu e ry) Truy v ấ nconlà m ộ tcâulệnh SE LECT đ ư ợcl ồ ngv à obêntrong m ộ tcâu l ệ nh SELECT,INSERT,UPDATE,D E LE T E h oặcbêntrong m ộ ttruyvấnconkhác.L o ại truyvấn n à yđư ợ c s ử d ụ ng đ ể b iểudiễn cho nhữngtruy v ấntrong đ ó đ iều k i ệ n t r u y v ấn d ữ liệu cần ph ải s ử d ụ ng đ ế n k ết q u ả c ủ a m ộ ttruyvấnkhác. C ú ph á p c ủ a truy v ấ n con như sau: (SELECT[ALL | DISTINCT] danh_sách_c h ọ n FROM danh_sách_b ả ng [WHERE đ i ề u_ki ệ n] [GROUP BY danh_sách_c ộ t][HAVING đ i ề u_ki ệ n]) Khi sử d ụ ng truy v ấ n con c ần l ư u ý m ộ t s ố quy tắc sau: • M ộ ttruy v ấnconph ả i đ ư ợ cviếttrong c ặp d ấungoặc.Tronghầu h ếtcác trư ờ ng h ợ p, m ộ ttruyvấn c o n th ườngp h ảicó k ếtq u ảlà m ộ tc ộ t(t ứ clàc h ỉ códuyn h ất m ộ t c ộ ttrong danh sách c h ọ n). • Mệnh đ ềCOMPUTEvàORDERBYkhông đượ cphép s ử dụ ngtrongtruy v ấn c on. • Cáctên c ộ t xu ấthi ệ ntrongtruy v ấnconcó t hểlàcác cộ tc ủ acácbảngtrong truyvấnngoài. • M ộ t truy v ấn c o n th ườ n g đư ợ c s ử d ụ ng làm đ iều k iện trong m ệ n h đề W H E R E hoặc HAV I NG c ủ a mộ t truy v ấ n khác. • Nếutruy v ấncontrả v ề đ úng m ộ t g iá t rị,nócóthể s ử d ụ ngnhưlà m ộ tthành ph ầ nb ê ntrong m ộ tb i ểut hứ c(c h ẳ n g h ạ nx u ấthiệntrong m ộ tphépsosá n h b ằng) Phépso sánh đ ố i v ới v ới k ết quả truy vấ ncon Kếtq u ảc ủ atruyvấncon c óthể đ ư ợ c s ử d ụ n g đ ề t hự chiệnph é p s osánh s ố h ọ c vớ i m ộ t b i ể ut h ứ c c ủ atruyv ấ ncha.Trongt r ường h ợ pnày,truy v ấ n c o nđư ợ c s ử d ụ ng d ư ớ i d ạ ng: WHEREbi ể u_th ứ c phép_toán_s ố _h ọ c[ANY|ALL] (truy_v ấ n_con) Trong đ óphéptoán s ố họ c c ó t h ể s ử d ụ ngbao g ồ m:=,<>,>,<,>=,<=;Vàtruyv ấ n conphải có kết q u ả b a o g ồ m đ úng m ộ t c ộ t. Nếutruy v ấncont r ả v ềnhiều h ơ n m ộ tgiátrị,việc s ử dụ ngph é psosánhnhư trên s ẽkhôngh ợ plệ.Trongtrườ n g h ợ pnày,sauph é ptoánsos á nhphải s ử d ụ ngthêm lư ợ ng t ừ A LLh o ặcANY.L ư ợ n gtừ A L L đư ợ c s ử dụ ngkhi cầ nso s ánhgiátrịc ủ abiểu t hứ c v ớ itấtcảcácgiátrịtrả v ềtrongkếtq u ảc ủ atruy v ấncon;n g ư ợ clai,phépsosánh vớ il ư ợ ng t ừANY c ókếtquả đ úngkhic h ỉcần m ộ tgiátrị b ất k ỳnào đ ótrongkếtq u ả c ủ atruyv ấ n con thoả mã n đ iều k i ện. Ví d ụ2.44: Câulệnh d ư ớ i đ âychob i ết h ọtên c ủ a nh ữ ngs i nhv i ênl ớ pTinK25 sinh trư ớ c tất cảcác sinh viên c ủ a l ớ pToán K25 SELECThodem,ten FROMsinhvien JOIN lop ON sinhvien.malop=lop.malop WHEREtenlop='Tin K25' AND ngaysinh<ALL(SELECTngaysinh FROMsinhvien JOIN lop ONsinhvien.malop=lop.malop WHERElop.tenlop='Toán K25' Và câu lệnh: SELECThodem,ten FROMsinhvien JOIN lop on sinhvien.malop=lop.malop WHEREtenlop='Tin K25' AND year(ngaysinh)=ANY(SELECT year(ngaysinh) FROM sinhvien JOIN lop ONsinhvien.malop=lop.malop WHERElop.tenlop='Toán K25') chob i ết h ọtên c ủ an h ữ ngsinhviên l ớ pTinK25có n ă msinhtrùng v ớ i n ămsinh c ủ a b ất k ỳ m ộ t sinh vi ê n nào đ ó c ủ a l ớ p To á n K 25 . Sử d ụ ngtruy v ấ n con v ới toán t ử IN Khic ầ nt h ự chi ệ nphépk i ểmtragiátrịc ủ a m ộ tbiểu t hứ ccóxu ấ thiện(không xu ất hi ệ n) trong t ập các giá trị c ủ a truy v ấ n con hay không, ta có t h ể s ử d ụ ng t o án tử IN (NOT IN) như sau: WHEREbi ể u_th ứ c [NOT] IN (truy_v ấ n_con) Vídụ 2.45 : Để h iểnt h ị h ọtên c ủ an h ữngs i nhviênl ớ pTin K 25 c ó n ăm si n h b ằng vớ i n ămsinh c ủ a m ộ tsinhviênn à o đ óc ủ al ớ pTo á n K 25,thayvì s ử d ụ ngcâu l ệ n h n h ưở ví dụ trên, ta có t h ể s ử d ụ ng câu l ệnhn h ư sau: SELECThodem,ten FROMsinhvien JOIN lop on sinhvien.malop=lop.malop WHEREtenlop='Tin K25' AND year(ngaysinh)IN(SELECTyear(ngaysinh) FROM sinhvien JOIN lop ONsinhvien.malop=lop.malop WHERElop.tenlop='Toán K25') Sử d ụn g lượng từEXISTS v ớitruy v ấ n con L ư ợ ng từEXISTS đ ư ợc s ử d ụ n g k ết hợ p vớ i t ruy v ấn c o n d ư ớ i d ạ ng: WHERE[NOT] EXISTS (truy_ v ấ n_con) đ ể k iểm tr a x em m ộ ttruy v ấ n c o ncótrả v ềdòng k ếtq u ản à ohaykhông. Lư ợ ng t ừ EX I STS( t ươngứngN O TEX I S TS)trả v ềgiátrịT r ue( t ươngứngFalse) n ế u k ếtq u ả c ủ atruyv ấ nconcóítnhất m ộ tdòng(tươ n g ứ ngkhôngcódòngnào).Điềukhácb i ệt c ủ aviệc s ử d ụ ngEXISTSv ớ ihaicách đ ãnêuởtrênlàtrongd a nhsáchch ọ nc ủ atruy v ấn c on c ó t h ể có nhiều h ơ nhai c ộ t. Vídụ2.46: Câu l ệnh d ư ớ i đ â ychob i ết h ọtên c ủ an h ữngsinhviênh iệ nc h ưacó đ iểm thi c ủ a b ất k ỳ m ộ t môn h ọ c n à o SELECThodem,ten FROMsinhvien WHERENOT EXISTS(SELECT masv FROM diemthi WHEREdiemthi.masv=sinhvien.masv) Sử d ụ ngtruy v ấ n con v ới mệnh đề HAVING M ộ ttruy v ấncon c ó t hể đ ư ợ c s ử d ụ ngt r ong m ệnh đ ềHAVINGc ủ a m ộ ttruy v ấnkhác.Trongt r ường h ơ p này , k ếtq u ả c ủ atruy v ấnconđư ợ c s ử dụ n g đ ểtạonên đ iều k i ệ n đ ố i vớ i cá c hà m gộ p. Vídụ 2.47 : Câu l ệ n h d ư ớ i đ ây c hob i ết m ã,tênvàtrungb ì nh đ iểmlần1c ủ acácmôn họ c c ó trung b ì nh lớ n h ơ ntrung bình đ iểmlần 1 c ủ a tất cả các môn h ọ c SELECTdiemthi.mamonhoc,tenmonhoc,AVG(diemlan1) FROM diemthi,monhoc WHEREdiemthi.mamonhoc=monhoc.mamonhoc GROUP BY diemthi.mamonhoc,tenmonhoc HAVING AVG(diemlan1)> (SELECTAVG(diemlan1) FROM diemthi) 2 .2Bổ sung, c ập n hật và xoá dữ l i ệu Cáccâul ệ nhthaotác d ữliệutrongSQLkhôngn h ữngc h ỉ s ử d ụ ng đ ểtruy v ấn d ữliệu m àcòn đ ểthay đ ổ ivàcậpn h ật d ữ l iệutrong c ơ s ở d ữliệu.So v ớicâulệnh SELECT,việc s ử dụ ngcáccâu lệ nh đ ể b ổ s u ng ,cậpn h ậthayxoádữliệu đ ơngiản h ơ n nh i ề u. T r ong p h ần c ò n lại c ủ a c h ư ơ ng n à y sẽ đ ề cập đ ế n 3 câu l ệnh: • L ệnh INSERT • L ệnh UPDATE • L ệnh DELETE 2.2.1 B ổsung d ữl i ệu Dữliệutrongcácb ả ngđư ợ ct h ể h iện d ư ớ i d ạngcácdòng ( bảnghi).Để b ổ sung thêmcácdòng d ữ li ệ uvào m ộ t b ảng,ta s ử dụ ngcâulệnhINSERT.H ầ u h ếtcác h ệ qu ả ntrị CSD Ld ự a trênSQLcung c ấpcáccách d ưới đ ây đ ểt h ự chi ệ nthaotác b ổ sung dữ liệu cho b ả ng: • Bổ s u n gtừngdòng d ữliệu vớ i m ỗ icâu l ệnhINSERT.Đâylàcác s ử dụ ng t h ường g ặ p n h ất trong giao tác SQL. • Bổ s u n g n h iềudòng d ữliệu b ằ ngcáchtruyx u ất d ữli ệ utừcác b ả n g d ữliệu khác. Bổ sung t ừ ngdòng d ữ liệu v ới lệnh INSERT Để b ổsung m ộ tdòng d ữliệu m ớ i vàobảng,tasử d ụ ngcâulệnh I N SERTv ớ i cú ph á p như sau: INSERT INTO tên_b ả ng [(danh_sách_c ộ t )] VALUES(danh_sách_tr ị ) TrongcâulệnhI N SERT,d a nhsách c ộ tngaysautên b ảngkhôngcầnth i ết ph ảic h ỉ đ ịnh n ế ug i átrịcáct r ườ n g c ủ a b ảnghi m ớ i đượ cc h ỉ đ ị n h đ ầy đ ủtrongd a nhsáchtr ị . Trongtr ư ờng hợ pnày,thứtựcácgiátrịtrongdanhsáchtrị ph ải b ằng v ớ i s ốlư ợ n g các trư ờ ng c ủ a b ả ngcần b ổsung d ữliệuc ũ ngn h ư p h ảituântheo đ úng t hứtực ủ acác trư ờ ngnhưkhi b ảng đư ợ c đ ị nhnghĩa. Ví d ụ2.48: Câu lệnh dư ớ i đ â y b ổ sungthêmm ộ t dòng d ữ liệu v à o b ảng KHOA INSERTINTO khoa VALUES(‘DHT10’,’KhoaL u ậ t’,’054821135’) Trongtrườ n g h ợ pc h ỉ nh ậ pgiá t rịcho m ộ t s ốc ộ ttrongb ả ng,taphảic h ỉ đ ị nh danhsáchcácc ộ t cần n h ập d ữl i ệung a ys a utênbảng.Khi đ ó, c ácc ộ tkhôngđư ợ c nh ậ p d ữli ệ u s ẽ n h ậngiátrị m ặc đ ị n h ( n ếucó)h o ặcn h ậngiátrịNULL( n ế uc ộ t cho ph é p c h ấpn h ậ ngiátrịNULL). N ếu m ộ t c ộ tkhôngcógiátrị m ặc đ ịnhvàkhôngc h ấ p nh ậ n giá trị N U LL m à không đ uợ c nh ậ p d ữ liệu, câu l ệnh sẽ b ị l ỗ i. Ví d ụ 2 . 4 9 : Câu l ệnh dư ớ i đ â y b ổ sungm ộ t b ản ghi m ớ i cho bảng SINHV I EN INSERTINTO sinhvien(masv,hodem,ten,gioitinh,malop) VALUES(‘0241020008’,‘Nguy ễ n Công’,’Chính’,1,’C24102’) câulệnh trên còn có t h ể đượ cviết n h ư sau: INSERTINTO sinhvien VALUES(‘0241020008’,‘Nguy ễ n Công’,’Chính’, NULL,1,NULL,’C24102’) Bổ sungnh i ều d ò n g d ữ liệu từ b ản g kh á c M ộ tcách s ử dụ ngkh á cc ủ acâu l ệ n h I N S E R Tđư ợ c s ử d ụ ng đ ể b ổsungnh iề u dòng d ữliệu v à o m ộ t b ảng,cácdòng d ữliệunàyđư ợ c l ấytừ m ộ t b ảngkhácthôngqua câulệnhSELECT.Ởcáchnày,cácgiátrị d ữliệuđư ợ c b ổsungv à obảngkhôngđư ợ c c h ỉ đ ịnht ư ờ ng m inh m àthayvào đ ólà m ộ tcâu l ệnh S E LE C Ttruyvấn d ữliệutừ b ảng khác. Cúph á p câu lệnh I N S E R T có d ạngn h ư sau: INSERT INTO tên_b ả ng [(danh_sách_c ộ t )]câu_l ệ nh_SELECT Ví d ụ2.50: Giả s ửtacó b ảngLUUSINHVIENbao g ồ m cá c t r ư ờ ngHODEM,TEN, NGAYSINH.Câulệnh d ư ớ i đ ây b ổsungv à obảngL U USI NH VIEN cácdòngdữliệu có đư ợ c từ câutruy v ấ n S E LE C T : INSERTINTO luusinhvien SELECT hodem,ten,ngaysinh FROM sinhvien WHEREnoisinh like ‘%H u ế %’ Khi b ổ sung d ữ liệu theo cách n à y c ần l ư u ý m ộ t s ố đ iểm sa u : • Kết q u ả c ủ a câu lệnhSELE C T p h ải có số c ộ t b ằ n g v ớ i s ố c ộ t đ ư ợ cc h ỉ đ ịnh trong b ả n g đ íchvàphải tư ơ ng thích về k iểu d ữ liệu. • Trong câu lệnhSELECT đ ư ợ c s ử d ụ ng m ệnh đ ề COMPUTE ... BY 2.2.2 C ậ p nhậ tdữl i ệu CâulệnhUPDATEtro n gSQL đư ợ c s ử d ụ n g đ ểcập nh ật d ữl i ệutrongcácbảng. Câu l ệnh này có cú pháp n h ư sau: UPDATEtên_b ả ng SET tên_c ộ t= bi ể u_th ứ c [,..., tên_c ộ t_k= bi ể u_th ứ c_k] [FROM danh_sách_b ả ng] [WHERE đ i ề u_ki ệ n] SauUPDATElàt ê n c ủ a b ả ngcầncậpn h ật d ữliệu. M ộ tcâulệnhUPDATEcót h ểc ậ p nh ật d ữliệuchonh iề uc ộ t b ằngcáchchỉ đ ịnhcácdanhsáchtên c ộ tvàbiểut hứ ctư ơ ng ứ ngsautừkhoá S E T. M ệnh đ ềW H ERE t rong c â u l ệ n h UPDA TE t hườngđư ợ c s ử d ụ ng đ ểc h ỉ đ ịnhcácdòng d ữliệuc h ị utác đ ộ ng c ủ acâulệnh(nếukhông c hỉ đ ịnh, ph ạm vi tác đ ộ ng c ủ a câu l ệ n h đ ư ợ c hiểulà toàn b ộ cácdòngtrong b ảng) Vídụ2.51: Câu l ệnh d ư ớ i đ â ycậpn h ậtlại s ố đ ơ n v ị h ọ ctrình c ủ acácmônh ọ ccó s ố đ ơ n v ị họ ctrìnhn h ỏ h ơ n2 UPDATEmonhoc SETsodvht = 3 WHEREsodvht = 2 Sử d ụn g c ấ u trúc CASE trong câu lệnhUPDATE Cấut r úc C A S E c ót h ể đ ư ợ c s ử d ụ ngtrongb i ểut h ứ ckhicầnp h ải đư a r a các qu y ết đ ị nhkhácnh a u v ề giá trị c ủ a biểu t h ức Điều kiện c ậ p n h ậ t d ữ liệu liên quanđếnnhiều bảng Mệnh đ ề F ROMtr on gcâulệnhUPDATE đ ư ợ c s ử d ụ ngkhi c ầnc h ỉ đ ị n h c ác đ iều k i ệ nliênquan đ ếncácbảngkhácv ớ i b ả n gcầnc ậ p nh ật d ữliệu.Trongtr u ờ n g h ợ p này, trong m ệ n h đ ề W H ER E t h ư ờ n g c ó đ i ề u k iện n ố i g i ữ a các b ảng. Câu l ệnhUPDATEvớitruy v ấ n con T ư ơ ngtự n h ưtrongcâu l ệnh S ELE C T ,truyvấnconcóthể đ ư ợ c s ử d ụ ngtrong m ệ n h đ ề W H ER E c ủ acâu l ệ n hUPDATE n hằm c h ỉ đ ịnh đ i ề u k iện đố i v ớ icácdòng d ữ liệu cần cập n h ật d ữ liệu. Ví d ụ2.54: Câu lệnh ởtrên có t h ể đ ư ợ c viết n h ư sau: UPDATEnhatkybanhang SET thanhtien = soluong*gia FROMmathang WHEREmathang.mahang =(SELECT mathang.mahang FROMmathang WHEREmathang.mahang=nhatkybanhang.mahang) 2.2.3Xoádữl i ệu Đểxoá d ữliệutrong m ộ t b ảng, t a s ử dụ ngcâu l ệnh DE LETE.Cúph á p c ủ acâu lệ n h n à y n h ư sau: DELETEFROM tên_b ả ng [FROM danh_sách_b ả ng] [WHERE đ i ề u_ki ệ n] Trongcâulệnhnày,tên c ủ a b ả n gcầnxoádữliệu đượ cc h ỉ đ ịnhsauDELETEFROM. Mệnh đ ềW H E R Et r ongc â u l ệnh đ ư ợ c s ử d ụ ng đ ểc h ỉ đ ịnh đ iềukiện đ ố i v ớ icácdòng d ữliệuc ầ nxoá. N ếucâu l ệnhDELETEkhôngcó m ệ n h đ ề WH E R Ethì to àn b ộcác dòng dữ liệu trong bảng đ ề u b ịxoá. Ví d ụ2.55: Câu lệnh dư ớ i đ ây xoá k h ỏ i b ả ng SINHVIEN n h ững sinh viên sinh tại H u ế DELETEFROM sinhvien WHEREnoisinh LIKE ‘%H u ế %’ Xoádữ liệu khi điều kiện liên quanđếnnh i ều b ả ng Nếu đ iều k iệntrongcâu l ệnh DE LETEliênqu a n đ ến cá cbảngkhôngp h ảilà b ảngcầnxóa d ữliệu,taphải s ử d ụ ngthêm m ệ n h đ ề F ROMvàsau đ ólàd a nhsáchtên các b ảng đ ó.Trongtrường h ợ pnày,trongmệ n h đ ềW H E R Eta c hỉ đ ịnhthêm đ iều k iện nố igi ữ a các b ảng Ví d ụ2.56: Câu lệ nh d ư ớ i đ âyxoárakh ỏ i b ảngSINHVIEN n h ữngsinhvi ê n lớ pTin K24 DELETEFROM sinhvien FROMlop WHERElop.malop=sinhvien.malop AND tenlop='Tin K24' Sử d ụ ngtruy v ấ n controng c â u l ệnh DELETE M ộ tcâu l ệnhSELECTcóthể đư ợ cl ồ ngv à otrong m ệnh đ ề WH E R Etrongcâu lệnh DE LETE đ ể là m đ iều k i ệ n cho c â u l ệnh tư ơ ng tự n h ư câu l ệ nh UP DA TE. Vídụ2 . 57: Câu l ệ n h d ư ớ i đ âyxoák h ỏ i b ả n g L O P n h ữ ngl ớ pkhôngcósinhviênn à o họ c DELETEFROM lop WHEREmalop NOT IN (SELECT DISTINCT malop FROMsinhvien) Xoátoàn b ộ dữ liệu tro n g b ả ng Câu l ệnhDELETEkhôngchỉ đ ị nh đ iều k i ệ n đố i vớ icácdòng d ữliệucầnxoá trong m ệnh đ ềW H E R E s ẽxoátoàn b ộ d ữliệutrongb ả ng.Th a yvì s ử d ụ n g c âulệ nh DELETEtrongt rư ờ ng h ợ pnày,tacóthể s ử d ụ ngcâulệnhTR U N C ATE c ócúph á p n h ư sau: TRUNCATETABLE tên_b ả ng Ví d ụ2.58: Câu lệnh sau xoá toàn b ộ d ữ liệu trong b ả n gdiemthi: DELETEFROM diemthi cótác d ụ ng tư ơ ng tự v ớ i câu l ệnh TRUNCATETABLE diemthi
Bạn đang đọc truyện trên: AzTruyen.Top