NGÔN NG SQL
CH
NG III:
Ữ
ƯƠ
ữ ệ
ữ
ấ ạ
ệ
ế
ặ
ầ
ượ ề
ị
SQL (Structured Query Language) – ngôn ng ữ truy v n có c u trúc là ngôn ng con d li u ấ quan h r t m nh, d s d ng. Hi n nay SQL ệ ấ ễ ử ụ c cài đ t trong h u h t các ph n c đ đ ượ ầ m m h qu n tr CSDL nh Oracle, Dbase, ư ả ệ Access, Foxpro, SQL server
c
ữ
ượ
Các câu l nh trong ngôn ng SQL đ ệ chia thành hai lo i:ạ ệ
• Các câu l nh đ nh nghĩa d li u ị
ộ
ữ ệ cho phép t o các thành ph n trong CSDL nh ạ ư ầ b ng, c t (thu c tính) và các ch d n. ỉ ẫ ả ể ấ
ệ
ữ ệ đ l y v ề c s d li u
các m u tin (b n ghi) t
ộ • Các câu l nh thao tác d li u ả
ừ ơ ở ữ ệ
ẫ
ị
3.1. Các câu l nh đ nh nghĩa ệ d li u: ữ ệ
T o b ng
ả
ạ
ệ
ạ
ả
ạ
ổ
Câu l nh t o b ng có d ng t ng quát: CREATE TABLE Tablename(FieldName
DataType [Not null],...)
Trong đó: • FieldName là m t t
ố
ả ữ
ườ
ặ
ặ
đ n không có ộ ừ ơ kho ng tr ng, b t đ u là ch cái ti p theo ế ữ ắ ầ là ch cái (hoa ho c th ng) ho c ch s ữ ố ặ ho c d u n i. ố ấ • DataType là ki u d li u
ữ ệ
ể
Ví d :ụ
CREATE TABLE Sinhvien(Masv
smalliterger, Ho char(18), Ten char(8), Ngsinh date, Gtinh char(3), Mtinh char(3), Mhuyen char(3), Mlop char(3), Cogiadinh logical)
Thêm m t tr
ộ ườ
ng m i ớ
ALTER TABLE
ả
ườ
ng m i ớ
ữ ệ
ể
ớ ộ ộ
ộ
ng ng. ứ
DATATYPE() … ADD
[COLUMN]
DATATYPE()
Thêm vào b ng các tr
có tên là < New_Field_Name_1> … <
New_Field_Name_n> có ki u d li u là
DATATYPE v i đ r ng là m t cách
t
ươ
Ví d :ụ
ALTER TABLE Sinhvien ADD Nganh char(3) ADD
Ngaynhaphoc date
Xoá b ng ả
DROP TABLE TableName
c ch đ nh b i tên
ị
Xoá b ng đ ở ượ ả (TableName) ra kh i CSDL
ỉ ỏ
• Ví d :ụ • DROP TABLE SINHVIEN
3.2. Các câu l nh truy tìm ệ ữ ệ d li u
ạ
ạ
ữ ệ
D ng t ng quát c a câu l nh truy
ệ
ủ
ổ
tim d li u có d ng:
SELECT *|[Field1|Expression1 [AS alias1], Field2|
Expression2 [AS alias2], …FieldN| ExpressionN
[AS aliasN]] [DISTINCT]
[FROM Table1 | View1, Table2 | View2,…,TableN
| ViewN]
[WHERE ]
[GROUPE BY Field1, Field2,…,FieldN]
[HAVING ]
[ORDER BY [ASC | DESC]]
Gi
i thích ý nghĩa các thành ph n
ả
ầ
các tr ng: ị ộ ừ ườ
ng. D u “ấ ườ
t c các tr FROM Xác đ nh ngu n thông tin: *” hi u là t ể ị
các b ng ho c các khung nhìn trong danh sách SELECT Xác đ nh, tìm ki m n i dung thông tin t ế t ừ ấ ả ồ ể ừ ả ặ
Thông tin có th t t kêệ li
ề ệ
ề ả ộ ộ ỉ
ệ M u câu l nh th WHERE Xác đ nh đi u ki n: ị Đi u ki n là m t bi u th c Boolean, ch các b n ghi (b |hàng) tho ả ể ứ c đ a ra mãn đi u ki n m i đ ớ ượ ư ng dùng nh t là: ấ ệ ề ệ ườ ẫ
SELECT *|[Field1|Expression1 [AS alias1], Field2| Expression2 [AS
alias2], …FieldN| ExpressionN [AS aliasN]] [DISTINCT]
[FROM Table1 | View1, Table2 | View2,…,TableN | ViewN]
[WHERE
ữ ệ ộ
c ị ườ ằ ả
ả
ỉ ấ ệ ủ ằ ộ
• GROUPE BY Phân nhóm ho c g p nhóm d li u trong b ng: ả ặ ng s đ Có nghĩa r ng các b n ghi (b |hàng) có cùng giá tr tr ộ ẽ ượ g p thành nhóm, trong quan h k t qu ta ch th y các giá tr đ i ị ạ ệ ế di n c a nhóm. Chú ý r ng danh sách c t sau m nh đ GROUPE BY ph i bao hàm danh sách tr ề ng sau m nh đ SELECT. ộ ệ ả ườ ệ ề
ng đi kèm v i GROUPE BY ườ ớ
• HAVING
ả ế ể ỉ ệ
ứ ứ ứ ế ạ
ng đó ph i có m t trong danh sách tr ộ ng ườ ệ ườ ề ế ặ ả
trong đó bi u th c đi u ki n
ế ắ
ỉ ộ ề ẽ ượ ứ ự
c • ORDER BY
s p x p u ề ề ề
ế ế ị ằ ứ ự ắ ệ ườ ế
c ng th t ế trái sang ph i. N u trong l nh có dùng ừ ẽ ườ ả ụ ng t ế ượ ừ ệ ỉ
tìm ki m thông tin, các thông tin l y v s đ c a các c t ch ra trong danh sách theo th t ủ gi m n u dùng DESC (m c đ nh là ASC), các giá tr b ng nhau đ ả s p liên ti p li n k nhau. N u có nhi u tr ế ư ế ắ tiên theo danh sách tr GROUPE BY vi c s p x p s ch có tác d ng cho t ng nhóm đ ắ t o ra b i GROUPE BY. ạ ở
ệ
Câu l nh SQL v i nh ng ữ ớ ổ ế tình hu ng ph bi n
ố
Tìm ki m không đi u ki n
ề
ệ
ế
• SELECT * FROM
t c các b n ghi v i đ y đ các
ả ề ấ ả
ớ ầ
ủ
ả
Câu l nh này có nghĩa r ng tr v t tr
ệ
ng c a b ng ch ra b i
ằ ở
ườ
ủ
ả
ỉ
Ví d : ụ SELECT * FROM Sinhvien
• SELECT
t c các b n ghi v i các tr
ng ch ra
ệ
ằ
ớ
ỉ
Câu l nh này có nghĩa r ng tr v t
ả ề ấ ả
ườ
trong danh sách
ả ở
ỉ
Ví d : ụ SELECT ho, ten, lop, nganh FORM Sinhvien
ng ch ra trong
ườ
ệ
ớ
ỉ
ả ề ả ả
ở
• SELECT
ả
ộ
Ví d : ụ SELECT Tinh, Huyen DISTINCT FROM Sinhvien
ế
ề
Tìm ki m theo đi u ki n. ệ dùng m nh đ WHERE
ệ
ề
Ví d :ụ
SELECT Ho, Ten, Lop FROM Sinhvien WHERE nganh=404
Ví d :ụ
SELECT Ho, Ten, Lop FROM Sinhvien WHERE Mtinh BETWEEN “01” and “03”
Ví d :ụ
h p ễ ữ ệ ở
SELECT Ho, Ten, Lop FROM Sinhvien WHERE nganh IN (“101”,”102”,”103”) Các phép so sánh, các phép toán BETWEEN, LIKE, IN đ c t ượ ổ ợ b i các phép toán logic s cho ta nh ng m nh đ logic bi u di n ể các đi u ki n ph c t p h n trong phép l c v i m nh đ WHERE. ứ ạ ề ệ ẽ ơ ệ ề ề ớ ọ
Ví d :ụ
ả ồ
ệ ế ỉ ặ ọ ộ
SELECT Ho, Ten, Lop FROM Sinhvien WHERE Mtinh BETWEEN “01” and “03” and nganh IN (“101”,”103”) trong quan h k t qu g m các c t ho, ten, lop các sinh viên có que ộ quán thu c các t nh có mã là 01, 02 ho c 03 và có mã ngành h c là 101 ho c 103. ặ
ấ ồ Các câu l nh truy v n l ng
ệ
ệ
ấ ặ
Trong câu l nh truy v n (chính) thành i ph n sau HAVING ho c WHERE ta l ạ ầ có m t câu l nh SELECT g i là câu
ệ
ọ
ộ
l nh ệ
SELECT l ng.
SELECT phụ và ta nói có câu l nh ệ ồ
ể
ứ
ặ
Bi u th c so sánh sau HAVING ho c WHERE c a các câu l nh l ng có th nh sau: ồ
ư
ủ
ệ
ể
c hi u là b t kỳ, ALL là t ấ c các m u tin c a câu l nh
ặ ế
ứ q là phép so sánh nào đó, ANY ể ẽ ượ
ể ượ ấ
ệ
ẩ
t c (ALL) m u tin thu đ
câu l nh
t c ấ ả ủ ớ ấ c t ượ ừ
ả ặ ấ ả
ệ
eq [ANY | ALL | SOME] (SELECT…) trong đó e là bi u th c, ho c SOME đ K t qu truy v n ta s đ ả SELECT chính tho mãn phép so sánh v i b t kỳ (ANY | SOME) ho c t ẩ SELECT phụ
Ví d :ụ
ữ
ẽ
ả
SELECT sobaodanh,hoten,nganh FROM Tuyensinh WHERE diemtong>= ALL(SELECT diemtong FROM Tuyensinh) Câu l nh trên s cho k t qu là danh sách nh ng thí ệ ế sinh đ t đi m cao nh t ể ạ
ấ
ị ằ
ả
e [NOT] IN (SELECT…) ở ứ K t qu c a truy v n là nh ng b n ghi có giá tr b ng ữ m t giá tr trong k t qu c a câu SELECT ph . ụ ả ủ
e cũng là bi u th c. ả ủ ị
ể ấ ế
ố ờ
ố
ố ờ
’);
đây ế ộ Ví d :ụ SELECT DISTINCT Mãs NVố FROM NHÂNVIÊN_D ÁNỰ WHERE (Mãs DA, S gi ) ố IN (SELECT Mãs DA, S gi FROM NHÂNVIÊN_D ÁNỰ WHERE Mãs NV = ‘NV001 ố
t c các nhân
ấ
ủ ấ ả
ấ
ố ờ ằ
ố
Truy v n này l y ra mã nhân viênc a t viên có c p (mãs DA, S gi ) b ng v i nhân viên ớ ặ Mãs NV = ‘NV001’.
ố
[NOT] EXISTS (SELECT…)
ả ủ
ữ
ả
K t qu c a truy v n là nh ng b n ghi có ấ m t trong k t qu c a câu SELECT ph ả ủ
ế ặ
ụ
ế
ề
ố
ớ
ệ
ả
N i nhi u b ng v i m nh đ ề INNER JOIN
ệ
ổ ợ
ả
ừ ế
ng
ớ
ở
ị
ng
SELECT … FROM Tablename1 INNER JOIN Tablename2 ON Tablename1.fieldname1 q Tablename2.fieldname2 … [WHERE …] hai b ng h p b n ghi t Câu l nh này t ả Tablename1và Tablename2 n u có giá tr so ị q các giá tr trên tr kh p b i phép so sánh ườ fieldname1 c a b ng Tablename1 v i tr ớ ườ ả fieldname2 c a b ng Tablename2. ả
ủ ủ
Ví d có hai b ng sau
ụ
ả
KHACHHANG
Makhach
Hoten
Congty
Hoàng Hà
001
Trần Văn Chung
Đông Đô
002
Nguyễn Tứ Kỳ
Bình Minh
003
Lê Hồng Hải
DONHANG
Makhach
Sodonhang
001
123
005
127
003
125
Câu l nh sau: ệ SELECT Makhach, Hoten, Congty, Sodonhang FROM Khachhang INNER JOINT Donhang ON Khachhang.Makhach=Donhang.Makhach
Makhach
Hoten
Congty
Sodonhang
Hoàng Hà
123
001
Trần Văn Chung
Bình Minh
125
003
Lê Hồng Hải
s cho k t qu là: ế ẽ ả
ậ ữ ệ Các câu l nh c p nh t d li u ậ
ệ
• Nh p d li u
ữ ệ
ậ
ng có v trí c đ nh thì l nh nh p có th vi
t ng n g n:
ố ị
ườ
ệ
ậ
ắ
ọ
ị
INSERT INTO TableName(Field1, Fiel2, ...Fieldn) VALUES (Val1, Val2, ...Valn) Khi các tr ể ế INSERT INTO TableName VALUES (Val1, Val2, ...Valn)
Ví d :ụ
• Xoá b n ghi
ả
ả
ủ
ề
ệ
ệ
ề
ả
ả
DELETE FROM [WHERE ]
Xoá b n ghi tho mãn đi u ki n c a m nh đ WHERE c a b ng
ủ
Ví d :ụ
• S a đ i d li u
ổ ữ ệ
ử
ủ
ả
ả
ng (sau SET) c a nh ng b n ghi tho mãn
ữ c thay th b ng các giá tr c a bi u th c t ượ
ứ ươ
ế ằ
ị ủ
ể
UPDATE