Giáo trình Thực hành SQL - Trần Nguyên Phong (Phần 1)

Tóm tắt Giáo trình Thực hành SQL - Trần Nguyên Phong (Phần 1): ...ÊWO\—FX•DFD—FGR”QJWŽQJŽ—QJWŒžQWDÊL WURQJED•QJ0ŒÔWED•QJFKFR— WK‹ FR—WŒÂLŠDPŒÔWFKPXÊFWXÊQKR—P • 0ŒÔWFKPXÊFNKŒQJWXÊKR—POD”PŒÔWFKPXÊFPD”WURQJŠR—WKŽ—WŽÊORJLFFX•DFD—FNKRD— NKŒQJQKŽWKŽ—WŽÊY‰ÊWO\—FX•DFD—FGR”QJWURQJED•QJ&D—FFKPXÊFWXÊQKR—PKŒĂ...hân thiện hơn, ta có thể đổi tên các tiêu đề của các cột. Để làm được việc này, ta có thể sử dụng một trong hai cách viết sau: tiêu_đề_cột = tên_cột hoặc tên_cột tiêu_đề_cột Ví dụ 2.4: Hai câu lệnh sau sẽ đặt tiêu đề Họ và tên cho là hoten và Địa chỉ cho cột diachi khi kết quả được hiển thị ch...n1, nhanvien n2 WHERE n2.hoten='Trần Nguyên Phong' AND n1.diachi = n2.diachi * Phép nối không dựa trên tiêu chuẩn bằng Trong phép nối này, các cột được sử dụng để kết nối được so sánh với nhau không dựa trên điều kiện bằng. * Phép nối ngoài (outer join) Trong các phép nối đ∙ đề cập ở trên, ...

pdf31 trang | Chia sẻ: havih72 | Lượt xem: 232 | Lượt tải: 0download
Nội dung tài liệu Giáo trình Thực hành SQL - Trần Nguyên Phong (Phần 1), để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
inh:
Tráön Nguyãn Phong
 SELECT hoten,ngaysinh,hsluong
 FROM nhanvien
 ORDER BY 3
1.8 PhÐp hîp vµ to¸n tö UNION
To¸n tö UNION cho phÐp ta hîp c¸c kÕt qu¶ cña hai hay nhiÒu truy vÊn thµnh
mét tËp kÕt qu¶ duy nhÊt. Có ph¸p cña phÐp hîp nh­ sau:
 Query_1
 [UNION [ALL] Query_2 ]
 ...
 [UNION [ALL] Query_N ]
 [ORDER BY clause]
 [COMPUTE clause]
