Tải bản đầy đủ (.pdf) (180 trang)

Tài liệu Giáo trình Ngôn ngữ SQL docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (774.26 KB, 180 trang )

Y BAN NHÂN DÂN THÀNH PH HÀ N IỦ Ố Ộ
S B U CHÍNH VI N THÔNG HÀ N IỞ Ư Ễ Ộ
GIÁO TRÌNH
NGÔN NG SQLỮ
(Mã s giáo trình: 3CD3)ố
HÀ N I. 2005Ộ
HÀ N I, 12-2004Ộ

L I M Đ UỜ Ở Ầ
Ngôn ng SQL (Structured Query Language) đ c s d ng trongữ ượ ử ụ
h u h t các h qu n tr c s d li u đ truy v n và s a đ i c s dầ ế ệ ả ị ơ ở ữ ệ ể ấ ử ổ ơ ở ữ
li u. Ngôn ng SQL h tr các truy v n d a trên các phép toán đ i sệ ữ ỗ ợ ấ ự ạ ố
quan h , đ ng th i cũng ch a các l nh s a đ i c s d li u và mô tệ ồ ờ ứ ệ ử ổ ơ ở ữ ệ ả
l c đ c s d li u. Nh v y, SQL v a là m t ngôn ng thao tác dượ ồ ơ ở ữ ệ ư ậ ừ ộ ữ ữ
li u, v a là m t ngôn ng đ nh nghĩa d li u. Ngoài ra SQL cũng tiêuệ ừ ộ ữ ị ữ ệ
chu n hoá nhi u l nh c s d li u khác.ẩ ề ệ ơ ở ữ ệ
Có nhi u phiên b n khác nhau c a SQL. Tr c tiên, có ba b nề ả ủ ướ ả
chu n. Đó là ANSI (American National Standards Institute) SQL. Sau đóẩ
đ n năm 1992, b n chu n SQL-92 ra đ i g i là SQL2. G n đây nh t,ế ả ẩ ờ ọ ầ ấ
chu n SQL-99 (tr c đó g i là SQL3) m r ng SQL2 v i các đ c tr ngẩ ướ ọ ở ộ ớ ặ ư
quan h - đ i t ng và m t s kh năng m i khác. Ngoài ra còn có nhi uệ ố ượ ộ ố ả ớ ề
phiên b n c a SQL đ c các nhà bán các h qu n tr c s d li u s nả ủ ượ ệ ả ị ơ ở ữ ệ ả
xu t. Các phiên b n này có t t c các kh năng c a chu n ANSI nguyênấ ả ấ ả ả ủ ẩ
g c và chúng cũng phù h p v i các m r ng c a SQL cũng nh các tínhố ợ ớ ở ộ ủ ư
ch t c a chu n SQL-99. Trong giáo trình này chúng tôi trình bày d a trênấ ủ ẩ ự
chu n SQL-99. Giáo trình g m ba ch ng:ẩ ồ ươ
Ch ng 1: SQL c b n, trình bày các truy v n c b n trên các b ngươ ơ ả ấ ơ ả ả
c s d li u, các ki u d li u c b n trong SQL và cách t o c s dơ ở ữ ệ ể ữ ệ ơ ả ạ ơ ở ữ
li u đ n gi n trong SQL ệ ơ ả
Ch ng 2: Các ràng bu c và các trigger. Ch ng này trình bày cácươ ộ ươ
lo i ràng bu c: ràng bu c mi n, ràng bu c khóa, ràng bu c toàn v n th cạ ộ ộ ề ộ ộ ẹ ự


th , ràng bu c toàn v n tham chi u, các ràng bu c khác và cách th hi nể ộ ẹ ế ộ ể ệ
chúng trong SQL.
Ch ng 3: L p trình v i SQL, trình bày các ph ng pháp l p trìnhươ ậ ớ ươ ậ
trong SQL: l p trình nhúng, SQL đ ng, các hàm và các th t c PSM, sậ ộ ủ ụ ử
d ng giao di n g i. Ngoài ra, ch ng này còn đ c p đ n v n đ an toànụ ệ ọ ươ ề ậ ế ấ ề
trên c s d li u SQL.ơ ở ữ ệ
Cu i m i ch ng có t ng k t các v n đ trình bày trong ch ng vàố ỗ ươ ổ ế ấ ề ươ
m t s bài t p. Đ hi u đ c giáo trình này b n đ c c n ph i có các ki nộ ố ậ ể ể ượ ạ ọ ầ ả ế
th c v c s d li u quan h . ứ ề ơ ở ữ ệ ệ
Do h n ch v th i gian và kinh nghi m, ch c ch n giáo trình v nạ ế ề ờ ệ ắ ắ ẫ
còn nhi u thi u sót. Mong các b n đ c góp ý, phê bình. Chúng tôi xin c mề ế ạ ọ ả
n tr c và h a s ti p thu đ hoàn thi n giáo trình h n. ơ ướ ứ ẽ ế ể ệ ơ
2
- Tên môn h c: Ngôn ng SQL.ọ ữ
- Mã s môn h c: 3CD3ố ọ
- Th i gian: 45 ti t (lờ ế í thuy t + thế c hành)ự
- M c tiêu: H ng d n h c viên s d ng thành th o ngôn ng truy v nụ ướ ẫ ọ ử ụ ạ ữ ấ
SQL.
- Nh ng ki n th c c n đ c trang b tr c: C s d li u quan h .ữ ế ứ ầ ượ ị ướ ơ ở ữ ệ ệ
- N i dung môn h c:ộ ọ
Ch ng I: ươ C B N V SQL.Ơ Ả Ề
Ch ng II: ươ CÁC RÀNG BU C VÀ TRIGGER.Ộ
Ch ng III: ươ L P TRÌNHẬ
- Đ i t ng h c: Các l p trình viên.ố ượ ọ ậ
- Biên so n: B môn Các h th ng thông tin, Khoa Công ngh thông tin,ạ ộ ệ ố ệ
Tr ng ĐH Công Ngh , ĐHQG Hà N i.ườ ệ ộ
3
L I M Đ UỜ Ở Ầ 2
CH NG I: SQL C B NƯƠ Ơ Ả 8
1.1 CÁC TRUY V N Đ N GI N TRONG SQL.Ấ Ơ Ả 8

1.1.1 Phép chi u trong SQLế 9
1.1.2 Phép ch n trong SQLọ 11
1.1.3 So sánh các xâu 13
1.1.4 Ngày tháng và th i gianờ 14
1.1.5 Các giá tr NULL và các so sánh bao hàm NULL.ị 15
1.1.6 Giá tr lôgic UNKNOWN ị 16
1.1.7 S p th t d li u raắ ứ ự ữ ệ 17
1.1.8 Các hàm thông d ng trong SQLụ 18
1.2 CÁC TRUY V N BAO G M NHI U H N M T QUAN HẤ Ồ Ề Ơ Ộ Ệ 20
1.2.1 Tích và n i trong SQLố 20
1.2.2 Làm rõ nghĩa các thu c tínhộ 21
1.2.3 Các bi n bế ộ 22
1.2.4 Phép h p, phép giao, phép tr c a các truy v nợ ừ ủ ấ 23
1.3 CÁC TRUY V N CONẤ 25
1.3.1 Các truy v n con t o ra các giá tr vô h ng ấ ạ ị ướ 26
1.3.2 Các đi u ki n có bao hàm các quan hề ệ ệ 27
1.3.3 Các đi u ki n có bao hàm các bề ệ ộ 28
1.3.4 Các truy v n con t ng quan v i nhauấ ươ ớ 29
1.3.5 Các truy v n con trong m nh đ FROMấ ệ ề 30
1.3.6 Các bi u th c n i c a SQLể ứ ố ủ 31
1.3.7 N i t nhiên (Natural Join)ố ự 32
1.3.8 N i ngoàiố 33
1.4 CÁC PHÉP TOÁN QUAN H Đ Y ĐỆ Ầ Ủ 34
1.4.1 Lo i b trùng l pạ ỏ ặ 34
1.4.2 Trùng l p trong phép h p, phép giao và phép tr ặ ợ ừ 35
1.4.3 Nhóm và s k t h p trong SQL ự ế ợ 36
1.4.4 Các phép toán nhóm 36
1.4.5 Nhóm 38
1.4.6 Các m nh đ HAVINGệ ề 40
1.5 S A Đ I C S D LI UỬ Ổ Ơ Ở Ữ Ệ 42

