
Lý thuy t v câu l nh SQLế ề ệ
by nguyenduc on 1/1/2010, 18:14
SQL là ngôn ng truy v n d a trên đ i s quan h . Câu l nh c a SQL dùngữ ấ ự ạ ố ệ ệ ủ
đ rút trích d li u c a m t m t hay nhi u quan h . K t qu c a m t câuể ữ ệ ủ ộ ộ ề ệ ế ả ủ ộ
l nh SQL (truy v n) là m t quan h . Đ đ n gi n trong cách trình bày, ệ ấ ộ ệ ể ơ ả
ta xem quan h mà câu truy v n s d ng đ t o ra quan h khác g i là ệ ấ ử ụ ể ạ ệ ọ
quan h ngu n, quan h k t qu c a truy v n là quan h đích. ệ ồ ệ ế ả ủ ấ ệ
I. Truy v n đ nh nghĩa d li u (data definition query) ấ ị ữ ệ
T o l c đ quan h rSV: ạ ượ ồ ệ
+ Create Table rSV (MASV Text (10) CONSTRAINT khoaChinh PRIMARY KEY,HOTEN Text
(30), NU YesNo, NGAYSINH Date, MALOP Text (10), TINH Text (50), HOCBONG Double )
T o l c đ quan h rKQ: ạ ượ ồ ệ
+ Create Table rKQ (MASV text (10),MAMH Text (10), DIEMTHI Double,CONSTRAINT
khoaChinh PRIMARY KEY (MASV,MAMH) )
Chú ý: Hai cách t o trên cho ta th y hai cách t o khóa: khóa ch g m m t ạ ấ ạ ỉ ồ ộ
thu c tính và khóa có nhi u thu c tính ộ ề ộ
Thêm c t DTHOAI có ki u d li u text 20 ký t vào l c đ quan h rSV: ộ ể ữ ệ ự ượ ồ ệ
+ Alter Table rSV Add Column DTHOAI Text (20)
S a ki u ki u d li u c a m t c t: ử ể ể ữ ệ ủ ộ ộ
+ Alter Table rSV Alter Column DTHOAI double
Xóa c t c a m t l c đ đã có: ộ ủ ộ ượ ồ
+ Alter Table rSv Drop Column DTHOAI
Xóa ràng bu c khóa chính: ộ
+ Alter Table rSv Drop Constraint khoaChinh
Thêm ràng bu c khóa chính: ộ
+ Alter Table rSv Add Constraint khoaChinh Primary Key (MASV)
Thêm ràng bu c mi n giá tr : ộ ề ị
+ ALTER TABLE doc_exd WITH NOCHECK ADD CONSTRAINT exd_check CHECK
(column_a > 1)
II. Truy v n ch n (select query) ấ ọ
Khi có nhu c u th hi n các dòng d li u c a m t quan h hay c a nhi u quan h d i d ngầ ể ệ ữ ệ ủ ộ ệ ủ ề ệ ướ ạ
m t quan h có s c t và s dòng theo ý mu n nh b ng đi m c a sinh viên, danh sáchộ ệ ố ộ ố ố ư ả ể ủ
sinh viên thì ta s d ng truy v n ch n. ử ụ ấ ọ
Đ truy v n ch n ta s d ng câu l nh SQL sau: ể ấ ọ ử ụ ệ
Select [Distinct|Top n[%]] field1 [As alias1][,field2 [As alias2][,...]]
From table1 [Inner Join table2 On table1.field1 table2.field2] ...
[Where dieuKien]
[Order By field1[Asc|Desc][,field2[Asc|Desc]][,...]]];

