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 ADD [COLUMN]

ườ

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 th ứ ệ ề

ả ế ể ỉ ệ

ứ ứ ứ ế ạ

ng đó ph i có m t trong danh sách tr ộ ng ườ ệ ườ ề ế ặ ả

trong đó bi u th c đi u ki n , trong quan h ệ k t qu ch ch a các hàng tho đi u ki n . ả ề Trong bi u th c đi u ki n (xem…) n u có ch a toán h ng là m t ể bi n tr ng thì bi n tr ườ ế sau m nh đ GROUPE BY. ệ ề

ế ắ

ỉ ộ ề ẽ ượ ứ ự

c • ORDER BY [ASC | DESC] Khi c s p x p theo giá tr ị ấ tăng n u dùng ASC, ượ ế ặ ị

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 FROM

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 c a b ng ch ra b i . ả ủ

ả ở

Ví d : ụ SELECT ho, ten, lop, nganh FORM Sinhvien

ng ch ra trong

ườ

ả ề ả ả

• SELECT DISTINCT FROM Câu l nh này có nghĩa r ng tr v b n ghi v i các tr ằ danh sách c a b ng ch ra b i và không có ỉ ủ b n ghi (b ) nào trùng nhau.

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 ng

ữ c thay th b ng các giá tr c a bi u th c t ượ

ứ ươ

ế ằ

ị ủ

UPDATE SET WHERE . Các tr ườ c a b ng đ ả ủ ng.ứ