1.5.1 Chèn 42
1.5.2 Xóa 44
1.5.3 C p nh tậ ậ 44
1.6 Đ NH NGHĨA M T L C Đ QUAN H TRONG SQLỊ Ộ ƯỢ Ồ Ệ 45
1.6.1 Các ki u d li uể ữ ệ 46
4
1.6.2 Các khai báo b ng đ n gi nả ơ ả 47
1.6.4 Các giá tr ng m đ nhị ầ ị 48
1.6.5 Các ch sỉ ố 49
1.6.6 Nh p môn v vi c l a ch n các ch sậ ề ệ ự ọ ỉ ố 50
1.7 KHUNG NHÌN (VIEW) 51
1.7.1 Khai báo các khung nhìn 51
1.7.2 Truy v n các khung nhìnấ 52
1.7.3 Đ t tên l i các thu c tínhặ ạ ộ 53
1.7.4 S a đ i các khung nhìnử ổ 54
1.7.5 Gi i thích các truy v n có ch a các khung nhìnả ấ ứ 57
1.8 T NG K T CH NG IỔ Ế ƯƠ 60
M T S BÀI T PỘ Ố Ậ 62
CH NG II: CÁC RÀNG BU C VÀ CÁC TRIGGERƯƠ Ộ 66
2.1 KHÓA VÀ KHÓA NGOÀI 67
2.1.1 Mô t khoá chínhả 67
2.1.2 Các khoá đ c mô t v i UNIQUEượ ả ớ 69
2.1.3 Làm có hi u l c các ràng bu c khoáệ ự ộ 69
2.1.4 Mô t các ràng bu c khoá ngoàiả ộ 71
2.1.5 Duy trì toàn v n tham chi uẹ ế 72
2.1.6 Làm ch m vi c ki m tra ràng bu c.ậ ệ ể ộ 75
2.2 CÁC RÀNG BU C TRÊN CÁC THU C TÍNH VÀ CÁC BỘ Ộ Ộ 77
2.2.1 Các ràng bu c Not-Nullộ 77
2.2.2 Các ràng bu c ki m tra (CHECK) d a trên thu c tínhộ ể ự ộ 78
2.2.3 Các ràng bu c ki m tra (CHECK)d a trên b giá tr .ộ ể ự ộ ị 80

2.3 S A Đ I CÁC RÀNG BU CỬ Ổ Ộ 81
2.3.1 Đ t tên cho các ràng bu c ặ ộ 81
2.3.2 S a đ i các ràng bu c trên các b ngử ổ ộ ả 82
2.4 CÁC RÀNG BU C M C L C Đ VÀ CÁC TRIGGERỘ Ứ ƯỢ Ồ 83
2.4.1 Các kh ng đ nh (assertion)ẳ ị 83
So sánh các ràng bu cộ 86
2.4.2 Trigger 87
2.5 T NG K T CH NG IIỔ Ế ƯƠ 94
M T S BÀI T PỘ Ố Ậ 95
CH NG III: L P TRÌNHƯƠ Ậ 98
3.1 SQL TRONG MÔI TR NG L P TRÌNHƯỜ Ậ 98
3.1.1 V n đ tr ng i không phù h p ấ ề ở ạ ợ 99
3.1.2 Giao di n ngôn ng ch /SQLệ ữ ủ 100
3.1.3 Ph n khai báo (DECLARE)ầ 101
3.1.4 S d ng các bi n dùng chung.ử ụ ế 102
3.1.5 Các câu l nh Select đ n hàngệ ơ 104
5
3.1.6 Con trỏ 105
3.1.7 C p nh t b ng con trậ ậ ằ ỏ 109
3.1.8 B o v kh i s c p nh t đ ng th iả ệ ỏ ự ậ ậ ồ ờ 110
3.1.9 Con tr cu n (Scrolling Cursor)ỏ ộ 112
3.1.10 SQL đ ngộ 113
3.2 CÁC TH T C Đ C L U GI (stored procedure) Ủ Ụ ƯỢ Ư Ữ 115
3.2.1 T o các hàm và các th t c PSMạ ủ ụ 116
3.2.2 M t vài d ng câu l nh đ n gi n trong PSMộ ạ ệ ơ ả 118
3.2.3 Các câu l nh r nhánh.ệ ẽ 119
3.2.4 Các truy v n trong PSM ấ 121
3.2.5 Vòng l p trong PSMặ 123
3.2.6 Vòng l p forặ 125
3.2.7 Nh ng câu l nh l p khácữ ệ ặ 126

3.3 MÔI TR NG SQLƯỜ 130
3.3.1 Môi tr ngườ 131
3.3.2 L c đ ượ ồ 132
3.3.4 Client và Server trong môi tr ng SQLườ 135
3.3.5 K t n iế ố 135
3.3.6 Phiên (Session) 136
3.3.7 Modules 137
3.4 S D NG GIAO DI N M C G I (call-level interface)Ử Ụ Ệ Ứ Ọ 138
3.4.1 Nh p môn SQL/CLIậ 138
3.4.2 X lý các l nhử ệ 141
3.4.3 L y d li u ra t k t qu truy v nấ ữ ệ ừ ế ả ấ 143
3.5 GIAO TÁC TRONG SQL 145
3.5.1 X p hàng theo th tế ứ ự 146
3.5.2 Atomicity 148
3.5.3 Giao tác (Transaction) 150
3.5.4 Read-Only Transaction 152
3.5.5 Dirty Read 153
3.5.6 Các m c cô l p khácứ ậ 156
3.6 AN TOÀN VÀ C P QUY N TRONG SQLẤ Ề 158
3.6.1 Các quy nề 158
3.6.2 T o các quy nạ ề 160
3.6.3 Ti n trình ki m tra đ c quy nế ể ặ ề 161
3.6.4 C p các quy nấ ề 163
3.6.5 Bi u đ grantể ồ 165
3.6.6 H y b các quy nủ ỏ ề 165
3.7 T NG K T CH NG IIIỔ Ế ƯƠ 171
6
7
CH NG I: ƯƠ SQL C B NƠ Ả
Gi ng nh các ngôn ng b c cao khác, ngôn ng SQL đ c xây d ngố ư ữ ậ ữ ượ ự

d a trên các ch cái, các ch s , các ký t (d u phép toán, d u ngăn, d uự ữ ữ ố ự ấ ấ ấ
cách và các ký t đ c bi t) và m t t p các t khóa. M t l nh c a SQL cóự ặ ệ ộ ậ ừ ộ ệ ủ
th đ c vi t trên m t dòng ho c nhi u dòng, k t thúc b ng d u ch mể ượ ế ộ ặ ề ế ằ ấ ấ
ph y “;”. ả
Ngôn ng SQL đ c chia thành ba nhóm:ữ ượ
- Ngôn ng đ nh nghĩa d li u dùng đ mô t c u trúc c a c s dữ ị ữ ệ ể ả ấ ủ ơ ở ữ
li u (các b ng, các khung nhìn, các thu c tính, các ch m c, )ệ ả ộ ỉ ụ
- Ngôn ng thao tác d li u cho phép th c hi n các thao tác trên c sữ ữ ệ ự ệ ơ ở
d li u nh c p nh t c s d li u và truy v n l y ra các thông tinữ ệ ư ậ ậ ơ ở ữ ệ ấ ấ
t c s d li u.ừ ơ ở ữ ệ
- Ngôn ng ki m soát d li u bao g m các l nh dùng đ qu n lý cácữ ể ữ ệ ồ ệ ể ả
giao tác, các quy n truy c p d li u, k t n i v i server ề ậ ữ ệ ế ố ớ
Ngôn ng SQL có th s d ng theo hai ki u: ki u tr c ti p và l p trình.ữ ể ử ụ ể ể ự ế ậ
SQL tr c ti p cho phép th c hi n m t truy v n và nh n đ c k t quự ế ự ệ ộ ấ ậ ượ ế ả
ngay t c kh c. SQL l p trình cho phép s d ng SQL trong m t ch ngứ ắ ậ ử ụ ộ ươ
trình vi t b ng ngôn ng ngôn ng l p trình b c cao khác (C, Pascal, ),ế ằ ữ ữ ậ ậ
ho c vi t các ch ng trình con. ặ ế ươ
Trong ch ng này chúng ta s làm quen v i các l nh c b n c a SQL.ươ ẽ ớ ệ ơ ả ủ
Các l nh này đ c minh h a d a trên m t c s d li u “CÔNGTY” choệ ượ ọ ự ộ ơ ở ữ ệ
ph n PH L C c a giáo trình. ở ầ Ụ Ụ ủ
1.1 CÁC TRUY V N Đ N GI N TRONG SQL.Ấ Ơ Ả
Gi s chúng ta mu n đ a ra các nhân viên c a đ n v có Mãs ĐV = 5,ả ử ố ư ủ ơ ị ố
chúng ta vi t trong SQL nh sauế ư
SELECT *
FROM NHÂNVIÊN
WHERE Mãs ĐV = 5 ;ố
Truy v n này trình bày d ng đ c tr ng ấ ạ ặ ư select-from-where c a h u h tủ ầ ế
các truy v n SQL. ấ
• M nh đ FROM cho quan h ho c các quan h mà truy v n thamệ ề ệ ặ ệ ấ
chi u đ n. Trong ví d trên, quan h đó là NHÂNVIÊN.ế ế ụ ệ