Trong ®ã:
Query_1 cã d¹ng:
SELECT select_list
[INTO clause]
[FROM clause]
[WHERE clause]
[GROUP BY clause]
[HAVING clause]
vµ Query_i (i=2,..,N) cã d¹ng:
SELECT select_list
[FROM clause]
[WHERE clause]
[GROUP BY clause]
[HAVING clause]
VÝ dô 2.12: Gi¶ sö ta cã hai b¶ng nh­ sau:
R S
A B C E F
abc 3 5 edf 15
jks 5 7 hht 1
bdg 10 5 abc 3
Hht 12 0 adf 2
Th× phÐp hîp:
SELECT A,B FROM R
UNION
Giaïo trçnh thæûc haình SQL
7UDQJ
SELECT * FROM S
Cã kÕt qu¶ nh­ sau:
A B
---- -----------
abc 3
adf 2
bgd 10
edf 15
hht 1
hht 12
jks 5
Theo mÆc ®Þnh, phÐp to¸n UNION sÏ lo¹i bá nh÷ng dßng gièng nhau trong kÕt
qu¶. NÕu ta sö dông tïy chän ALL th× c¸c dßng gièng nhau sÏ kh«ng bÞ lo¹i bá. Ta cã
thÓ sö dông c¸c dÊu ngoÆc ®Ó x¸c ®Þnh thø tù tÝnh to¸n trong phÐp hîp.
1.8.1 C¸c nguyªn t¾c khi x©y dùng c©u lÖnh UNION
Khi x©y dùng c¸c c©u lÖnh UNION, ta cÇn chó ý c¸c nguyªn t¾c sau:
• TÊt c¶ c¸c danh s¸ch chän trong c©u lÖnh UNION ph¶i cã cïng sè biÓu thøc
(c¸c tªn cét, c¸c biÓu thøc sè häc, c¸c hµm gép,...)
• C¸c cét t­¬ng øng trong tÊt c¶ c¸c b¶ng, hoÆc tËp con bÊt kú c¸c cét ®­îc sö
dông trong b¶n th©n mçi truy vÊn ph¶i cïng kiÓu d÷ liÖu.
• C¸c cét t­¬ng øng trong b¶n th©n tõng truy vÊn cña mét c©u lÖnh UNION
ph¶i xuÊt hiÖn theo thø tù nh­ nhau. Nguyªn nh©n lµ do phÐp hîp so s¸nh c¸c
cét tõng cét mét theo thø tù ®­îc cho trong mçi truy vÊn.
• Khi c¸c kiÓu d÷ liÖu kh¸c nhau ®­îc kÕt hîp víi nhau trong c©u lÖnh
UNION, chóng sÏ ®­îc chuyÓn sang kiÓu d÷ liÖu cao h¬n (nÕu cã thÓ ®­îc).
• Tiªu ®Ò cét trong kÕt qu¶ cña phÐp hîp sÏ lµ tiªu ®Ò cét ®­îc chØ ®Þnh trong
truy vÊn ®Çu tiªn.
1.8.2 Sö dông UNION víi c¸c giao t¸c SQL kh¸c
C¸c nguyªn t¾c sau ph¶i ®­îc tu©n theo khi sö dông phÐp hîp víi c¸c c©u lÖnh
giao t¸c SQL kh¸c:
• Truy vÊn ®Çu tiªn trong c©u lÖnh UNION cã thÓ cã INTO ®Ó t¹o mét b¶ng tõ
kÕt qu¶ cuèi cïng.
• MÖnh ®Ò ORDER BY vµ COMPUTE dïng ®Ó x¸c ®Þnh thø tù kÕt qu¶ cuèi
cïng hoÆc tÝnh to¸n c¸c gi¸ trÞ tãm t¾t chØ ®­îc cho phÐp sö dông ë cuèi cña
c©u lÖnh UNION. Chóng kh«ng ®­îc phÐp sö dông trong bÊt kú b¶n th©n
truy vÊn nµo trong phÐp hîp.
• MÖnh ®Ò GROUP BY vµ HAVING chØ cã thÓ ®­îc sö dông trong b¶n th©n
tõng truy vÊn. Chóng kh«ng thÓ ®­îc sö dông ®Ó t¸c ®éng lªn kÕt qu¶ cuèi
cïng.
Tráön Nguyãn Phong
• PhÐp to¸n UNION còng cã thÓ ®­îc sö dông bªn trong mét c©u lÖnh
INSERT.
• PhÐp to¸n UNION kh«ng thÓ sö dông trong c©u lÖnh CREATE VIEW.
1.9 PhÐp nèi
PhÐp nèi ®­îc sö dông ®Ó truy xuÊt d÷ liÖu tõ hai hay nhiÒu b¶ng hoÆc khung
nh×n trong cïng CSDL hoÆc trong c¸c CSDL kh¸c nhau bëi cïng mét phÐp xö lý.
1.9.1 PhÐp to¸n nèi
Mét c©u lÖnh nèi (join statament) thùc hiÖn c¸c c«ng viÖc sau ®©y:
• X¸c ®Þnh mét cét tõ mçi b¶ng.
• So s¸nh c¸c gi¸ trÞ trong nh÷ng cét nµy theo tõng dßng.
• KÕt hîp c¸c dßng cã nh÷ng gi¸ trÞ tho¶ m∙n ®iÒu kiÖn thµnh nh÷ng dßng
míi.
VÝ dô 2.13: C©u lÖnh d­íi ®©y cho biÕt hä tªn, ®Þa chØ cña c¸c nh©n viªn vµ tªn
®¬n vÞ mµ mçi nh©n viªn thùc thuéc:
SELECT hoten, diachi, tendonvi
FROM nhanvien, donvi
WHERE nhanvien.madonvi = donvi.madonvi
Danh s¸ch chän trong phÐp nèi
Gièng nh­ c¸c c©u lÖnh chän (selection statment), mét c©u lÖnh nèi b¾t ®Çu víi
tõ khãa SELECT. C¸c cét ®­îc chØ ®Þnh tªn sau tõ kho¸ SELECT lµ c¸c cét ®­îc d­a
ra trong kÕt qu¶ truy vÊn. Trong danh s¸ch chän cña phÐp nèi, ta cã thÓ chØ ®Þnh mét
sè cét b»ng c¸ch chØ ®Þnh tªn cña cét ®ã hoÆc tÊt c¶ c¸c cét cña nh÷ng b¶ng tham gia
vµo phÐp nèi b»ng c¸ch sö dông dÊu sao (*). Danh s¸ch chän kh«ng nhÊt thiÕt ph¶i
bao gåm c¸c cét cña nh÷ng b¶ng tham gia phÐp nèi.
MÖnh ®Ò FROM trong phÐp nèi
MÖnh ®Ò FROM cña c©u lÖnh nèi x¸c dÞnh c¸c b¶ng (hay khung nh×n) tham gia
vµo phÐp nèi. NÕu ta sö dông dÊu * trong danh s¸ch chän th× thø tù cña c¸c b¶ng liÖt
kª trong FROM sÏ ¶nh h­ëng ®Õn kÕt qu¶ ®­îc hiÓn thÞ.
MÖnh ®Ò WHERE trong phÐp nèi
MÖnh ®Ò WHERE x¸c ®Þnh ®iÒu kiÖn nèi gi÷a c¸c b¶ng vµ c¸c khung nh×n ®­îc
chØ ®Þnh. Nã x¸c ®Þnh tªn cña cét ®­îc sö dông ®Ó nèi vµ phÐp to¸n nèi ®­îc sö dông.
C¸c to¸n tö so s¸nh d­íi ®©y ®­îc sö dông ®Ó x¸c ®Þnh ®iÒu kiÖn nèi
PhÐp to¸n ý nghÜa
= B»ng
> Lín h¬n
>= Lín h¬n hoÆc b»ng
< Nhá h¬n
<= Nhá h¬n hoÆc b»ng
 Kh¸c