Distinct: lo i b các b trùng trong quan h đích ạ ỏ ộ ệ
Top n[%]: Ch n n hay n% m u tin đ u tiên. ọ ẫ ầ
table: Tên table hay query ch a d li u. ứ ữ ệ
field: Tên field
hay m t bi u th c. ộ ể ứ
Alias: Tr ng h p field là m t bi u th c thì là m t tên m i c a bi u th c. ườ ợ ộ ể ứ ộ ớ ủ ể ứ
Inner Join: m i m u tin c a table1 n i v i b t kỳ m u tin nào c a table2 có d li u c a field1ỗ ẫ ủ ố ớ ấ ẫ ủ ữ ệ ủ
th a mãn đi u ki n so sánh v i d li u c a field2 t o thành m u tin c a query. ỏ ề ệ ớ ữ ệ ủ ạ ẫ ủ
đi u ki n: Bi u th c mà d li u m u tin ph i th a mãn ề ệ ể ứ ữ ệ ẫ ả ỏ
Chú ý:
Khi nêu rõ thu c tính đó thu c v quan h nào ta vi t theo cú pháp tên QuanH .tênThu cTính.ộ ộ ề ệ ế ệ ộ
Ví d : L p danh sách sinh viên g mụ ậ ồ
MASV,HOTEN,HOCBONG
SELECT MASV,HOTEN,HOCBONG
FROM Sv;
Ví d : L p danh sách sinh viên n , có h c b ng thu c có mã l p là “CĐTH2B”. ụ ậ ữ ọ ổ ộ ớ
SELECT MASV,HOTEN,HOCBONG
FROM Sv
WHERE NU And MALOP = 'CĐTH2B' And HOCBONG > 0;
Ví d : L p danh sách sinh viên g m MASV,HOTEN,HOCBONG trong đó h c b ng đ c s pụ ậ ồ ọ ổ ượ ắ
gi m d n ả ầ
SELECT MASV,HOTEN,HOCBONG
FROM Sv
ORDER BY HOCBONG DESC;
Ví du:
L p danh sách sinh viên g m MASV,HOTEN,TENLOP ậ ồ
SELECT MASV,HOTEN,TENLOP
FROM Sv Inner Join Lop On Sv.MALOP=Kh.LOP;
Ví d : L p danh sách sinh viên có MASV,HOTEN,NU,NGAYSINH,DIEMTHI v i đi m ụ ậ ớ ể
thi môn ‘CSDL’ >= 8
SELECT Kq.MASV,HOTEN,NU,NGAYSINH,DIEMTHI
FROM Kq Inner Sv On Kq.MASV = Sv.MaSV
WHERE MAMH = 'CSDL' AND
DIEMTHI >= 8;
Ví d : L p danh sách sinh viên có ho là “NGUYEN” ụ ậ
SELECT *
FROM Sv
WHERE HOTEN Like “NGUYEN*”;
III. Truy v n nhóm d li u (Select query có group by) ấ ữ ệ

Khi có nhu c u chia các b theo t ng nhóm r i tính toán trên t ng nhóm này nh tính đi mầ ộ ừ ồ ừ ư ể
trung bình c a t t c các môn h c c a t ng sinh viên, hay là c n tính s l ng sinh viên c aủ ấ ả ọ ủ ừ ầ ố ượ ủ
m i l p , hay là c n bi t t ng s môn mà m t sinh viên đã đăng ký h c thì ta s d ng truy v nỗ ớ ầ ế ổ ố ộ ọ ử ụ ấ
theo nhóm.
Đ truy v n c ng nhóm ta s d ng câu l nh SQL sau: ể ấ ộ ử ụ ệ
Select [Distinct|Top n[%]] field1 [As alias1][,field2 [As alias2][,...]]
From table1 [Inner Join table2 On table1.field1 table2.field2] ...
[Where dieuKienLocMauTinNguon]
[Group By fieldGroupBy[,fieldGroupBy[,...]]
[Having dieuKienLocMauTinTongHop]
[Order By field1[Asc|Desc][,field2[Asc|Desc]][,...]]];
đi uKi n L cM uTinNgu n:ề ệ ọ ẫ ồ
đi u ki n mà các m u tin ngu n ph i th a mãn (phép ch n) ề ệ ẫ ồ ả ỏ ọ
field GroupBy: tên field mà các m u tin có d li u gi ng nhau trên y đ c x p vào ẫ ữ ệ ố ấ ượ ế
cùng nhóm. đi uKi nL cM uTinT ngH p: đi u ki n mà các m u tin t ng h p ề ệ ọ ẫ ổ ợ ề ệ ẫ ổ ợ
ph i th a mãn (phép ch n) ả ỏ ọ
Ví du: L p danh sách sinh viên có đăng ký ít nh t là ba môn h c ậ ấ ọ
SELECT Kq.MASV,HOTEN,NU,NGAYSINH,COUNT(MAMH) As SLMH
FROM Sv Inner Join Kq On Sv.MASV = Kq.MASV
GROUP BY Kq.MASV,HOTEN,NU,NGAYSINH
HAVING COUNT(MAMH)>=3;
Ví du: Đ m s l ng sinh viên n c a m i khoa ế ố ượ ữ ủ ỗ
SELECT Kh.MAKHOA,TENKHOA,COUNT(Kh.MAKHOA) AS SOLUONG
FROM (Sv Inner Join Lop On Sv.MALOP = LOP.MALOP) INNER JOIN Kh On
Lop.MAKHOA = Kh.MAKHOA
WHERE NU
GROUP BY Kh.MAKHOA,TENKHOA;
IV. Truy v n l ng nhau (nested query, sub query) ấ ồ
Là nh ng câu l nh truy v n mà trong thành ph n WHERE hay HAVING có ch a thêm m t câuữ ệ ấ ầ ứ ộ
l nh Select khác. Câu l nh select khác này g i là subquery. ệ ệ ọ
Ta l ng câu Select vào ph n Where hay Having theo cú pháp sau: ồ ầ
o bieuthuc toanTuSoSanh [ANY | ALL | SOME] (cauLenhSQL) ANY, SOME là b t kỳ, ALL làấ
t t c Các m u tin c a query chính th a mãn toán t so sánh v i b t kỳ/ t t c m u tin nàoấ ả ẫ ủ ỏ ử ớ ấ ấ ả ẫ
c a subquery ủ
o bieuThuc [NOT] IN (cauLenhSQL) Các m u tin c a query chính có giá tr b ng v i m t giá ẫ ủ ị ằ ớ ộ
tr trong subquery ị
o [NOT] EXISTS (cauLenhSQL).
Các m u tin c a query chính th a mãn khi subquery có m u tin ẫ ủ ỏ ẫ
Ví du: L p danh sách sinh viên có h c b ng cao nh t ậ ọ ổ ấ