8
• M nh đ WHERE là m t đi u ki n, gi ng nh đi u ki n ch nệ ề ộ ề ệ ố ư ề ệ ọ
trong đ i s quan h . Các b ph i tho mãn đi u ki n ch n đạ ố ệ ộ ả ả ề ệ ọ ể
phù h p v i truy v n. Đi u ki n đây là thu c tính Mãs ĐV c aợ ớ ấ ề ệ ở ộ ố ủ
b ph i có giá tr 5. T t c các b đáp ng đi u ki n đó s thoộ ả ị ấ ả ộ ứ ề ệ ẽ ả
mãn đi u ki n ch n.ề ệ ọ
• M nh đ SELECT nói các thu c tính nào c a các b đáp ng đi uệ ề ộ ủ ộ ứ ề
ki n s đ c đ a ra nh m t ph n c a câu tr l i. D u * trong víệ ẽ ượ ư ư ộ ầ ủ ả ờ ấ
d này ch ra r ng t t c các thu c tính c a b s đ c đ a ra.ụ ỉ ằ ấ ả ộ ủ ộ ẽ ượ ư
K t qu c a truy v n là m t quan h ch a t t c các b do ti nế ả ủ ấ ộ ệ ứ ấ ả ộ ế
trình này s n xu t ra.ả ấ
M t cách gi i thích truy v n này là xem xét t ng b giá tr c a quan hộ ả ấ ừ ộ ị ủ ệ
đ c k ra trong m nh đ FROM. Đi u ki n trong m nh đ WHEREượ ể ệ ề ề ệ ệ ề
đ c áp d ng cho b . Chính xác h n, các thu c tính đ c k ra trongượ ụ ộ ơ ộ ượ ể
m nh đ WHERE đ c thay th b ng các giá tr c a thu c tính đó trongệ ề ượ ế ằ ị ủ ộ ở
b . Sau đó, đi u ki n đ c tính, và n u đúng thì các thành ph n xu t hi nộ ề ệ ượ ế ầ ấ ệ
trong m nh đ SELECT đ c s n xu t ra nh là m t b c a câu tr l i. ệ ề ượ ả ấ ư ộ ộ ủ ả ờ
1.1.1 Phép chi u trong SQLế
a) Chúng ta có th chi u m t quan h do m t truy v n SQL s n xu t raể ế ộ ệ ộ ấ ả ấ
lên trên m t s thu c tính c a nó. Đ làm đi u đó, v trí c a d u * trongộ ố ộ ủ ể ề ở ị ủ ấ
m nh đ SELECT ta li t kê ra m t s thu c tính c a quan h đ c ch raệ ề ệ ộ ố ộ ủ ệ ượ ỉ
trong m nh đ FROM. K t qu s đ c chi u lên các thu c tính đ cệ ề ế ả ẽ ượ ế ộ ượ
li t kê.ệ
Ví d 1ụ : Đ a ra H đ m và Tên c a các nhân viên đ n v có mã sư ọ ệ ủ ở ơ ị ố
b ng 5. Chúng ta có th vi t:ằ ể ế
SELECT H đ m, Tênọ ệ
FROM NHÂNVIÊN
WHERE Mãs ĐV =5;ố
K t qu là m t b ng có hai c t, có tên là H đ m và Tên. Các b c aế ả ộ ả ộ ọ ệ ộ ủ
b ng này là các c p, m i c p g m H đ m và Tên c a nhân viên, đó là cácả ặ ỗ ặ ồ ọ ệ ủ

nhân viên c a đ n v có mã s b ng 5. B ng k t qu có d ng nh sau:ủ ơ ị ố ằ ả ế ả ạ ư
9
H đ mọ ệ Tên
Lê Vân
Tr n Đ c Namầ ứ
Nguy n S nễ ơ
Vũ H ng Giangươ
b) Đôi khi chúng ta mu n t o ra m t quan h v i đ u c t khác v i cácố ạ ộ ệ ớ ầ ộ ớ
thu c tính c a quan h đ c k ra trong m nh đ FROM. Chúng ta có thộ ủ ệ ượ ể ệ ề ể
vi t sau tên c a thu c tính m t t khoá AS và m t bí danh (alias), bí danhế ủ ộ ộ ừ ộ
đó s tr thành đ u c t c a quan h k t qu . T khoá AS là tuỳ ch n,ẽ ở ầ ộ ủ ệ ế ả ừ ọ
nghĩa là có th vi t bí danh đi ngay sau tên thu c tính mà không c n ph iể ế ộ ầ ả
có t khoá AS.ừ
Ví d 2:ụ Ta có th s a đ i ví d 1 trên đ đ a ra m t quan h có cácể ử ổ ụ ở ể ư ộ ệ
thu c tính H nhânviên và Tênnhânviên thay cho v trí c a H đ m và Tênộ ọ ị ủ ọ ệ
nh sau:ư
SELECT H đ m AS H nhânviên, Tên AS Tênnhânviênọ ệ ọ
FROM NHÂNVIÊN
WHERE Mãs ĐV = 5 ;ố
B ng k t qu có d ng nh sau:ả ế ả ạ ư
H nhânviênọ Tên nhânviên
Lê Vân
Tr n Đ c Namầ ứ
Nguy n S nễ ơ
Vũ H ng Giangươ
c) M t tuỳ ch n khác trong m nh đ SELECT s d ng m t bi u th c ộ ọ ệ ề ử ụ ộ ể ứ ở
v trí c a m t thu c tính. ị ủ ộ ộ
Ví d 3ụ : Chúng ta mu n đ a ra H đ m, Tên và l ng sau khi đã đ cố ư ọ ệ ươ ượ
tăng 10% c a các nhân viên đ n v có mã s b ng 5. Ta vi t: ủ ở ơ ị ố ằ ế
SELECT H đ m, Tên, L ng*1.1 AS L ngm iọ ệ ươ ươ ớ

FROM NHÂNVIÊN
WHERE Mãs ĐV =5;ố
10
K t qu ế ả H đ mọ ệ Tên L ngm iươ ớ
Lê Vân 3300
Tr n Đ c Nam 4400 ầ ứ
Nguy n S n 4180ễ ơ
Vũ H ng Giang 2750ươ
d) Chúng ta cũng có th cho phép m t h ng nh là m t bi u th c trongể ộ ằ ư ộ ể ứ
m nh đ SELECT. ệ ề
Ví d 4:ụ Ta mu n đ a thêm t ‘ngàn đ ng’ vào sau giá tr c a l ng, taố ư ừ ồ ị ủ ươ
vi t: ế
SELECT H đ m, Tên, L ng*1.1 AS L ngm i, ‘ngàn đ ng’ AS Đ nv tínhọ ệ ươ ươ ớ ồ ơ ị
FROM NHÂNVIÊN
WHERE Mãs ĐV =5;ố
K t qu ế ả H đ mọ ệ Tên L ngm iươ ớ Đ nv tínhơ ị
Lê Vân 3300 ngàn đ ngồ
Tr n Đ c Nam 4400 ngàn đ ngầ ứ ồ
Nguy n S n 4180 ngàn đ ngễ ơ ồ
Vũ H ng Giang 2750 ngàn đ ngươ ồ
Chúng ta đã s p x p m t c t có tên là Đ nv tính và m i b trong câu trắ ế ộ ộ ơ ị ỗ ộ ả
l i s có h ng ‘ngàn đ ng’ c t th t . ờ ẽ ằ ồ ở ộ ứ ư
1.1.2 Phép ch n trong SQLọ
Phép toán ch n c a đ i s quan h và nhi u th n a s n có trong m nhọ ủ ạ ố ệ ề ứ ữ ẵ ệ
đ WHERE c a SQL. Các bi u th c đi sau WHERE bao g m các bi uề ủ ể ứ ồ ể
th c đi u ki n gi ng nh các bi u th c đi u ki n trong các ngôn ng l pứ ề ệ ố ư ể ứ ề ệ ữ ậ
trình. Chúng ta có th xây d ng các đi u ki n b ng cách so sánh các giá trể ự ề ệ ằ ị
s d ng sáu phép toán so sánh =, <>, <, >, <=, >=. Các giá tr có th đ cử ụ ị ể ượ
so sánh bao g m các h ng và các thu c tính c a các quan h đ c k raồ ằ ộ ủ ệ ượ ể
sau FROM. Chúng ta cũng có th áp d ng các phép toán s h c thôngể ụ ố ọ