Giaïo trçnh thæûc haình SQL
7UDQJ
!> Kh«ng lín h¬n
!< Kh«ng nhá h¬n.
1.9.2 C¸c lo¹i phÐp nèi
* PhÐp nèi b»ng vµ phÐp nèi tù nhiªn
Mét phÐp nèi b»ng (equijoin) lµ mét phÐp nèi trong ®ã gi¸ trÞ cña c¸c cét ®­îc
sö dông ®Ó nèi ®­îc so s¸nh víi nhau dùa trªn tiªu chuÈn b»ng vµ tÊt c¶ c¸c cét trong
c¸c b¶ng tham gia nèi ®Òu ®­îc ®­a ra trong kÕt qu¶.
VÝ dô 2.14:
 SELECT * FROM nhanvien, donvi
 WHERE nhanvien.madonvi = donvi.madonvi
Trong kÕt qu¶ cña c©u lÖnh trªn, cét madonvi vµ tendonvi xuÊt hiÖn hai lÇn trong
kÕt qu¶ phÐp nèi vµ nh­ vËy lµ kh«ng cÇn thiÕt. §Ó lo¹i bá ®iÒu nµy, ta cã thÓ sö dông
phÐp nèi tù nhiªn (natural join) b»ng c¸ch lo¹i bá ®i c¸c cét trïng tªn víi nhau.
* PhÐp nèi víi c¸c ®iÒu kiÖn bæ sung
Trong mÖnh ®Ò WHERE cña c©u lÖnh nèi, ta cã thÓ bè sung c¸c ®iÒu kiÖn t×m
kiÕm kh¸c.
VÝ dô 2.15:
 SELECT hoten, diachi, tendonvi
 FROM nhanvien, donvi
 WHERE nhanvien.madonvi = donvi.madonvi AND
 Nhanvien.hsluong>=2.11
* PhÐp tù nèi vµ c¸c bÝ danh
PhÐp tù nèi lµ phÐp nèi mµ trong ®ã ta so s¸nh c¸c gi¸ trÞ bªn trong mét cét cña
cïng mét b¶ng.
VÝ dô 2.16: T×m nh÷ng nh©n viªn cã cïng ®Þa chØ víi nh©n viªn 'TrÇn Nguyªn
Phong'
 SELECT n1.hoten
 FROM nhanvien n1, nhanvien n2
 WHERE n2.hoten='TrÇn Nguyªn Phong' AND
 n1.diachi = n2.diachi
* PhÐp nèi kh«ng dùa trªn tiªu chuÈn b»ng
Trong phÐp nèi nµy, c¸c cét ®­îc sö dông ®Ó kÕt nèi ®­îc so s¸nh víi nhau
kh«ng dùa trªn ®iÒu kiÖn b»ng.
* PhÐp nèi ngoµi (outer join)
Trong c¸c phÐp nèi ®∙ ®Ò cËp ë trªn, chØ nh÷ng dßng hîp lÖ (tøc lµ nh÷ng dßng
cã gi¸ trÞ trong c¸c cét ®­îc chØ ®Þnh tho¶ m∙ ®iÒu kiÖn kÕt nèi) míi ®­îc ®­a ra trong
kÕt qu¶. Theo mét nghÜa nµo ®ã, nh÷ng phÐp nèi nµy lo¹i bá th«ng tin chøa trong
nh÷ng dßng kh«ng hîp lÖ. Tuy nhiªn, ®«i khi ta còng cÇn gi÷ l¹i nh÷ng th«ng tin
kh«ng hîp lÖ b»ng c¸ch cho phÐp nh÷ng dßng kh«ng hîp lÖ cã mÆt trong kÕt qu¶ cña
Tráön Nguyãn Phong
phÐp nèi. §Ó lµm ®iÒu nµy, ta cã thÓ sö dông phÐp nèi ngoµi. Giao t¸c SQL cung cÊp
hai phÐp nèi ngoµi:
• PhÐp nèi ngoµi tr¸i (*=) : PhÐp nèi nµy cho phÐp lÊy tÊt c¶ c¸c tõ b¶ng cã
tªn ®Çu tiªn.
• PhÐp nèi ngoµi ph¶i (=*) : PhÐp nèi nµy cho phÐp lÊy tÊt c¶ c¸c dßng tõ
b¶ng cã tªn thø hai.
VÝ dô 2.17: Gi¶ sö ta cã hai b¶ng R vµ S cã néi dung nh­ sau
A B C D
----- ----------- ----------- -----
aaa 2 4 aaaa
fff 8 4 f2
ggg 2 7 g4
xxx 2 12 gdf
ggg 2 12 khf
sss 45 0 k3h
 B¶ng R
