được và để l.ìạn íự íìm ra vấn đề... Các cflu lệnh nào dưói đây sẽ thực h iện đư ợc?
Trang 1BÀI 2 CÂU LỆNH SELECT
M ụ c đích;
0 bài nàv chúng ta sẽ nói về:
• Cách viết m ột truy vấn SQL
• Lựa chọn và hiển thị tất cả các h à n a và cột trong b a n c
• L ự a c h ọ n và h i ể n íhị c hì c á c CỘI c h ỉ đi nl i t r o n g b ả n g
• Lưa chọn 1 • \ầ h iể n thị các cột từ n h iều b ả n e• • W
Đ ể sừ d ụ n s được đầy đủ sức m ạ n h của m ộ t C S D L q u a p / h ệ thì b ạ n cần phài giao tiếp vói nổ thông qua các truy vấn (query) M ộ t Iruv vấn S Q L k h ò n g
n h ất thiết chỉ ià m ộ í yêu cầu iíy dữ liệu từ CSDL, lìó có thể lù m ộ t c.lu !ộnh dể làm m ộ t iro n s các việc sau:
• T ạo ra hoặc xoá đi m ột bảng
• T h è m ^'ào, sửa đổi hoặc xoá đi các hàng, các CỘI
• T im kiếm m ộ t vài bản g tlioả m ãn th ô n s-tin nào đó và trá về k é i ũ u à ih ec thứ tự cu thể
• Sửa đổi ih ô n ^ tin an toàn
Đ ể ihực hiện mỗi công viậc như vậv ta phải tạo ra m ộr )''êu cáu 2Ửi đ ế n ỉv|' CỊunn trị CSDL Yỗii cầu đó Vỉổ’t dưới d ạ n s m ộ t câu lệnh cùa n g ồ n n g ữ S Q L mh
ns ư ò i - ĩ a r,ọi ìà Query Chúns ta sẽ d ị c h 't h u ậ t n g ữ này ỉà “ truv vấii" N h ư vậv iruy vấn là cách thức mà naười sử cỉụp.2 s ia o tiếp với bộ xừ ly SQL
Q uy íắc c h u n g về cú
Ta sẽ thấy, cú pháp của SQL thực sự là ỉinli hoạt, m ậ c đù nó cũr.ỉ: có các kiậi pììâi tiiíìn theo như bất kv m ội níĩôn n e ữ iâp trình nà o khnc M ột tru v vấn do'n aiân ỉĩiinh hoạ cho cú phấD cơ bản của câu lệnh SQ L S E L E C T - H ã v thộí chú
ỷ vào chữ hoa dấu cách, và sự phản cách họp ỉý củci từ n s thàiih p h án Iro n s m ỗ i
iru\ vấn với các lừ Idioá của SQL
SELECT KAME, , STAR7TER^C, ' ERDTERK ' ' ■ ' ^
FROM PRESIDENTS'
T ro n g ví dụ này tă't cả các chữ đều được viết hoa, Iiliưng idiónỉí n h âí th iế i phải
n h ư vậ)- Truy v;ín trẽn đáy c ũ ns giống như truy vấn dưới ncu nó đ ư ợc viết n hu
Trang 2s e l e c t name, S t a r t t e r m , endf-erm
i ' r o m presidents
i.-4'iere n a m e = 'LINCOLN';
Lmi ý !ă chữ L IN C O L N trong cả hai ví d ụ đều viết hoa M ặc dù r á ' ’ lẹiih SOL là Idiông phân biệt chữ h o a với chữ thường n h ư n g các tham chic.r ■ t díi ỉiệu thì có V í dụ, có rất nhiều công ty lưu trữ dữ liệu của họ với chữ ị)ì 'ÌOI^
!'i 'Tig ví dụ iíên, giả sử rằng cộ t tôn lưu Irữ.iỊội d u n g dữ liệu vói ch ữ in hí 1 1 i
- 0 -nột t;’ỉy vấn tìm kiếm chữ 'Lincoln' trong c ộ t lên sẽ kliông tim ínấv i r- i íhoầ m ãn N ầư vộv là trong các câu lệ n h tron g S Q L ta k liô n s p h ân biệl chu loo
nhữ íhưòvp, C ũ n g khôn g có gì 'đặc biệt với các ỉchoảng trắng, m iền I:‘| '-ác
ớiokìp^ khô n g chia cắt các thành p h ầ n c ú pháp D ò n s mã lệnli ;-.ai ,àv
, ' \ kếf quả g iố n s nliư cách viếc tiuớc:
I me, 3tart:term,■ ■ endterm
£i'u ji p r < 's id e n c s ,
w h e r e p.dJTie = ' L I N C O L N ' ;
'Tuy nJiiẻn, m ột vài k lio ả n s trắng và viết chữ hoa sẽ ỉàm cho câu lệnh của :a crở liên dễ- dọc hơn V ậy nếu sư q u a n trọng k h ô n ? p h ải ià ờ chỗ viếi h a y /liếu c á c h ihì -phán nàũ mới ỉà qu an trọng? Câu trả ỉời đó chính là cấc lù kiicá .'key w ord), hay những-từ ĩrong SQL đ JC d à n h riâns: n h ư là rnột phán cú
•háp T uỳ Ihuộc vào cAu ỉệnh SQL, m ộ t từ k h o á có thể là ỉệnh hoặc là ÌÍI ■' I.]',ọn ỉnưng từ kho á irong câu ỉệnh Iiàv là:
’ S E LE CÌ '
• ỈẾLECr và F R O M
■ í=n í'ó rỉ)út ít kinli n g h iệ m vái SQL, ta sẽ thấy rằng các rừ SE) M i' V
ĩị'. ụỉiiều liơii b ấ t kỳ từ nào k h á c 't r o n g b ả n ? từ vựng cị‘i.1 '■•ứi:- l: ứ. b á í dầií với lừ S E L E C T bởi vì hầu hết các câu lệnh của ta sè bắt r1;ìn
ĩiCĩ: ^ ^ ^ ^ ' ,, '
cú p h áp :
\ CELECT ' < t ê n ^ c á c c ộ t >
Đối vói các câu lệnh kể cả những cáu !ệnh c ơ bản nữa, thì cáìi
S E Ĩ.E C T kliônp ''hễ don piản hon được nữa T u y nh iên , SELECT khônp, chì ; v-ộc m ộ t ưiình Mếii Iiỉiư bạn chỉ 2Õ S E L E C T vào hệ th ốna pủa bạn,
■5QL> SELKCT;
bạn có thể nhận dược kếl quả như sau:
Trang 3Hr
ERROR ac line 1;
ORA-00936: m i s sing expres s i o n
T h ô n g báo lỗi chỉ ra cho b ạ n m ộ t thànli phần nào đó bị ihiếu P h ần bị hiếu chínli ià m ệ n h đ ề F R O M N liư vậy, câu lệnh S E L E C T v à F R O M bắt đáu
n ở ra SỨQ m ạn h đ ằ n s sau C SD L c ủ a bạn
Bạn có thể sẽ tự hỏi cái gì p h â n biệt giữa m ộ t từ k h oá (k ey w o id i, m ộ t crlii lệnh (statem en t) và m ột m ệ n h đ ề (clause) C ác từ kho á SQL nói tớỉ các thaiih
p h án SQ L riêng rẽ n h ư S E L E C T và F R O M M ộ t m ệ n h đề ỉ'à m ôt phiin Xĩonẹ câu
!ệnh SQL; ví dụ, S E L E C T c ộ t l , cột2, ià m ộ t m ện h đề Các niệnh đé S Q L kết liọp với vói nỉiau để tạo n ê n m ộ t c â u lện h SQ L h o à n chỉnh Ví dụ bạn có thể kết
h ợ p m ộ t m ệ n h đ ề S E L E C T v à m ộ t m ệ n h đề F R O M đ ể viết nên m ột câu lệnh
S Q L
Tuỳ thuộc theo nhà phác triển, m ỗ i b ả n SQ L sẽ có m ộ t cách rièn s đ ê ỈSỈ
ĩ 1 lỗi V í dụ, M icro so ft Q u e ry nói rằn g nó k h ô n g thể hiện iruy vấr được và để l.ìạn íự íìm ra vấn đề Borland's In tc rb a s c dư a ra m ột liộp thoại uoim uó iihi rõ lỗi P erso n al O ra c le ? đưa ra cho b ạ n s ố h iệ u c ủ a ỉỗi và m ộ t siải thích n s ắ n gọn
về iỗi M S/SQ L server cũng c ó m ộ t k iểu thôna; bá o lỗi của m ình
Y í đ ụ ;
Sau đâ y là m ộ t ví dụ về m ộ t C S D L m à c h ú n a ta sẽ d ù n g niiiều đ ể m inh ỉhoạ c á c h d ù n g các m ệ n h đề S E L E C T và F R O M C h ú n g ta chưa bàn tói vân đề ỉàrn tliế nào đổ tạo ra CSD L n ày , n h ư n g đ ể p h ụ c vụ clio ,mục đ ích ỉà niỏ lả các h dùiig S E L E C T và F R O M n h ư t h ế nào, ở đ ây c h ú n g ta sỊÍả thiếí như đã có sẩn
C S D L đói, V í đụ n à y sẽ d ù n g b ả n g C H E C K S đ ể lấy- th ô ng tin về các hoẩ đơ n m à
m ỗi cá n h â n đ ã tao ra
3ng C H E C K S :
2
i
4
5
6
M a Beii
R ea d in g R R
M a Bell Local Utilities Joes Stale D en t Cash
Joans G as
150
? ^ 5 3 4
98 150 25 25.1
H av e sons next time
T rain to Chicago Ceiỉulnr Phone
G as
G roceries
W i l d N i ^ h r Oii£
Gas
ĐAy là truy vấn đáu tiên củ a ban
Trang 4SQL> select from checks;
K ết quả sc ỉà
, 7 rows selected.
K ết quả trả về giống n h ư b ả n g tr o n s v í d ụ n ày H ã y lu\: )' là cột ỉ và cột 3 trong phần kết quả là căn lề phải và côí 2 và cộ t 4 ỉại c ă n lề bẽn irái Đ ịn h d ạ n c này tuân theo qu y ước về c ă n lề, theo q u v ư ó c này dữ liệu d ạ n c số sẽ đưọ'c càn ỉể phải và dữ liệu dạng k v tự sẽ căn lề b ê n trái
Dấu sao (*) trong S E L E C T * cộ n s liĩa là C S D L sẽ ira \'ề trú cả các côf
t r o a s các bảng-được đ ư a ra ở m ệ n h đ ề F R O M C S D L sẽ xác điĩih tliứ tự của cổc
K ế í thúc m ộ t câu lộnh SQL
Trong m ộ t vài cài đ ặt của SQL, dấu ch ấm p h ẩ y (;) ò' cuối câu lệnh có nelìĩa ỉà bạn đã viếl x o n g câu lênh đó V í đụ n h ư S Q L * P L U S cùa OvAck sẽ
k h ố n g thực hiện câu ỉệnli cho tói klii nó th ấ\' dấu (;) h o ặ c dấi! (/}. T u y nh iên ,
m ộ t số cài đặt khác ỉại k h ô n s d ù n g dấu c h ấ m p h ẩy n h ư là ITÌỘL k ý hiệu kêt thúc.V í dụ M icrosoft Q u ery và Borland's S Q L k h ồ n s v ê u cấu m ộ t dấu chấrn phẩv, bởi vi truy vấn của bạn được gõ ironíĩ m ộ t h ộ p s o ạ n lỉiáo và sC* d ư :: ỉ nực hiện khi bạn niiấn m ộ t nút đà quy địnli
T h a y đcSi thứ tự của các cột
V í d ụ trưó- c ủ a c â u l ệ n h S Q L s u a ụ n ẹ d ấ u c l i ọ n lự:, i ấ i c a c á c c ộ ! ù;
m ộ t bảng, thứ lự các cột xuấí hiên ở p h ầ n V"' đã đưọ'c CSDL xác định Đé chỉ ra thứ tự cùa các cọ:, bạn r-' ih" Ì.C; óoiia lệnh sau;
Lưu y Iằn£ ten cột phải được ghi trỏ n s m ệ n h đề S E L E C T , TỊiứ iư cấc cột
d ư ợ c g h i s ẽ là thư Lụ c h ú n g x u ấ t h i ệ n i r o n s k ế l q u ả Irả Vu K ltv ' liriỉ ý cả tói c á c
d ấ u p h ẩ y n í ă n c á c h g ỉ ữ r ren c á c c ộ t v ă k h u à i i i í L i ố n s s i ư a ler c ộ r c u ố ! c ù n c v ói
m ệ n h đề tiếp theo (tro n s ví aụ ha 1? m é a h đề F R O M ; K i i qiia ira vể sẽ nỉur sau:
Trang 5P A Y E E REÌ-mRKS • ' A M O U N T C H E C K ịệ
7 rows selected.
M ộ t c á c h viết k h á c của c â u lệ n h là n h ư sau:
S E L E C T payee, rerrtarks, amount, check#
F R O M checks;
T a th ấy m ệ n h đ ề F R O M đ ã đ ư ợ c c h u y ể n xuốna: d ò n s ihứ 2 K ết quà trá về
ỉà g iố n g n h a u vì chỉ có d ạ n g c â u lệ n h là th ay đổi
'C h ọ n c á c c ộ t riên g rẽ
Bâv g iờ k hi m à bạn đ ã có th ể k iể m so át đư ợc thứ tự c ủ a c ác cột bạn sẽ c ó tlìỏ c h ì ra b ạn m u ố n x e m cột nào G iả sử là b ạn k liồ n g m u ố n rihìn ihấy tất cà cá c cột ironsĩ C S D L Bạn đã sử d u n g lện h S E L E C T * đ ể x e m th ô n ^ tin đã có sẩn và bây ơicí b ạn m u ố n tạp trung vào s ố ỉioá đ ơ n và tổ n g số Bạn gõ; ■
S E L E C T CHECK#, amount from checks ;
K ế t q u à íiả về bủỵ giờ sẽ là
CHECK# ■ AÌ40ƯMT
,, , ^
2 2 4 5 3 4
3 2 0 0 3 2
7 rov/s selected.
B ây g iờ b ạn đ ã có các c ộ t m à b ạ n m u ố n x e m Cái gì sẽ xảy ra n ế u b ạ n
L ự a c h ọ n các b ả n g kh ác nh au
G iả sử là b ạ n đ ã có m ột b ả n g kliác là D E P O S IT S với c ấu trúc như sau:
Trang 63 C r e d i t U; Oh 5G0 L o a i
Ơ1Ỉ cần b ạn thay đổi m ệỉili đề F R O M đ ể có đư ợc b ả n s m o n s m u ố n và cõ lệnh n h ư sau:
select * from d e p o s i t s
K ết quả là;
1 R i c h U n c l e 2 0 0 T a k e c f f - 1 s t
2 E m p l o y e r 1C0Ũ 1 5 J u n e
3 C r e d ' i ' r U n i o n 50 0 L o a n
3 r o v ; s s e l e c t e d
N l i ư v Ạ \ c h i v ó i m ộ l i l i a v d o i n h ỏ g i ữ đ á v b ạ n đ ũ l u;' nlụiỊ) ù i i ọ r ÌIIOÍ
i i g u ồ n d ừ liỘLi m ó i
Đ ặ t truy vấn vói vêu cầu lấy các giá irỊ k h á c n h a u ( D i s t i n c l i o r ,
Nếu xem lại b ả n s C H E C K S , b ạn sẽ ihấv co m ộ t vaỉ dĩi iiẹu bị ỉặp lại \ ' í clụ nêu ban d ù n s cfiu lênh sau nỉiin vào côt A M O U i N T :
K ê ì q u a ỉ à
.
15C
2 4 5 3 4
2 0 C 3 2
98
1 5 0
0 c , 25^1
rov.’s selected.
SỐ 150 bị lặp lại L à m t h ế n à o n ế u bạn m u ố n x e m liẹi có bao n h iêu s ố tiền k h ấc nhai' í rong cột nà)'? H ã y thử g õ cáu ỉệnh;
select r i S T I N T T amount from checks
Trang 7K ế t quà sẽ là;
AKCUi'JT
245.34
2 0 0 2 2
25 1
6 rov.'s selected.
Báy s iừ chỉ có 6 bản íihi dưạ'c ch ọ n Bửi vì b ạ n đã gõ D IS T IN C T , chỉ có
m ộ t g i á trị t r o n g d ữ l i ệ u k é p đ ư ợ c h i ể n thị, đ i ề u đ ó c ó n s h l a là s ẽ c ó b ó l đi m ộ t
bản ohi được li-ả về A L L là từ khoá n s ầ m đ ịn h tro n g câu lệnh S E L E C T cơ bản Bạn liáu như sẽ k h ô n g nhìn lhấ_v từ A L L bởi vì S E L E C T < b ả n c > and S E L E C T
A L L < b ả n g > c ù n s có kết quả nlur n h au W- - *
T ó m tắt bài 1
T ừ k h o á S E L E C T và F R O M c h o p h é p viết iruv vấn để láy d ữ liệu Bạn có ihể tạo ra m ội câu lện h đáy đủ vìi eộp tấĩ cả cá c b ả n e với m ộ t câu ỉệnli S E L E C T
h o ặ c bạn c ó Ihể sấp xếp hoặc lấy d ữ liệiỉ từ các b ả n s n h at định T ừ kh o á
D IS T IN C T giói h ạ n k ết quả trả về d o vậy b ạ n sẽ k h ô n g nhìn íhấv các s iá trị trùng nlĩau trong m ộ l cột, ,
Câu hoi
1 C á c c â i i l ệ n h d i ĩ ó i đ â y s ẽ Irả N'c k ế t q u ả í i ố n s : h a \ ' kl ìa C IIỈIUU '?
SELECT=^= F R O M C H E C K S
2 Các truy vấn k liônc thực hiện đư ợc lại sao?
a Select *
6 Seỉeci a m o u n L n a m e payee F R O M c h e c k s
3 Các cflu lệnh nào dưói đây sẽ thực h iện đư ợc?
a select
from chexks
b s e l e c t f r o m checks;
Bài tập
1 H ã v sử d ụ n g bảnơ C H EC K S ở bài h ô m n ay , viết truv vấn chỉ đ ể h iển thị số hoá đơn và cột rem arks
2 H ãy viết lại truy vấn ờ bài 1 sao c h o c ộ t re m a rk s sẽ x u ãì hiện là CỘI đầu
ú ẽ n trong kêì q u ả cửa bạn
3 D ù n e b ản g C H ECK S, viết m ột tru y vấn đ ể trá vể ưú ca s iá trị re m ark s
d u y nhất