th ng nh +, -, *, / đ i v i các giá tr s tr c khi chúng ta so sánh chúngườ ư ố ớ ị ố ướ
và áp d ng phép n i || đ i v i các xâu. M t ví d v phép so sánh là ụ ố ố ớ ộ ụ ề
Mãs ĐV = 5 ố
11
trong các ví d trên. Thu c tính Mãs ĐV đ c ki m tra xem cóỞ ụ ở ộ ố ượ ể
b ng h ng 5 hay không. H ng này là m t giá tr s . Các h ng s , nh cácằ ằ ằ ộ ị ố ằ ố ư
s nguyên và s th c đ c s d ng và đ c ghi nh cách thông th ngố ố ự ượ ử ụ ượ ư ườ
trong các ngôn ng l p trình. Ngoài các h ng s còn có các h ng xâu. Cácữ ậ ằ ố ằ
xâu trong SQL đ c ghi b ng cách đ t chúng và trong c p d u nháy đ n,ượ ằ ặ ặ ấ ơ
ví d , ‘Hà n i’. ụ ộ
K t qu c a m t phép so sánh là m t giá tr lô gic TRUE ho c FALSE.ế ả ủ ộ ộ ị ặ
Các giá tr lô gic có th đ c k t h p b ng các phép toán logic AND, OR,ị ể ượ ế ợ ằ
NOT v i các ý nghĩa c a chúng. ớ ủ
Ví d 5ụ : Truy v n sau đây h i v H đ m, Tên và Gi itính c a các nhânấ ỏ ề ọ ệ ớ ủ
viên đ n v có mã s b ng 5 và Gi itính = ‘Nam’ ở ơ ị ố ằ ớ
SELECT H đ m, Tên, Gi itínhọ ệ ớ
FROM NHÂNVIÊN
WHERE (Mãs ĐV =5) AND (Gi itính = ‘Nam’);ố ớ
K t qu ế ả H đ mọ ệ Tên Gi itínhớ
Lê Vân Nam
Tr n Đ c Nam Namầ ứ
Nguy n S n Namễ ơ
Trong đi u ki n này, chúng ta có AND c a hai giá tr logic. Các giá tr đóề ệ ủ ị ị
là các phép so sánh bình th ng. Ti p theo, ta xét ví d sau: ườ ế ụ
SELECT H đ m, Tênọ ệ
FROM NHÂNVIÊN
WHERE (Mãs ĐV =5) AND (Gi itính = ‘N ’ OR L ng <= 3000);ố ớ ữ ươ
H đ mọ ệ Tên
Lê Vân
Vũ H ng Giangươ

Truy v n này đòi h i các nhân viên ho c là n ho c có l ng nh h nấ ỏ ặ ữ ặ ươ ỏ ơ
ho c b ng 3000. Chú ý r ng các phép so sánh có th nhóm l i b ng vi cặ ằ ằ ể ạ ằ ệ
s d ng các d u ngo c đ n. Các d u ngo c là c n thi t b i vì th t uử ụ ấ ặ ơ ấ ặ ầ ế ở ứ ự ư
tiên c a các phép toán lô gic trong SQL là gi ng nh trong các ngôn ngủ ố ư ữ
12
l p trình, AND có th t cao h n OR, NOT có th t cao h n c AND vàậ ứ ự ơ ứ ự ơ ả
OR.
1.1.3 So sánh các xâu
Hai xâu là b ng nhau n u chúng là cùng m t dãy ký t . SQL cho phép cácằ ế ộ ự
mô t các ki u xâu khác nhau, ví d , các m ng ký t có đ dài c đ nh vàả ể ụ ả ự ộ ố ị
các danh sách ký t có đ dài thay đ i. ự ộ ổ
Khi chúng ta so sánh các xâu b ng m t trong các phép toán “nh h n” nhằ ộ ỏ ơ ư
là < ho c >=, chúng ta đang h i xem có ph i xâu này đi tr c xâu kia trongặ ỏ ả ướ
th t t đi n. Nh v y, n u aứ ự ừ ể ư ậ ế
1
a
2
…a
n
và b
1
b
2
…b
m
là hai xâu, thì xâu thứ
nh t là “nh h n” xâu th hai n u ho c aấ ỏ ơ ứ ế ặ
1
< b
1

, ho c n u aặ ế
1
= b
1
và a
2
<
b
2
, ho c aặ
1
= b
1
, a
2
= b
2
và a
3
< b3 …Ta cũng nói r ng aằ
1
a
2
…a
n
< b
1
b
2
…b

m
n u n<m và aế
1
a
2
…a
n
= b
1
b
2…
b
n
, nghĩa là xâu th nh t là m t ti n t đúngứ ấ ộ ề ố
c a xâu th hai. Ví d ‘na’ < ‘nam’. ủ ứ ụ
SQL cũng cung c p kh năng đ so sánh các xâu trên c s m t m u đ iấ ả ể ơ ở ộ ẫ ố
chi u đ n gi n. M t d ng l a chon c a bi u th c logic làế ơ ả ộ ạ ự ủ ể ứ
s LIKE p
trong đó s là m t xâu và p là m t m u đ i chi u. M t m u đ i chi u làộ ộ ẫ ố ế ộ ẫ ố ế
m t xâu có s d ng hai ký t đ c bi t % và _. Các ký t thông th ngộ ử ụ ự ặ ệ ự ườ
trong p ch đ i sánh đ c v i chính chúng trong s, nh ng % có th đ iỉ ố ượ ớ ở ư ể ố
sánh v i m t dãy có 0 ho c nhi u h n các ký t trong s, và _ đ i sánh v iớ ộ ặ ề ơ ự ố ớ
b t kỳ ký t nào trong s. Giá tr c a bi u th c này là đúng khi và ch khiấ ự ị ủ ể ứ ỉ
xâu s h p v i m u p. M t cách t ng t , s NOT LIKE p là đúng khi và chợ ớ ẫ ộ ươ ự ỉ
khi xâu s không h p v i m u p. ợ ớ ẫ
Ví d 6: ụ
SELECT Tên
FROM NHÂNVIÊN
WHERE Tên LIKE ‘N_ _’ ;
Truy v n này đòi h i thu c tính Tên có giá tr g m 3 ký t , ký t đ u tiênấ ỏ ộ ị ồ ự ự ầ

