DAI MOC QUỐC GIA HA NỘỈ
I K i ; o \ ( ; f)AI HOC KIlOA i l O f r ụ M i ỉ K N
1:L1ZABI;:T1I l y n c h
N\ '.IjV'MD1CỈ1
N C.liYỉĨN N A M l l A i
Đ H Q G MÀ N Ộ 1
trường OAi HOC CỐNGNGHẸ
- r m
i la N ọ i - 1 9 9 9
j V 1 Ẹ N
I.Ờ I ( Ỉ I Ớ I T H I Ệ U
Cuòii sách Iiày Iiliain m ụ c clícli ” iới ihiỘLi VC II^ÒII n'j,ữ tliao tác co' sỏ' d ữ
liệu vSQL. Pliạm vi m à cu ồn sácli bao h à m chira có ngliTa đã là đ ấ y đủ. tuy
lìhièn, sau khi d ọ c sách bạn SC c ó một cái nhìn dầ y đủ, tống quát VC nhiìii";
khái n iệ m dãnu, sau và một kiên thức làin việc với các lệnh của nó.
Mac dù cuòìì sách đưực viêì dựa vào liòLi c h u á n S Q L củ a Cục T iê u chuấii
Qiiỏc gia M ỹ - ANSI - 1986, nhưnc, bạn SC s ớ m thấy rằng khôns, có san
|)iiẩni S Q L nào liiện liành áp clụiig th e o tiêu c h u ẩ n đó bị thất bại. C h ú n g lỏi
cò' g ă n g giới Ihiộu với bạn các lệnh AN SI, và m ặ t khác, chỉ ra n h ữ n g lĩnh
vực m à inột s ố trong n h ữ n g ứiig d ụ n g c h ủ y ê u củ a S Q L khác (t hư ờng vì
Iiliững lý d o ưu việt ) với tiẽu c h u ẩ n , và s ự k h á c nhau thực sự giữa c h ú n g .
Cliúng lôi c h ọ n d ù n g DB2, S Q L d B A S E IV, Inf orm ix và O ra cl e c h u y ê n
imhiệp được coi nh ư n h ữ n g đại diệii củ a h à n g loạt (trên 50) áp d ụ n g c ủ a
SQL. D B 2 chỉ có sấn ỏ' cấc m á y vi líiih lớn có bộ n h ớ k h ổ n g lồ ( m a i n
iVaincs); Informix và O r a c l e trôn m á y tính lớn, m á y tính mini và m á y tính
cá nliân PC^ (Personal c o m p u te r ) và d B A S E IV S Q L chỉ có ở P Q . T r o n g
suốt bài viê( bạ n sẽ Ihấy S Q L ANSI và bòn loại S Q L - n gô n ng ữ hỏi có c âu
trúc n à y đã đưực sử d ụ im và urưng phảii với nh a u trong các ví dụ. Phụ lục
F3 inỏ tá tổng quát íừng sàn phắm.
Chuoìig 12 đifa ra niột sơ đổ so s án h các đ ặ c đ i ể m c hín h với chỉ d ẫ n vắ n tát
VC nhữn g kh ác biộl củ a c h ú n g với tiêu c h u ẩ n , bấl cứ c ác ph ươ ng liộn phụ
nào mà c h ú n g dira ra và một c á m n h ậ n c h u n g đối với nhữn g gì nià c h ú n g
L’iong n h a u đ e sử diiiig.
Tuy nhiên. CLIÔH sách này không có ý định là một chỉ dẫn đầy đủ đối với
Oracle, clBASE, In f o im ix và D B 2 ! N ế u b ạ n m u ố n biết thê m chi tiết VC bất
cứ áp d ụ n g đậc biệt n à o củ a SQL , h ã y t h a m kh ả o các chỉ dẫ n c ủ a c h ú n g ,
hoặc tha m k h á o sác h dặc biệt vồ SQL.
Lưu ý đòi vứi n h ữ n g người sử d ụ n g d B A S E (và hộ c ơ sở d ữ liẹu PC khá c) .
Vì hiện nay S Q L (rỏ’ nên "đổiig bộ" với d B A S E IV, nhiề u người sử d ụ n g
clBASE IV sẽ tự tìm thấy họ với m ộ t hộ t h ố n g m a n g đ á y đủ đặc đ i c m S Q L
"được đưa v à o ” với clBASE. T r o n g hầu hết các trườiìo; hợp, n h ữ n g nuườ i sử
dụiig đó sẽ m u a clBASE vì các tiện Iighi củ a clBASE m à k h ô n g vì nhiTng nét
đặc cúa SQL. N ế u bạn là một troiiíí nhữn nỉỉười này, bạ n có thổ sẽ hơi n g ạ c
nhièiì khi thấy S Q L làm được nlũrng điề u m à clBASE k h ô n g thể. H o à n c ả n h
của bạn có thế sẽ hơi khác với h o à n c ản h củ a phần ló'n nhữníí imirời sỉr
dụiig hệ cư s ở d ữ liệu SQL, n h ữ n g người có lõ dã c h ọ n m ột hệ vSQL c h o
bán thán họ theo iihũTiíí ưu đ i c m riêníí c ủ a nó. C h ú n g tôi hy v ọ n g răng
cuỏn sách n à y sẽ giú p các bạn làm q u e n với SQL, và giúp bạn thấ y dirợc
bạn cổ the sát nliập vSQL với d B A S E IV nhu' thê 'n à o.
Nèii hail dã làm qu e n V()i inot hẹ ihoiiu kl iôn u (.lựa vào SQL (\ I c!ụ. I1 CU h a n
IIIIDV d à y cíà su' cỉụnc các hẹ co’ S(V (hì liệu l*C' c h a n u haii Iiliir (ỈBASíi hciáL
1’a r a d o x ) b ạ n s ẽ t ư n h i ê n l l i â v i n ì n l i l i i o n l i i ói i SCI s á n l i SQÍ . , VÓI n h ữ n u h ớ
này, có thể hoà n toán hát đáu lừ sự bâì lọi của SQL. Nhưim han phiii Iihâ!i
ra ràng n h ữ n g sư so sánh như vây ỉiiốim Iihư S(1 sáiili nhữim t]iiá c a m \'ới
nliưiio quá táo, ca hai đcii cổ n hữn g inùi vị riênu và ícli lợi riC'nu ci’ia cliiìníi,
nhưng c h ú n g h o à n toàn khác nhau. S Q L và d B A S E chi giốim nliaii ờ c h ỗ c a
!iai đêu xử lý nhữníỊ d ữ liệu trong c ù n g hệ c ơ s ở dữ liệu; Nlur liạii sẽ th ày ,
SQL k h ô n g phái là một đối thủ cạn h tranli vứi các hệ c ơ sơ cỉữ liệu P C
"truycn th ôn g" m à sẽ được sửdiino; đè bổ XLing c ho clnìnu.
1. (ỉ i ó i th i ệ u về S Q Í . .
Khái
(Ịiiát.
T r o n g chươnc; n à y c h ú n s tôi sữ giới thiộu với các bạn lịch sử c ủ a S Q L , với
nhữni; khái niệíTi liên qiian đã c ho ra đòi SQL , và một s ố lý d o tai sao liệ
SQ L được ưa c h u ộ n g hơn các hộ t h ố n c c ơ s ớ d ữ liệu "truyến th ò n g " . M u c
đícli với nhrrns thôim tin cơ bán này, bạ n sẽ được transĩ bị tốt hom trước khi
xem các lệnh S Q L ở chươim 2.
/ . / . i\'ỉnỉ câu dinh Iii^liũí ciìd SQL.
Nèii hạn rniiốn tóm trít tất cá nhữns; đ i e m q u a n Irọiiii VC S Q L trciim m ột câu,
câu dưới đ â y có thô ho à n toàn làm đirợc điổu đó:
•SQL (đọc 1à ''Sequel" liay "Ess C ue FJI" và có nghTa là "Nc;ỏn n u ữ hỏi
càu trúc") là một ngô n n g ữ c ư sư dữ liệu ciựa trên các níỊuyŨMi lác liên c Ị u a n
chứa các lệnh đối vcýi d ữ liệu thực hà nh ".
Phấn còn lại của clurơng nàv là í i à n h c h o việc c,iai thích SQ L thưc sẽ nízhĩa
là
!
'
1 .2. I j c h s ử t ó m tắt c ủd SQl..
S Q L dược h ã n g IBM chính thức đira ra và o íĩiữa nhữĩií; nă m 70 n h ư là một
ciự án IRM imhiC'n cih.1 troni; Ịiliòim. đư ợc dựa trên Iihữns; liêu clniấn củ a B.
F. Coclcl c ăn ban là p h ư ơ n c ph á p mới m iê u t;i n h ữ n u qu a n hệ c ủ a (lữ liệu kièu q u a n hộ (x e m phấn 1.3.4 và chircync i3 đè' hiê't thê m chi tiết ve "qu an
liộ" níihĩa là cD. T r o n c thời gian nàv IBM đã xiiâì h:in (táy đỉi c ác chi tiêl
VC tác p h ẩ m của m ì n h cho phép các nhà c u n g c ấp đưa ra các hệ t h ố n g SQL
rât tưctns: tự với các hệ thốníỉ của IBM. C á c hệ t h ố n s S Q L t h ư ơ n g m a i đâu
tiêĩi đã đirợc đưa ra vào cuối nh ữn g n ă m 70 đè sử cỉụiiu trèn c á c m á v tính
lớii V M c ủ a IRM và các hẹ đicu hàiih đa n h iệ m - Unix (Ora cl e, Ineres).
n g a y tiếp sau đ ó !à SQ L /D S của IBM c h o các hệ thốim ináy tính lớn V M và
VSE. Và(i n á m I9S3 IRM dưa ra S Ọ l . trèii c ơ sớ DB2 ch o !iệ điổu hànli
M V S . và thiết láp ticii chiiân c h o hệ thoni; co' sớ dữ liệu m á y tính lớn.
T i o i m suốt Iihiriig Iiain 80, các hệ th õn g c ư sớ dữ liệu trèii niáy tính len và
m á y tíiih rnini đèii cluọc dLía vào các liê iưưiig Cịiiaii, hệ c ơ s ở SQL.
Cht) lỏi gáii dây, các má y tinh cá nliâii (l^c,) k h ò n g the đưa ra klia nan g
línlì toáii và Ihòi uiaiì Iriiy nhập ihòrm tin vào cĩĩa nhan h c h ó n g cán tliiòt dê
đic u liàiih clio inộl liẹ ihỏnu ciã dược "cli trú" từ các liộ tliônt; đa nhi ệm
( O ia e lc cỉuiycn Ii^liiẹp, liií onni x v.v...), và tất cá Iihữim liệ thống dó da
được sát nh ậ p ihành các hệ cư s ỏ ' d ữ liệu PC hiẹn hà nh (d B A SE IV SQL , K:
base v.v...).
ỉ
. S Q L là '^i và cái I^ì klioiiíỉ Ị)iiíii Ici S Q L .
N hiề u nuười n h á m lan VC vai trò ciia S Q L tr on g t h ế giới cơ sở dữ liệu. Nêu
'chúng la nhìn vào cái mà k h ô n g pliải là nó thì sẽ dễ d à n g hơn để p h á n biệt
•SQL là gì.
S Q L k h ô n g Ị)hải là:
- Mộl hệ q u á n lí cơ s ở dữ liệu (DB MS).
-- Một ns;òii Ii” ữ lập trình thủ tục.
- Một imôn n g ữ thố hộ thứ 4 (4GL).
S Q L là:
- Mộl ng õn imữ thực hành cư s ờ d ữ liệu p h o im ịihú ( D M L ) dựii Ircii iihũTig
y niệ m qu a n hệ.
- Một cách mới đỡ tạo ra nhữni; hè cư sỏ' tlữ liêu c ó thổ maiii; đi đu ợ c chi.)
m ỏ i triròTit; phán c ứ n » và Ị)hán m ề m .
- Đ ược thict kè dế sử d ụ n g một cácli iưưiig hỗ và cá được lổng trong n g ô n
iiịỊỮ tliủ tục.
Tất ca điồLi Iiày đưực giúi thích chi lict hơn dưới đây.
/ .,ỷ /. I/Ừ (ỊIKÌH lý co' sỏ' d ữ ỉiêu ( D B M S ) là ẹ/ ?
Troiii; một hệ q u a n lý cư sứ d ữ liệu củ a m á y tính, tất cà các sò liộu đ ư ợ c
giữ lại dưới mộl s ố dạiig vật chất được gọi là "cơ sở d ữ liệu". V iệ c truy
nhậ p sô liệu dược điồu khiến b ằ n g phán m ề m đư ợ c gọi là DBMS; Chín li là
D B M S "biết" diì liẹii được cất sz,iữ ở đâ u và tron g k h u ô n d ạ n g vật chất nào.
Bail ihán D B M S được truy nhập đê bổ XLiiig, đ ể c ập nhật, xoá và c h í t vân
d ữ liệu - b ằ n g một 1 1 2 ,0 1 1 n g ữ c ơ sở d ữ liẹu. S Q L là m ộ t ví dụ củ a m ộ t ngỏii
ngữ CO' sử d ữ liệu, bản thân nó k h ô n g phái là m ộ t DBMS. Sự khác biệt giữa
"máv cư sở d ữ liệu" cuim c ấp bơi D B M S , và ng ô n n g ữ được sử d ụ n g đẽ
"đicii khiên" nó là một diồLi cỊiian trọnơ. ít nhấ t vồ m ặ t lý thuyèt, cliính
D B M S cỏ (hê đuực truv Iihậc) bới nhicLi n g ô n n g ữ c ơ sở d ữ liệu khá c nliau,
làm ngưừi sử dụni; linli hoại (rong viộc lựa c h ọ n g giao diện ch o d ữ liệu.
Tiiy nhiên, trong thưc lè hạn sẽ Ihríy ráng cìôi với phan lÓTi c;íc innc đicli
chiìng Ui có thế nghĩ đèn DB MS n h ư là sự đồiiu imhui.
N h ư vậy S Q L k h ô n g phái là một D B M S , nhưn « ikS là một n g ô n Iiuữ Ihưc
hành cơ sở dữ liệu.
ì 3 . 2 . Niỉôìì riiỉữlân Ỉrìnỉi, Híiôìì i m ữ í l n ì tuc và 4( jL s.
N h ư c h ú n g tôi đã nói trên đây, S Q L là m ộ t n gô n n ụ ữ
liệu D M L ) . Phải c h ă n g nó khác với c ác ngô n Iigữ m á v
c h ả n g hạ n n h ư BASIC - ng ôn n g ữ lập trình bậc c ao và
hư ớ n g thươiig mại c h u n g ? Câu tní lời có ve là "Có".
k h ô n g phải là n gô n n g ữ th ế hệ thứ 4. C h ỗ củ a S Q L
n g ô n n g ữ m á y tính được giái thích dưới đ à y
thực h à n h cơ sớ clữ
tính ''th ôn ơ Ihường"
C O B O L - imôn n g ữ
T u y nh iê n , nổ c rm c
trong t h a n g đ o c ùa
Sự k h á c n h a u chủ yếu giữa m ộ t n g ô n n g ữ lập trình " tm y e n th ốn g" chantĩ
h ạ n n h ư C O B O L , BASIC hoặc c ( c ũ n g đư ợ c coi là "nhữno n g ô n n g ữ thê liệ
th ứ 3 ”), và m ộ t 4 G L đó là n h ữ n g n g ô n n g ữ tru yề n th ốn g là "thủ tục". Nói
c á c h kh á c, người sử d ự ng ngôn n g ữ t h ế hệ thứ 4 có thê đơn gián ch o m á y
tính biết kết q u ả gì yêu cầii và bán thân ngô n n g ữ ịihai lự làm thê Iiào để
đạt được kết q u ả đó, trong khi đó ngirời d ù n g ng ồ n n g ữ 3 G L - thứ 3 phái
chí rõ c ho m á y rinh m ộ t cách ch ín h xá c làm t h ế nào đ ể đạt đư ợ c kết q u á
đó. T r o n g m ộ t t h ế giới lý tưởng, tất ca việc truy nh á p với tlữ liệu m á v tính
nên được tiến hà nh qua ng ôn np;ữ thứ 4 - 4 G L ; T r o n g thưc tế, nííôn n g ữ thứ
3 - 3 G L s vẫn đ ó n g vai trò lổn troĩig hriii hốt các phát Iriên ứng dụ n g .
M ặ c dù S Q L nên được n h ó m vứi các n gỏ n n g ữ k h ổ n g Ihiì tục ( n h ư hạn sẽ
th â y khi x e m các lệnh SQ L trong c h ư ơ n g 2), hiin thân SQ L k h ô n g phái là
n g ô n n g ữ thứ 4 - 4G L . Một trong n h ữ n g ký hiệu thươim mại c ủa m ột 4 G L
cíó là nó c u n g c ấp m ộ t bộ n h ữ n g c ố n g cụ ở Irìiih đ ộ c ao dưới hình thức rnàn
liình và c á c lliiết k ế bá o cáo, tạo ra các tiện ích của m e n u và v.v..., giá m
bói n h iệ m vụ của người sử clụim tron g việc phai tự thiết lập c á c chirctng
trình n h ư vộy. 3 G L k h ô n g đư a ra n h ữ n g kiến tạo lập trình (các v ò n g lặp,
c á c n h á n h v.v...) và c ũ n g c hả ng phai m ặ t ph á n giới 4 G L là dễ s ử d ụ n g .
T u y nh iê n, S Q L được thiết k ế đ ể sử dụnỉĩ, h o ặ c được "lổntỊ" với c ác noo n
n g ữ lập trình thủ tục (cho phép người sử d ụ n g d i m s các p h ư ơ n g tiện truy
tìm d ữ liệu p h o n g phú của SQ L kết hợp với bâ't cứ c ô n g cụ lập trình n à o nổ
yè u c á u ) phấ n lớn n h ữ n g noười m u a đồii sẽ th â y rằng việc áp d ụ n g SQ L
c ủ a họ c ù n g với 4 G L c ũ n g g iố n g n h ư c ác tiện ns;hi làiTi c ho việc sử diiỉií:
S Q L dễ d à n g hơn.
Đ i ề u n à y k h ô n g có ng hĩa là bạn chí có thế sử clụníĩ S Q L từ m ộ t n g ô n n g ữ
' t r ì n h độ cao" . Các lệnh S Q L c ũ n g có thỏ đirực sử d ụ n g một c á c h tươim
tác, vói người có t m y nh ậ p trực tiêp vào c ơ s ơ d ữ liệu. Sự thực, ciiôn sách
n à y h ầ u n h ư tập trun g giành rièna; c h o tác d ụ n g "tirơnỉĩ
củ a S Q L - Sau
4
licl, n ế u bạn k h ô n g hiểu các lệnh c ơ biĩii củ a S Q L ở Irìiili đ ộ "tidìi gian
tinât" ciia c h ú n g bạn sẽ dừ n g cli C|uá xa khi cô g ắ n g lồng c h ú n g vào inột
l ụ ò n n g ữ làm chii ! T u y nhiôn, nhiề u Iigircyi ha y sử d ụ n g hệ t h ố n g SQL sẽ
ll A'y c á c lệnh vSQL íương đôi kh ó học, và sẽ thích d ù n g các d ạ n g 4 G L hoặc
vơi c á c gi a o diộii bá o c áo hưn h o ặ c Ihiiô m ộ t người nào đó viê( đơn trèii cơ
sơ S Q L c h o bằiig niộ( ngô n ngữ lliứ 3 lioặc thứ 4 - 3 G L /4 G L .
VI p h ư ơ n g tiện n à y c h o phép c ác liộ sô d ữ liệu PC hiện h à n h , c h ẳ n g liạii
n i ư clBASE IV, giú p S Q L tioii p h ạ m vi c á c c ấu tiúc lệnh hiộn hàn h cùa
ch ún g. Ngirời d ù n g dBAvSE c ó thể s ử d ụ n g các phưư ng tiện truy (ìm d ữ liệu
cua S Q L đ ể truy n h ậ p d ẽ liệu, và sỉr d ụ n g bản th<ân d B A S E n h ư là m ộ t ngôn
ngữ lập trình d ể làm việc với d ữ liộLi, c h ả n g hạ n n h ư biểu d iễ n nó dưới các
ci.»ng và c á c b á o cáo.
Ý ngliTa vị trí c ủ a S Q L giữa 3 G L trình đ ộ c a o và 4 G L , và D B M S , được bàn
t u i i g phÀn 1.5 - " íc h lợi của việc sứ d ụ n g SQL ".
I .3.J. M ô liiiìlì Cỉiian Ììê lủ .nì
C i i í n g tôi dã đề c ậ p clến S Q L được d ự a trên n h ữ n g n g u y ê n tắc c ủ a m ô hình
cơ s ở d ữ liệu quan hẹ đấu tiên đư ợ c trình b à y bởi E.F. C o d d ( C o d d 1970).
M i ư n g " q u a n liệ" nghĩa là gì ?
lỉá u n h ư nh iề u c u ố n sách đã chỉ già nh c h o m ột câ u hỏi n h ư vậy. N h ư n g
k l ô n g thể giãi Ihích đ à y đủ ý ng h ĩa q u a n hệ tro ng m ộ t đ o ạ n v ă n ngắ n, và
c h úng lôi sẽ khôiig cô gắ ng ! ỏ đ i ể m này, c h ú n g tôi sẽ chỉ m i ê u tả mộl sô
thuộc tính c ủ a hệ th ống q u a n h ệ ở rnột trình đ ộ cực ky hư cấu, chỉ n h ư víỊy
bin mới c ó thể c ó m ộ t "sự c ả m Iihâii" về nó là gì. T r o n g c h ư ơ n g 13, c h ú n g
tói b à n về " n h ữ n g q u y tắc chính xác ca o" củ a Cocld đ ể qu y ế t đ ị n h x e m x e m
irột hộ c ó q u a n h ệ trong một chi tiết n à o d ó h a y k h ô n g , cô g ắ n g dịc h s a n g
tTỘt íhứ tiếng A n h ng h iệ p d ư hơn là th e o những c ô n g thức, và chi ra c h ô
n i o S Q L tuân thủ và c hỗ nào S Q L k h ô n g liiíìn thủ q u y tắc.
TVt n h i ê n bạn có thể học sử clụiig vSQL một c á c h có hiộu q u ả Iigay cả nêu
b in k h ô n g có khái niệin về c ơ sở lý th u y ế t c ủ a nó, chỉ vì b ạ n k h ô n g thổ lái
Xỉ lốt nếu bạn không biết một chút gì về các bộ phận máy móc . Tuy nhiên,
c3 m ộ t s ự hiểu biết về lý thuyết liên q u a n clù chỉ là s ơ sơ, c ũ n g sẽ g iú p bạn
lliíy đ ư ợ c S Q L tr on g văii cảnh , và c h o bcỊH m ộ t cảtn n h ậ n về n h ữ n g ịiỉiát
tiiển có thể có trong SQL..
Miư v ậ y c ó Ihể đ ọ c ch ươ ng 13 h o ặ c bây g i ò h o ặ c sau khi bạn đ ã h ọc m ộ t
sò' lệnh S Q L . N ế u chỉ một điều bạ n m u ố n h ọc từ nó đ ó là S Q L k h ô n g phải
li D M L q u a n liệ đ á y đủ thôi thì bạn sẽ học đư ợ c một điề u c ực kỳ q u a n
Iiọng.
1 M
ớ
ỉìììììì íuiơn Ììê - ìììô tả tóììì tắt.
5
N h ư chÚDii tòi dà ĩìói ứ trèiì, ịiháii này k h ò n g n h a m lỏm lãt 12 Cịui tãc c ủ a
Cotlci (lâi cá n h ữ n g qiii lác inà bấ( cứ Cịiiaii lìệ ctí sớ ilữ liẹii nàt) c ũ n g plìái
liiaii lliú đirực thực sự gọi là qiiaii hệ), t ) tlây c h ú n g tòi chí m i ê u (á ló m tãl
mộ( s ố ký hiệu thirofng mại của m ộ t hệ tỊiian hệ.
K ý hiện t h ư ơ n g mạ i dỗ thấy nhâì củ a mọt CO’ sớ dữ liệu Cịiian hệ đ ó lìó g i ữ
sò liệu tr o ng c á c b á n g g ồ m các h à n g và cột.
N ê u ban đ ã d ù n g P a ra do x, d B A S E tr o ng c h ế đ ộ B R O W S E , h o ặ c Iigay cả
c ơ sơ dữ liệu Lo tu s 1 - 2 - 3 (k h ô n g c ó cái n à o h o n g chúiig là h o à n toàn
q u a n hệ th e o c á c qui tắc của C o d d ) thì bạn đã cổ mộl ý n i ệ m tốt vé k.hitôiì
m á u ciìa c á c c ơ sở clữ liệu "lập bá ng".
Đ â y là m ộ t biể u đ ổ c ủ a một b ả n g biểu đ iê n hình.
1K.)
TỀN
ĐỊA ( l l i
KHT QUA D Ặ I RA
Smith
Siisan
16, Fi sh e r C los e
15.000
Robinson
John
3, D e vo n G a r d e n s
70.000
Aila ms
Evelyn
103, M ile En d Rcl
50.000
C ác h à n g k h ô n g th e o thứ tự khi chúiig n h ậ p t h ô n g tin n g ô n n g ữ íhao tác d ữ
liệu (t ro ng tr ư ờn g h ợ p c ủ a c h ú n g tòi là S Q L ) phái đưa ra m ộ t pliirc/Dg p h á p
đ è khai thác c á c tộp h ự p phụ của các cột và các hà ng, và nưi tiếp các liàiig
th e o bất cứ tií\l tư n à o niìuh inuốn.
Một li o n g Iihững đ ặ c đ iể m hon hèì chứiig tỏ niộl hệ là cỊiian hệ đó là k hả
n ă n g sử ciụng m ộ t lệnh đ(Tii của đ ê khai thác th ông lin íừ nhiồ u b ả n g đ ổ n g
tliời tioiig vSQL, lện h n à y được gọi là S E L E C T - lựa c họ n. Đ ế lấy m ộ t ví dụ
từ c ư sở d ữ liệu b á n h à n g /d ặ t h à n g m à Iroiig cá c u ố n s á c h n à y sứ d ụ n g làm
ví dụ ( x e m 2.4. c ó m i ê u ta đ ầ y điì), bạn có thè’ nổi;
S E L E C T s u r n a m e , a m o u n t F R O M s a l e s m e n , con tra cts
W H E R E s a l e m a n , s u r n a m e = con trac ts, s u r n a m e ;
tie the’ h iệ n to à n bộ giá trị cú a íừng hựp đ ồ n g (từ b á n g các h ợ p đ ổ n g ) c ù n g
với tên c ủ a người ch ịu trách n h i ệ m bá n h à n g (tìr b a n g n h ữ n g người b á n
hàna,).
C ác cột có lliể g i ữ s ô liệu dưới c ác hình thức k h á c nh a u (đó là: đặ c đ i ể m ,
số, n g à y ). C h ú n g c ũ n g có thể giữ m ộ t giá trị N U L L - rỗng, n g h ĩ a là "giá trị
k h ô n g biết (lìhư s ự k h á c nhau lừ "để trốiig" hoặ c "O"). Sử d ụ n g c á c ký tự
r ô ng - N U L L là m ộ t ví dụ cíia n h ữ n g k iế m tra (h oặ c "iihữiig ràng b u ộ c
k h ỏ n o thể íách rời") m à D M L phái đ ư a ra đế đ ả m bá o rằng ch ỉ có s ố liệu
ttú ng (nói m ộ t c á c h q u a n hệ) là được p h é p Iihâp. Ví du, kiếu q u a n hệ k h ô n g
c h o p h é p b ạ n n h ậ p n h ữ n g hà ng sai lai.
N hư bạn íhây lừ ví tlụ (rcii ctây, Iiị>ười sử dụng họ (hông lương cỊuan kliỏng
c ẩ n biết chút gì VC vị tií của c ác (ệp ho ặc các cấu (lúc d ữ liệu vạt lý. Người
dij ng c ũ n g khòiig cần lích cực lạo la n h ữ n g licn kèì giữa c á c b ả n g (không
g i ô n g n h ư lộiih S E T R E L A T I O N c ủ a clBASE IV). D B M S c hị u trách nhiệm
với lAÌ c ả n h ữ n g việc kliông sạch sẽ đ ể giữ h à n h (rình "G ia n h ậ p " các bàng
b iể u đ ã Ihoá m ã n các cliÁI VÁI1 củ a bạn. Mộ( Irong n h ữ n g c ô n g cụ của nó sử
d ụ n g đ ể có Ihể đ ả m đươ n g được việc Ii«ìy đ ó là Sys(em C a t a l o g - một lifii
trĩr tất c ả cac chi tiết về lất cả b á n g biểu trong c ơ sở d ữ liệu m à D B M S chịu
Irách n h i ệ m cíỊp nhạt. Kết q u ả là, nó có thể làm n h ữ n g viộc g iố ng như
c h u y ể n d ữ liệu từ tĩĩa n:iy s a n g tĩĩa kh á c, và n g a y cả pliAn phối cluìiig cho
c á c n iá y tính k há c (c hẳ ng h ạ n n h ư trên m ột m ạ n g m à k h ô n g c ầ n người sử
(lụng đ ể ý clếii điều gì đã lliay đổi.
J .3.5. Nìiữiiị’ ỚỊ} duiiỊỉ c ủ a lìiâ liìiili (/Iiaii lìê.
Kh ôn g c ó lý d o lại sao khôiig (liể c ó Iiliiềii D M L khác nhau một cách triệt
clể (ừ c á c nhà cuiig c ấ p khá c nha u á|) tlụng kiể u cỊuan hệ. N h ư n g tioiig thực
lế, ngô n n g ữ liêu c h u ẩ n đã dưực m ơ tiròng tro ng suốt 2 0 n ă m q u a là SQL.
ỉ uy nliiêi) "(ièu c h u ẩ n " là một sự d ừ n g từ sai. Hiện đ ã c ó hơ n 5 0 áp dụn g
lìiệii h à n h c ủ a SQ L , n hư ng k h ô n g cái n à o tương lự với mộl tiêu c h u ẩ n Iiào !
K liô ng c ó bấl c ứ inộl S Q L hiộii hànli (lào h o à n (oàn là q u a n hẹ. C o d d llian
vàii lnrớc sự tliẠt rằng ng a y cá D B 2 c ủa IBM chi "đạt đ ư ự c " 7 trong sô 12
qui tắc c h ín h xác cao.
Do vậy m ặ c dù lý Ihiiyết q u a n liệ đ ã được c h ấ p nh ậ n n h ư là m ộ t c ơ sở hợp
lý đôi vứi truy n h ậ p và baỏ qiiảii d ữ liệu, c h ú n g lôi vá n c h ư a c ó một hệ
tliôìig q u a n hộ ihực thụ írôii (hị tnrờng.
l Á . Ti ê u r l m ẩ n A N S I 1986.
M ột thước d o thực tế áp d ụ n g cỉia S Q L là s ự phù hợp c ủ a nó với tiêu cluiắn
S Q L ANSI 1986. Ti êu clniắn ANSI tưưng tự đối với tiôu chiiẢn S Q L IBM,
(tnà c h o d ế n n a y vẫn là tiêu c h u ẩ n thực tô) m ặ c dìi lió c ó lìhiều k h á c biột
kh á q u a n Irọng. Bạn sẽ thây lằ n g h á u hèt n h ữ n g áp d ụ n g vSQL h iệ n h à n h sẽ
lự q u ả n g c á o c h ú n g Iihir là sự phù h ọ p với c«ỉ tiêu cluiẢiì IBM và ANSI.
Đ ồ n g n g h i ệ p c ủ a C o d d - Chris D at e đã xuấf bản một c u ố n s á c h ký thư (và
đ á n g d ọ c ) b à n về liôu c h u ẩ n ANSI, sự kh ác biệt cỉia c h ú n g với D B 2, và các
lĩnh vực m à ô n g ta c ả m thấy rằng đ ó là n h ữ n g q u y ế t đ ị n h tốt h ơ có the đã
được là m ra đ ể bao h à m cái gì và k h ô n g b a o h à m cái gì ( D a t e 1988).
Bởi vì nh iề u á p d ụ n g S Q L hiện liàiih đã đư ợ c đưa Víào s ử d ụ n g tnrớc khi
ban h à n h tiêu c h u ẩ n ANSI, có nhiề u lĩnh vực m à m ặ c dù tiêu c h u ẩ n đặ t ra
nh ững cỊui tắc h ợ p lý n h ư n g hiện n a y hầu n h ư k h ô n g c ó S Q L c h í n h n à o làm
theo c h ú n g ! (một ví tlụ hay về điổii này là khái niộm đ ộ c n h ấ t đ ư ợ c bàn
trong 4.4.5 ).
! Ilong lự, có Iihicii lĩnh vực mà tiòu chii;iii ANSI ilưòiig Iihư c ỏ ý làm n gơ
vứi các lệnh q ue n dìing dáii sao đã !ÌI11 Ihày ứ liầii hết S Q L - ví clụ, tại sao
ANSI kh ôii " đưa ra một lệnh để D R O P (bó rơi) m ộl T A Ĩ Ỉ L E ( b á n g biếu) ?
Và có nhiể u lình vực khác m à tiêu c h u ẩ n S Q L A N S I d ư ờ n g như trệch
hướiig rõ rệt với lý íhuyết qua n hệ (ví (Jụ t ro n g việc c h o ph é p c á c hãng sao
lai).
■
. ■
■
■
X o n g , m ặ c ciù tiêu c h u ẩ n ANSI là m ộ t đ i ể m Ih a m c h i ế u hữu ích d ù n g nó đê’
đ á n h giá m ộ t áp d ụ n g đặc biệt c ủ a SQL , nhưiig S Q L tiêu chiiắĩi A N Si
k h ô n g cấn thiết là "lốt nhất" - nghTa là, S Q L là q u a n hệ nhất d ể áp dụng.
C h í n h C o d d tự trích dẫ n (Cocld, 1988).
N h ữ n g người bán rong D B M S đ a n g gâ'p nít ủ n g hộ n g ô n n g ữ cấu trúc
chất vấ n (kế cả giai thích Iheo q u a n đ i ế m ciia IBM ha y người anh e m
liọ yế u hcm AN SI cỉia nó). Đ iể u n à y g i ố n g n h ư x e m m ộ t ctàn chu ột
vù ng bắc cực lụ tập trên bãi biển đế c h u ẩ n bị d iề u h à n h x u ố n g biển".
Trong SIIÔÌ cuốn sách này chúng lôi sẽ chí ra các lĩnh vực mà tiêu chuẩn
ANSI (.lườiig nh ư k h ô n g đi'i hoặc k h á c nha u lõ lệt với hầu hết c á c áp d ụ n g
thực tế.
/. 5 . icli lợi CIUỊ \ ử (Ịụniị SQL.
Bạn có thể thấy khó hiểu bởi vì tại sao S Q L lại được p h ổ biến đ ế n vậy. Đ â y
là m ộ t vài lý do đã đ ó n g gó p vào sự thành c ồ n g của nó.
a. M ộ t sự thiết lập lý thuyết hợp lý.
M ô hình q u a n hệ đã được đa sô c ác c h u y ê n gia c h ấ p Ihiiậiì n h ư là một cách
"tốt hcyii" m ô tii c ấu trúc d ữ liệu. N ó |ihụ th u ộ c vào n h ữ n g p h â n tích hựp lý
n g h i ê m ngặt, và tìnig hoạt đ ộ n g có thế đư ợ c c h ứ n g m i n h b ằ n g lý íhuyết
toán liọc làm nển tảng.
b. IBM s ử cliiiìg nó.
T r o n g n g à n h c ô n g n g h iệ p m á y tính hiện nay , việc x á c đ ịn h ch ất lưcmg của
tất cả các sản p h ẩ m của IBM (th ô n g thirờiig) là đủ đ ể đ á m b á o sự thành
c ô n g c ủ a hãng. M ộ t khi S Q L /D S và DB2 đ ã liớ th à n h hệ t h ô n g cơ sở dữ
liệu IBM tương lai c ủ a S Q L đ ã đư ợ c đ ả m báo.
c. M ộ t S Q L căn c ứ vào D B M S là linh hoạt với điểu k iệ n c ủ a c á c ng ôn ngữ
v.v... đ a hỗ trợ.
T r o n g c á c điểu kiện điều hành c ơ sở d ữ liệu, SQ L c h i ế m vị trí tning gian
giữa n g ô n n g ữ 4 G L hoặc 3 G L "trình đ ộ c a o " và p h ẩ n m ề m D B M S "trình độ
thấp".
4 G L và /h o ă c 3 G L
sc
DBMS
K h á Iinne c ủ a SQ L h à n h tlộng n h ư là một "vùng đ ệ m " giữa ng ô n ngữ lập
tiìnli b ậ c c a o và |)liần m ề m D B M S bộc (hấp dưa ra một clắii môi cho inột
tr o n g n h ữ n g lý d o làm c h o nó n g à y c à n g trở liên phổ biẽn. Vì vị Irí "đứng
g iữ a " n à y tạo ra khả n ă n g c h o c á c bộ phận cấu thành trình clộ c ao và trình
clộ th ấ p k h á c nhau cUrực c ắ m v à o x u n g q u a n h m ộ t phân giới tiôu chuẩn
SQL . ít nhất về lý th uyế t, n h ữ n g Iigười sử d ụ n g cơ s ở d ữ liệu tương lai có
thể lựa c h ọ n cà m á y c ơ s ở d ữ liệu ưa thích ÌKin của họ cá về mặt pliAĩi giới
với S Q L cỉia họ. N h ữ n g n hà c u n g c ấ p các hộ cơ sở d ữ liệu biết rõ vể những
kliả Iiáng x ả y ra bởi áị) tlụng liêu cliuẩii SQL.
d. C ác hộ lỉiốiig cơ sở S Q L có (hể m a n g đi được.
Mộ( t i o n g n h ữ n g hấ p d ầ n lớn c ủ a S Q L đ ó là Ỉ1 Ó đưa ra m ộ t phân giới tiêu
ciniẩn d ể truy Iihập d ữ liệu q u a nh iề u môi tnrờng kh ác nhau. Người nà o dã
học S Q L Irêii PC clBASE IV c ủ a aiih ta lliì anh ía có (hổ c h u y ế n s a n g chủt
vÁn hệ t h ô n g D B 2 m á y tính lớn IBM với một thời gian đ à o tạo lại rất ngăn.
T r o n g mồi Irưừng m ở l ộ n g x ử lý p h â n tán hiệii nay lạo ra một Ihiiận lợi lớn
c h o S Q L . T ấ t Iiliiên, c u ộ c tranh luận nà y c h ỉ g i ữ lại s ự Ihạt c h o đ ê n khi
người d ù n g c ả m thấy hài lò ng khi s ử d ụ n g c ác lệnh vSỌL " m â u chốt". N h ư
dã đổ c ậ p Irôii dủy, một khi h ệ vSQL đư ợ c sản xuất ra "Gần gũi với người sỉr
ciụng" với viộc bổ xung những c ô n g CỊI 4 G L chẳng hạn Iihư các menu, thict
k ế k h u ô n inÃii và lập b á o cáo, ngircri s ử d ụ n g trở nên "bị khoẩ vào" với ưng
d ụ n g đ ặ c biệ l đó. G i a o d iệ n đố i với ứn g d ụ n g khá c sẽ k h á c nh a u clôn nôi
người ciùiig c ũ n g có Ihể học m ộ t c h ư ơ n g trình hoà n c hỉn h h o à n toàn mới.
T u y nhiôn, rnộí s ố á|) d ụ n g S Q L hiệ n na y đã có sẩn c h o n h ữ n g m ô i tiiKTfiig
ỊỊliần c ứn g, phấn m é m k há c Iihau. V í dụ: O r a c l e - có sán trong các hệ l’C D O S là m ộ t ”cư sở clữ liệu" troiig ý ng h ĩa thuầ n khiỗt - d ó là, một thực tại
có c h ứ a clữ liệu và nó b a o gồrn m ộ t (ập hợp c á c lệnh d ể chất vấii d ữ liệu đó.
N ó k h ô n g phái là mộl n g ô n n g ữ lập (rình g iố ng như dB A S E . C ơ s ở d ữ liẹii
có thể đ ư ợ c truy nliẠp b ằ n g bất c ứ 4 G L nào m à biết "các đ i ể m m ó c nối"
và o m á y tính phục vụ SQL.
C ác h ệ S Q L tất n h iê m sẽ liếp tục si nh sôi n ả y nỏ' tron g suổt thê giới PC.
N h ư U n i x lĩ ở thànli m ộ t sự lựa c h ọ n phổ biến hơn với các hệ PC nhiè u
người d ù n g , các cơ s ở d ữ liệu c ủ a sự lựa c h ọ n sẽ là tất cả S Q L dựa trên
( I n fo rm ix , O r a c l e v.v...). IBM b a o g ồ m cà S Q L nh ư là m ộ t phần cỉia kiên
lnìc ứn g d ụ n g hệ th ôn g cùa ĨIÓ ( S A A - Sy s te m s Applications A r c h i t c c t u i e )
inà có ng h ĩa là nó có niộl sự rà n g b u ộ c n à o đó đ ể tiếp lục đưa ra và phát
tnéii các ứim tluim SQL; /\ii pliáni incV lọiig OS/2 (hệ tlicu hà nh tla n h iệ m I
ba o go m Iiiot áp cluiii> cíia SQL; và có Iihicii m á y líiih Ịihục S Q L |)hía lliư
ha dà giói ihiẹii cliC) OS/2 (ví du, sự eộiig tác giữa Ashtoii - Tale và
Microsoft).
rỏni tắt.
Ch ư ơ n g này dà giới thiệu ban với SQ L b ằ n g c á c h giái Ihícli tóni tál vai trò
của nó trong thố giới c ơ sở (lữ liệu. Bạn đã h ọ c đư ợ c cái gì g â y c á m h ứ n g
c h o sự phát triển của nó (kiêu q u a n hệ cú a C o d d ) ; N ó đã sinh sôi n á y IIỚ
Iihư Ihê nào CỊiia c ộ n g đ ồ n g sử d ụ ng má y d iện (oán ( mini, m á y (íiih 1(ÝI1 và
nối PCs) và tại sao n h ữ n g ngirời sỉr d ụ n g c ó thể thích các hệ S Q L licni c á c
C(í sở d ữ liệu kh ác (S QL là một tiêu chiiắn đã đ ã n g ký IBM n ó đã d ư a ra
m ộ t D M L p h o n g phú m à có thể được dìiiig nhir là m ộ t bộ x ử lý trước h o ặ c
bộ xử lý sau c h o D B MS s và /h o ặ c 4 G L s ).
Tioiig c hư ơn g 2 chiìng la sẽ bắt drill xein một sô thuật Iigữ "biệt Mgữ" m à
bạ n cần biết đè tiến h à n h học các lệnh SQL.
2. Cá c điều kiện C()ỉ ban SQ L .
Khái quái.
C h ư ơ n g này giai llìích một sô Ihiiậí ng ữ mới sử tlụ ng lioiig lìiộl hệ SQ L ,
câu trúc cơ b á n củ a các lệnh wSQL, và các k h u ô n m ầ u cíí Ịiháp được d ù n g
bơi các lệnh.
2 /. (iiói thiêu.
M ục đích của c h ư ơ n g này là giới Ihiệii b ạ n với c á c IhiiẠt ng ữ S Q L m à bạ n
cáii đê’ có thể ''cù ng đi" với vSQL. Các khái n i ệ m và c á c thuật n g ữ k h á c sỗ
được giới Ihiệii tio n g các c!nr(ifiig sau.
Tionị> c h ư m ig này c h ú n g tôi sẽ giới Ihiệu c ư sở clữ liệu m ẫ u m à nó sẽ đư ợ c
sử tlimg làm ví dụ li o n g siiỏt CUỐII sách.
2.2. Cá( C(rS(X(Ii7liệu.
Th uậ t n g ữ " c ư sử d ữ liệu'' dề c ập tới toàn bộ s ự thu thậ|i số liệu liên q u a n
một chủ đề đăc biệt. Một hệ thống máy tính có thế chứa lìhiềii c ơ sở clữ
liệu riêng rẽ cho:
-
Các k h á c h h à n g và các hoá đcíii.
-
Các chi tièt vé nhân sự.
-
Kê h o a c h b á o d ư ỡ n g thiết bị vãn phòng.
-
N iên giá m điộn thoai cá Iiliâii của từng Iigirừi.
-
Cáe chi tiết vổ o tò cứa C'òng ty.
10
và v.v...
Tâl nhièn, qiiyèt tÌỊiih nhũng ihiiẠl ngữ dữ liẹii gì dược dặt một cách hop lý
Irong c ìm g mội cơ s ứ d ữ liệu là mộ( c ô n g việc củ a bất cứ ai (hièl kê hệ
lliôìig c ơ s ở c i ữ liệu m á y línli ciiện íoáii.
Một sô clưn h à n g sẽ c h i yè u c ầ u một cư s ở dữ liệu, một s ố khác sẽ dược
chia tách mộl cách h ợ p lý hơ n thà nh Iihicii cơ sở. Cuốii sác h này kh ôn g
nhầrn giải qu y ế t n h ữ n g vân d ề c ủ a Ihiết k ế c ơ sở d ữ liệu ( m ặ c dù c hươ ng 3
có giới ihiệu S Q L clưực sử clụiig Irong phát triển "đời s ố n g (hực" của m ộ t
hệ); T u y nh iê n chỉ c ần sử clụiig c á c c ơ sở d ữ liệu S Q L sẽ c h o bạn một c a m
ng h ĩ về tạo mộ! cấu Irúc đ ú n g c ủ a d ữ liệu. K h ô n g có " đ ú n g " hay "sai"
luyệt đối trong thiếl k ế c ơ s ở dữ liệu m ọi cái tiiỳ thuộc và o c á c yê u CÀII cỉia
dưn tlậl h à n g dặc biệt. T r o n g ví dụ trên đ ầ y , các c ơ sở d ữ liệu riêng biệt sự
Ihực có Ihể là c ác h tốí nhâ t đ ể thiết kê d ữ liộu; T u y nh iê n b ạ n c ũ n g có thể
Iranh luíỊiì lẳ n g thiết bị văii p h ò n g và ôtô c ủ a C ô n g ty nên " g h ép " với người
sử clụiig cluing; và dan h m ụ c đ iệ n Ihoại cá nhăn s ẽ trùng lặỊ), kh ôn g chỉ
người này với Iigười khá c nià c ũ n g trùng với lệp khácỉi h àn g chủ yèii.
T ro ng l n r ờ n g hợp n ày , có Ihể m ộ t c ơ s ở d ữ liệu đ ơ n (nicặc clìi vói nhiều
bà ng biểu riêng rẽ - xetn dưới d ă y ) sẽ ph ả n ánh các nhu cđii cỉia C ô n g ty
một c ác h lốt hcTn.
í’hẩn lớn c á c áp cliiĩig S Q L c ó m ộ t lệnh đ ể tạo ra c ơ s ở d ữ liộii " lỗ ng" như
vAy IIÓ c ó lliể dược "lấp đ ầ y " b ằ n g n h ữ n g b ả n g biểu có c hứa d ữ liệu (hực
lế.
2 /. C(/ s ử (lữ licit niỗn (Ịirực (lùtìíỉ íraiiiỊ ( uòn s á c h này.
Cuôn Sílcli n à y sử tiling c ơ s ử d ữ liệu ngirời bá n/c á c hợp đ ồ n g d ể m in h h oạ
cho tất cá c á c iệnh S Q L d ư ợ c luẠn bàn (rong c ác chươiig sau. N ó chứa 3
hàng " n h ữ n g íigiròi báii", "cá c h ợ p đ ồ n g " và "cá c k h á c h liàiig” .
T r o n g c h ư ơ n g 3 b ạ n SC t h ấ y l ý clo c ă n b ả n đ ư a đ ế n x â y d ự n g c ơ s ở d ữ l i ệ u
này và s ự tách rời d ữ liệu th à n h n h ữ n g b ả n g biểu k h á c nhau, ơ ctAy c h ú n g
tồi chỉ giới lliiộii một c á c h đ ơ n g iả n c ơ s ở clữ liệu với bạn do v ậ y bạ n có thể
liiểu dược n h ữ n g ví clụ đ ư ợ c d ư a ra sau đ â y tro ng c h ư ơ n g này.
Mục đ íc h c ủ a c ơ sở d ữ liệu là là m c h o người q u ả n lý the o dõi đư ợ c việc tổ
chức bán h à n g b ằ n g việc x e m giá ỉ rị c ác h ợ p đ ồ n g m à họ d ã ký đ ượ c là b a o
nhiêu để đcỊt mục tiêu đậ( ra hàng C|UÍ đôi với họ. Các nhà quản lý cũng có
Ihể xe m giá fi ị các đ ư n dặ t h à n g m à k h á c h h à n g đ ã đcặt.
Bàng " n h ữ n g người b á n h à n g " b a o g ồ m c ác chi tiết c ủ a từng "cá n h â n "
inột, c liẳ ng hạn nh ư sô hiệ u n h â n viên cỉia a nh la, lên, liọ, đ ịa chỉ, sô ciiện
thoại và c o n sô m ục tiôu đặ t ra h à n g quý.
I1
Ráiig "hợp clổnt;" chứa c á c chi liêì của IỪIÌ'J, h ọ p đ ổ i i ‘j,, kè cá tèii c ủa Iìi>ười
bá n hàiig, ntỉ.ười ký đirợc hơp tlổng, lèn kh ách liiiiig, liỊ uiá h ợ p đ o n g và
n g à y ký hợp đổng.
Bàng "k hách h à n g ” chứa các chi liết "cá nhân'' vé từng k h á c h hàiiiỉ,, c h ầ n o
h ạ n nh ư số k há ch hàng, (ên, địa chỉ, số điệ n lho;ìi v.v...
2.4. Bd/iiJ, lìàiiiỊ, cột.
Trong niộl hệ cỊuáiì lý cơ sỏ dữ liệu C|uan hệ, tâì cá các ciữ liệu được iiiữ
tro ng các báng. Một bá ng đưực lạp b ằ n g các h àng và các CỘI. C h ú n g tưưiig
ứ n g với c á c việc ghi c h é p và CCS tr ư ờ n g h ự p tro ng m ộ t hệ Cịiián lý
s ớ ciữ
liệu tiLiyềii Ihống.
Sô cột và h à n g cho phéịỉ trong từng b á n g mộl k h á c nh a u tr on g từng áp
d ụ n g khác n h a u của SQL.
Bạn cũ ng sẽ gặ p các thuật ng ữ " b á n g c ư S(V" ( b a n g ch ứa d ữ liệii "thực" nơi
m à d ừ liệu mà d ữ liệu theo C]UÌ liiột cíia tự nhiê n dưự c cláiih m á y vào đ ó ) và
" b á n g kết quá " (b an g "tạm thời" đirợc tạo ra khi mộ( chất vấn S E L E C T
đư ợ c Ihành lập). Các b á n g kết q ua k h ô n g có sẩn c h o chất vấii xa hơn, m ặ c
dù m ột sô S Q L c u n g c ấ p một lệnh c h o p h é p c h ú n g đư ợ c " c h u y ế n " s a n g c á c
b á n g cơ sở.
Đ ỏi khi bạn sẽ thấy các bá ng đirực (ham ch iêu n h ư các quaii hệ. Đ â y là
thực (è phổ hièn iKMig eác chủ (lề (tưọc trang luận bơi các c h u y ê n ^ia c ư sớ
tiư liỏu Cịiian hệ liẩu hết các chi d á n Iigirừi tlìiiig và c á c sác h giới Ihiệii tlểii
>ían V(iíi "báiiR” .
Bang ví dụ.
IIỌ
TỀN
OỊA ( ill
Smith
Susan
16, Fishei C lo s e
15.000
Robinson
J ohn
3, D ev on G a r d e n s
70.000
Adams
Evelyn
103, Mile End Rcl
50.000
MỰC' TIFAJ ỌUÍ
Lệ n h SQ L S E L E C T c h o ph é p c ác b a n g c ù n g Iham gia clo vậy t h ô n g tin sẽ
đ ư ợ c khai thác từ nhiều h(tii một baiiiỊ inột cnch đ ổ n g thời.
2.5. U d ti h mục.
S Q L c h o p h é p bạ Ihic't lập các d a n h m ụ c Iroiìg các b a n g đ ế lă ng tòc đ ộ truy
n h â p d ữ liệu. Môt m ụ c lục SQ L làm việc " i o n g n h ư m ọ t m ụ c liic Irong một
c u ố n sách, c h o phé p bạn "tìm" một m ụ c ngay lập (ức c h ứ khôiii> phái ííọc
ỉưcVl e]ua toàii kliòi lượng (b á n^ ) clé lìm cái mà han iniiốii. Bạn c ó l!ic nghĩ
cICmì inộl m u c lục nh ư là một lệp riCMiịỉ, rẽ chứa một daiih sácli "các chí dẫn"
c h o clữ liệii thực tioiig háng.
12
BẢNG
M Ụ C LỤC
Sniith
1. Susan
Robinson
2. J oh n
Adams
3. Evelyn
Một khi các IIUIC lục dã được tao ra troiig inộl bảng, SQL sẽ tự động qiiyêl
clỊnh Iiliững inục lục nào, nếu CCK sẽ dược d ù n g c h o bất cứ chất vân dặc biệt
n à o trong c ơ s ở d ữ liệu.
M ặ c dù bạ n k h ô n g |ihải tạo ra bất cứ m ụ c lục n à o cả, n h ư n g trong hầu hè t
c á c trường hợp hệ củ a bạii sẽ thực hiộn một cách đÀy đủ hơn nếu mỗi b ả n g
dư ợ c lộp ít nhất một d a n h m ụ c k h o á chín h ( x e m 2.6).
D a n h m ự c dược bà n luận đ ẩ y đủ tioiig c h ư ơ n g 9.
26
.
,
K
ỉ ì o á
c h í n h
v à
k h o á
ì i i ^ o à i .
Mỗi h à n g phải có m ộl cột h o ặ c kết hợp c ủ a nhiề u cột, nội d u n g c ủa nó phâ
biột h à n g đ ó với c ác hàiig kh á c, Nói c ác h khá c, m ỗ i h à n g phải là độc nhất.
Các CỘI nià làín c h o các h à n g đ ộc nhất c ù n g n h a u thì dư ợ c gọi là k h o á
ch ín h củ a bảng. (T ro ng thực tế, phần lớn c ác áp d ụ n g SQ L , kể cả tiêu
c h u ẩ n AN SI, thực sự k h ô n g bắl b uộ c ph.ải sử d ụ n g kh oá c hín h đ ể lìiĩii c h o
nó c ó thể c ó các hàng sao lại trong m ột bảng).
Nêu mộl cột nià là kh oá ch ín h trong m ột b á n g n à y nhiriig t ro n g niộl b á n g
k há c (k h ô n g phải l.ì khoá ch ín h của b ả n g đó) thì được coi là một kh oá
ngoài (rôn b ả n g lliứ hai.
2.7. C á r lệnh SQ L.
S Q L có k h o ả n g 30 lệnh dược sỉr d ụ n g đổ thao tác hệ c ơ sử ciữ liệu. Đ c làm
c h o clỗ nhớ, các lệnh này c ó Ihể được chia thành 3 nhóm;
Các lệnh dịiih nghĩa d ữ liệu (n h ư C R E A T E T A B L E ) .
Cac lộiih tha o lác clữ liệu (n h ư S E L E C T , U P D A T E ) .
C á c lệnh diều khiển d ữ liệu ( n h ư C O M M I T , R O L L B A C K ) .
Con sô c h ín h xác củ a các lệnh sẽ thay đổi giữa các áp d ụ n g SQ L . Lĩnh vực
khác nhau lớn nhấ t về con sô và k h u ô n m ẫ u củ a các lệnh đ ó là đ ị n h ngliTa
d ữ liệu.
Phu lục A dưa ra một da nh sách các lệnh cỉia vSQL ANSI b ằ n g claiìh m ụ c ,
cù ng với một ĩiiièii la tóm (ắl về chức n ă n g c ủ a chú ng.
2.fS. D iên lììột ( àii lệnìi SQL.
13
M ột câu lệnh SQ L bao g ồ m lệnh S Q L được ticỊ)
kiện lự ch ọ n hoạc uý th;k' nào cán Ihiết đế lìoàn
hợp lý. Ví dụ, iộnh S Q L S E L E C T (được d ù n g đ c
c ác cột từ một hoặc nhiều bá ng) t r ư i h à n h niột c âu
nói bới bấl cứ cac điéii
Ihàiìh niòl thao lác SQL
khai Ihác các h à n g hoãc
lệnh như:
S E L E C T siirnaiìie F R O M sal e me n;
Các từ g iố n g n h ư S E L E C T và F R O M đirực coi nỉur n h ữ n g lừ giànli riêng.
Đ i ể u này có ng h ĩa rằng bạn k h ô n g thể ghi tên c ủ a c h ú n g vào cân trúc dữ
liệu c h ả n g hạn Iihư c ác bủng h o ặ c c ác cột. H á u hct c ác áp cliing SQ L cổ
k h o a n g 150 t ừ d à n l i liêng.
Tât cá các từ d à n h riêng phái đưực tách riêng khỏi c á c lừ hoẠc imic tlữ liệu
mới đ â y b ằ n g ít nhất m ộ t dấ u cách. Do vậy.
S E L E C T * F R O M sale me n;
là h ợ p các h, trong khi
S E L E C T * F R O M s ale me n ;
là k h ô n g hựp cách.
T u y nhiên, trong m ộ t sô phần cỉia câu lênh, drúi c á c h k h ô n g qiKin Irong. Ví
dụ, S Q L có thế h à n g c h ấ p nhận:
S E L E C T s u rn a in e F R O M s a l e m c n W H E R E s u r n a m e = "Smith"
và
S E L E C T s u r n a m e F R O M s a l e m e n VVỈ l E R E .surname = "Smith"
hoặc
S E L E C T s u r n a m e , e m p n o , i|l target F R O M s a le m e n ;
và
S E L E C T s u r n a m e , ernpno, target F R O M salem eii;
C á c lộnli S Q L luôn luôn có nhiéii Iham s ố h o ặ c c á c điổii kiệ n lự chọn đi
th e o với ch úng. Đ i ề u n à y có ng hĩ a rằng m ộ t c â u lệiih đư n có thể kết thúc
khi nó k há dài. V í dụ, lệnh S E L E C T có sáu lựa c h ọ n k h á c nh a u (và thậm
c h í nh ỉé u hơn tro ng m ộ t vài áp d ụ n g ) một sự kết h ợ p củ a mộl sô ha y tất cá
các lựa c h ọ n đ ó c ó thể được d ù n g dể c h ọ n lọc d ữ liệu c h ín h xác đực Iruy
n h ậ p từ c ác bảng.
Đ ô làin c h o các cdii lệnh đó ctirực hiểu rõ liưii, b ạ n c ó Ihể c hia c h ú n g thành
nh iề u h à n g khi bạn đ á n h máy.
V í du
SELECT
Sa le m e n. s u rn a m e ,
S a le m e n. e m p n o ,
Contracl. a m o u n t,
14
C o n l i a c l s . C d at e
F R O M Sal cnicn. conlracls
W I IEK B Salcnicii. em|)iio = conlracts. c n ip n o
A N D c o nlia cl s . a m o u n t > 3 0 0 0 0
O R D E R BY s a le m e n . s u r n a m e ;
Ban CÓ the cilia câu lệnh lliàiih nhiều clòiig ở bất cứ diểni n à o bạn lliích,
mặc dù Ihỏiig Ihirờng và rõ ràng - các đon gián là đặ( từng inệiih dề lliành
lừiig clòiig khác nhau Iiliir vois dụ Irôii đây. Bạn có thể dịch chuyển clAu
d ò n g dể làm c ho c ấu tn ìc c âu lẹnh dề theo dõi hơn - S Q L SC cliỉ bỏ q u a
lìliững dấu c á c h k h ố n g c ắ n Ihiôt.
Mộ í s ố th a m sô đôi với lệnh là uỷ thác, m ộ t sô khá c đíc h thực là tự chọn.
T r o n g ví dụ S E L E C T írêii đfty, nhu cầu uỷ tỉiác d u y nhất là một h a y nhiêu
lên cột hơn, và các biing đ ể cliất vấiì, phải đư ợ c địn h lõ; các inệnli clê
W H E R E và O R D E R By là fự c họn .
2 . ( S . I . C h ữ llitíòiìị’ Ììoãc cl ìữ lìOd.
'I rong hầu hết các ứng d ụ n g c ủ a SQL, bạn có thể đá nh các lệnh và các tôn
lriròfiig bằ ng cà c h ừ lioa, c h ữ thườ ng, hotặc c ả c h ữ hoa và c h ữ thường. Do
vậy, ví dụ, O r a c l e sẽ h.ài lòng c h ấ p nh ậ n (và d ư a ra c ù n g kết q ua cho):
S E L E C T a m o u n t F R O M contracls;
vn
select A M O U N T fro m C O N T R A C T S ;
Tu y nhiên Info rmi x đòi hỏi tâl cá các lừ lệnh phải là c h ữ Ihưòlig và (liều
chỉiih 2 ví dụ Irôn đAy nô n ghi:
selcct A M O U N T fro m C O N T R A C T S ;
lioặc
select a m o u n t from co ntracts;
Tro ng c uốn s á c h n à y c h ú n g tôi h ư ỏ n g clÃn c ác lệnh S Q L dưới cicỊiig viết hoa
dổ làm c h ú n g nổi bạt lên t ro n g pliổn còn lại c ủ a bài viôì. C ác tên cộí và
bảng dược viết chữ Ihirờng.
Chì khi m à c ác Irưừng hựp c h ữ hoa / c h ữ tliirờng có Ihể tạ la s ự k h á c n h a u
ctối với kết quả của m ột chấn vấĩi thì là lúc bạn phải định rõdữ liệu
bạn
niiiốn Iruy nliỘỊ). D o vẠy:
S E L E C T í i i s t n a n i c , SLiniamc F R O M s a l e m e n
W H E R E s u r n a m e = "Smilh";
Sc cho niộl b á n g kcì Cịiia k há c với
15
SE L E C T fiisliianie, .siiin;(inc F K O M salcincii
W H E R E siirnanic = " S M IT H " ;
2.S.2. l)(lii cliuin ( Oil.
N h ư ban CÓ thế thấy, các lệnh là các từ tièng Anh. Bạn cìiiìịi sẽ g ậ p các clấu
c h â m ., dấu ,, dấu c h ấ m phẩy và clấii ng o ặ c
Dâu châVii Ịihẩy được d ù n g trong nhiề u ứng d ụ n g S Q L đ ế kết lliúc một câu
lệnh SQL:
S E L E C T s u r n a m e F R O M s a le m e n;
K.hỏiig phải trứ cả các ứiig d u ng đcii đòi hỏi dấu chain phẩy ở cuối liàng
c âu lệnh; tiiy nhiên, gẩn nh ư tất ca sẽ c h ấ p nh ậ n nó nế u b ạ n d iể n vào nó.
C u ố n sách này luôn luôn sử d ụ n g dấu c h ấ m ph ẩ y chỉ kết (hiìc c ủ a một câu
lệnlì.
Dấu [)liẩy để tách các danli m ụ c c ủa các tên cột. V í dụ:
S E L E C T s u r n a m e , a ddre ss , q l target F R O M s a le s m e n ;
Dâìi chấm để tách têm bảng và tên cột. Trong tìnli liLiống khi bạn đang khai
(hác d ữ liệu từ hai b ả n g một lúc và khi m à mộl cột với c ù n g m ột tên xuất
hiệti ở cả hai bang, bạn sẽ phải chỉ rõ bạii m u ố n lấy cá c chi liéì CỘI lừ báiig
nào.
V í du;
S E L E C T sal e m e n . s u r n a m e , co nt iacts . a m oim l, c o n tr a c ts , siirnanic
FR (3 M s alesmen, contracts;
Drill n g o ặ c b a o g ồ m tất cả n h ữ n g t h ô n g tin ciìa điặc tliếni kiểu d ừ liệu (x e m
c h ư ơ n g 4 bàn về các kiểu d ữ liệu SQL). D o V ậy.
S E L E C T fir stname, s u r n a m e F R O M s a l e s m e n
W H E R E s u r n a m e = 'Smith';
bỏ dấu n g o ặ c sẽ c h o một thông bá o lỗi.
T ó m tất.
T r o n g chưcnig này bạn đã học các Ihiiật n g ữ c ơ ban và c á c ngiiyèn tác vể
c á c h cliìng S Q L m à bạn sẽ c ắn để hiểu các lệnh SQL.
Trong chương sau chúng la sẽ nhìn vào một ví CÌỊI "đời Ihực" vổ mội hệ
SQ)L có Ihê đưực lạo ra nlnr llic n.ìo, được sứ d ụ n g n h ư thố nào và được
thay đổi như thê Iiào đổ phán ánh nhu cáu thay đổi của I i g ư ừ i sử tiling.
3. M ột ví dụ vé íhiết lập một hệ S Q L .
16
Khái qiiál.
C h ư ơ n g này hướ ng tliui VC S Q L clirợc ciìiiig d c phát li icn "clừi thực" cLÌa I hệ
cơ sỏ' d ữ liệu.
Clníiig lôi giói Ihiộii Iiiột s ố ciích lẹnh SQL phổ biến, và xcin xem chung có
Ihể linh hoạt (hay dổi cơ sỏf d ữ liệu n h ư Ihế nào n h ư những ý iưởiig pliát
íriển ccủa
ủ a nyười
người sử clụiig.
cluiiR.
Các lệnh c hí nh được đ ề cậ p trong c h ư ơ n g này.
CREATE TABLE
INSERT V A LU ES
SELECT
C R E A T E VIEW
GRANT
REVOKE
CREA TCIN D EX
3 I . Giói (hiệu.
Trước khi cluing ta bắt đ ầ u kiế m tra các lệiih S Q L m ộ t các h chi tiêt tr ong
một s ố ít c h ư ư n g tiếp theo, nó lất bổ ích với bạn nếu có m ột c ả m ng h ĩ vê
S Q L thực (ế đ ư ợ c sử d ụ n g nh ư t h ế n à o tr on g thiết k ế c ơ s ở clữ liệu.
C h ư ơ n g Iiày c h o (hấy S Q L có Ihể dượ c sử d ụ n g Iihư t h ế n à o Irong phát triển
(hực l ế của mộ( liộ thông. C h ú n g ỉa SC Ihấy S Q L c ó thể dỗ d à n g đối pỊió VỚI
v iệ c c h ô n g đ ỡ "cííc lỗi" của người d ù n g trong Ihiết k ế dữ liệu - các lôi mà,
tiiy nhiên, phản ánh cách người d ù ng Ihực sự lĩnh hội dược và làm viộc VỚI
ciữ Ịiệii c ủa a n h ta, n h ư đổ c h ô n g lại với kiểu "lỗi" thì d ữ liộu pliái (lược tô
chức Iheo hệ lliốiig m á y (inh. S Q L ciiôi c ù n g c ũ n g sẽ Ihuyèl phục người
d ù n g áp d ụ n g các cấu tnìc d ữ liộu d ầ y đủ, trong khi tiếp tục c h o phé p a n h
ta Iriiy ĩihệp v«ì x e m xél clữ liệu the o c á c h m à dối với an h ta d ư ò n g Iiliư là
tlễ c ả m nhậíi nhấl.
C h ư ơ n g nìiy c ũ n g sẽ giỏi thiệu vói bạn mộl sô lộnli S Q L cơ bull do vẠy bạ n
có Ihổ iiliẠii dược "sự h ưử ng ứng n g a y " c ủ a Iihững gì có licii q u a n clôn Ihict
lẠịi lìiột hệ c ơ sử d ữ liộu vSQL.
Trong Cík ví dụ nêu dưới dây, mục clícli không nhằm giải thích clÀy dủ các
hoại d ộ n g cỉia các lộnli S Q L clưực sử d ụ n g . C h ú n g (ôi giải thích c h u n g vê
chức n ă n g c ủ a lệnh ỏ n h ữ n g c h ỗ cần thiết, và chỉ ra lệnh có th ể (ìm thấ y ở
clủii được bao h à m (rong bất cứ c h ỗ sâu kín n à o của c u ố n sách. M ụ c đ íc h
của chirơng n à y là lạo c h o bạn m ộ t c ả m nhẠn vổ k hả n ă n g và p h ạ m vi c ủ a
SQL, klicMig phải b ằ n g mộl chỉ d ẫ n cú p h á p s âu xa.
Bạn c ũ n g sẽ tliấy rằng c h ú n g tôi k h ô n g n h ầ m b a o h à m lất cả c á c lệnh m à
có lliổ k h ô n g thổ Iránh kliỏi licn cỊiian đôn thiêì lập một hệ t h ố n g thực sự.
17
Iliực tè, nh ư Ixui sẽ thấy, liaii hêt các ví clii đ c u x o a y tỊiiaiili lệiili S E L E C T l à l ẹ n h I i i à c h o p l i ÓỊ ) n g ư ờ i d ù n g k l i ò i p h ụ c c á c l i à i i g , c á c c ọ t l ừ I i l i ữ i i g l i i u i ị ;
thirc lọi.
3.2. ỉ liìrt ké nìôt ( o' só' (lữ liừii.
Miic đícli ciìa bàì cứ một ai khi thiêt lâp m ột liệ cơ sư clữ liệu phái là lliiêt
láp niộl hệ nià nó Ịihán áiih thè giới ihực cúa việc sử d ụ n g dữ liệii c à n g gáii
gũi c à n g lốt. Nhiều Iigười sỉr cliiiig khác n ha u sẽ có n h ữ n g các h clùiig k h á c
nha u đối với c ù n g rnột d ữ liệu; inộl số người d ù n g k h ô n g cán x e m một s ố
ph ầ n của c ơ scV clữ liệii và v.v... Do vậy liệ t h ố n g cân phái c u n g c a p Iihữiìg
m ụ c tiêu khác nh a u đối với dữ liệu. Liên CỊiian đôn vân đề nà y là nhu cáu
c u n g cấp một sự an toàn cho cơ sư tlữ liệu, kế cá trong ý tliức c ủ a n h ữ n g
người sử d ụ n g chí đưực Iiỷ qiiyổn đê nhâỊ-) n h ữ n g (lữ liệu đặc biệl, và troiig
việc xử lý đ ú n g đắii n h ữ n g giao dịc h mà bị bỏ lửng. Ai m u ố n một cư sớ clừ
liệu báii - câ|) nhật 'ì V ấ n còn một sự su y xét cấn thicl nữa đ ó là k h ò n g clữ
ỉiệu nào cầii phải sao lại khắ p mọi nơi t ro n g c ơ s ư d ữ liệu, c ẩ n thận với sự
nh ầ n i lẫn tai hại đ ó có thể xáy ra nếu giá san p h ẩ m của C'ông ty hạn xuất
liiện
trong
bang
tồn
kho
là
2 0 0 £ n hưn g trong tẹp hoá đơn lại là 100 £.
Tâ t nhièn, Irong m ộ t t h ế giới lý tưíVng hộ c ơ sư tlữ liệu nê n đ ư ợ c lâ[) kè
lioạch I11ỘI các h ho à n háo tiirức khi Ii‘4 ười khai Ihác chưa từng bào gity
c h ạ n i vào rnột hàn phíin. Nh ưng trong Ihế giới ihực, sự lioàii thiện Iihư vây
liiénì khi xáy r:i- tJ:íy la sự ihưc đác biỏl liiệii nay mà SQL. đi tn'\ v à o thế
giới PC, Iiưi inà sự tiếp cận tmyểiì Ihốn g c ủa người d ù n g đã llìàiih thói
qiicii clỏi với việc lương đối ilổ sử (.lụiig, cliổu kh iê u b ong (hực CÍƠII, các ứng
tlụii'; đicn Irợ giúp, có kluiyiih hư ớ n g rẽ Iiháiili và viêl ỉiệ Irưỏc sail cló inới
giái quyc l n h ữ n g m ắ c mớ.
S Q L khôiig cổ nhữn g c ô n g Ihức thần th ông dế c ủ n g c ố nhữiig thiết k ế "tôV
Iiluriig nó c ó sư linh hoại ch o phéịi người clìiiig phát triến các hệ "pliâii lán"
và rổi sau tló hoà hợp cluing; nó đưa ra n h ữ n g biệii ịihÓỊ) Ihoá m ã n đẽ kiếin
tra s ự an toàn; và nó đira ra n h ữ n g giới haii toàn vẹn nià có the giú p đ á m
b á o rang nliững vấn đề như việc sao chéị-) các d ữ liệu khỏiii> cán sẽ klìôny
x á y ra.
Nêu c h ú n g ta tiếp tục x e m inột ví till vổ liếii bộ "điủii liình" cíia người sử
cỉụng t r o n o phái Iiiến một hệ đế ph;in ánh chính xác các nhu cáu và sở liệu
đời Ihưc của anh ta, chúng ta sẽ thấy lằiig S Q L cung cấp một c ô n g cụ lất
d ễ sỉr d ụ n g đ c làm việc đó.
-VJ. S/'f (Ìinìíị S Q Ỉ, (lơ tdo inòt C(f s ơ d ữ hê n.
.V.V / Hi' vi du.
18
- Xem thêm -