- 1 -
SQL Server 2000 : Các câu l nh truy v n d li u - ấ ữ ệ L nh SELECT FROM – Ph n 1
ệ ầ
ệ
ậ
ủ ế
ạ ử ụ L p trình trong Transaction-SQL ch y u là b n s d ng các câu l nh truy v n và k t h p v i c u trúc đi u khi n thích
ế ợ ớ ấ
ề
ể
ệ
ấ
h p cùng các bi n đã đ
c khai báo đ th c hi n các hành
ợ
ế
ượ
ể ự
ệ
đ ng thích h p cho vi c c p nh t d li u vào bên trong c s
ậ ữ ệ
ệ ậ
ơ ở
ợ
ộ
d li u. ữ ệ
ệ ư ấ ả Các l nh truy v n th ữ ệ ữ ệ ộ ữ ệ ườ ả ổ ị các b ng c n thi ế ả ầ ọ ự ủ ủ ệ ế ẽ ướ ớ ng dùng nh thêm dòng d li u m i vào b ng, xóa các dòng d li u đang có trong b ng, thay đ i giá tr các c t d li u bên t. Tuy nhiên đ i v i cú trong b ng, ch n l a các dòng d li u t ố ớ ữ ệ ừ pháp đ y đ c a l nh SELECT r t ph c t p và khó nh vì th s h ạ ng d n b n ẫ ấ riêng r theo t ng thành ph n khác nhau nh m giúp b n d hi u, d nh . ớ ứ ạ ằ ớ ễ ể ả ầ ẽ ừ ễ ầ ạ
1/- L nh SELECT FROM
ệ
ạ ộ ể ạ ệ m t ho c nhi u b ng có quan h bên trong m t c s d t t ế ừ ộ ệ ầ ặ ả Ý nghĩa ho t đ ng c a câu l nh SELECT FROM dùng đ cho phép b n có th ch n ọ ể ủ l a các d li u c n thi ộ ơ ở ữ ề ữ ệ ự li u. ệ
ệ ườ ượ ề ng đ ủ ệ ể ử ụ ư ạ ẫ c dùng nhi u bên trong Transaction-SQL. Tuy nhiên cũng Câu l nh này th ồ gi ng nh cú pháp c a l nh CREATE TABLE, b n v n có th s d ng cùng lúc đ ng th i đ y đ các m nh đ c a l nh SELECT FROM. ố ờ ầ ủ ề ủ ệ ệ
1.1/- L nh SELECT FROM đ n gi n :
ơ
ệ
ả
ữ ệ ể ạ ọ i cho phép b n có th ch n ra d li u c a các ủ c ch đ nh rõ ị ộ ả ượ ướ ớ ộ ả ệ ỉ V i cú pháp SELECT FROM bên d ớ c t hi n có bên trong m t b ng. V i cú pháp này tên các c t ph i đ ộ ràng.
Cú pháp :
Trong đó :
ầ ấ ệ ả ạ ộ ữ • Dang sách các c t :ộ là tên các c t hi n đang có bên trong b ng mà b n c n l y d li u.ệ
tên b ng c n hi n th d li u. • Tên b ng :ả ị ữ ệ ể ả ầ
- 2 -
Ví d :ụ
ị trong b ng VATTU g m nh ng c t : mã v t t ồ ậ ư , ữ ả ộ Đ hi n th thông tin c a các v t t ể ể tên v t t ự ủ . B n th c hi n câu l nh sau : ệ ậ ư ệ ậ ư ạ
K t qu truy v n tr v : ả ề ế ả ấ
1.2/- M nh đ s p x p d li u :
ề ắ ế ữ ệ
ệ
ệ ạ i d li u theo th t i k t h p m nh đ ORDER BY cho phép b n có ứ ự ướ ế ợ ộ ả ế ạ ữ ệ ề ắ V i cú pháp SELECT FROM bên d th l y d li u c a các c t bên trong m t b ng, sau đó s p x p l ộ ch đ nh là tăng ho c gi m. ớ ể ấ ữ ệ ủ ặ ỉ ả ị
Cú pháp :
Trong đó :
c s p x p d li u. Th t ộ ắ ế ứ ự ư ộ u tiên s p x p các c t ế ế ắ trái sang ph i và m c đ nh theo th t ữ ệ tăng d n. • Tên c t s p x p : d li u t ữ ệ ừ là tên c t đ ả ộ ượ ắ ặ ị ứ ự ầ
dùng ch thay đ i th t ừ ứ ự ắ s p x p là gi m d n. M c đ nh th t ầ ặ ị ứ ự ắ s p ế ả ổ ỉ • T khóa DESC : x p là tăng d n. ế ầ
- 3 -
Ví d :ụ
ị ậ ư ủ ả ữ ộ l ậ ư ầ ắ trong b ng VATTU g m nh ng c t : mã v t t ồ ầ , ậ ư ự ph n trăm tăng d n. B n th c ộ ỷ ệ ầ ạ Đ hi n th thông tin c a các v t t ể ể tên v t t ữ ệ hi n câu l nh SELECT FROM nh sau : , ph n trăm có s p x p d li u theo c t t ế ệ ư ệ
K t qu truy v n tr v : ả ề ế ả ấ
1.3/- M nh đ ch n các dòng d li u :
ề ọ
ữ ệ
ệ
ạ ướ ế ợ ả ộ ả ệ ỏ ề ề ư ệ ể ề i k t h p m nh đ WHERE cho phép b n có th V i cú pháp SELECT FROM bên d ớ l c các dòng d li u bên trong m t b ng ph i th a đi u ki n đ a ra trong m nh đ ệ ữ ệ ọ WHERE.
Cú pháp :
Trong đó :
- 4 -
dùng đ ch đ nh truy v n ch ch n ra các dòng d li u duy ỉ ữ ệ ể ấ ọ ỉ ị • T khóa DISTINCT : nh t, không trùng l p d li u. ắ ữ ệ ừ ấ
ị ừ dùng đ ch đ nh truy v n ch ch n ra chính xác bao nhiêu dòng d ọ ấ ỉ ầ ệ ừ ấ ỉ ọ ả ằ ấ ẫ ạ ỉ ữ ỉ khóa PERCENT đi kèm theo thì truy v n ch ch n ra bao con s mà b n ch đ nh ph i n m trong ị ẽ ế ợ khóa TOP thì b n s k t h p ườ ừ ừ ạ nào đó. • T khóa TOP : ể li u đ u tiên. N u có thêm t ế nhiêu ph n trăm m u tin đ u tiên, lúc b y gi ầ ầ ph m vi t 0 đ n 100. Thông th ế m nh đ ORDER BY đ s p x p l ề ờ ố ng khi s d ng t ử ụ i d li u theo m t th t ộ ế ạ ữ ệ ể ắ ứ ự ạ ệ
ệ ọ là đi u ki n ch đ nh vi c l c ra các m u tin bên trong b ng. Thông ệ ọ ệ ẫ ả ỉ ị • Đi u ki n l c : th ể ề ng là m t bi u th c lu n lý. ườ ề ứ ậ ộ
Ví d :ụ
trong b ng VATTU sao cho ch ch n ra ị ả ọ ỉ có đ n v tính "Cái". B n th c hi n câu l nh SELECT FROM nh sau : Đ hi n th toàn b thông tin c a các v t t ậ ư ể ể các v t t ệ ủ ạ ậ ư ộ ị ự ơ ư ệ
t c các c t có bên trong b ng. K t qu ệ ạ ấ ả ế ả ộ ả Ký hi u * trong ví d này là đ i di n cho t ụ truy v n tr v : ả ề ệ ấ
Ví d :ụ
ố l ỷ ệ ư ư ọ ố ỉ ph n trăm Gi ng nh ví d trên nh ng b n ch mu n ch n ra v t t ầ cao nh t. B n th c hi n câu l nh SELECT FROM có k t h p m nh đ TOP nh sau : ư đ u tiên có t ề ệ ậ ư ầ ế ợ ụ ự ạ ệ ệ ấ ạ
- 5 -
K t qu truy v n tr v : ả ề ế ả ấ
ướ ề ệ c đây, m nh đ WHERE còn giúp ấ ấ ữ ệ ừ ệ i s d ng ngôn ng SQL cũ tr ề ườ ử ụ ế ữ ệ ủ ữ ả Đ i v i các ng ố ớ h có th liên k t d li u c a nhi u b ng có quan h trong các truy v n l y d li u t ể ọ nhi u b ng khác nhau. ả ề
Cú pháp :
Trong đó :
ệ ế thông th ườ ỉ ủ ng dùng đ ch đ nh các c t có quan h chung c a ệ ộ • M nh đ liên k t : ề gi a hai b ng tham chi u trong truy v n, có d ng nh sau : ả ể ạ ị ư ữ ế ấ
• Tên_b ng1.Tên_c t = Tên_b ng2.Tên_c t ộ ộ ả ả
Ví d :ụ
ị ủ ơ ả ng ng trong b ng NHACC và s p x p d li u hi n th theo th ộ ọ ị ữ ệ ế ể ắ Đ hi n th thông tin c a các đ n đ t hàng trong b ng DONDH kèm theo c t h tên ể ể ứ c a nhà cung c p t ấ ươ ủ mã nhà cung c p tăng d n. B n th c hi n l nh SELECT FROM nh sau : t ấ ự ặ ả ự ệ ệ ứ ầ ư ạ
K t qu truy v n tr v : ả ề ế ả ấ
- 6 -
ả ộ ụ ử ụ ệ ằ ệ ề ộ ế ạ ả ấ ầ ẽ Trong ví d trên hai b ng DONDH và NHACC có chung c t quan h là MANHACC s ả c s d ng trong m nh đ WHERE. Do c t MANHACC n m trong hai b ng đ ượ DONDH và NHACC vì th b n c n ph i ch đ nh rõ ràng l y MANHACC trong b ng ả ỉ NHACC b ng cách ghi NCC.MANHACC sau m nh đ SELECT. ị ệ ề ằ
ệ
SQL Server 2000 : Các câu l nh truy v n d li u – ấ ữ ệ Ph n 2ầ
V i cú pháp SELECT FROM bên d
i k t h p m nh đ
ớ
ướ ế ợ
ệ
ề GROUP BY cho phép b n có th nhóm d li u c a các dòng
ữ ệ ủ
ể
ạ
bên trong m t b ng và đ
c phép s d ng các hàm th ng kê
ộ ả
ượ
ử ụ
ố
ể
ố
ấ
h p. Thông th
ng, sau khi nhóm d li u, b n nên s p x p l ữ ệ
ườ
ợ
ạ
d li u đ hi n th theo m t th t
nào đó. Do v y b n s s
ổ đi kèm theo đ tính toán các d li u có tính ch t th ng kê t ng ữ ệ ắ ế ạ i ậ ạ ẽ ử
ể ể
ữ ệ
ứ ự
ộ
ị
d ng m nh đ ORDER BY sau m nh đ GROUP BY.
ụ
ệ
ề
ề
ệ
1.4/- M nh đ nhóm d li u :
ữ ệ
ề
ệ
Cú pháp :
Trong đó :
- 7 -
là tên c a các hàm th ng kê và các tham s t ố ố ươ ứ ủ ị ấ ể ẫ ế ấ ấ ng ng dùng đ tính • Hàm th ng kê : ố t ng (SUM), tính giá tr th p nh t (MIN), tính giá tr cao nh t (MAX), đ m các m u tin ổ (COUNT), tính giá tr trung bình (AVG) c a các d li u bên trong b ng. ị ữ ệ ủ ả ị
ỉ ề ớ ủ ệ ộ ấ ưở ể ế ả • Bí danh : là tiêu đ m i c a các c t tính toán. Các tiêu đ này ch có hi u l c lúc ề ệ ự hi n th d li u trong câu l nh truy v n mà không làm nh h ng đ n c u trúc bên ị ữ ệ ấ trong c a b ng. ủ ả
ộ ữ ệ là danh sách tên các c t đ ộ ượ c nhóm d li u đ tính ữ ệ ể • Danh sách c t nhóm d li u : toán.
Ví d :ụ
ừ ặ ấ ổ ữ ệ ố ơ ể ứ ự ổ ặ ặ ố ơ ự ầ ạ ị Đ th ng kê t ng s đ n đ t hàng mà công ty đã đ t hàng theo t ng nhà cung c p và ể ố ệ t ng s đ n đ t hàng tăng d n. B n th c hi n s p x p d li u hi n th theo th t ế ắ câu l nh SELECT FROM nh sau : ệ ư
K t qu truy v n tr v : ả ề ế ả ấ
1.5/- M nh đ l c d li u sau khi đã nhóm :
ề ọ ữ ệ
ệ
ệ ề ạ ộ ả ệ ữ ệ ể ọ ả c phép s d ng đi kèm theo m nh đ GROUP BY dùng đ ỉ ượ ề i d li u sau khi đã nhóm. Đi u này có nghĩa là m nh đ HAVING ch đ ử ụ ề ệ ệ ệ ề i k t h p m nh đ HAVING cho phép b n có V i cú pháp SELECT FROM bên d ớ ướ ế ợ th l c l i d li u sau khi đã nhóm d li u c a các dòng bên trong m t b ng. Khác ủ ữ ệ ể ọ ạ ữ ệ v i m nh đ WHERE dùng đ l c các dòng d li u hi n đang có bên trong b ng, ớ ề ể m nh đ HAVING ch đ ề ệ ỉ ượ c l c l ọ ạ ữ ệ dùng kèm v i m nh đ GROUP BY. ệ ề ớ
Cú pháp :
- 8 -
Trong đó :
là đi u ki n dùng đ l c l ể ọ ạ ữ ệ ữ ệ i d li u sau khi đã nhóm d li u. ề ệ ng là các bi u th c lu n lý. • Đi u ki n l c nhóm : ệ ọ ề Thông th ể ườ ứ ậ
Ví d :ụ
ụ ắ ầ ư ữ ấ ằ ỉ ầ ọ ớ ạ ặ ữ ệ ố ơ ữ Theo ví d trên nh ng b n ch c n l c ra nh ng nhà cung c p có mã b t đ u b ng ch "C" và t ng s các đ n đ t hàng l n h n 1 sau khi đã tính toán d li u theo nhóm. B n ạ th c hi n câu l nh SELECT FROM nh sau : ổ ệ ơ ư ự ệ
K t qu truy v n tr v : ả ề ế ả ấ
c chia ra ệ ọ ữ ệ ượ ệ ạ ệ ụ ứ ấ ả ắ ầ ữ ề ẫ ứ ố ả ề ổ ằ ấ ơ ặ ớ ơ ổ ố Trong ví d này b n th y r ng vi c l c d li u đ hai m nh đ khác ở ấ ằ nhau. Th nh t m nh đ WHERE MANHACC LIKE "C%" dùng đ l c ra các m u tin ể ọ ề trong b ng DONDH sao cho mã nhà cung c p ph i b t đ u b ng ch "C", th hai ấ i các nhà cung c p nào có t ng s các m nh đ HAVING COUNT(*)>1 dùng đ l c l ể ọ ạ ệ ừ đ n đ t hàng l n h n 1 sau khi đã nhóm đ tính ra t ng s các đ n đ t hàng theo t ng ể ặ ơ nhà cung c p.ấ
1.6/- M nh đ liên k t d li u trong hai b ng :
ế ữ ệ
ề
ệ
ả
ớ ướ ế ợ ề ạ i k t h p m nh đ JOIN cho phép b n liên k t V i cú pháp SELECT FROM bên d ế ữ hai b ng có quan h v i nhau đ l y ra các d li u chung. Đi m quan tr ng gi a ệ ữ ệ ệ ớ ể ấ ể ả ọ
- 9 -
quan h khi b n ch ữ ứ ự ả ả ệ ạ ỉ ệ ng đ n k t qu c a truy v n. nh ng b ng này ph i có các c t quan h chung nhau va th t ộ đ nh gi a các b ng cũng s làm nh h ả ị ả ủ ưở ữ ẽ ế ế ả ấ
Cú pháp :
Trong đó :
ể dùng đ ch đ nh vi c so sánh giá tr trong các c t c a các ị c hai b ng). H th ng s tr v các m u tin ươ ươ ộ ủ ẫ ỉ ị ở ả ẽ ả ề ệ ả ệ ố • T khóa INNER JOIN : ừ ng đ b ng là t ả th a đi u ki n quan h ệ ề ỏ ng (d li u đ u có ề ữ ệ c hai b ng. ệ ở ả ả
ể ị ị ượ ư ặ ả ệ ả ố ng đ n k t qu truy v n. ộ ủ • T khóa LEFT RIGHT FULL : dùng đ ch đ nh vi c so sánh giá tr các c t c a ỉ ừ c u tiên cho m i quan h bên nhánh trái, ph i ho c c hai bên. Vi c thay b ng đ ệ ệ ả u tiên này s làm nh h đ i th t ế ưở ổ ứ ự ư ẽ ế ả ả ấ
đ ữ ệ ệ ư ượ c phép b đi khi s d ng lo i quan h u tiên LEFT RIGHT FULL. • T khóa OUTER : ừ b n đ ạ ượ c dùng k t h p cho các quan h u tiên d li u. Tuy nhiên ử ụ ế ợ ạ ệ ư ỏ
ứ ể ằ ộ ỉ • Đi u ki n quan h : ệ hai b ng g n gi ng nh bi u th c sau m nh đ WHERE dùng đ liên k t hai b ng. ệ ầ ệ ữ ệ là m t bi u th c so sánh b ng, ch ra tên các c t quan h gi a ả ư ể ộ ế ề ả ứ ề ể ố
Ví d :ụ
ể ể ộ ọ ủ ặ ế ắ ộ Đ hi n th thông tin c a các đ n đ t hàng trong b ng DONDH kèm theo c t h tên ơ ả nhà cung c p t ng ng trong b ng NHACC và s p x p d li u theo c t mã nhà cung ữ ệ ả c p tăng d n. B n th c hi n câu l nh SELECT FROM nh sau : ư ấ ị ấ ươ ạ ầ ứ ự ệ ệ
K t qu truy v n tr v : ả ề ế ả ấ
- 10 -
L u ý : ư
ả ắ ệ ạ ề ạ ấ ấ ả ữ ụ ả ộ ữ ệ ừ ộ ệ ở ả ạ ậ ả ả ộ ử ụ nhi u b ng có quan h , b n ph i b t bu c s d ng Trong các truy v n l y d li u t ả đ nh d ng : tên_b ng.tên_c t cho các c t trùng tên gi a các b ng. Theo ví d trên thì ị c t MANHACC xu t hi n c hai b ng DONDH và NHACC do v y b n ph i ghi : ấ ộ NCC.MANHACC và DH.MANHACC.
ể ạ ệ ể ử ụ ế ằ ả ả ụ ế ả ỗ ả ể ặ ạ ượ ạ ắ ọ ớ ợ ắ Ngoài ra b n cũng có th s d ng khái ni m bí danh cho các b ng nh m đ làm ng n ệ g n câu l nh m i khi tham chi u đ n tên các b ng. Theo ví d trên b ng DONDH có ọ bí danh là DH, b ng NHACC có bí danh là NCC. Các bí danh này b n có th đ t tên tùy thích, tuy nhiên b n nên đ t ng n g n, g i nh và không đ c phép trùng nhau bên ặ trong m t câu l nh truy v n. ệ ấ ộ
Ví d :ụ
ố ư ụ ấ ả ể ấ ầ ị quan h ph i u tiên d ệ ả ư ấ ằ ứ ự ể ạ Gi ng nh ví d trên nh ng yêu c u hi n th ra t ư b ng NHACC. Đ làm đ ượ ả li u bên b ng NHACC. B n th c hi n câu l nh SELECT FROM nh sau : ệ ạ ệ t c các nhà cung c p hi n có trong ữ ệ ư c đi u này, b n th y r ng th t ệ ề ự ả
K t qu truy v n tr v : ả ề ế ả ấ
- 11 -
ế ấ ả ớ ệ ữ ệ ấ ở ả ả ệ ủ ả ủ ư ặ ở ổ B n th y r ng có thêm hai nhà cung c p m i trong k t qu truy v n sau khi thay đ i ạ ấ ằ u tiên quan h d li u cho b ng NHACC (RIGHT JOIN b i vì b ng NHACC th t ứ ự ư n m bên ph i trong quan h c a b ng DONDH và NHACC). Tuy nhiên giá tr d li u ị ữ ệ ả ằ ờ i c t s đ n đ t hàng c a hai nhà cung c p này là NULL b i vì công ty ch a bao gi t ấ ạ ộ ố ơ đ t hàng các nhà cung c p này. ặ ấ
Ví d :ụ
u tiên quan h ư ụ ầ ố ứ ự ư ệ Hoàn toàn gi ng nh ví d trên nh ng l n này b n s s d ng th t ư d li u bên trái. B n th c hi n câu l nh SELECT FROM nh sau : ữ ệ ạ ẽ ử ụ ư ự ệ ệ ạ
ấ ả ề ụ ở ớ ổ trên khi thay đ i th t ế ả ủ ế ả ệ ữ ệ ư ứ ự ư ử ụ ấ ứ ự ạ ệ u tiên quan h d li u bên ph i (RIGHT JOIN) hay không ? K t qu c a hai câu l nh u tiên quan h d li u bên ể ệ ữ ệ ề ụ ệ u tiên l y d li u bên b ng NHACC. B n xem xét k t qu truy v n tr v có gì khác so v i ví d ả ư truy v n hoàn toàn nh nhau. Tuy nhiên khi s d ng th t trái trong ví d này đã thay đ i tên b ng NHACC ngay phía sau m nh đ FROM đ mu n ch đ nh th t ỉ ổ ả ấ ữ ệ ứ ự ư ả ố ị
ọ ự ể ử ụ ạ ữ ệ ặ ạ ầ ả ọ ư ằ ả ị ộ ế ế ử ụ ề ề vi c ch n l a đ s d ng m nh đ LEFT JOIN ho c RIGHT JOIN là Trong th c t ệ ề ự ế ệ không quan tr ng mà thay vào đó b n ph i hi u r ng d li u mà b n c n ch n ra ph i ả ả ể ằ ọ u tiên n m bên trong b ng nào. Thông th ữ ng có m t quy đ nh là b ng nào u tiên d ườ ư li u s đ ỉ c ghi ngay sau m nh đ FROM, k ti p s d ng m nh đ LEFT JOIN ch ệ ệ ẽ ượ đ nh tên c a b ng quan h c n l y thông tin. ị ệ ệ ầ ấ ủ ả
- 12 -
SQL Server 2000 : Các câu l nh truy v n d li u – ấ ữ ệ L nh SELECT FROM - Ph n cu i ố
ệ ầ
ệ
ớ
ế ợ
ệ
ề
ph n trình bày
trên, b n có liên k t t
ầ
ế ố
ở
ạ
ế ớ
ộ
ể
ấ
b ng khác nhau trong m t câu truy v n. Các liên k t có th
ủ V i cú pháp SELECT FROM k t h p m nh đ JOIN c a ữ ệ i đa 256 b ng d li u ả ề trong m t câu truy v n. M t b ng có th liên k t v i nhi u ộ ả ể
ộ
ế
ả
ấ
đ
c đ nh nghĩa d a trên các c t gi ng nhau c a các b ng.
ượ ị
ộ ố
ự
ủ
ả
1.7/- M nh đ liên k t d li u nhi u b ng :
ế ữ ệ
ề ả
ệ
ề
ớ ế ợ ủ ề ầ ộ ả ệ ộ ả ấ trên, b n có ạ ế ớ i đa 256 b ng d li u trong m t câu truy v n. M t b ng có th liên k t v i ự c đ nh nghĩa d a ở ể ể ượ ị ữ ệ ộ ế ấ V i cú pháp SELECT FROM k t h p m nh đ JOIN c a ph n trình bày liên k t t ế ố nhi u b ng khác nhau trong m t câu truy v n. Các liên k t có th đ ả ề trên các c t gi ng nhau c a các b ng. ả ủ ộ ố
Ví d :ụ
ặ ạ ả ấ ộ ệ ặ ạ ộ ấ ằ ậ ấ đã đ t hàng trong tháng 01/2002, b n ph i l y Đ bi t đ ả ấ c danh sách tên các v t t ậ ư ể ế ượ ậ ư các b ng : VATTU (l y c t tên v t t ), CTDONDH (l y c t mã v t t ), thông tin t ậ ư ộ ấ ừ DONDH (l y c t ngày đ t hàng so sánh trong tháng 01/2002 và t o quan h trung gian ấ cho hai b ng VATTU và DONDH). Nh n xét th y r ng trong truy v n này d li u c n ữ ệ ầ ả 3 b ng khác nhau nh ng có quan h . l y ra t ệ ấ ừ ư ả
B n th c hi n câu l nh SELECT FROM nh sau : ự ư ệ ệ ạ
K t qu truy v n tr v : ả ề ế ả ấ
- 13 -
1.8/- M nh đ n i d li u t
hai truy v n :
ề ố ữ ệ ừ
ệ
ấ
ấ ệ ủ ệ ề ằ ế ợ ạ ộ ậ ừ ẫ ẫ ợ ẫ ệ ữ ệ ể ạ ứ ấ ế ữ ệ ự ệ ề ề ệ ệ ằ ữ ệ ớ ệ ứ ệ ệ ấ Vi c k t h p d li u c a hai truy v n SELECT FROM b ng m nhd 9 UNION cho ệ phép b n có th t o ra m t t p h p các m u tin t các m u tin có trong câu l nh SELECT FROM th nh t và các m u tin có trong câu l nh SELECT FROM th hai. ứ Khác v i vi c liên k t d li u b ng m nh đ JOIN, m nh đ UNION th c ra ch th c ỉ ự ố hi n vi c thêm vào các dòng d li u trong câu l nh SELECT FROM th nh t vào cu i các dòng d li u trong câu l nh SELECT FROM th hai. ệ ữ ệ ứ
ệ ườ ạ ử ụ ng b n s d ng m nh đ UNION dùng đ n i d li u t ơ ở ữ ệ ề ộ ộ ả ư ệ ng thích th t ộ ẫ ể ạ ộ ị Thông th các b ng khác ả ể ố ữ ệ ừ nhau trong c s d li u thành m t b các m u tin liên t c nhau. Các c t ch đ nh trong ộ ỉ ị ụ nh nhau, hai câu l nh SELECT FROM ph i có cùng ki u d li u t ữ ệ ươ ứ ự t ng s các c t ph i b ng nhau. Vi c đ nh d ng tiêu đ c a các c t tính toán ch c n ỉ ầ ả ằ ổ ề ủ th c hi n trong câu l nh truy v n đ u tiên. ệ ự ố ệ ệ ầ ấ
Cú pháp :
Trong đó :
dùng đ n i d li u c a hai truy v n. • M nh đ UNION : ề ệ ể ố ữ ệ ủ ấ
Ví d :ụ
ng xu t c a các v t t trong ể ố ượ ậ ổ ồ ấ ủ ậ ư Đ tính ra đ ng th i t ng s l ố ượ tháng 01/2002. B n th c hi n câu l nh SELECT FROM nh sau : ng nh p, t ng s l ệ ờ ổ ự ư ệ ạ
- 14 -
K t qu truy v n tr v : ả ề ế ả ấ
ậ ố ộ ấ ộ ki u d li u ứ ự ể ữ ệ ả ề ẽ ổ ệ ng thích nhau (chu i, s ), vi c đ nh d ng tiêu đ c t ch th c hi n ỉ ự ạ ả ươ ỗ ố ệ ị Nh n xét th y r ng t ng s c t mà các truy v n tr v s là 3 c t, th t ấ ằ c a các c t ph i t ủ ề ộ ộ i truy v n SELECT FROM th nh t. t ấ ạ ứ ấ
ạ ấ ấ ữ ệ ứ ứ ẫ ẫ ố ấ ẽ ượ ể c s p x p l ượ ắ ố i theo m t th nào đó thì b n s k t h p m nh đ ORDER BY vào cu i. Th c hi n l ệ ạ ề ng nh p, s l ậ c thêm vào cu i các ố ế c s p x p ị ư ượ ắ ứ ế ạ ộ i truy v n ấ ự ố ượ ng ố ượ ể ấ ề ệ trong tháng 01/2002. B n th y r ng các dòng d li u trong truy v n th nh t s đ ấ ằ dòng d li u c a truy v n th hai. Tuy nhiên các m u tin hi n th ch a đ ữ ệ ủ nào c . Do đó n u mu n các m u tin đ theo m t th t ế ả ứ ự ộ t ạ ẽ ế ợ ệ ự trên nh ng có k t h p thêm m nh đ ORDER By đ th y rõ s l ế ợ xu t c a t ng v t t ậ ư ư ấ ủ ừ
- 15 -
K t qu truy v n tr v : ả ề ế ả ấ
1.9/- M nh đ chép d li u ra b ng m i :
ữ ệ
ớ
ề
ệ
ả
ệ ề ướ ế ợ ộ ớ ấ ữ ệ ạ ộ ả ờ ạ ữ ệ ể ớ ố ạ ữ ệ ả ắ ợ V i cú pháp SELECT FROM bên d i k t h p m nh đ INTO cho phép b n sao chép ớ k t qu c a m t truy v n cho ra m t b ng d li u m i bên d li u và c u trúc t ả ủ ấ ừ ế ữ ệ trong c s d li u hi n hành ho c các b ng d li u t m th i dùng đ tính toán các ả ặ ệ ơ ở ữ ệ ộ x lý ph c t p. Trong tr ng h p n u b n mu n t o ra b ng d li u m i thì b t bu c ứ ạ ử tên c a b ng ph i duy nh t trong c s d li u. ạ ế ơ ở ữ ệ ườ ấ ủ ả ả
ạ ự ấ d u thăng (#) ho c hai ký t ự ấ ệ d u thăng (##) phía tr ả ạ
ả ạ ỏ ả ạ ệ ố ủ
ệ ố ạ ả ạ i s d ng nào n i k t vào Microsoft SQL Server. ướ c B n có th ch đ nh các ký t ặ ị ỉ ể ụ ộ tên b ng đ c t o trong câu l nh SELECT INTO dùng đ t o ra các b ng t m c c b ượ ạ ả ể ạ ở c s d ng b i (local) ho c các b ng t m toàn c c (global). B ng t m c c b ch đ ỉ ượ ử ụ ụ ặ ả ụ ộ i t o ra đ ng h y b b ng t m c c b khi ng ng i tao ra nó và h th ng s t ườ ạ ạ ộ ẽ ự ộ ườ ụ ụ ượ ử c s c l i b ng t m toàn c c đ b ng ng ng n i k t vào Microsoft SQL Server. Ng ượ ạ ả ố ế ư ả d ng cho nhi u ng đ ng h y b ng t m toàn c c khi i khác nhau và h th ng t ề ụ ủ ự ộ ườ ụ không còn ng ườ ử ụ ố ế
Cú pháp :
- 16 -
Trong đó :
c t o l p có c u trúc và d li u t truy ớ là tên c a b ng m i s đ ủ ả ớ ẽ ượ ạ ậ ữ ệ ừ ấ • Tên b ng m i : ả v n.ấ
• Tên b ng d li u : ữ ệ là tên c a b ng ch a d li u ngu n cho vi c sao chép. ứ ữ ệ ủ ả ả ệ ồ
Ví d :ụ
ả ứ ế ộ ị ể ạ ề ạ ế ụ ậ ự ệ ệ ạ Đ t o ra b ng t m c c b ch a thông tin thu giá tr gia tăng (VAT) là 10% thành ti n c a các phi u nh p hàng trong tháng 01/2002. B n th c hi n câu l nh SELECT ủ INTO nh sau : ư
ệ ệ ữ ệ ế ế ự ể ệ ượ ư ạ c l u tr trong b ng t m ữ ả Sau đó th c hi n l nh k ti p đ xem d li u hi n đang đ #THUE_PNHAP_200201.
K t qu truy v n tr v : ả ề ế ả ấ
ờ ạ ạ ắ ố ế ự ệ i ố ế ạ ộ ụ ữ ệ ủ ạ ấ ả B n t m th i ng t n i k t vào Microsoft SQL Server và sau đó th c hi n n i k t l i truy v n xem d li u c a b ng t m c c b vào Micorsoft SQL Server, th c hi n l #THUE_PNHAP_200201 đã t o tr c đó. ệ ạ ướ ự ạ
- 17 -
đ ng h y b ạ ệ ố ự ộ ủ ỏ (B ng t m #THUE_PNHAP_200201 đã không còn vì h th ng đã t ả b ng t m c c b khi b n ng ng n i k t vào Microsoft SQL Server). ả ụ ộ ố ế ư ạ ạ
1.10/- M nh đ th ng kê d li u : ề ố
ữ ệ
ệ
ệ ề ướ ế ợ bên cu i k t qu truy v n. Tuy nhiên n u b n s ấ ố ế ả ệ ố ế ữ ệ ẽ ố ố ề ế i k t h p m nh đ COMPUTE cho phép b n có V i cú pháp SELECT FROM bên d ạ ớ ạ ử th t o ra dòng th ng kê d li u ữ ệ ở ể ạ d ng thêm m nh đ COMPUTE BY ti p theo thì h th ng s th ng kê d li u theo ụ t ng nhóm d li u. ừ ệ ữ ệ
Cú pháp :
Trong đó :
ữ ệ ế ố ả ẽ • Count, Min, Max, Sum, Avg : là các hàm th ng kê tính toán d li u mà k t qu s xu t hi n cu i k t qu truy v n ho c t ng nhóm d li u. ệ ở ố ế ặ ừ ữ ệ ấ ấ ả
c tính toán kèm v i các hàm th ng kê ch ứ ể ặ ượ ớ ố ỉ c đó. • Tên c t :ộ tên các c t ho c bi u th c đ ộ đ nh tr ị ướ
Ví d :ụ
ị ể ể ế ặ đã đ t hàng cho các nhà cung c p có mã là ặ ng đ t t các v t t ổ ấ ấ ố ượ ề ặ Đ hi n th thông tin chi ti ậ ư "C02" ho c "C03". Có th ng kê t ng s l ố ượ ít nh t trên k t qu truy v n. B n th c hi n các câu l nh SELECT FROM nh sau : ệ ng nhi u nh t, s l ư ng đ t, s l ặ ố ượ ệ ố ấ ự ế ả ấ ạ
K t qu truy v n tr v : ả ề ế ả ấ
- 18 -
Ví d :ụ
ư ừ ạ ạ ố ố ế ợ ấ ớ ề ề ệ ắ Theo ví d trên nh ng b n mu n th ng kê theo t ng nhà cung c p. Lúc này b n b t bu c s d ng m nh đ COMPUTE BY tuy nhiên c n k t h p v i m nh đ ORDER BY. B n th c hi n các câu l nh SELECT FROM nh sau : ệ ụ ộ ử ụ ự ạ ầ ư ệ ệ
K t qu truy v n tr v : ả ề ế ả ấ
- 19 -
ệ
ấ ữ ệ SQL Server 2000 : Các câu l nh truy v n d li u – Bi u th c CASE ứ
ể
Bi u th c CASE trong Transaction-SQL vô cùng h u ích.
ứ
ữ
ể
ể
ủ
ứ
ạ ộ
ấ ơ
ự
ả
ỉ
vi c so sánh m t bi u th c b t kỳ v i hàng lo t các giá tr ch
ệ
ứ ấ
ớ
ộ
ể
ạ
i l p trình trong môi tr
c đó, n u b n là ng
đ nh tr
ườ ậ
ướ
ế
ạ
ị
ệ Ho t đ ng c a bi u th c CASE r t đ n gi n ch là th c hi n ỉ ị ườ ng ầ Visual Basic thì bi u th c CASE c a Transaction-SQL g n
ủ
ứ
ể
gi ng nh c u trúc đi u khi n Select Case. ề
ư ấ
ố
ể
ể ộ ấ ề ả ệ ồ nh các c u trúc đi u khi n khác. Bi u th c CASE có th s d ng ể ề ể ự ở ể ử ụ ứ ề ể ể Tuy nhiên bi ut h c CASE hoàn toàn không ph i là m t c u trúc đi u khi n, đi u này ứ c s d ng l ng vào các câu l nh khác mà không th th c hi n có nghĩa là nó ch đ ệ ỉ ượ ử ụ ạ hai d ng đ n l ấ ư ơ ẻ khác nhau.
Cú pháp CASE d ng đ n gi n : ơ ạ ả
- 20 -
Trong đó :
c dùng đ so ứ bi u th c tính toán ho c tên c t d li u c a b ng đ ặ ộ ữ ệ ủ ứ ể ả ượ ể • Bi u th c : ể sánh.
• Giá tr 1, giá tr 2 : là các giá tr c th đ so sánh b ng (=) v i bi u th c. ị ị ị ụ ể ể ứ ể ằ ớ
là các bi u th c s đ ể ả ứ ẽ ượ c tr v khi ả ề • Bi u th c k t qu 1, bi u th c k t qu 2 : ể vi c so sánh c a bi u th c b ng v i các giá tr so sánh t ứ ằ ứ ế ủ ứ ế ớ ả ị ể ệ ể ng ng. ươ ứ
t c các tr ể ứ ẽ ượ ể c tr v khi t ả ề ấ ả ườ ng h p so ợ • Bi u th c k t qu N : ả ứ ế sánh đ u không b ng v i các giá tr đ a ra. là bi u th c s đ ị ư ề ằ ớ
Ví d :ụ
ị ừ ạ ả ạ ử ụ ệ Đ hi n th danh sách các v t t có trong b ng VATTU theo t ng lo i hàng, có đ m ế ể ể ậ ư theo t ng lo i hàng. B n s d ng l nh SELECT FROM có k t h p t ng s các v t t ế ợ ổ ạ ậ ư ố bi u th c CASE đ n gi n nh sau : ơ ứ ể ừ ả ư
K t qu truy v n tr v : ả ề ế ả ấ
- 21 -
Cú pháp CASE d ng tìm ki m : ế ạ
Trong đó :
- 22 -
là các bi u th c lu n lý dùng đ th c hi n các ể ứ ứ ể ể ự ứ ể ệ ậ • Bi u th c logic1, bi u th c logic2 : phép so sánh trong bi u th c CASE. ứ ể
ể ứ ế ứ ẽ ượ ể c tr v khi ả ề • Bi u th c k t qu 1, bi u th c k t qu 2 : là các bi u th c s đ ể m t trong các bi u th c lu n lý so sánh có k t qu là đúng. ả ứ ế ể ả ứ ả ế ậ ộ
là bi u th c s đ t c các bi u th c logic so ứ ẽ ượ ể c tr v khi t ả ề ấ ả ứ ể ể ả • Bi u th c k t qu N : ứ ế sánh đ a ra đ u sai. ề ư
Ví d :ụ
ị ể ể ỗ có trong b ng VATTU, thông tin b sung thêm chu i ệ ph n trăm giá bán. B n s d ng l nh ả l ộ ỷ ệ ử ụ ổ ạ ầ ộ Đ hi n th danh sách các v t t ậ ư ghi chú, tùy thu c vào giá tr c a c t t ị ủ SELECT FROM có k t h p bi u th c CASE tìm ki m nh sau : ể ế ợ ư ứ ế
K t qu truy v n tr v : ả ề ế ả ấ
ng Transaction-SQL th ườ ử ụ thì nh ng ng Th c t ng s d ng ư ự ế bi u th c CASE tìm ki m b i vì khi đó các bi u th c lu n lý mà b n dùng đ so sánh ứ ể i l p trình trong môi t ườ ể ườ ậ ế ứ ể ạ ậ ở
- 23 -
c phép ch a nhi u toán t ứ ứ ử ể ề ự ể ệ ằ ầ ộ ỉ đ ơ so sánh khác nhau, trong khi đó bi u th c CASE đ n ượ ph n trên ch cho phép b n th c hi n phép so sánh b ng (=) trên m t bi u th c gi n ứ ạ ả ở đ n gi n. ả ơ
Ví d :ụ
Đ gi m giá bán hàng trong tháng 02/2002 theo quy t c : ể ả ắ
• N u s l ng hàng <= 2 thì không gi m giá. ế ố ượ ả
• N u s l ng hàng t 3 đ n 10 thì gi m 10%. ế ố ượ ừ ế ả
• N u s l ng hàng > 10 thì gi m 20%. ế ố ượ ả
B n s d ng l nh UPDATE SET có k t h p bi u th c CASE tìm ki m nh sau : ế ợ ạ ử ụ ư ứ ệ ế ể
i bi u th c CASE có th đ ạ ể ể ượ ứ ế ợ c phép k t h p s d ng trong các câu l nh ệ ử ụ ủ ng h p khác nhau c a ườ ậ ợ Tóm l SELECT, UPDATE SET, DELETE dùng đ bi n lu n các tr các giá tr d li u bên trong m t câu l nh truy v n. ộ ể ệ ấ ị ữ ệ ệ
ệ
SQL Server 2000 : Các câu l nh truy v n d li u – ấ ữ ệ Truy v n con ấ
Trong khi l p trình bên trong Transaction-SQL, có đôi lúc
ậ
b n s s d ng đ n truy v n con đ tính toán d li u. Truy
ạ ẽ ử ụ
ữ ệ
ề
ế
ấ
v n con ch là m t câu l nh truy v n ch n l a (SELECT) ấ
ọ ự
ộ
ệ
ấ
ỉ
đ
c l ng vào các câu l nh truy v n khác nh m th c hi n các
ượ ồ
ự
ệ
ệ
ằ
ấ
truy v n tính toán ph c t p.
ứ ạ
ấ
- 24 -
Khi s d ng đ n truy v n con, b n c n l u tâm đ n m t vài y u t sau : ạ ầ ư ử ụ ế ố ế ế ấ ộ
• C n m và đóng ngo c đ n cho câu l nh truy v n con. ặ ơ ệ ầ ấ ở
c phép tham chi u đ n tên m t c t ho c m t bi u th c s tr v giá tr ạ ứ ẽ ả ề ộ ộ ế ế ể ặ ộ ị • B n ch đ trong truy v n con. ỉ ượ ấ
ho c m t danh sách các ể ả ề ả ủ ị ơ ẻ ấ ộ ặ ộ • K t qu c a truy v n con có th tr v là m t giá tr đ n l ế giá tr .ị
ộ ồ ủ ấ ớ i • C p đ l ng nhau c a các truy v n con bên trog Microsoft SQL Server là không gi ấ h n.ạ
1/- Truy v n con tr v m t giá tr đ n :
ả ề ộ
ị ơ
ấ
ả ả ề ủ ế ấ ả ả ộ ỉ ng các truy v n d nh này s s d ng các hàm tính toán th ng kê d li u. ị ơ Là các truy v n mà k t qu tr v c a nó luôn luôn đ m b o ch là m t giá tr đ n. Thông th ẽ ử ụ ữ ệ ườ ấ ạ ố
Ví d :ụ
t đ c tiên b n ph i tính ra ầ ấ ạ ơ ả c ngày đ t hàng g n đây là bao nhiêu b ng câu l nh truy v n nh sau : c danh sách các đ n đ t hàng g n đây nh t. Tr Đ bi ặ ể ế ượ đ ặ ượ ướ ấ ư ệ ầ ằ
K t qu truy v n tr v : ả ề ế ả ấ
ặ ơ Sau đó b n s l c ra danh sách các đ n đ t hàng có ngày đ t hàng là ngày "2002-03- ặ 15". Th c hi n truy v n nh sau : ạ ẽ ọ ệ ư ự ấ
ắ ằ ể ầ ấ ả Tuy nhiên không th nào ch c r ng ngày đ t hàng g n nh t trong b ng DONDH luôn ặ là "2002-03-15".
- 25 -
ấ ở ể ả ạ ả ằ i th i đi m này mà thôi. Đ đ m b o r ng ể c danh sách các đ n đ t hàng g n đây nh t, b n s k t h p c hai câu trên ch đúng t ỉ ơ ạ ẽ ế ợ ả ờ ầ ấ ặ Do đó câu l nh truy v n ệ b n luôn có đ ạ truy v n đã th c hi n ấ ượ ự ệ ở trên nh sau : ư
ậ ấ ố ộ Nh n xét th y r ng câu l nh truy v n con ch s d ng m t hàm tính toán th ng kê là ệ MAX nên k t qu luôn luôn tr v m t giá tr đ n. ỉ ử ụ ị ơ ấ ằ ả ế ả ề ộ
Ví d :ụ
t t ng s l ng đã đ t hàng c a t ng v t t ế ổ ố ượ ủ ừ ậ ư ặ ấ . B n th c hi n câu truy v n ệ ự ạ Mu n bi ố nh sau : ư
K t qu truy v n tr v : ả ề ế ả ấ
i s tr v t ng c ng s l ng đ t hàng c a t t c các ệ ướ ẽ ả ề ổ ố ượ ộ ủ ấ ả ặ ấ có trong b ng CTDONDH. V i câu l nh truy v n bên d ớ v t t ậ ư ả
c t l ấ ầ ủ ng đ t hàng c a ặ ố ượ ng đ t hàng c a toàn b các v t t B n k t h p hai câu truy v n trên đ bi ạ t ng v t t ừ trên t ng c ng các s l ộ ế ợ ậ ư ề ế ượ ỉ ệ ủ ph n trăm s l ộ ố ượ t đ ặ ổ . ậ ư
- 26 -
K t qu truy v n tr v : ả ề ế ả ấ
2/- Truy v n con tr v danh sách các giá tr :
ả ề
ấ
ị
ấ ộ . Thông th ị ẽ ấ ấ ạ ả ả ề ủ ườ ệ ự ề ệ ẽ ượ ử ụ ạ IN s đ ử ệ ộ ợ ộ ị Là các truy v n mà k t qu tr v c a nó là m t danh sách các giá tr hay còn g i là ế ọ ữ ệ ủ ng các truy v n con d ng này s l y d li u c a m t t p h p các ph n t ầ ử ộ ậ ợ m t ho c nhi u b ng khác th c hi n vi c so sánh trong m nh đ WHERE c a truy ủ ệ ả ề ặ ộ c s d ng đ so sánh trong truy v n con d ng này b i vì nó v n cha. Toán t ở ấ ấ ể dùng ch đ nh vi c so sánh m t ph n t có thu c trong m t t p h p các ph n t hay ầ ử ộ ậ ầ ử ỉ không.
Ví d :ụ
ự t các nhà cung c p nào mà công ty đã đ t hàng trong tháng 01/2002. B n th c ạ ặ ấ Đ bi ể ế hi n câu truy v n nh sau : ệ ư ấ
K t qu truy v n tr v : ả ề ế ả ấ
- 27 -
ủ ẽ ấ ạ ọ ố ứ Tuy nhiên thông tin mà b n mu n hi n th đ y đ s là h tên các nhà cung c p ch ể ị ầ không ph i là mã nhà cung c p. Do th b n s s d ng truy v n nh sau : ế ạ ẽ ử ụ ư ấ ả ấ
ả ả ằ ấ ượ ấ Đâu đ m b o r ng trong tháng 01/2002 công ty ch đ t hàng cho hai nhà cung c p C01 c danh sách h tên các nhà cung c p mà công ty đã và C03. Do th đ luôn luôn có đ ế ể đ t hàng trong tháng 01/2002, b n th c hi n truy v n con nh sau : ư ự ạ ặ ỉ ặ ọ ấ ệ
K t qu truy v n tr v : ả ề ế ả ấ
ạ ừ ự ệ ề ặ ệ ả ề ệ ị ừ ấ ể ể ồ ạ ủ ữ ệ ợ ứ ế ặ ví d bên trên. B n có th s d ng t khóa EXISTS ho c m nh đ JOIN đã th c hi n vi c so sánh ể ử ụ các dòng d li u trong các truy v n con tr v danh sách các giá tr . T khóa EXISTS ữ ệ i c a d li u, ngay sau EXISTS là m t câu l nh SELECT dùng đ ki m tra tính t n t ệ . Hai câu mà k t qu tr v c a nó là m t t p h p tr ng ho c có ch a nhi u ph n t ầ ử l nh truy v n bên d ụ ệ ộ ề ố i đ u có k t qu tr v nh câu l nh truy v n ấ ở ả ả ề ủ ấ ả ả ề ư ộ ậ ế ướ ề ệ
- 28 -
Ho cặ
ố ử ụ ử ấ ng (=, >, <, <>, …) trong truy v n con khóa ANY, ALL phía ộ ạ ị so sánh bình th N u mu n s d ng các toán t tr v danh sách các giá tr thì b t bu c b n ph i k t h p các t ừ ắ c câu l nh truy v n con. B n nên nh m t quy t c nh sau : tr ạ ườ ả ế ợ ắ ế ả ề ướ ớ ộ ư ệ ấ
Ví d :ụ
đ t hàng. B n có th ư ấ ờ ặ ạ ể Đ bi ể ế th c hi n câu truy v n nh sau : ự t danh sách các nhà cung c p nào mà công ty ch a bao gi ệ ư ấ
Ho c ặ
K t qu truy v n tr v : ả ề ế ả ấ
- 29 -
ng đ ng <> ANY". Khi ể ắ ươ Tuy nhiên n u b n hi u sai các quy t c trên "NOT IN s t ế đó v i câu truy v n bên d ẽ ươ i s tr v k t qu sai hoàn toàn. ướ ẽ ả ề ế ạ ấ ả ớ
K t qu truy v n tr v : ả ề ế ả ấ
ừ ể ạ ằ ấ ớ ữ ệ ủ ặ ạ ợ ườ ử khóa ALL, ANY trong các truy v n con nh m giúp b n hi u thêm trong th c Các t ự ấ ỉ ầ hi n vi c so sánh d li u c a các truy v n con v i truy v n cha, tuy nhiên b n ch c n ệ ệ ấ nh các toán t IN ho c NOT IN và s d ng cho đúng trong các tr ng h p so sánh ử ụ ớ c n thi ả ề ầ t đ i v i d ng truy v n con tr v danh sách các giá tr . ị ế ố ớ ạ ấ
- 30 -
ệ
SQL Server 2000 : Các câu l nh truy v n d li u – ấ ữ ệ L nh UPDATE SET
ệ
Các d li u sau khi đ
ữ ệ
ượ ư
ữ
ả
đ m b o r ng các giá tr đó s đúng mãi mãi. Đôi khi các giá tr ẽ
ả ằ
ả
ị
ư c l u tr vào bên trong b ng ch a ị i cho đúng theo m t yêu
c thay đ i l
ổ ạ
ộ
này cũng c n ph i đ ầ
ả ượ
c u nào đó. B ng ti n ích Enterprise Manager, b n có th thay ầ
ể
ệ
ằ
ạ
đ i tr c ti p các giá tr t i các dòng d li u hi n có bên trong
ổ ự ế
ữ ệ
ị ạ
ệ
b ng trên màn hình hi n th các dòng d li u. ể
ữ ệ
ả
ị
ườ ợ ầ ử ổ ồ ề ờ ạ ộ ả ệ ử ụ ầ ể ị ng h p c n s a đ i đ ng th i nhi u dòng d li u bên trong Bên c nh đó trong các tr ữ ệ ạ m t b ng, b n s s d ng l nh UPDATE SET. Tuy nhiên khi s d ng l nh này b n ệ ạ ẽ ử ụ i các giá tr sau khi thay đ i. Cú pháp đ y đ c a l nh không th khôi ph c l ủ ủ ệ ổ ụ ạ nh sau : c mô t UPDATE SET đ ả ư ượ
Cúp pháp :
Trong đó :
tên b ng có ch a các dòng d li u mu n s a đ i. • Tên b ng :ả ố ử ổ ữ ệ ứ ả
ố ử ổ ị ủ ể ạ ổ • Tên c t :ộ tên c t mu n s a đ i giá tr d li u. B n có th thay đ i giá tr c a nhi u ề ị ữ ệ c t bên trong m t b ng trong cùng m t câu l nh UPDATE SET. ộ ộ ộ ả ệ ộ
ặ ộ ứ là m t giá tr c th ho c m t hàm tính toán mà giá tr tr v c a nó s ị ả ề ủ ẽ c đó. • Bi u th c : ể c c p nh t vào tên c t trong b ng ch đ nh tr đ ậ ượ ậ ị ụ ể ả ộ ị ộ ỉ ướ
tên các b ng có quan h d li u, đ ả ả ệ ữ ệ ả ượ ể ế ố c dùng đ k t n i • Tên b ng1, tên b ng2 : quan h trong khi s a đ i d li u. ử ổ ữ ệ ệ
ề ệ ử ổ là bi u th c lu n lý ch đ nh các dòng d li u ph i th a đi u ỉ ữ ệ ứ ậ ả ỏ ị • Đi u ki n s a đ i : ể ki n đ a ra thì m i b s a đ i. ớ ị ử ổ ề ệ ư
L u ý : ư
- 31 -
t c các m u tin ử ụ ệ ề ấ ả ẫ Trong l nh UPDATE n u không có s d ng m nh đ WHERE thì t ế trong b ng s b s a đ i. ẽ ị ử ổ ệ ả
Ví d :ụ
ể ượ ổ ộ ộ ủ ế ể ậ ớ ị ạ ử ụ ệ ể ả ị Đ có đ c t ng tr giá c a các phi u nh p hàng. B n có th thêm m t c t m i có tên TGNHAP (tr giá nh p) trong b ng PNHAP. S d ng l nh ALTER TABLE đ thêm ậ vào m t c t nh sau : ộ ộ ư
ử ụ ế ợ ệ ể ấ ổ ự ậ ả ộ ị Sau đó s d ng l nh UPDATE SET có k t h p truy v n con đ tính ra t ng giá tr nh p d a vào giá tr d li u c a các c t SLNHAP và TGNHAP trong b ng CTPNHAP ị ữ ệ ủ theo t ng s phi u nh p hàng. ừ ế ậ ố
i k t qu sau khi đã th c hi n c p nh p tính giá tr cho c t tr giá ể ạ ế ệ ậ ộ ị ự ả ậ ị Cu i cùng ki m tra l nh p (TGNHAP). ố ậ
K t qu truy v n tr v : ả ề ế ả ấ
Ví d :ụ
- 32 -
t c các phi u bán hàng trong ngày cu i cùng c a tháng ề ả ấ ả ế ủ ố Đ gi m giá 10% cho t 01/2002. B n s d ng l nh UPDATE SET nh sau : ệ ạ ử ụ ư
ậ ữ ệ ệ ậ ủ ộ ồ ữ ệ ả ộ ủ ế ộ ộ ỉ ệ ề ể ế ặ ả ạ ộ ề ạ ề ế ủ ệ ệ ấ ả ằ i vi c c p nh t các d li u trong b ng bao g m các hành đ ng thêm, h y và Tóm l ạ ỉ s a đ i d li u. Các hành đ ng này ch tác đ ng đ n d li u bên trong c a m t và ch ử ổ ữ ệ m t b ng mà thôi. Tuy nhiên bên trong các l nh INSERT … SELECT, DELETE, ả ộ UPDATE SET, b n có th tham chi u đ n m t ho c nhi u b ng khác đ t o ra các k t n i quan h nh m l y ra thông tin c a các b ng khác dùng trong các đi u ki n so ế ố sánh bên trong m nh đ WHERE. ệ ề
ọ ậ ạ ạ ạ ự ệ ữ ệ ể ụ ồ ạ ữ ệ ả ệ ặ ướ ệ ị ướ ứ ể ả ổ ệ ạ ế ộ ể ạ ở ẽ B n nên th n tr ng khi s d ng l nh DELETE và UPDATE SET vì khi đó b n s ệ ử ụ i d li u cũ tr c khi th c hi n các l nh này, b n nên c đó. Tr không th ph c h i l ướ t o ra b ng d li u d phòng (backup) b ng l nh SELECT INTO ho c chèn thêm các ằ ự ạ c khi thay đ i. Ngoài ra n u hi u rõ c t t m vào bên trong b ng đ ch a giá tr tr ế ộ ạ ể ậ ữ ch đ giao tác (transaction) là gì thì b n nên th c hi n các hành đ ng c p nh t d ộ ậ ự ế ộ ị i các giá tr li u bên trong các giao tác b i vì trong ch đ này b n có th ph c h i l ụ ồ ạ ệ d li u đã b c p nh t bên trong b ng. ữ ệ ị ậ ả ậ
ệ
SQL Server 2000 : Các câu l nh truy v n d li u – ấ ữ ệ L nh DELETE FROM
ệ
Trái ng
ớ ữ ệ
ượ ớ
ộ
ả
ạ c v i hành đ ng thêm m i d li u vào b ng, b n có th h y b các dòng d li u hi n đang có trong b ng khi
ể ủ ỏ
ữ ệ
ệ
ả
không còn s
ớ
ữ
ử ụ
d ng n a. V i hành đ ng này, b n không th ộ
ạ
khôi ph c l
ụ ạ
ủ ỏ
ữ ệ
ệ
i cho phép b n h y b các dòng d
DELETE FROM bên d
ể ệ i các d li u sau khi đã ra l nh h y b nó. L nh ữ
ủ ỏ
ướ
ạ
li u hi n đang có bên trong m t b ng.
ộ ả
ệ
ệ
Cú pháp :
- 33 -
Trong đó :
• Tên b ng :ả tên b ng có các dòng d li u mu n h y b . ố ủ ỏ ữ ệ ả
tên các b ng có quan h d li u, đ c dùng đ k t n i các ả ượ ể ế ố • Tên b ng1, tên b ng2 : ệ ữ ệ quan h nh m tra c u các thông tin trong khi xóa d li u. ữ ệ ả ệ ả ứ ằ
ề ỏ ữ ệ là bi u th c lu n lý ch đ nh các dòng d li u ph i th a ỉ ữ ệ ứ ậ ả ị • Đi u ki n xóa d li u : ể đi u ki n đ a ra thì m i b h y b . ớ ị ủ ỏ ệ ệ ư ề
L u ý : ư
t c các dòng ệ ử ụ ế ệ ấ ả Trong l nh DELETE n u quên không s d ng m nh đ WHERE thì t d li u hi n đang có bên trong b ng d li u s b h y t ữ ệ ề t c . ữ ệ ẽ ị ủ ấ ả ệ ả
Ví d :ụ
ể ủ ư ỏ ờ ặ ệ đ t hàng. B n s d ng l nh ạ ử ụ Đ h y b các nhà cung c p mà công ty ch a bao gi ấ DELETE nh sau : ư
ậ ấ ằ ử ụ ổ ư ụ ệ ề ể ề ả ệ ữ ệ ể ố ặ ệ ấ ư ệ ị Nh n xét th y r ng trong ví d này s d ng m nh đ LEFT JOIN đ thay đ i u tiên quan h d li u bên b ng NHACC, k ti p trong m nh đ WHERE DH.SODH IS ế ế NULL dùng đ ch đ nh vi c xóa đi nh ng nhà cung c p nào ch a có s đ t hàng (s ố ữ đ t hàng đang là tr ng). ặ ỉ ố
ể ử ụ ủ ấ ỏ đ t hàng b ng câu l nh nh sau : B n cũng có th s d ng truy v n con đ th c hi n hành đ ng h y b các nhà cung ể ự ạ c p trong b ng NHACC mà công ty ch a bao gi ấ ệ ờ ặ ộ ằ ư ư ệ ả
- 34 -
ậ ẽ ả ề ậ ả ủ ế ấ ợ ấ ằ ặ ệ ấ ể c đ t hàng. Nh n xét th y r ng k t qu c a truy v n con s tr v t p h p các nhà cung c p mà công ty đã đ t hàng, sau đó trong m nh đ WHERE MANHACC NOT IN dùng đ xác đ nh các nhà cung c p không n m trong t p h p các nhà cung c p đã đ ị ượ ặ ề ậ ằ ấ ấ ợ
Ví d :ụ
ể ủ ỏ ạ ử ụ ư ệ ặ ơ Đ h y b các đ n đ t hàng trong tháng 01/2002. B n s d ng l nh DELETE nh sau :
i vì vi c xóa d li u trong ệ ấ ỗ ữ ệ ệ H th ng Microsoft SQL Server s xu t hi n thông báo l ẽ ệ ố b ng DONDH s vi ph m ràng bu c khóa ngo i bên b ng CTDONDH. ộ ả ẽ ả ạ ạ
ỏ ủ ườ ạ ữ ệ ẹ ị ủ ượ ị ữ ề ỏ ả ạ ố ệ ầ ế ng khi h y b các dòng d li u hi n có bên trong m t b ng nào đó n u ệ c đ nh nghĩa ữ ệ c đó thì tuy t đ i d li u s không b h y ra kh i b ng. Mu n tránh nh ng sai sót ệ t các đ n đ t hàng có liên ặ c tiên b n c n ph i h y b d li u bên nhánh quan h nhi u (nhánh quan h c. Do đó, theo ví d trên, b n c n ph i xóa đi chi ti ả ộ ệ ố ữ ệ ẽ ả ủ ạ ụ ướ ướ ề ơ ế Thông th ộ ả b n vô tình vi ph m các ràng bu c toàn v n d li u v khóa ngo i đã đ ạ tr ướ này, tr ỏ ữ ệ con) tr ạ ầ quan trong tháng 01/2002 bên b ng CTDONDH. Th c hi n truy v n nh sau : ự ư ệ ấ ả
ữ ệ ả ấ ạ ố ệ ầ ỉ ọ ế ể ả ả ờ Trong câu l nh truy v n này, b n mu n xóa các dòng d li u trong b ng CTDONDH, ơ tuy nhiên c n ph i liên k t thêm b ng DONDH vào đ có th i gian ch l c ra các đ n đ t hàng trong tháng 01/2002. ặ
ệ ạ i truy v n h y b các đ n đ t hàng trong tháng ơ ủ ặ ấ ỏ ự c đó. Sau đó ti p t c cho th c hi n l 01/2002 ụ ướ ế ụ ví d tr ở
ả ỉ ả ề ề ữ ệ ặ ặ ủ ư i khi các đ n đ t hàng này đã có nh p hàng v r i thì h th ng s K t qu truy v n ch tr v thành công khi nòa các đ n đ t hàng trong tháng 01/2002 ế ả c nh p hàng v (d li u liên quan c a các đ n đ t hàng ch a có trong b ng ch a đ ư ượ ẽ PNHAP), ng ấ ậ c l ượ ạ ơ ơ ậ ệ ố ề ồ ặ ơ
- 35 -
ệ ệ ả ị ạ ớ xu t hi n thông báo. B i vì b ng PNHAP đã đ nh nghĩa có quan h khóa ngo i v i ấ b ng DONDH theo c t s đ t hàng tr c đó. ả ở ộ ố ặ ướ
ệ ủ ệ ằ ể ấ ề ỏ i vi c h y b d li u bên trong m t b ng b ng l nh DELETE có th cùng lúc ộ ả ỏ ữ ệ c nhi u dòng th a đi u ki n đ a ra. K t qu c a l nh truy v n này đôi ế ư ệ ề i n u chúng có vi ph m các ràng bu c toàn v n khóa ngo i bên ạ ỗ ế ả ủ ệ ộ ẹ ạ Tóm l ạ s h y b đ ẽ ủ ỏ ượ khi có th gây ra l ể nhánh quan h d li u nhi u. ệ ữ ệ ề
ạ ệ ể ủ ỏ ứ ọ ể ử ụ ả ộ ữ ệ ủ ấ ố ỏ ọ ể ị ả ữ ệ ấ ấ ề ồ ữ ệ ỏ ệ ủ ủ ế ỏ ọ ố ữ Ngoài ra b n cũng có th s d ng ti n ích Enterprise Manager đ h y b các dòng d ự li u hi n có bên trong b ng. Ch n ch c năng Open Table (Return all rows trong th c ệ ệ đ n t t sau khi nh n chu t ph i trên tên b ng mu n h y b các dòng d li u. Trong ả ơ ắ màn hình hi n th các dòng d li u trong b ng, đánh d u ch n ra các dòng d li u liên ả ti p nhau mu n h y b , nh n phím Del và ch n Yes đ đ ng ý vi c h y b các dòng đã ch n.ọ
Cách th c h y b d li u trong ti n ích Enterprise Manager ứ ủ ỏ ữ ệ ệ
- 36 -
ệ
ấ ữ ệ SQL Server 2000 : Các câu l nh truy v n d li u – L nh INSERT INTO
ệ
ệ
ớ
ạ
ấ
ộ L nh truy v n INSERT TO cho phép b n thêm m i m t c tiên
ho c nhi u dòng d li u vào bên trong m t b ng. Tr
ộ ả
ữ ệ
ướ
ề
ặ
b n s làm quen v i l nh INSERT TO là l nh ch cho phép
ạ ẽ
ớ ệ
ệ
ỉ
b n thêm m i m t dòng d li u vào bên trong b ng.
ớ ộ
ữ ệ
ạ
ả
Cú pháp :
Trong đó :
c thêm m i dòng d li u. • Tên b ng :ả tên b ng đ ả ượ ữ ệ ớ
ả ạ ộ ị ỉ ầ ả ị • Danh sách c t :ộ danh sách tên các c t có trong b ng. B n có th không c n ch đ nh ra tên c a các c t, tuy nhiên khi đó danh sách các giá tr mà b n đ a vào ph i theo đúng th t c đó. ủ v t lý c a các c t bên trong b ng khi t o c u trúc b ng tr ứ ự ậ ể ạ ư ướ ạ ấ ộ ủ ả ả ộ
Ví d :ụ
Đ thêm m t v t t m i vào b ng VATTU, b n s d ng l nh INSERT To nh sau : ộ ậ ư ớ ạ ử ụ ư ể ệ ả
Ho c b n cũng có th th c hi n nhanh l nh nh sau : ặ ạ ể ự ư ệ ệ
câu l nh th hai ch đúng khi th t ệ ấ Tuy nhiên lúc b y gi VATTU phài là : mã v t t ờ ậ ư ứ , tên v t t ậ ư ơ ỉ , đ n v tính và t ị c a các c t trong b ng ả ứ ự ủ ộ ph n trăm. ầ l ỷ ệ
ợ ữ ệ ệ ạ ườ ề ố ộ ng h p khi b n có m t danh sách các d li u hi n đang có bên trong m t Trong tr ộ c thêm m i vào ho c nhi u b ng khác nhau, theo yêu c u mu n các d li u này s đ ớ ặ ể ử ụ bên trong m t b ng. N u b ng này ch a có trong c s d li u thì b n có th s d ng ữ ệ ơ ở ữ ệ ẽ ượ ạ ả ộ ả ầ ư ế ả
- 37 -
ư ướ ạ ấ ớ ế ữ ệ ệ ả ắ ạ ộ c đây đ sao chép d li u và t o c u trúc cho l nh SELECT TO nh đã trình bày tr ữ ệ ể ệ b ng m i. Tuy nhiên n u theo yêu c u mu n b n ph i chèn thêm (append) các dòng d ữ ố ả ả ạ ầ li u này vào b ng d li u hi n có trong c s d li u thì b t bu c b n ph i s d ng ả ử ụ ơ ở ữ ệ ệ l nh INSERT … SELECT. ệ
Cú pháp :
Trong đó :
c thêm các dòng d li u m i. • Tên b ng :ả tên b ng đ ả ượ ữ ệ ớ
• Các m nh đ c a l nh SELECT bên trên hoàn toàn gi ng nh l nh SELECT FROM. ề ủ ệ ư ệ ệ ố
Ví d :ụ
ổ ể ố ượ ấ ủ ậ ổ trong tháng i tình ng nh p, t ng s l ố ượ ớ ữ ệ ậ ạ ấ Đ tính ra t ng s l 01/2002, sau đó l y các d li u này thêm m i vào b ng TONKHO đ c p nh t l hình nh p xu t hoàng hóa trong tháng 01/2002, b n s d ng các l nh nh sau : ng xu t c a các v t t ậ ư ể ậ ư ả ạ ử ụ ệ ậ ấ
c tiên t o ra b ng o dùng đ tính t ng s l ng nh p c a các v t t trong tháng ố ượ ể ạ ả ả ổ ậ ủ ậ ư Tr ướ 01/2002.
ng xu t c a các v t t trong tháng ế ế ạ ể ả ổ ố ượ ấ ủ ậ ư K ti p t o ra b ng dùng đ tính t ng s l 01/2002.
- 38 -
S d ng l nh INSERT … SELECT đ thêm d li u vào b ng TONKHO. ữ ệ ử ụ ể ệ ả
ụ ề ệ vi c c p nh t d ậ ỉ ả ẽ c t ượ ự ộ c vi c này, b n c n bi . Đ làm đ ậ ữ ự ế ệ đ ng th c hi n thông qua các hành t đ n khái ni m trigger bên ệ ạ ầ ự ế ế ượ ệ ậ Trên đây ch là ví d v l nh INSERT … SELECT, trong th c t li u trong b ng TONKHO s hoàn toàn đ ệ ệ đ ng nh p xu t v t t ấ ậ ư ể ộ trong b ng.ả
ạ ả ạ c đó thì tuy t đ i d li u s không đ ộ ớ ữ ệ ị ệ ố ữ ệ ẽ ữ ệ ườ ạ ộ Thông th bu c toàn v n d li u đã đ nh nghĩa tr ướ ữ ệ vào bên trong b ng. M t vài ràng bu c toàn v n d li u th ộ ả ngo i, mi n giá tr không đ ỏ ố ng khi thêm m i d li u vào b ng n u b n vô tình có vi ph m các ràng ế ườ ượ ư c l u ẹ ng vi ph m là : khóa ớ ẹ c phép b tr ng d li u khi thêm m i. ữ ệ ượ ề ạ ị
ệ ớ ữ ệ ệ ả i vi c thêm m i d li u vào bên trong b ng băng l nh INSERT có th đ ạ ặ ừ ề ộ ể ượ c Tóm l thêm t ng dòng m t (INSERT INTO) ho c cùng lúc nhi u dòng (INSERT … SELECT).
ạ ể ậ ể ử ụ ả ệ ứ ọ ả ấ ố ớ ữ ệ ớ ạ ậ ữ ệ ộ ữ ệ ả Ngoài ra b n cũng có th s d ng ti n ích Enterprise Manager đ nh p m i d li u ớ ữ ệ ự tr c ti p vào bên trong b ng. Ch n ch c năng Open Table (Return all rows) trong th c ế ự t sau khi nh n chu t ph i trên tên b ng mu n nh p m i d li u. Trong màn đ n t ả ơ ắ ữ ệ i dòng d li u hình hi n th các dòng d li u trong b ng, nh p thông tin d li u m i t ậ ể tr ng bên d i cùng. ị ướ ắ
- 39 -
ả Màn hình hi n th các dòng d li u trong b ng ữ ệ ể ị