là N và sau đó là m t dãy nào đó g m hai ký t . K t qu c a truy v n nàyộ ồ ự ế ả ủ ấ
là m t t p các tên nhân viên thích h p, ch ng h n nh Nam, Núi, ộ ậ ợ ẳ ạ ư
13
Ví d 7:ụ Chúng ta hãy tìm tên c a các nhân viên có ch a ch a. Ta có truyủ ứ ữ
v n sau: ấ
SELECT Tên
FROM NHÂNVIÊN
WHERE Tên LIKE ‘%a%’;
K t qu c a truy v n này là m t t p các tên nhân viên tho mãn đi uế ả ủ ấ ộ ậ ả ề
ki n ch n, ch ng h n nh Nam, Thanh, Hoa.ệ ọ ẳ ạ ư
1.1.4 Ngày tháng và th i gianờ
Các th hi n c a SQL nói chung h tr ngày tháng và th i gian nhể ệ ủ ỗ ợ ờ ư
nh ng ki u d li u đ c bi t. Các giá tr này th ng trình bày đ c trongữ ể ữ ệ ặ ệ ị ườ ượ
nhi u d ng khác nhau nh 14/5/1948 ho c 14-05-48. đây chúng ta sề ạ ư ặ Ở ẽ
ch mô t cách ghi chu n c a SQL.ỉ ả ẩ ủ
M t h ng ngày tháng đ c bi u di n b ng t khoá DATE sau đó là m tộ ằ ượ ể ễ ằ ừ ộ
xâu có d ng đ c bi t đ bên trong c p d u nháy đ n. Ví d : DATE’1948-ạ ặ ệ ể ặ ấ ơ ụ
05-14’. B n ký t đ u là các ch s bi u di n năm, sau đó là d u -, hai kýố ự ầ ữ ố ể ễ ấ
t ti p theo là các ch s bi u di n tháng, ti p theo là d u - và cu i cùngự ế ữ ố ể ễ ế ấ ố
là hai ký t s bi u di n ngày. ự ố ể ễ
M t h ng th i gian đ c bi u di n t ng t b ng t khoá TIME và m tộ ằ ờ ượ ể ễ ươ ự ằ ừ ộ
xâu đ c đ t trong c p d u nháy đ n. Xâu này có hai ch s cho gi trênượ ặ ặ ấ ơ ữ ố ờ
đ ng h quân s (24 gi ), sau đó là d u hai ch m, hai ch s cho phút,ồ ồ ự ờ ấ ấ ữ ố
m t d u hai ch m n a và hai ch s cho giây. N u ph n l c a giây làộ ấ ấ ữ ữ ố ế ầ ẻ ủ
c n thi t, chúng ta có th ti p t c v i m t d u ch m và m t s các chầ ế ể ế ụ ớ ộ ấ ấ ộ ố ữ
s có nghĩa. Ví d , TIME’15:00:02.5’ bi u di n th i gian 15 gi khôngố ụ ể ễ ờ ờ
phút hai giây 5 ph n m i. Th i gian còn có th đ c bi u di n theoầ ườ ờ ể ượ ể ễ
nhi u cách khác n a. ề ữ
Đ k t h p ngày tháng và th i gian chúng ta s d ng m t giá tr ki uể ế ợ ờ ử ụ ộ ị ể
TIMESTAMP. Các giá tr này g m m t t khoá TIMESTAMP, m t giá trị ồ ộ ừ ộ ị

ngày tháng, m t kho ng cách và m t giá tr th i gian. Ví d ,ộ ả ộ ị ờ ụ
TIMESTAMP’1948-05-14 12:00:00’ bi u di n 12 gi tr a ngày 14 tháng 5ể ễ ờ ư
năm 1948.
14
Chúng ta có th so sánh ngày tháng và th i gian b ng cách s d ng cácể ờ ằ ử ụ
phép toán so sánh gi ng nh đ i v i các s ho c các xâu. Nh v y, d u <ố ư ố ớ ố ặ ư ậ ấ
trên ngày tháng ch ng t ngày tháng th nh t s m h n ngày tháng th hai,ứ ỏ ứ ấ ớ ơ ứ
còn d u < trên th i gian ch ng t th i gian th nh t s m h n th i gianấ ờ ứ ỏ ờ ứ ấ ớ ơ ờ
th hai. ứ
1.1.5 Các giá tr NULL và các so sánh bao hàm NULL.ị
SQL cho phép các thu c tính có giá tr đ c bi t NULL, đ c g i là giá trộ ị ặ ệ ượ ọ ị
null. M t thu c tính có giá tr null khi không bi t giá tr c a nó ho c khiộ ộ ị ế ị ủ ặ
giá tr là không áp d ng đ c ho c giá tr b gi u. ị ụ ượ ặ ị ị ấ
Trong m nh đ WHERE, chúng ta có th đ c chu n b cho kh năngệ ề ể ượ ẩ ị ả
m t thành ph n c a m t b nào đó là null. Có hai quy t c quan tr ng c nộ ầ ủ ộ ộ ắ ọ ầ
ph i nh khi chúng ta làm phép toán trên các giá tr null.ả ớ ị
1.Khi chúng ta làm phép toán m t giá tr null và m t giá tr nào đó, baoộ ị ộ ị
g m c giá tr null khác, b ng vi c s d ng m t phép toán s h c nh là *ồ ả ị ằ ệ ử ụ ộ ố ọ ư
ho c +, k t qu phép toán là null.ặ ế ả
2.Khi chúng ta so sánh m t giá tr null và m t giá tr khác, bao hàm c giáộ ị ộ ị ả
tr null khác, b ng cách s d ng các phép so sánh nh là = ho c >, k t quị ằ ử ụ ư ặ ế ả
phép so sánh là UNKNOWN. Giá tr UNKNOWN là m t giá tr lô gic khác,ị ộ ị
gi ng nh TRUE và FALSE. ố ư
Chúng ta ph i nh r ng m c dù NULL là m t giá tr có th xu t hi nả ớ ằ ặ ộ ị ể ấ ệ
trong các b nh ng nó không ph i là m t h ng. Nh v y, trong khi cácộ ư ả ộ ằ ư ậ
quy t c trên áp d ng khi chúng ta c g ng làm phép toán trên m t bi uắ ở ụ ố ắ ộ ể
th c mà giá tr c a nó là NULL, chúng ta không th dùng NULL m t cáchứ ị ủ ể ộ
rõ nh là m t toán h ng. ư ộ ạ
Ví d 8ụ : Gi s x có giá tr null. Khi đó giá tr c a x+3 cũng là null. Tuyả ử ị ị ủ
nhiên null+3 không ph i là m t bi u th c SQL h p l . T ng t , giá trả ộ ể ứ ợ ệ ươ ự ị

c a x = 3 là UNKNOWN b i vì chúng ta không th nói r ng giá tr c a xủ ở ể ằ ị ủ
(m t giá tr NULL) là b ng 3. Tuy nhiên, phép so sánh NULL = 3 khôngộ ị ằ
ph i là phép so sánh SQL đúng.ả
Cách đúng đ n đ h i xem x có giá tr null hay không là dùng bi u th cắ ể ỏ ị ể ứ
x IS NULL. Bi u th c này có giá tr TRUE n u x có giá tr NULL và nó cóể ứ ị ế ị
15
giá tr FALSE trong tr ng h p ng c l i. M t cách t ng t , x IS NOTị ườ ợ ượ ạ ộ ươ ự
NULL có giá tr TRUE tr khi giá tr c a x là NULL. Trong m t s phiênị ừ ị ủ ộ ố
b n c a SQL, tr c khi th c hi n các phép toán v i các giá tr null, ng iả ủ ướ ự ệ ớ ị ườ
ta s d ng các hàm chuy n đ i giá tr null thành ra giá tr 0 (n u toán h ngử ụ ể ổ ị ị ế ạ
t ng ng có ki u s ) ho c thành m t xâu r ng ‘ ’ n u toán h ng t ngươ ứ ể ố ặ ộ ỗ ế ạ ươ
ng là ki u ký t . ứ ể ự
1.1.6 Giá tr lôgic UNKNOWN ị
trên, chúng ta gi thi t r ng k t qu c a m t phép so sánh ho c làỞ ả ế ằ ế ả ủ ộ ặ
TRUE ho c là FALSE, và các giá tr lôgic này đ c k t h p m t cách rõặ ị ượ ế ợ ộ
ràng b ng vi c s d ng các phép toán AND, OR, NOT. Khi xu t hi n giáằ ệ ử ụ ấ ệ
tr NULL, các phép so sánh có th cho m t giá tr lô gic th baị ể ộ ị ứ
UNKNOWN. Bây gi chúng ta ph i bi t các phép toán logic đ i x nhờ ả ế ố ử ư
th nào trên các t h p c a ba giá tr logic này. Chúng ta có th nghĩ đ nế ổ ợ ủ ị ể ế
TRUE nh là 1, FALSE nh là 0, UNKNOWN nh là 1/2. Khi đó:ư ư ư
1.AND c a hai giá tr lôgic là min c a các giá tr đó. Nh v y, x AND y làủ ị ủ ị ư ậ
FALSE n u x ho c y là FALSE, là UNKNOWN n u x và y không làế ặ ế
FALSE nh ng ít nh t có m t giá tr là UNKNOWN và là TRUE khi c xư ấ ộ ị ả
và y là TRUE.
2.OR c a hai giá tr lôgic là max c a các giá tr đó. Nh v y x OR y làủ ị ủ ị ư ậ
TRUE n u x ho c y là TRUE, là UNKNOWN n u x và y không là TRUEế ặ ế
nh ng có ít nh t là m t giá tr UNKNOWN và có giá tr FALSE n u c xư ấ ộ ị ị ế ả
và y đ u FALSE.ề
3. Ph đ nh c a giá tr lôgic v là 1-v. Nh v y, NOT x có giá tr TRUE khiủ ị ủ ị ư ậ ị
x là FALSE, có giá tr FALSE khi x là TRUE và có giá tr UNKNOWN khiị ị