SELECT *
FROM Sv
WHERE HOCBONG>=ALL(SELECT HOCBONG FROM SV);
Ví du: L p danh sách ậ
sinh viên có đi m thi môn CSDL cao nh t ể ấ
SELECT SV.MASV,HOTEN,NU,NGAYSINH,DIEMTHI
FROM sv Inner Join kq On Sv.MASV = Kq.MASV
WHERE MAMH='CSDL' AND DIEMTHI >= ALL
(SELECT DIEMTHI FROM KQ WHERE MAMH='CSDL');
Hi u và v n d ng t t l nh truy v n d li u là m t vi c làm c c kỳ c n thi t đ t o ra cácể ậ ụ ố ệ ấ ữ ệ ộ ệ ự ầ ế ể ạ
k t qu cho báo cáo, th ng kê s li u. ế ả ố ố ệ
V. Truy v n c p nh t d li u (action query, data modification query) ấ ậ ậ ữ ệ
Cú pháp: Update table Set field1 = bi uTh c1, field2 = bi uTh c2 Where đi uKi n ể ứ ể ứ ề ệ
Cú pháp: Delete From table Where đi uKi n ề ệ
vi Truy v n h p (union query) ấ ợ
Khi có nhu c u th c hi n truy v n có k t qu nh toán t h p, ta s d ng câu l nh SQL sau: ầ ự ệ ấ ế ả ư ử ợ ử ụ ệ
Select .....Union Select ....
Ví du: L nh sau đây g p đôi danh sách sinh viên ệ ấ
SELECT MASV,HOTEN,NGAYSINH UNION SELECT MASV,HOTEN,NGAYSINH
Mô hình thác n cướ (ti ng Anhế: waterfall model) là m t mô hình c a quy trìnhộ ủ phát tri n ph n m mể ầ ề ,
trong đó quy trình phát tri n trông gi ng nh m t dòng ch y, v i các pha đ c th c hi n theo tr t tể ố ư ộ ả ớ ượ ự ệ ậ ự
nghiêm ng t và không có s quay lui hay nh y v t pha là: phân tích yêu c u, thi t k , tri n khai th cặ ự ả ượ ầ ế ế ể ự
hi n, ki m th , liên k t và b o trì. Ng i ta th ng d n bài báo đ cệ ể ử ế ả ườ ườ ẫ ượ Winston W. Royce xu t b n vàoấ ả
năm 1970 đ gi i thích ngu n g c cho tên g i "thác n c"; nh ng có đi u thú v là chính Royce đãể ả ồ ố ọ ướ ư ề ị
dùng mô hình phát tri n l pể ặ ch không h dùng thu t ng "mô hình thác n c".ứ ề ậ ữ ướ
Vào năm 1970 trong bài báo c a mình, Royce đã mô t d ng khái ni m cái mà ngày nay đ c côngủ ả ở ạ ệ ượ
nh n v i tên g i "mô hình thác n c", đã bàn lu n v nh ng nh c đi m c a mô hình này. Trong đó ôngậ ớ ọ ướ ậ ề ữ ượ ể ủ
cũng ch ra r ng mô hình này có th s đ c tu s a thành mô hình l p.ỉ ằ ể ẽ ượ ử ặ
Mô hình Royce nguyên g c có các pha theo đúng th t sau:ố ứ ự
1. Xác đ nh yêu c uị ầ
2. Thi t kế ế
3. Xây d ng (hay "tri n khai", "mã hóa", "vi t mã")ự ể ế
4. Liên k tế
5. Ki m th và Ch nh s a (hay «ki m nghi m»)ể ử ỉ ử ể ệ
6. Cài đ tặ
7. B o trìả