E F G
----- ----------- -----------
aaa 3 (null)
xxx 23 26
abc 3 6
(null)12 (null)
sss 20 3
 B¶ng S
Khi ®ã c©u lÖnh:
SELECT * FROM R,S
WHERE R.A = S.E
Cho kÕt qu¶ lµ:
A B C D E F G
---- ----- ----- ----- ----- ------ --------
aaa 2 4 aaaa aaa 3 (null)
xxx 2 12 gdf xxx 23 26
sss 45 0 k3h sss 20 3
Cßn c©u lÖnh:
Giaïo trçnh thæûc haình SQL
7UDQJ
SELECT * FROM R,S
 WHERE R.A *= S.E
Cho kÕt qu¶ lµ:
A B C D E F G
--- ---- ---- ----- ----- ------ ------
aaa 2 4 aaaa aaa 3 (null)
fff 8 4 f2 (null) (null) (null)
ggg 2 7 g4 (null) (null) (null)
xxx 2 12 gdf xxx 23 26
ggg 2 12 khf (null) (null) (null)
sss 45 0 k3h sss 20 3
Vµ c©u lÖnh
SELECT * FROM R,S
 WHERE R.A =* S.E
Cho kÕt qu¶ lµ:
A B C D E F G
---- ----- ----- ----- ----- ------ ---------
aaa 2 4 aaaa aaa 3 (null)
xxx 2 12 gdf xxx 23 26
(null)(null) (null) (null) abc 3 6
(null)(null) (null) (null) (null)12 (null)
 sss 45 0 k3h sss 20 3
C¸c giíi h¹n cña phÐp nèi ngoµi
Giao t¸c SQL kh«ng cho phÐp hai phÐp nèi ngoµi lång nhau vµ phÐp nèi
trong lång vµo trong phÐp nèi ngoµi. Tuy nhiªn, mét b¶ng cã thÓ tham gia trong mét
phÐp nèi trong vµ lµ b¶ng ngoµi (outer table) trong mét phÐp nèi ngoµi.
B¶ng d­íi ®©y cho biÕt c¸c c¸ch kÕt hîp hîp lÖ vµ kh«ng hîp lÖ cña phÐp
nèi trong vµ phÐp nèi ngoµi:
Hîp lÖ Kh«ng hîp lÖ
T1 =* T2 *= T3 T1 *= T2 *= T3
T1 = T2 *= T3 T1 *= T2 = T3
T1 *= T2 =* T3
T3 T3
Tráön Nguyãn Phong
||
*
T2 =* T1 *= T4
*
||
T5
||
*
T2 =* T1 =* T4
*
||
T5
T3
*
||
T2 *= T1 =* T4
||
*
T5
T3
||
*
T2 *= T1 *= T4
||
*
T5
* PhÐp nèi vµ c¸c gi¸ trÞ NULL
NÕu trong c¸c cét cña c¸c b¶ng tham gia phÐp nèi cã c¸c gi¸ trÞ NULL th× c¸c
gi¸ trÞ NULL ®­îc xem nh­ lµ kh«ng b»ng nhau. Ch¼ng h¹n ta cã hai b¶ng:
A
------
B
---------
C
--------
D
--------
1 b1 Null d1
Null b2 4 d2
4 b3
B¶ng R B¶ng S
Th× c©u lÖnh:
SELECT * FROM R, S
WHERE A *= C
SÏ cho kÕt qu¶ lµ:
A
------
B
------
C
------
D
------
1 b1 Null Null
Null b2 Null Null
4 b3 4 D2
1.10 T¹o c¸c dßng thèng kª d÷ liÖu víi COMPUTE ... BY
Ta sö dông mÖnh ®Ò COMPUTE BY kÕt hîp víi c¸c hµm gép dßng vµ mÖnh ®Ò
ORDER BY ®Ó s¶n sinh ra c¸c c¸c b¸o c¸o (report) nh»m thèng kª c¸c gi¸ trÞ d÷ liÖu
Giaïo trçnh thæûc haình SQL
7UDQJ
theo tõng nhãm. Nh÷ng gi¸ trÞ thèng kª nµy xuÊt hiÖn nh­ lµ nh÷ng dßng bæ sung
trong kÕt qu¶ truy vÊn. Mét mÖnh ®Ò COMPUTE BY cho phÐp ta quan s¸t c¶ c¸c chi
tiÕt vÒ d÷ liÖu lÉn c¸c gi¸ trÞ thèng kª. Ta cã thÓ tÝnh c¸c gi¸ trÞ thèng kª cho c¸c
nhãm con (subgroups) vµ ta còng cã thÓ tÝnh to¸n nhiÒu hµm gép trªn cïng mét
nhãm.
MÖnh ®Ò COMPUTE BY cã có ph¸p nh­ sau:
 COMPUTE row-aggregate(col_name)
 [,...,row_aggregate(col_name)]
 BY col_name [,...,col_name]