x là UNKNOWN. B ng d i đây t ng k t các phép toán lôgic trên các giáả ướ ổ ế
tr lôgic:ị

x y x AND y x OR y NOT x
TRUE TRUE TRUE TRUE FALSE
TRUE UNKNOWN UNKNOWN TRUE FALSE
TRUE FALSE FALSE TRUE FALSE
UNKNOWN TRUE UNKNOWN TRUE UNKNOWN
16
UNKNOWN UNKNOWN UNKNOWN UNKNOWN UNKNOWN
UNKNOWN FALSE FALSE UNKNOWN UNKNOWN
FALSE TRUE FALSE TRUE TRUE
FALSE UNKNOWN FALSE UNKNOWN TRUE
FALSE FALSE FALSE FALSE TRUE
Hình 1: B ng chân tr cho logic ba giá trả ị ị
Các đi u ki n SQL nh xu t hi n trong các m nh đ WHERE c a cácề ệ ư ấ ệ ệ ề ủ
l nh ệ select-from-where, áp d ng cho m i b trong m t quan h nào đ y,ụ ỗ ộ ộ ệ ấ
và v i m i b , m t trong ba giá tr TRUE, FALSE, ho c UNKNOWNớ ỗ ộ ộ ị ặ
đ c sinh ra. Tuy nhiên, ch có các b mà đ i v i nó đi u ki n có giá trượ ỉ ộ ố ớ ề ệ ị
TRUE s tr thành m t ph n c a câu tr l i; các b có UNKNOWN ho cẽ ở ộ ầ ủ ả ờ ộ ặ
FALSE nh là giá tr s b lo i ra kh i câu tr l i.ư ị ẽ ị ạ ỏ ả ờ
Ví d 9:ụ Gi s chúng ta có truy v n trên đây trên quan hả ử ấ ệ
NHÂNVIÊN_D ÁNỰ
SELECT *
FROM NHÂNVIÊN_D ÁNỰ
WHERE S gi <=12 OR S gi > 12 ;ố ờ ố ờ
M t cách tr c quan, chúng ta mong đ i nh n đ c m t b n sao c a quanộ ự ợ ậ ượ ộ ả ủ
h NHÂNVIÊN_D ÁN, b i vì m i nhân viên có th làm vi c cho m t dệ Ự ở ỗ ể ệ ộ ự
án ít h n ho c b ng 12 gi ho c nhi u h n 12 gi . Tuy nhiên, gi s r ngơ ặ ằ ờ ặ ề ơ ờ ả ử ằ
có các b c a NHÂNVIÊN_D ÁN có giá tr NULL trong thành ph nộ ủ Ự ị ầ

S gi . Khi đó c hai phép so sánh S gi <= 12 và S gi >12 đ c tính làố ờ ả ố ờ ố ờ ượ
UNKNOWN. OR c a hai UNKNOWN là UNKNOWN. Nh v y, v i m iủ ư ậ ớ ọ
b có m t NULL trong thành ph n S gi , m nh đ WHERE đ c tính làộ ộ ầ ố ờ ệ ề ượ
UNKNOWN. M t b nh v y không đ c tr l i nh m t ph n c a câuộ ộ ư ậ ượ ả ạ ư ộ ầ ủ
tr l i cho truy v n. K t qu đ c đ a ra theo ý nghĩa đúng đ n c a truyả ờ ấ ế ả ượ ư ắ ủ
v n là “tìm t t c các b NHÂNVIÊN_D ÁN có S gi không NULL”. ấ ấ ả ộ Ự ố ờ
1.1.7 S p th t d li u raắ ứ ự ữ ệ
Chúng ta có th yêu c u r ng các b đ c m t truy v n t o ra s đ cể ầ ằ ộ ượ ộ ấ ạ ẽ ượ
bi u di n trong m t th t s p x p. Th t có th d a trên giá tr c aể ễ ộ ứ ự ắ ế ứ ự ể ự ị ủ
m t thu c tính nào đó, k t h p v i giá tr c a thu c tính th hai, …. Độ ộ ế ợ ớ ị ủ ộ ứ ể
17
nh n đ c d li u ra theo m t th t s p x p, chúng ta thêm vào l nhậ ượ ữ ệ ộ ứ ự ắ ế ệ
select-from-where m t m nh đ ộ ệ ề
ORDER BY < danh sách các thu c tính >ộ
Th t đ c ng m đ nh là tăng d n nh ng chúng ta có th nh n d li uứ ự ượ ầ ị ầ ư ể ậ ữ ệ
ra theo th t gi m d n b ng cách thêm vào t khoá DESC. T ng t ,ứ ự ả ầ ằ ừ ươ ự
chúng ta có th ch ra th t tăng d n b ng cách thêm vào t khoá ASCể ỉ ứ ự ầ ằ ừ
(tùy ch n).ọ
Ví d 10ụ : Đ nh n đ c các H đêm, Tên theo th t tăng d n c a Tênể ậ ượ ọ ứ ự ầ ủ
c a t t c các nhân viên trong đ n v có mã s b ng 5, ta có truy v n sau:ủ ấ ả ơ ị ố ằ ấ
SELECT H đ m, Tênọ ệ
FROM NHÂNVIÊN
WHERE Mãs ĐV = 5ố
ORDER BY Tên ;
1.1.8 Các hàm thông d ng trong SQLụ
Trong SQL có m t s các hàm xây d ng s n. Sau đây là m t s hàmộ ố ự ẵ ộ ố
thông d ng.ụ
1) Các hàm nhóm:
Hàm AVG tr v giá tr trung bình c a c t. Ví d :ả ề ị ủ ộ ụ
SELECT AVG(L ng)ươ

FROM NHÂNVIÊN;
Hàm MIN tr v giá tr nh nh t c a c t. Ví d :ả ề ị ỏ ấ ủ ộ ụ
SELECT MIN(L ng)ươ
FROM NHÂNVIÊN ;
Hàm MAX tr v giá tr l n nh t c a c t. Ví d :ả ề ị ớ ấ ủ ộ ụ
SELECT MAX(L ng)ươ
FROM NHÂNVIÊN ;
Hàm SUM tr v t ng các giá tr c a c t. Ví d :ả ề ổ ị ủ ộ ụ
SELECT SUM(L ng)ươ
FROM NHÂNVIÊN ;
Hàm COUNT tr v s l ng các b n ghi. Ví d :ả ề ố ượ ả ụ
18
SELECT COUNT(*)
FROM NHÂNVIÊN ;
Vi c s d ng các hàm này trong các phép toán nhóm s nói đ n trongệ ử ụ ẽ ế
các ph n sau. ầ
2) Các hàm x lý các chu i ký tử ỗ ự
Hàm ASCI I, tr v giá tr mã ASCII c a ký t bên trái chu i. Ví d :ả ề ị ủ ự ỗ ụ
Print ASCII (‘Tôi’); tr v k t qu 84 (mã ASCII c a T).ả ề ế ả ủ
Hàm CHAR, chuy n đ i mã ASCII sang ký t . Ví d :ể ổ ự ụ
Print CHAR(35) ; tr v k t qu ký t #ả ề ế ả ự
Hàm UPPER, chuy n đ i chu i sang ki u ch hoa. Ví d :ể ổ ỗ ể ữ ụ
Print UPPER(‘Nam’); tr v k t qu NAMả ề ế ả
Hàm LOWER, chuy n đ i chu i sang ki u ch th ng. Ví d :ể ổ ỗ ể ữ ườ ụ
Print LOWER(‘NAM’) ; tr v k t qu namả ề ế ả
Hàm LEN, tr v đ dài c a chu i. Ví d :ả ề ộ ủ ỗ ụ
Print LEN(‘NAM’) ; tr v k t qu 3.ả ề ế ả
Hàm LTRIM, lo i b các kho ng tr ng bên trái c a chu i. Ví d :ạ ỏ ả ố ủ ỗ ụ
Print LTRIM(‘ NAM’) ; tr v k t qu ‘NAM’.ả ề ế ả
Hàm RTRIM, lo i b các kho ng tr ng bên ph i c a chu i. Ví d :ạ ỏ ả ố ả ủ ỗ ụ