Theo mô hình thác n c, ng i phát tri n ph i th c hi n t ng giai đo n theo th t nghiêm ng t. Tr cướ ườ ể ả ự ệ ừ ạ ứ ự ặ ướ
h t, giai đo n "xác đ nh yêu c u" ph i đ c hoàn t t, k t qu nh n đ c s là danh sách các yêu c uế ạ ị ầ ả ượ ấ ế ả ậ ượ ẽ ầ
đ i v i ph n m m. Sau khi các yêu c u đã hoàn toàn đ c xác đ nh, s chuy n sang pha thi t k , phaố ớ ầ ề ầ ượ ị ẽ ể ế ế ở
này ng i ta s t o ra các tài li u dành choườ ẽ ạ ệ l p trình viênậ, trong đó mô t chi ti t các ph ng pháp và kả ế ươ ế
ho ch th c hi n các yêu c u đã đ c làm rõ pha tr c. Sau khi pha thi t k hoàn t t, l p trình viên sạ ự ệ ầ ượ ở ướ ế ế ấ ậ ẽ
tri n khai th c hi n (mã hóa, vi t mã) đ án h nh n đ c. Giai đo n ti p theo là liên k t các thànhể ự ệ ế ồ ọ ậ ượ ạ ế ế
ph n riêng l đã đ c nh ng đ i l p trình viên khác nhau th c hi n thành m t s n ph m hoàn ch nh.ầ ẻ ượ ữ ộ ậ ự ệ ộ ả ẩ ỉ
Sau khi pha tri n khai và pha liên k t hoàn t t, s di n ra pha ki m th và ch nh s a s n ph m; giaiể ế ấ ẽ ễ ể ử ỉ ử ả ẩ ở
đo n này nh ng khi m khuy t các giai đo n tr c đó s b lo i b . Sau đó, s n ph m ph n m m sạ ữ ế ế ở ạ ướ ẽ ị ạ ỏ ả ẩ ầ ề ẽ
đ c đ a vào s d ng; ph n b o trì ph n m m cũng s đ c b o đ m b ng cách b sung ch c năngượ ư ử ụ ầ ả ầ ề ẽ ượ ả ả ằ ổ ứ
m i và lo i tr các l i.ớ ạ ừ ỗ
Nh v y, mô hình thác n c ng ý r ng, vi c chuy n t pha phát tri n này sang pha khác s di n ra chư ậ ướ ụ ằ ệ ể ừ ể ẽ ễ ỉ
sau khi các pha tr c đó đã k t thúc hoàn toàn thành công, và không th quay lui v pha tr c đó hayướ ế ể ề ướ
nh y v t pha.ả ượ
[Tôi đã t ng h p kinh nghi m và tìm t li u trên m ng]ổ ợ ệ ư ệ ạ
Phân tích yêu c u: là quá trình xác đ nh nh ng đòi h i gì t h th ng, các yêu c u ch cầ ị ữ ỏ ừ ệ ố ầ ứ
năng và phi ch c năng. Là giai đo n s k t h p tham gia tích c c c a khách hàng. K tứ ạ ự ế ợ ự ủ ế
thúc là m t h s đ c t v h th ng….ộ ồ ơ ặ ả ề ệ ố

