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ạ ộ ộ ề ộ ộ ẹ ự
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
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
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.ế ế ụ ệ
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ọ ệ ươ ươ ớ
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ươ
, 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
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ị ồ ộ ừ ộ ị
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ị ị
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)ươ
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ả ề ị ể ữ ệ ị ụ
Đ 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
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ố
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