Print RTRIM(‘NAM ’) ; tr v k t qu ‘NAM’.ả ề ế ả
Hàm LEFT(chu i,n) tr v n ký t bên trái c a chu i. Ví dỗ ả ề ự ủ ỗ ụ
Print LEFT(‘NAM’, 2) ; tr v k t qu ‘NA’.ả ề ế ả
Hàm RIGHT(chu i,n) tr v n ký t bên ph i c a chu i. Ví dỗ ả ề ự ả ủ ỗ ụ
Print LEFT(‘NAM’, 1) ; tr v k t qu ‘AM’.ả ề ế ả
Hàm CHARINDEX (chu i1, chu i2) tr v v tr b t đ u c a chu i 1ỗ ỗ ả ề ị ị ắ ầ ủ ỗ
trong chu i 2. Ví d :ỗ ụ
CHARINDEX(‘Tâm’,‘H u Tâm’) tr v k t qu 4.ữ ả ề ế ả
3) Các hàm th i gianờ
Hàm GETDATE() tr v ngày tháng năm c a h th ng.ả ề ủ ệ ố
Ví d SELECT GETDATE() tr v k t qu : 2004-10-17ụ ả ề ế ả
14:25:36.234
19
Hàm DATEPART() tr v m t ph n c a m t chu i d ng ngày thángả ề ộ ầ ủ ộ ỗ ạ
đ y đ ầ ủ
DATEPART(d,GETDATE()), tr v ngàyả ề
DATEPART(m,GETDATE()), tr v thángả ề
DATEPART(yy,GETDATE()), tr v năm ….Các tham s d,m,yy làả ề ố
đ nh d ng ngày, tháng, năm, …ị ạ
Hàm DATEDIFF (đ nh d ng, Ngàytr c, Ngàysau) hi u s gi a Ngàyị ạ ướ ệ ố ữ
sau và
Ngàytr cướ
Hàm DAY tr v ngày, Hàm MONTH tr v tháng, Hàm YEAR trả ề ả ề ả
v nămề
4) Các hàm toán h c ọ
Hàm SQUARE tr v bình ph ng c a m t bi u th c.ả ề ươ ủ ộ ể ứ
Hàm SQRT tr v căn b c hai c a m t bi u th cả ề ậ ủ ộ ể ứ
Hàm ROUND tr v s làm tròn c a m t bi u th cả ề ố ủ ộ ể ứ
5) Các hàm chuy n đ iể ố
Hàm CAST tr v giá tr có ki u d li u theo đ nh nghĩa. Ví dả ề ị ể ữ ệ ị ụ

PRINT CAST (GETDATE() AS VARCHAR) tr v Oct 18 2004.ả ề
Hàm CONVERT chuy n đ i giá tr t ki u này sang ki u khác. ể ổ ị ừ ể ể

1.2 CÁC TRUY V N BAO G M NHI U H N M T QUANẤ Ồ Ề Ơ Ộ
HỆ
S c m nh c a đ i s quan h là kh năng t h p hai ho c nhi u quanứ ạ ủ ạ ố ệ ả ổ ợ ặ ề
h thông qua các phép n i, tích, h p, giao và tr . Trong SQL có t t c cácệ ố ợ ừ ấ ả
phép toán đó.
1.2.1 Tích và n i trong SQLố
SQL có m t cách đ n gi n đ ghép c p các quan h vào m t truy v n:ộ ơ ả ể ặ ệ ộ ấ
li t kê t ng quan h trong m nh đ FROM. Sau đó, các m nh đ SELECTệ ừ ệ ệ ề ệ ề
và WHERE có th tham chi u đ n các thu c tính c a b t kỳ quan h nàoể ế ế ộ ủ ấ ệ
bên trong m nh đ FROM. ệ ề
20
Ví d 11ụ : Gi s chúng ta mu n bi t tên c a nhân viên và tên đ n v c aả ử ố ế ủ ơ ị ủ
ng i đó. Đ tr l i cho câu h i này, chúng ta c n hai quan hườ ể ả ờ ỏ ầ ệ
NHÂNVIÊN và Đ NV . Ta có truy v n sau:Ơ Ị ấ
SELECT Tên, TênĐV
FROM NHÂNVIÊN, Đ NV Ơ Ị
WHERE NHÂNVIÊN.Mãs ĐV = Đ NV .Mãs ĐV ;ố Ơ Ị ố
Truy v n này đòi h i chúng ta xem xét t t c các c p b giá tr , m t tấ ỏ ấ ả ặ ộ ị ộ ừ
Đ NV và b kia t NHÂNVIÊN. Đi u ki n trên các c p này đ c nói rõƠ Ị ộ ừ ề ệ ặ ượ
trong m nh đ WHERE: Thành ph n Mãs ĐV trong các b này ph i cóệ ề ầ ố ộ ả
giá tr nh nhau. Khi nào chúng ta tìm th y m t c p b tho mãn đi uị ư ấ ộ ặ ộ ả ề
ki n, chúng ta đ a ra các thu c tính Tên c a b t quan h NHÂNVIÊNệ ư ộ ủ ộ ừ ệ
và thu c tính TênĐV c a b t quan h Đ NV nh m t ph n c a câuộ ủ ộ ừ ệ Ơ Ị ư ộ ầ ủ
tr l i. Quá trình này đ c mô t b ng hình v d i đây: ả ờ ượ ả ằ ẽ ướ Tên Mã
s ĐVố
Mã s ĐV TênĐVố
Có b ng nhau ?ằ

Đ NV Ơ Ị
NHÂNVIÊN
N u đúng thì đ a ra N u đúng thì đ a raế ư ế ư
Hình 2: minh ho truy v n c a ví d 11.ạ ấ ủ ụ

1.2.2 Làm rõ nghĩa các thu c tínhộ
Đôi khi chúng ta đòi h i m t truy v n bao g m nhi u quan h và trongỏ ộ ấ ồ ề ệ
nh ng quan h này có hai ho c nhi u thu c tính có cùng tên. N u nhữ ệ ặ ề ộ ế ư
v y, chúng ta c n có cách đ ch rõ thu c tính nào trong s các thu c tínhậ ầ ể ỉ ộ ố ộ
đó là đ c s d ng. SQL gi i quy t v n đ này b ng cách cho phép taượ ử ụ ả ế ấ ề ằ
đ t tên quan h và m t d u ch m đ ng tr c thu c tính. Nh v y, R.Aặ ệ ộ ấ ấ ở ằ ướ ộ ư ậ
tham chi u đ n thu c tính A c a quan h R. ế ế ộ ủ ệ
21
Trong ví d 11, hai quan h NHÂNVIÊN và Đ NV có các thu c tínhụ ệ Ơ Ị ộ
Mãs ĐV trùng tên. Đ phân bi t, trong m nh đ WHERE ta vi t ố ể ệ ệ ề ế
NHÂNVIÊN.Mãs ĐV = Đ NV .Mãs ĐVố Ơ Ị ố
M t quan h , theo sau là m t d u ch m đ c cho phép ngay c trongộ ệ ộ ấ ấ ượ ả
tr ng h p khi không có s không rõ nghĩa. Ví d , chúng ta hoàn toànườ ợ ự ụ
tho i mái khi vi t truy v n có d ng nh sau:ả ế ấ ạ ư
SELECT NHÂNVIÊN.Tên, Đ NV .TênĐVƠ Ị
FROM NHÂNVIÊN, Đ NV Ơ Ị
WHERE NHÂNVIÊN.Mãs ĐV = Đ NV .Mãs ĐV ;ố Ơ Ị ố
K t qu c a truy v n 11 là:ế ả ủ ấ Tên TênĐV
Vân Nghiênc uứ
Nam Nghiênc uứ
Thanh Hànhchính
B ng Hànhchínhằ
S n Nghiênc uơ ứ
Giang Nghiênc uứ
Hoa Hànhchính