C¸c hµm gép cã thÓ sö dông ®­îc víi COMPUTE BY bao gåm SUM, AVG,
MIN, MAX vµ COUNT.
VÝ dô 2.18: C©u lÖnh d­íi ®©y cho biÕt hä tªn, tªn ®¬n vÞ hÖ sè l­¬ng cña nh©n
viªn ®ång thêi cho biÕt l­¬ng trung b×nh cña c¸c nh©n viªn trong mçi ®¬n vÞ
SELECT hoten,tendonvi,hsluong
FROM nhanvien,donvi
WHERE nhanvien.madonvi=donvi.madonvi
ORDER BY nhanvien.madonvi
COMPUTE AVG(hsluong) BY nhanvien.madonvi
KÕt qu¶ cña truy vÊn nµy sÏ nh­ sau:
Hoten tendonvi hsluong
--------------- -------------- --------------
NguyÔn ThÞ Hoa Phßng kÕ to¸n 2.11
avg
===========
 2.11
Lª Hoµi Nam Phßng Tæ chøc 1.86
Hoµng Nam Phong Phßng Tæ chøc 3.21
avg
===========
2.535
TrÇn Nguyªn Phong Phßng ®iÒu hµnh 1.92
NguyÔn H÷u T×nh Phßng ®iÒu hµnh 1.92
avg
===========
1.92
NguyÔn Trung Kiªn Phßng tµi vô 1.86
Tráön Nguyãn Phong
avg
===========
1.86
Khi sö dông mÖnh ®Ò COMPUTE ... BY cÇn tu©n theo c¸c qui t¾c d­íi ®©y:
• Tõ khãa DISTINCT kh«ng cho phÐp sö dông víi c¸c hµm gép dßng
• C¸c cét sö dông trong mÖnh ®Ò COMPUTE ph¶i xuÊt hiÖn trong danh s¸ch
chän.
• Kh«ng sö dông SELECT INTO trong mét c©u lÖnh SELECT cã sö dông
COMPUTE.
• NÕu sö dông mÖnh ®Ò COMPUTE ... BY th× còng ph¶i sö dông mÖnh ®Ò
ORDER BY. C¸c cét liÖt kª trong COMPUTE BY ph¶i gièng hÖt hay lµ mét
tËp con cña nh÷ng g× ®­îc liÖt kª sau ORDER BY. Chóng ph¶i cã cïng thø
tù tõ tr¸i qua ph¶i, b¾t ®Çu víi cïng mét biÓu thøc vµ kh«ng bá qua bÊt kú
mét biÓu thøc nµo.
Ch¼ng h¹n nÕu mÖnh ®Ò ORDER BY cã d¹ng:
ORDER BY a, b, c
Th× mÖnh ®Ò COMPUTE BY cã d¹ng d­íi ®©y lµ hîp lÖ:
COMPUTE row_aggregate (column_name) BY a, b, c
COMPUTE row_aggregate (column_name) BY a, b
COMPUTE row_aggregate (column_name) BY a
Vµ c¸c d¹ng d­íi ®©y lµ sai
COMPUTE row_aggregate (column_name) BY b, c
COMPUTE row_aggregate (column_name) BY a, c
COMPUTE row_aggregate (column_name) BY c
• Ph¶i sö dông mét tªn cét hoÆc mét biÓu thøc trong mÖnh ®Ò ORDER BY,
viÖc s¾p xÕp (order) kh«ng ®­îc thùc hiÖn dùa trªn tiªu ®Ò cét.
• Tõ kho¸ COMPUTE cã thÓ ®­îc sö dông mµ kh«ng cã BY vµ khi ®ã
ORDER BY lµ tïy chän.
1.11 Thèng kª d÷ liÖu víi GROUP BY vµ HAVING
Ta cã thÓ sö dông c¸c mÖnh ®Ò GROUP BY vµ HAVING ®Ó thèng kª d÷ liÖu.
GROUP BY tæ chøc d÷ liÖu vµo c¸c nhãm, HAVING thiÕt lËp c¸c ®iÒu kiÖn lªn c¸c
nhãm trong kÕt qu¶ truy vÊn. Nh÷ng mÖnh ®Ò nµy th­êng ®­îc sö dông kÕt hîp víi
nhau (HAVING ®­îc sö dông kh«ng kÌm víi GROUP BY cã thÓ t¹o ra nh÷ng kÐt
qu¶ nhÇm lÉn).
C¸c hµm gép tr¶ vÒ c¸c gi¸ trÞ tãm l­îc cho c¶ b¶ng hoÆc cho c¸c nhãm trong
b¶ng. Do ®ã, chóng th­êng ®­îc sö dông víi GROUP BY. C¸c hµm gép cã thÓ xuÊt
hiÖn trong mét dang s¸ch chän hay trong mÖnh ®Ò HAVING, nh­ng kh«ng ®­îc sö
dông trong mÖnh ®Ò WHERE.
Ta cã thÓ sö dông c¸c hµm gép d­íi ®©y víi GROUP BY (Trong ®ã expression
lµ mét tªn cét).
Giaïo trçnh thæûc haình SQL
7UDQJ
Hµm gép Chøc n¨ng
SUM([ALL | DISTINCT] expression) TÝnh tæng c¸c gi¸ trÞ.
AVG([ALL | DISTINCT] expression) TÝnh trung b×nh cña c¸c gi¸ trÞ
COUNT([ALL | DISTINCT] expression) Sè c¸c gi¸ trÞ trong biÓu thøc.
COUNT(*) Sè c¸c dßng ®­îc chän.
MAX(expression) TÝnh gi¸ trÞ lín nhÊt
MIN(expression) TÝnh gi¸ trÞ nhá nhÊt
Trong ®ã, SUM vµ AVG chØ lµm viÖc víi nh÷ng gi¸ trÞ kiÓu sè. SUM, AVG,
COUNT, MAX vµ MIN bá qua c¸c gi¸ trÞ null cßn COUNT(*) th× kh«ng.
VÝ dô 2.19: C©u lÖnh d­íi ®©y cho biÕt hÖ sè l­¬ng trung b×nh cña c¸c nh©n viªn
theo tõng ®¬n vÞ:
SELECT donvi.madonvi,tendonvi, avg(hsluong)
 FROM nhanvien,donvi
 WHERE nhanvien.madonvi = donvi.madonvi
 GROUP BY donvi.madonvi,tendonvi
