L IM ĐU ỞẦ
1.3.8 Ni ngoà iố
N i ngoài là m t cỏch đ làm tăng k t qu c a m t phộp n i b ng cỏc bố ộ ể ế ả ủ ộ ố ằ ộ treo, đ n thờm vào cỏc giỏ tr null. Trong SQL, chỳng ta cú th ch rừ m tộ ị ể ỉ ộ n i ngoài; NULL đố ượ ử ục s d ng nh là giỏ tr null.ư ị
Vớ d 23ụ : Gi s chỳng ta đ a ra H đ m và Tờn c a cỏc nhõn viờn cũngả ử ư ọ ệ ủ nh H đ m và Tờn c a nh ng ngư ọ ệ ủ ữ ười giỏm sỏt h . Trờn th c t , khụngọ ự ế ph i nhõn viờn nào cũng cú ngả ười giỏm sỏt tr c ti p, vỡ v y đ i v i nh ngự ế ậ ố ớ ữ người khụng cú người giỏm sỏt tr c ti p ho c thụng tin v ngự ế ặ ề ười giỏm sỏt c a h là khụng xỏc đ nh (null). N u mu n hi n th c nh ng b nh v y,ủ ọ ị ế ố ể ị ả ữ ộ ư ậ ta s d ng n i ngoài ử ụ ố
SQL xem n i ngoài chu n đ n thờm vào cỏc b treo t hai phớa c a cỏcố ẩ ộ ộ ừ ủ đ i s c a chỳng là n i ngoài đ y đ (full outerjoin). Cỳ phỏp nh sau: ố ố ủ ố ầ ủ ư NHÂNVIấN FULL OUTER JOIN NHÂNVIấN ON Mós NV = Mós NGSố ố ; K t qu c a phộp toỏn này là m t quan h , trong đú cú nh ng b đế ả ủ ộ ệ ữ ộ ược đ n vào cỏc giỏ tr NULL do khụng cú giỏ tr n i tộ ị ị ố ương ng. (Chỳ ý, trongứ phộp n i bỡnh thố ường khụng cú nh ng b nh v y). T t c cỏc lo i n iữ ộ ư ậ ấ ả ạ ố ngoài được núi đ n trong cỏc phộp toỏn đ i s quan h đ u cú s n trongế ạ ố ệ ề ẵ SQL. N u chỳng ta mu n m t left- ho c right-outerjoin, ta thờm vào tế ố ộ ặ ừ LEFT ho c RIGHT thớch h p vào v trớ c a t FULL. Vớ d : ặ ợ ị ủ ừ ụ
NHÂNVIấN LEFT OUTER JOIN NHÂNVIấN ON Mós NV = Mós NGSố ố ; NHÂNVIấN RIGHT OUTER JOIN NHÂNVIấN ON Mós NV = Mós NGSố ố ; Ti p theo, gi s ta mu n m t n i ngoài t nhiờn thay vỡ m t n i ngoàiế ả ử ố ộ ố ự ộ ố tờta. Khi đú chỳng ta s s d ng t khúa NATURAL đ t vào trẽ ử ụ ừ ặ ượ ừ c t JOIN và b ON đi. ỏ
Vớ d 24:ụ Chỳng ta hóy xem l i vớ d 22, đú chỳng ta mu n n i hai quanạ ụ ở ố ố h NHÂNVIấN và Đ NV v i đi u ki n là cỏc thu c tớnh Mós ĐV c aệ Ơ Ị ớ ề ệ ộ ố ủ hai quan h là b ng nhau. N u chỳng ta s a đ i vớ d này nh sau ệ ằ ế ử ổ ụ ư
NHÂNVIấN NATURAL FULL OUTER JOIN Đ NVƠ Ị
thỡ chỳng ta s nh n đẽ ậ ược khụng ch là cỏc b đỉ ộ ượ ạc t o nờn t cỏc bừ ộ tham gia n i mà cũn cú thờm cỏc b đố ộ ược đ n vào cỏc giỏ tr NULLộ ị
T khoỏ FULL cú th đừ ể ược thay th b ng LEFT ho c RIGHT trong phộpế ằ ặ n i ngoài trờn. ố ở
1.4 CÁC PHẫP TOÁN QUAN H Đ Y ĐỆ Ầ Ủ
Trước tiờn chỳng ta đ ý r ng SQL s d ng cỏc quan h nh là cỏc tỳiể ằ ử ụ ệ ư (bag) ch khụng ph i nh t p h p. Đi u đú cú nghĩa là m t b cú thứ ả ư ậ ợ ề ộ ộ ể xu t hi n nhi u l n trong m t quan h . ấ ệ ề ầ ộ ệ
1.4.1 Lo i b trựng l pạ ỏ ặ
Nh đó núi đ n trờn, khỏi ni m quan h c a SQL khỏc v i khỏi ni mư ế ở ệ ệ ủ ớ ệ quan h tr u tệ ừ ượng được trỡnh bày trong mụ hỡnh quan h . M t quan h làệ ộ ệ m t t p h p, khụng th cú nhi u h n m t b n sao c a m t b cho trộ ậ ợ ể ề ơ ộ ả ủ ộ ộ ước. Khi m t truy v n SQL t o m t quan h m i, h th ng SQL khụng lo i bộ ấ ạ ộ ệ ớ ệ ố ạ ỏ cỏc trựng l p. Nh v y, SQL tr l i cho m t truy v n cú th li t kờ nhi uặ ư ậ ả ờ ộ ấ ể ệ ề l n cựng m t b .ầ ộ ộ
Nh l i r ng m t đ nh nghĩa cho m t truy v n select-from-where c aớ ạ ằ ộ ị ộ ấ ủ SQL là nh sau: Chỳng ta b t đ u v i tớch Đ cac c a cỏc quan h đư ắ ầ ớ ề ủ ệ ược tham chi u đ n trong m nh đ FROM. M i b c a tớch đế ế ệ ề ỗ ộ ủ ược ki m traể b ng đi u ki n trong m nh đ WHERE và nh ng b nào qua đằ ề ệ ệ ề ữ ộ ược ki mể tra s đẽ ược đ a cho d li u ra cho phộp chi u phự h p v i m nh đư ữ ệ ế ợ ớ ệ ề SELECT. Phộp chi u này cú th sinh ra cựng m t b cho k t qu t nhi uế ể ộ ộ ế ả ừ ề
b khỏc nhau c a tớch, và n u nh v y, m i b n sao c a k t qu s độ ủ ế ư ậ ỗ ả ủ ế ả ẽ ược in ra. H n n a, khụng cú gỡ sai đ i v i m t quan h SQL cú trựng l p. ơ ữ ố ớ ộ ệ ặ N u chỳng ta khụng mu n cú s trựng l p trong k t qu , ta cú th ti pế ố ự ặ ế ả ể ế theo sau t khoỏ SELECT b ng t khoỏ DISTINCT. T đú núi v i SQLừ ằ ừ ừ ớ ch t o ra m t b n sao cho m t b giỏ tr . Ch ng h nỉ ạ ộ ả ộ ộ ị ẳ ạ
SELECT DISTINCT Lương FROM NHÂNVIấN ;
1.4.2 Trựng l p trong phộp h p, phộp giao và phộp tr ặ ợ ừ
Khụng gi ng nh l nh SELECT gi gỡn s trựng l p nh m c đ nh và chố ư ệ ữ ự ặ ư ặ ị ỉ lo i b chỳng khi đ a vào t khoỏ DISTINCT, cỏc phộp toỏn h p, giao vàạ ỏ ư ừ ợ tr thừ ường lo i b s trựng l p. Nh v y, cỏc tỳi đạ ỏ ự ặ ư ậ ược đ i thành t p h pổ ậ ợ và b n t p h p c a phộp toỏn đả ậ ợ ủ ược ỏp d ng. Đ ngăn ng a vi c lo i bụ ể ừ ệ ạ ỏ trựng l p, chỳng ta ph i vi t sau cỏc phộp toỏn UNION, INTERSECT,ặ ả ế EXCEPT t khoỏ ALL. N u chỳng ta làm nh v y thỡ chỳng ta nh n đừ ế ư ậ ậ ược cỳ phỏp tỳi thụng qua cỏc phộp toỏn này.
Vớ d 26ụ : Xột bi u th c h p c a vớ d 14 nh ng cú thờm vào t khoỏể ứ ợ ủ ụ ư ừ ALL: (SELECT Mós NVố FROM NHÂNVIấN_D ÁNỰ WHERE Mós DA = 1)ố UNION ALL (SELECT Mós NVố FROM NHÂNVIấN_D ÁNỰ WHERE Mós DA = 2)ố K t qu ế ả Mós NVố NV001 NV001 NV002 NV018 NV018
Ta th y bõy gi trong k t qu xu t hi n cỏc b trựng nhau. N u m tấ ờ ế ả ấ ệ ộ ế ộ nhõn viờn làm vi c cho c d ỏn 1 và d ỏn 2 thỡ mó s c a nhõn viờn đúệ ả ự ự ố ủ xu t hi n trong k t qu hai l n.ấ ệ ế ả ầ
Cũng nh đ i v i UNION, cỏc phộp toỏn INTERSECT ALL và EXCEPTư ố ớ ALL là giao và tr c a cỏc tỳi (bag). Nh v y, n u R và S là cỏc quan hừ ủ ư ậ ế ệ thỡ k t qu c a bi u th c ế ả ủ ể ứ R INTERSECT ALL S là m t quan h trong đú s l n xu t hi n c a m t b t là s nh nh t c aộ ệ ố ầ ấ ệ ủ ộ ộ ố ỏ ấ ủ s l n xu t hi n c a b đú trong R và s l n xu t hi n c a b đú trong S.ố ầ ấ ệ ủ ộ ố ầ ấ ệ ủ ộ K t qu c a bi u th c ế ả ủ ể ứ R EXCEPT ALL S là m t quan h trong đú s l n xu t hi n b t b ng s l n xu t hi n c aộ ệ ố ầ ấ ệ ộ ằ ố ầ ấ ệ ủ nú trong R tr đi s l n xu t hi n c a nú trong S v i đi u ki n hi u sừ ố ầ ấ ệ ủ ớ ề ệ ệ ố này là dương.
1.4.3 Nhúm và s k t h p trong SQL ự ế ợ
Phộp toỏn nhúm và k t h p trong đ i s quan h cho phộp ta phõn chia cỏcế ợ ạ ố ệ b c a m t quan h thành cỏc nhúm d a trờn cỏc giỏ tr c a m t ho cộ ủ ộ ệ ự ị ủ ộ ặ nhi u thu c tớnh trong cỏc b . Sau đú chỳng ta cú th k t h p m t s cỏcề ộ ộ ể ế ợ ộ ố c t khỏc c a quan h b ng cỏch ỏp d ng phộp toỏn k t h p đ i v i cỏcộ ủ ệ ằ ụ ế ợ ố ớ c t đú. N u cú cỏc nhúm thỡ phộp k t h p s độ ế ế ợ ẽ ược th c hi n riờng r choự ệ ẽ t ng nhúm. SQL cung c p m i kh năng c a phộp toỏn trờn thụng qua vi cừ ấ ọ ả ủ ệ s d ng cỏc phộp toỏn nhúm trong m nh đ SELECT và m t m nh đử ụ ệ ề ộ ệ ề GROUP BY đ c bi t.ặ ệ
1.4.4 Cỏc phộp toỏn nhúm
SQL s d ng 5 phộp toỏn nhúm SUM, AVG, MIN, MAX, và COUNT.ử ụ Cỏc phộp toỏn này được s d ng b ng cỏch ỏp d ng chỳng cho cỏc bi uử ụ ằ ụ ể th c cú giỏ tr vụ hứ ị ướng, thường là m t tờn c t, trong m nh độ ộ ở ệ ề SELECT. Cú m t ngo i l là bi u th c COUNT(*), bi u th c này đ mộ ạ ệ ể ứ ể ứ ế t t c cỏc b trong m t quan h đấ ả ộ ộ ệ ược thi t l p t m nh đ FROM vàế ậ ừ ệ ề m nh đ WHERE c a truy v n. ệ ề ủ ấ
H n n a, chỳng ta cú tuỳ ch n lo i tr trựng l p ra kh i c t trơ ữ ọ ạ ừ ặ ỏ ộ ước khi ỏp d ng phộp toỏn nhúm b ng vi c s d ng t khoỏ DISTINCT. Nh v y,ụ ằ ệ ử ụ ừ ư ậ m t bi u th c nh là COUNT(DISTINCT x) đ m s cỏc giỏ tr khỏc nhauộ ể ứ ư ế ố ị trong c t x. Chỳng ta cú th s d ng cỏc phộp toỏn khỏc v trớ c aộ ể ử ụ ở ị ủ COUNT đõy nh ng bi u th c nh SUM(DISTINCT x) thở ư ể ứ ư ường khụng cú ý nghĩa m y, b i vỡ nú yờu c u ta tớnh t ng cỏc giỏ tr khỏc nhau trong c tấ ở ầ ổ ị ộ x.
Vớ d 27ụ : Truy v n sau đõy tỡm giỏ tr lấ ị ương trung bỡnh c a t t c cỏcủ ấ ả nhõn viờn:
SELECT AVG(Lương) FROM NHÂNVIấN ;
Chỳ ý r ng đõy khụng cú m nh đ WHERE. Truy v n này xem xột c tằ ở ệ ề ấ ộ Lương c a quan h NHÂNVIấN, tớnh t ng cỏc giỏ tr tỡm đủ ệ ổ ị ượ ởc đõy, m tộ giỏ tr cho m i b (cho dự n u b là trựng l p c a m t vài b khỏc), vàị ỗ ộ ế ộ ặ ủ ộ ộ chia t ng s cho s cỏc b . N u khụng cú cỏc b trựng l p thỡ truy v nổ ố ố ộ ế ộ ặ ấ này cho lương trung bỡnh nh chỳng ta mong đ i. N u cú cỏc b trựng l p,ư ợ ế ộ ặ thỡ m t giỏ tr lộ ị ương trựng l p n l n s đặ ầ ẽ ược tớnh n l n trong trung bỡnh.ầ Vớ d 28:ụ
Truy v n sau đõy: ấ
SELECT COUNT(*) FROM NHÂNVIấN ;
đ m s cỏc b trong quan h NHÂNVIấN.ế ố ộ ệ Truy v n tấ ương t :ự
SELECT COUNT(Lương) FROM NHÂNVIấN ;
đ m s giỏ tr trong c t Lế ố ị ộ ương c a quan h . B i vỡ cỏc giỏ tr trựng l pủ ệ ở ị ặ khụng b lo i b khi chỳng ta chi u lờn c t Lị ạ ỏ ế ộ ương trong SQL, t ng đ mổ ế này s gi ng nh t ng đ m do truy v n v i COUNT(*) sinh ra.ẽ ố ư ổ ế ấ ớ
N u chỳng ta mu n ch c ch n r ng ta khụng đ m cỏc giỏ tr trựng l pế ố ắ ắ ằ ế ị ặ quỏ m t l n, chỳng ta cú th s d ng t khoỏ DISTINCT trộ ầ ể ử ụ ừ ước thu c tớnhộ nhúm, nh : ư
SELECT COUNT(DISTINCT Lương) FROM NHÂNVIấN ;
Bõy gi m i lờ ỗ ương s đẽ ược đ m m t l n, khụng c n quan tõm đ n vi cế ộ ầ ầ ế ệ nú xu t hi n trong bao nhiờu b . ấ ệ ộ
1.4.5 Nhúm
Đ nhúm cỏc b , chỳng ta s d ng m nh đ GROUP BY, đi sau m nh để ộ ử ụ ệ ề ệ ề WHERE. Theo sau t khoỏ GROUP BY là m t danh sỏch cỏc thu c tớnhừ ộ ộ nhúm. Trong hoàn c nh đ n gi n nh t, ch cú m t tham chi u quan hả ơ ả ấ ỉ ộ ế ệ trong m nh đ FROM, và quan h này cú cỏc b c a nú đệ ề ệ ộ ủ ược nhúm theo theo cỏc giỏ tr c a chỳng trong cỏc thu c tớnh nhúm. Dự phộp toỏn nhúmị ủ ộ nào được s d ng trong m nh đ SELECT cũng ch đử ụ ệ ề ỉ ược ỏp d ng bờnụ trong cỏc nhúm.
Vớ d 29:ụ V n đ tỡm trong quan h NHÂNVIấN t ng lấ ề ệ ổ ương theo t ngừ đ n v :ơ ị
SELECT Mós ĐV, SUM(Lố ương) FROM NHÂNVIấN
GROUP BY Mós ĐV ;ố
Chỳng ta cú th tể ưởng tượng là cỏc b c a quan h NHÂNVIấN độ ủ ệ ược s p x p l i và đắ ế ạ ược nhúm sao cho t t cỏc cỏc b đ i v i đ n v 1 là cựngấ ộ ố ớ ơ ị v i nhau, t t c cỏc b c a đ n v 4 là cựng v i nhau, …. Cỏc t ng c aớ ấ ả ộ ủ ơ ị ớ ổ ủ cỏc thành ph n Lầ ương c a cỏc b trong t ng nhúm đủ ộ ừ ược tớnh toỏn, Mós ĐV đố ược đ a ra cựng v i t ng đú. ư ớ ổ
Quan sỏt vớ d 29 ta th y m nh đ SELECT cú hai lo i s h ng:ụ ấ ệ ề ạ ố ạ
1. Cỏc k t h p, đú m t phộp toỏn nhúm đế ợ ở ộ ược ỏp d ng cho m t thu cụ ộ ộ tớnh ho c m t bi u th c bao g m cỏc thu c tớnh. Nh đó đ c p đ n, cỏcặ ộ ể ứ ồ ộ ư ề ậ ế s h ng này đố ạ ược tớnh giỏ tr trờn c s t ng nhúm. Trong vớ d này,ị ơ ở ừ ụ SUM(Lương) là m t k t h p.ộ ế ợ
2.Cỏc thu c tớnh, ch ng h n nh Mós ĐV trong vớ d này, xu t hi nộ ẳ ạ ư ố ụ ấ ệ trong m nh đ GROUP BY. Trong m t m nh đ SELECT cú cỏc phộpệ ề ộ ệ ề toỏn nhúm, ch nh ng thu c tớnh nào đỉ ữ ộ ược đ c p đ n trong m nh đề ậ ế ệ ề GROUP BY m i cú th xu t hi n nh cỏc thu c tớnh khụng nhúm trongớ ể ấ ệ ư ộ m nh đ SELECT. ệ ề
Khi cỏc truy v n cú ch a GROUP BY núi chung cú c cỏc thu c tớnhấ ứ ả ộ nhúm và s k t h p trong m nh đ SELECT, v m t k thu t khụng c nự ế ợ ệ ề ề ặ ỹ ậ ầ thi t cú m t c hai. Vớ d , chỳng ta cú th vi t: ế ặ ả ụ ể ế
SELECT Mós ĐVố FROM NHÂNVIấN GROUP BY Mós ĐV;ố
Truy v n này s nhúm cỏc b c a NHÂNVIấN theo mó s đ n v c a núấ ẽ ộ ủ ố ơ ị ủ và sau đú in ra mó s đ n v cho m i nhúm, khụng c n quan tõm đ n cúố ơ ị ỗ ầ ế bao nhiờu b cú cựng mó s đ n v . Nh v y, truy v n trờn cú cựng k tộ ố ơ ị ư ậ ấ ở ế qu nh ả ư
SELECT DISTINCT Mós ĐVố FROM NHÂNVIấN ;
Cú th s d ng m nh đ GROUP BY trong m t truy v n v i nhi u quanể ử ụ ệ ề ộ ấ ớ ề h . Cỏc truy v n nh v y đệ ấ ư ậ ược th hi n b ng dóy cỏc bể ệ ằ ước sau đõy: 1. Tớnh quan h R đệ ược bi u di n b ng cỏc m nh đ FROM và WHERE.ể ễ ằ ệ ề Nh v y, quan h R là tớch Đ cac c a cỏc quan h đư ậ ệ ề ủ ệ ược ch ra trongỉ m nh đ FROM và ỏp d ng phộp ch n c a m nh đ WHERE đ i v i nú. ệ ề ụ ọ ủ ệ ề ố ớ 2.Nhúm cỏc b c a R theo cỏc thu c tớnh trong m nh đ GROUP BY.ộ ủ ộ ệ ề 3. K t qu là cỏc thu c tớnh và cỏc k t h p c a m nh đ SELECT đế ả ộ ế ợ ủ ệ ề ược t o ra c nh là truy v n trờn m t quan h đạ ứ ư ấ ộ ệ ượ ưc l u tr R. ữ
Vớ d 30ụ : Gi s chỳng ta mu n đ a ra tờn đ n v và s lả ử ố ư ơ ị ố ượng cỏc nhõn viờn trong t ng đ n v . Chỳng ta c n l y thụng tin t hai quan h :ừ ơ ị ầ ấ ừ ệ NHÂNVIấN và Đ NV . Chỳng ta b t đ u b ng cỏch n i tờta chỳng b ngƠ Ị ắ ầ ằ ố ằ cỏch so sỏnh b ng cỏc mó s đ n v t hai quan h . Bằ ố ơ ị ừ ệ ước này cho chỳng ta
NHÂNVIấN cú mó s đ n v gi ng v i mó s đ n v c a nú. Bõy gi ,ố ơ ị ố ớ ố ơ ị ủ ờ chỳng ta cú th nhúm cỏc b để ộ ược ch n c a quan h này theo tờn c a đ nọ ủ ệ ủ ơ v . Cu i cựng, chỳng ta đ m s cỏc nhõn viờn trong t ng nhúm. Truy v nị ố ế ố ừ ấ được vi t nh sau:ế ư SELECT TờnĐV, COUNT(*) FROM NHÂNVIấN NV, Đ NV ĐVƠ Ị WHERE NV.Mós ĐV = ĐV.Mós ĐVố ố GROUP BY TờnĐV ; K t qu ế ả TờnĐV COUNT(*) Nghiờnc u 4ứ Hànhchớnh 3 Lónhđ o 1 ạ 1.4.6 Cỏc m nh đ HAVINGệ ề Gi s r ng chỳng ta khụng mu n tớnh đ n t t c cỏc tờn đ n v trongả ử ằ ố ế ấ ả ơ ị b ng c a chỳng ta vớ d 30 trờn. Chỳng ta cú th h n ch cỏc bả ủ ở ụ ở ể ạ ế ộ trước khi nhúm theo cỏch cú th làm r ng cỏc nhúm khụng mong mu n. Vớể ỗ ố d , n u chỳng ta ch mu n s cỏc nhõn viờn c a m t đ n v ph i l n h nụ ế ỉ ố ố ủ ộ ơ ị ả ớ ơ ho c b ng 3. Khi đú, chỳng ta ti p theo m nh đ GROUP BY m t m nhặ ằ ế ệ ề ộ ệ đ HAVING. M nh đ HAVING bao g m t khoỏ HAVING theo sau làề ệ ề ồ ừ m t đi u ki n v nhúm. ộ ề ệ ề
Vớ d 31ụ : Gi s chỳng ta mu n in ra Tờn đ n v và s nhõn viờn trongả ử ố ơ ị ố t ng đ n v đ i v i nh ng đ n v nào cú nhi u h n ho c b ng 3 nhõnừ ơ ị ố ớ ữ ơ ị ề ơ ặ ằ viờn. Chỳng ta cú th thờm vào vớ d 30 m nh để ụ ệ ề
HAVING COUNT(*) >= 3 ;
Truy v n k t qu đấ ế ả ược cho nh dư ưới đõy: K t qu ế ả TờnĐV COUNT(*) Nghiờnc u 4ứ
Hànhchớnh 3
Chỳng ta ph i nh m t s quy t c v cỏc m nh đ HAVING:ả ớ ộ ố ắ ề ệ ề
. M t phộp nhúm trong m nh đ HAVING ch ỏp d ng đ i v i cỏc b c aộ ệ ề ỉ ụ ố ớ ộ ủ nhúm đó được ki m tra.ể
. B t kỳ thu c tớnh nào c a cỏc quan h trong m nh đ FROM đ u cú thấ ộ ủ ệ ệ ề ề ể được nhúm trong m nh đ HAVING, nh ng ch cú cỏc thu c tớnh cú thệ ề ư ỉ ộ ể xu t hi n trong danh sỏch GROUP BY khụng đấ ệ ược nhúm trong m nh đệ ề HAVING (cựng quy t c nh v i m nh đ SELECT).ắ ư ớ ệ ề
M t s đi u c n nh :ộ ố ề ầ ớ
* Th t c a cỏc m nh đ trong cỏc truy v n SQL:ứ ự ủ ệ ề ấ
Cho đ n bõy gi chỳng ta đó g p t t c sỏu m nh đ trong m t truy v nế ờ ặ ấ ả ệ ề ộ ấ “select-from-where”: SELECT, FROM, WHERE, GROUP BY, HAVING và ORDER BY. Ch cú hai m nh đ đ u là b t bu c, nh ng ta khụng thỉ ệ ề ầ ắ ộ ư ể s d ng m nh đ HAVING mà khụng cú m nh đ GROUP BY. B t kỳử ụ ệ ề ệ ề ấ m nh đ ph thờm nào cũng ph i xu t hi n theo th t trờn.ệ ề ụ ả ấ ệ ứ ự ở