Giáp Lãnhđ oạ
1.2.3 Các bi n bế ộ
Vi c làm rõ nghĩa các thu c tính b ng cách thêm tên quan h vào đ uệ ộ ằ ệ ầ
ho t đ ng khi m t truy v n bao hàm t h p nhi u quan h khác nhau. Tuyạ ộ ộ ấ ổ ợ ề ệ
nhiên, đôi khi chúng ta c n đòi h i môt truy v n bao hàm hai ho c nhi uầ ỏ ấ ặ ề
b t cùng m t quan h Chúng ta có th li t kê m t quan h R bao nhiêuộ ừ ộ ệ ể ệ ộ ệ
l n nh ta mu n trong m t m nh đ FROM, nh ng chúng ta c n có cáchầ ư ố ộ ệ ề ư ầ
tham chi u đ n t ng l n có m t c a R. SQL cho phép chúng ta đ nh nghĩaế ế ừ ầ ặ ủ ị
đ i v i t ng l n có m t c a R trong m nh đ FROM m t “bídanh” màố ớ ừ ầ ặ ủ ệ ề ộ
chúng ta s tham chi u đ n nó nh là m t bi n b . M i l n s d ng c aẽ ế ế ư ộ ế ộ ỗ ầ ử ụ ủ
R trong m nh đ FROM đ c theo sau b ng m t t khoá AS và tên c aệ ề ượ ằ ộ ừ ủ
bi n b . T khóa AS là không b t bu c, có th có ho c không. Trongế ộ ừ ắ ộ ể ặ
ph m vi tài li u này, chúng ta s b qua t khoá AS.ạ ệ ẽ ỏ ừ
22
Trong các m nh đ SELECT và WHERE, chúng ta có th làm rõ nghĩaệ ề ể
các thu c tính c a R b ng cách thêm vào tr c chúng m t bi n b thíchộ ủ ằ ướ ộ ế ộ
h p và m t d u ch m. Nh v y, m t bi n b ph c v nh là m t tênợ ộ ấ ấ ư ậ ộ ế ộ ụ ụ ư ộ
khác c a quan h R và có th đ c s d ng trong v trí c a nó khi chúngủ ệ ể ượ ử ụ ị ủ
ta mu n.ố
Ví d 13ụ : Gi s chúng ta mu n đ a ra tên c a nhân viên và tên c aả ử ố ư ủ ủ
ng i giám sát nhân viên đó. Nh v y, các tên này đ u đ c l y t quanườ ư ậ ề ượ ấ ừ
h NHÂNVIÊN. S d ng các bi n b nh các bí danh cho hai s d ngệ ử ụ ế ộ ư ử ụ
c a NHÂNVIÊN, chúng ta có th vi t truy v n nh sau:ủ ể ế ấ ư
SELECT NV.Tên, NV1.Tên
FROM NHÂNVIÊN NV, NHÂNVIÊN NV1
WHERE NV.MãsôNGS = NV1.Mã s NV; ố
Chúng ta nhìn th y trong m nh đ FROM mô t c a hai bi n b , NV vàấ ệ ề ả ủ ế ộ
NV1; m i bi n b là m t bí danh cho quan h NHÂNVIÊN. Các bi n bỗ ế ộ ộ ệ ế ộ
đ c s d ng trong m nh đ SELECT đ tham chi u đ n các thành ph nượ ử ụ ệ ề ể ế ế ầ
Tên c a hai b . Các bí danh này cũng đ c s d ng trong m nh đủ ộ ượ ử ụ ệ ề

WHERE đ nói r ng hai b t NHÂNVIÊN đ c bi u di n b i NV vàể ằ ộ ừ ượ ể ễ ở
NV1 có giá tr nh nhau trong các thành ph n MãsôNGS và Mãs NV c aị ư ầ ố ủ
chúng
K t qu c a truy v n 13 ế ả ủ ấ NV.Tên NV1.Tên
Vân Nam
Nam Giáp
Thanh B ngằ
B ng Giápằ
S n Namơ
Giang Nam
Hoa B ngằ
1.2.4 Phép h p, phép giao, phép tr c a các truy v nợ ừ ủ ấ
Đôi khi chúng ta mu n t h p các quan h b ng cách s d ng các phépố ổ ợ ệ ằ ử ụ
toán t p h p c a đ i s quan h : h p, giao, tr . SQL cung c p các phépậ ợ ủ ạ ố ệ ợ ừ ấ
toán t ng ng áp d ng cho các k t qu c a các truy v n v i đi u ki n làươ ứ ụ ế ả ủ ấ ớ ề ệ
23
các truy v n đó t o ra các quan h có cùng danh sách các thu c tính và cácấ ạ ệ ộ
ki u thu c tính. Các t khoá đ c s d ng là UNION, INTERSECT vàể ộ ừ ượ ử ụ
EXCEPT cho h p, giao và tr t ng ng. Các t nh UNION đ c sợ ừ ươ ứ ừ ư ượ ử
d ng gi a hai truy v n, và các truy v n này ph i đ c đ t trong c p d uụ ữ ấ ấ ả ượ ặ ặ ấ
ngo c đ n.ặ ơ
Ví d 14ụ : Gi s chúng ta mu n đ a ra Mãs NV c a các nhân viên làmả ử ố ư ố ủ
vi c cho d án có Mãs DA =1 và các nhân viên làm vi c cho d án có Mãệ ự ố ệ ự
s DA = 2. S d ng quan h NHÂNVIÊN_D ÁN, ta vi t truy v n nhố ử ụ ệ Ự ế ấ ư
sau:
(SELECT Mãs NVố
FROM NHÂNVIÊN_D ÁNỰ
WHERE Mãs DA = 1)ố
UNION
(SELECT Mãs NVố

FROM NHÂNVIÊN_D ÁNỰ
WHERE Mãs DA = 2)ố
L nh SELECT đ u đ a ra các Mãs NV c a các nhân viên làm vi c choệ ầ ư ố ủ ệ
d án có Mãs DA =1, l nh SELECT sau đ a ra các Mãs NV c a các nhânự ố ệ ư ố ủ
viên làm vi c cho d án có Mãs DA = 2, hai t p h p này h p v i nhauệ ự ố ậ ợ ợ ớ
t o thành câu tr l i cho truy v n. ạ ả ờ ấ
K t qu ế ả Mãs NVố
NV001
NV002
NV016
NV018 (các b trùng l p b lo i b )ộ ặ ị ạ ỏ
Ví d 15ụ : Theo cách t ng t , chúng ta mu n đ a ra Mãs NV c a cácươ ự ố ư ố ủ
nhân viên v a làm vi c cho d án có Mãs DA =1 v a làm vi c cho d ánừ ệ ự ố ừ ệ ự
có Mã s DA = 2. S d ng quan h NHÂNVIÊN_D ÁN, ta vi t truy v nố ử ụ ệ Ự ế ấ
nh sau:ư
(SELECT Mãs NVố
24
FROM NHÂNVIÊN_D ÁN WHERE Mãs DA = 1)Ự ố
INTERSECT
(SELECT Mãs NVố
FROM NHÂNVIÊN_D ÁN WHERE Mãs DA = 2)Ự ố
K t qu ế ả Mãs NVố
NV001
NV018
Ví d 16ụ : Gi s chúng ta mu n đ a ra Mãs NV c a các nhân viên làmả ử ố ư ố ủ
vi c cho d án có Mãs DA =1 nh ng không làm vi c cho d án có Mãệ ự ố ư ệ ự
s DA = 2. S d ng quan h NHÂNVIÊN_D ÁN, ta vi t truy v n nhố ử ụ ệ Ự ế ấ ư
sau:
(SELECT Mãs NVố
FROM NHÂNVIÊN_D ÁNỰ

WHERE Mãs DA = 1)ố
EXCEPT
(SELECT Mãs NVố
FROM NHÂNVIÊN_D ÁNỰ
WHERE Mãs DA = 2)ố
K t qu ế ả Mãs NVố
(không có)
1.3 CÁC TRUY V N CONẤ
Trong SQL, m t truy v n có th đ c s d ng trong nhi u cách khácộ ấ ể ượ ử ụ ề
nhau đ giúp vi c tính giá tr c a truy v n khác. M t truy v n là m t ph nể ệ ị ủ ấ ộ ấ ộ ầ
c a truy v n khác đ c g i là m t truy v n con. Các truy v n con l i cóủ ấ ượ ọ ộ ấ ấ ạ
th có các truy v n con và nh v y có th đi xu ng r t nhi u m c. Chúngể ấ ư ậ ể ố ấ ề ứ
ta đã có c h i nhìn th y vi c s d ng truy v n con. Trong các ví d ơ ộ ấ ệ ử ụ ấ ụ ở
ph n trên, chúng ta đã xây d ng các truy v n h p, giao, tr b ng cách n iầ ự ấ ợ ừ ằ ố
hai truy v n con đ t o nên truy v n đ y đ . Có r t nhi u cách đ sấ ể ạ ấ ầ ủ ấ ề ể ử
d ng các truy v n con:ụ ấ
25

×