Chó ý: Danh s¸ch c¸c tªn cét trong danh s¸ch chän cña c©u lÖnh SELECT vµ danh
s¸ch c¸c tªn cét sau GROUP BY ph¶i nh­ nhau, nÕu kh«ng c©u lÖnh sÏ kh«ng hîp lÖ.
VÝ dô c©u lÖnh d­íi ®©y lµ kh«ng ®óng:
SELECT donvi.madonvi,tendonvi, avg(hsluong)
 FROM nhanvien,donvi
 WHERE nhanvien.madonvi = donvi.madonvi
 GROUP BY donvi.madonvi
MÖnh ®Ò HAVING thiÕt lËp c¸c ®iÒu kiÖn ®èi víi mÖnh ®Ò GROUP BY t­¬ng tù
nh­ c¸ch thøc mÖnh ®Ò WHERE thiÕt lËp c¸c ®iÒu kiÖn cho c©u lÖnh SELECT. MÖnh
®Ò HAVING sÏ kh«ng cã nghÜa nÕu nh­ kh«ng sö dông kÕt hîp víi mÖnh ®Ò
WHERE. Cã mét ®iÓm kh¸c biÖt gi÷a HAVING vµ WHERE lµ trong ®iÒu kiÖn t×m
kiÕm cña WHERE kh«ng ®­îc cã c¸c hµm gép trong khi HAVING l¹i cho phÐp sö
dông c¸c hµm gép trong ®iÒu kiÖn t×m kiÕm cña m×nh. MÖnh ®Ò HAVING cã thÓ
tham chiÕu ®Õn bÊt kú môc nµo trong danh s¸ch chän vµ mÖnh ®Ò HAVING cã thÓ
chøa tèi ®a 128 ®iÒu kiÖn t×m kiÕm.
VÝ dô 2.20: C©u lÖnh d­íi ®©y cho biÕt hÖ sè l­¬ng trung b×nh cña c¸c nh©n viªn
theo tõng ®¬n vÞ vµ chØ hiÓn thÞ nh÷ng ®¬n vÞ cã hÖ sè l­¬ng trung b×nh lín h¬n 1.92
SELECT donvi.madonvi,tendonvi, avg(hsluong)
FROM nhanvien,donvi
WHERE nhanvien.madonvi = donvi.madonvi
GROUP BY donvi.madonvi,tendonvi
HAVING avg(hsluong)>1.92
7UX\YƒšQFRQVXETXHU\
Tráön Nguyãn Phong
0Œ¤W WUX\Y‰¢QFRQ OD”PŒ¤W F‰X O‹£QK6(/(&7ŠŽ¤F OŒžQJYD”RE‹Q WURQJPŒ¤W F‰X
O‹£QK6(/(&7 ,16(5783'$7(KD\'(/(7(KRˆ£F E‹Q WURQJPŒ¤W WUX\Y‰¢Q FRQ
NKD—F&‰XO‹£QKWUX\Y‰¢QFRQFR—WK‹ WKDPFKL‹¢XŠ‹¢QFX”QJPŒ¤WED•QJY—LWUX\Y‰¢QQJRD”L
KRˆ£FPŒ¤WED•QJNKD—F7URQJJLD—RWD—F64/PŒ¤WWUX\Y‰¢QFRQWUD•Y‹žPŒ¤WFKJLD—WU“FR—
WK‹ ŠŽ¤FVŽ•GX£QJWD£LQKŽ–QJY“WU’PD”WD£LŠR—PŒ¤WEL‹ XWKŽ—FŠŽ¤FFKRSKH—SVŽ•GX£QJ
&X‘SKD‘SWUX\YƒšQFRQ
0Œ¤W WUX\Y‰¢QFRQŠŽ¤F OŒžQJYD”RE‹Q WURQJPŒ¤WF‰X O‹£QK6(/(&7FR—FX—SKD—S
QKŽVDX
 (SELECT [ALL|DISTINCT] subquery_select_list
 [FROM {table_name|view_name} [optimizer_hints]
 [[,table_name2|view_bame2} [optimizer_hints]
 [...,table_name16|view_name16}[optimizer_hints]]]
 [WHERE clause]
 [GROUP BY clause]
 [HAVING clause])
&‰XO‹£QK6(/(&7FX•DWUX\Y‰¢QFRQOXŒQQˆšPWURQJFˆ£SG‰¢XQJRˆ£F1R—NKŒQJ
ŠŽ¤F FKŽ—DP‹£QK Š‹ž25'(5%<&20387(KRˆ£F )25%52:6(0Œ¤W WUX\ Y‰¢Q
FRQ FR— WK‹  ŠŽ¤F OŒžQJ YD”R E‹Q WURQJP‹£QK Š‹ž:+(5(KD\+$9,1*FX•DPŒ¤W F‰X
O‹£QK6(/(&7,16(57KD\'(/(7(KRˆ£FE‹Q WURQJ WUX\Y‰¢QFRQNKD—F1‹¢XPŒ¤W
WUX\Y‰¢QFRQWUD•Y‹žFKPŒ¤WJLD— WU“QR—FR— WK‹ ŠŽ¤FVŽ•GX£QJWD£LQKŽ–QJY“WU’PD”•ŠR—
PŒ¤WEL‹ X WKŽ—FŠŽ¤FFKRSKH—SVŽ•GX£QJ0Œ¤W WUX\Y‰¢QFRQNKŒQJŠŽ¤FSKH—SVŽ•GX£QJ
E‹QWURQJPŒ¤WGDQKVD—FKFX•DP‹£QKŠ‹ž25'(5%<
&D—FF‰XO‹£QKFKŽ—DWUX\Y‰¢QFRQWKŽ”QJFR—PŒ¤WWURQJVŒ¢FD—FGD£QJVDX
(1) WHERE expression [NOT]IN (subquery)
(2) WHERE expression comparison_operator [ANY|ALL](subquery)
(3) WHERE [NOT]EXISTS (subquery)
9ŒGX›&‰XO‹£QKVDXŠ‰\KL‹ QWKLWKŒQJWLQY‹žFD—FQK‰QYL‹QOD”PYL‹£F•QKŽ–QJ
ŠQY“FR—VŒ¢ŠL‹£QWKRD£LNKŒQJEˆWŠ‰žXE•LVŒ¢
SELECT *
FROM nhanvien
WHERE madonvi NOT IN ( SELECT madonvi
 FROM donvi
 WHERE dienthoai like '82%')
%†˜VXQJFƒ›SQKƒ›WYDŽ[RD‘GˆOL…›X
%†˜VXQJGˆOL…›X
Giaïo trçnh thæûc haình SQL
7UDQJ
j‹  EŒ  VXQJGŽ– OL‹£X YD”R WURQJPŒ¤W ED•Q GŽ– OL‹£X WD VŽ• GX£QJ F‰X O‹£QK ,16(57
'D£QJŠQJLD•QQK‰¢WFX•DF‰XO‹£QKQD”\FR—FX—SKD—SQKŽVDX
INSERT [INTO] table_name
 VALUES(value1, value2, ...)
7URQJGR—WDEOHBQDPHOD”W‹QFX•DED•QJF‰žQWKDRWD—F6Œ¢OŽ¤QJFD—FJLD—WU“ŠŽ¤FFK
Š“QKSKD•LJLŒ¢QJVŒ¢OŽ¤QJFD—FFŒ¤WNKLŠ“QKQJK‘DED•QJYD”NL‹ XGŽ–OL‹£XFX•DFD—FJLD—WU“
QD”\SKD•LSKX”K¤SY—LNL‹ XGŽ–OL‹£XFX•DFD—FFŒ¤WWŽQJŽ—QJ
9ŒGX›&‰XO‹£QKGŽ—LŠ‰\EŒ VXQJWK‹PPŒ¤WQK‰QYL‹QYD”RED•QJQKDQYLHQ
INSERT INTO nhanvien
 VALUES('NV02003','Lã Thë Mai','23/5/72',
 NULL,'523312',1.92,'02')
7URQJWUŽ”QJK¤SFKQK‰£SGŽ–OL‹£XFKRPŒ¤WVŒ¢FŒ¤WWURQJED•QJWDSKD•LFKŠ“QK
GDQKVD—FKFD—FFŒ¤WF‰žQQK‰£SGŽ–OL‹£XQJD\VDXW‹QED•QJ.KLŠR—F‰XO‹£QK,16(57FR—FX—
SKD—SQKŽVDX
INSERT [INTO] table_name(col1,col2,..., colN)
 VALUES(value1, value2, ...,valueN)
7URQJWUŽ”QJK¤SQD”\FD—FFŒ¤WNKŒQJŠŽ¤FQK‰£SGŽ–OL‹£XVH–QK‰£QJLD—WU“Pˆ£FŠ“QK
Q‹¢XFR—KRˆ£FQK‰£QJLD—WU“18//1‹¢XWDNKŒQJQK‰£SGŽ–OL‹£XFKRPŒ¤WFŒ¤WNKŒQJFR—
UD”QJEXŒ¤F'()$8/7YD”FX–QJNKŒQJFKRSKH—SFK‰¢SQK‰£QJLD—WU“18//F‰XO‹£QKVH–
E“OŒ¡L
9ŒGX›
 INSERT INTO nhanvien(manv,hoten,diachi)
 VALUES('NV03002','Nguyãùn Thë Haûnh Dung','56 Tráön Phuï')
1JRD”LKDLGD£QJ•WU‹QF‰XO‹£QK,16(57FR”QFKRSKH—SWDQK‰£SGŽ–OL‹£XFKRPŒ¤W
ED•QJEˆšQJFD—FKO‰¢\GŽ–OL‹£XWŽ”PŒ¤WED•QJNKD—F+D\QR—LFD—FKNKD—FF‰XO‹£QK,16(57
FR”QFKRSKH—SFKX—QJWDVDROŽXGŽ–OL‹£XWŽ”ED•QJQD”\VDQJED•QJNKD—F
9ŒGX›*LD•VŽ•WDFR—ED•QJOXRQJBQKDQYLHQEDRJŒžPKDLFŒ¤WKRWHQYD”OXRQJ
F‰XO‹£QKGŽ—LŠ‰\EŒ VXQJGŽ–OL‹£XYD”ED•QJOXRQJBQKDQYLHQEˆšQJFD—FKO‰¢\GŽ–OL‹£XWŽ”
ED•QJQK‰QYL‹Q
 INSERT INTO luong_nhanvien
 SELECT hoten,hsluong*210000 FROM nhanvien
&ƒ›SQKƒ›WGˆOL…›X
&‰XO‹£QK83'$7(FKRSKH—SQJŽ”LVŽ•GX£QJWKD\ŠŒ LGŽ–OL‹£XŠD–WŒžQWD£LE‹QWURQJ
ED•QJGŽ–OL‹£X&‰XO‹£QKQD”\FR—FX—SKD—SQKŽVDX
Tráön Nguyãn Phong
UPDATE updated_table_name
SET colname = expression
 [, ..., colname = expression ]
[FROM table_name [,..., table_name]]
[WHERE conditions ]
9ŒGX›&‰XO‹£QKGŽ—LŠ‰\WˆQJOŽQJO‹QFKRQKŽ–QJQK‰QYL‹QOD”PYL‹£F
WD£LŠQY“FR—PD–ŠQY“OD”
UPDATE nhanvien
SET hsluong = hsluong+0.2
WHERE madonvi ='04'
0‹£QKŠ‹ž )520 WURQJF‰X O‹£QK83'$7(ŠŽ¤F VŽ• GX£QJNKL F‰žQ FKŠ“QK FD—F
ŠL‹žXNL‹£QF‰£SQK‰£WO‹QTXDQŠ‹¢QFD—FED•QJNKD—F
9ŒGX›*LD•VŽ•WDFR—KDLED•QJ0$7+$1*YD”1+$7.<%$1+$1*QKŽVDX
0$7+$1* 1+$7.<%$1+$1*
0$+$1*  1*$<%$1
7(1+$1* ∞ 0$+$1*
'21*,$ 62/821*
7+$1+7,(1
&‰X O‹£QK GŽ—L Š‰\ VH– F‰£S QK‰£W JLD— WU“ FKR WUŽ”QJ 7+$1+7,(1 WURQJ ED•QJ
1+$7.<%$1+$1*WKHRFŒQJWKŽ—F7+$1+7,(1 62/821*×'21*,$
UPDATE nhatkybanhang
SET thanhtien = soluong*mathang.dongia
FROM mathang
WHERE nhatkybanhang.mahang = mathang.mahang
;RD‘GˆOL…›X
j‹ [RD—FD—FED•QJKLGŽ–OL‹£XUDNKR•LED•QJGŽ–OL‹£XWDVŽ•GX£QJF‰XO‹£QK'(/(7(
FR—FX—SKD—SQKŽVDX
 DELETE [FROM] delete_table_name
 [FROM table_name [,..., table_name]]
 [WHERE conditions]
9ŒGX›&‰X O‹£QKGŽ—LŠ‰\[RD— NKR•LED•QJQKDQYLHQQKŽ–QJQK‰QYL‹Q OD”P
YL‹£FWD£LŠQY“FR—VŒ¢ŠL‹£QWKRD£LOD”

 DELETE FROM nhanvien
Giaïo trçnh thæûc haình SQL
7UDQJ
 FROM donvi
 WHERE nhanvien.madonvi = donvi.madonvi AND
 donvi.dienthoai ='848484'
Z 	 Y

File đính kèm:

  • pdfgiao_trinh_thuc_hanh_sql_tran_nguyen_phong_phan_1.pdf