You are on page 1of 46

Gia o trnh th c ha nh SQL

Trang 1
GIO I THI U
SQL (Structurea Query Language) la ngon ngu auo c su au ng cho cac he quan
tri co so au lieu quan he . Ngon ngu SQL chun auo c aua ra boi ANSI (American
National Stanaaras Instituae) va ISO (International Stanaaras Organi:ation) voi
phien ban moi nht hie n nay la phien ban SQL-92 (phien ban auo c aua ra nam
1992). Ma c au co nhie u ngon ngu khac nhau auo c aua ra cho cac he quan tri CSDL
quan he , SQL la ngon ngu auoc su aung ro ng rai hien nay trong rt nhie u he thong
CSDL thuong ma i nhu Oracle, SQL Server, DB2, Microsoft Access... Thong qua SQL,
nguo i su au ng co the ae aa ng ainh ngha auo c au lie u, thao tac voi au lie u,... Ma t
khac, ay la ngon ngu co tnh khai bao nen no ae su au ng va cung vi v y ma tro nen
pho bien
Giao trinh na y nha m cung cp cho ba n tai lie u tham khao tuong aoi a y au ve
cac cu le nh giao tac SQL su aung cho he quan tri CSDL Microsoft SQL Server.
Giao trinh bao go m bon chuong.
- Chuong 1 gioi thie u mot so cu le nh su au ng trong vie c ainh ngha cac aoi
tuo ng au lie u nhu bang au lie u, khung nhin va ch mu c.
- Chuong 2 trinh ba y bon cu le nh thao tac au lie u la SELECT, INSERT,
UPDATE va DELETE, trong ao t p trung chu yeu o cu le nh SELECT.
- Chuong 3 ae c p aen hai cu le nh aie u khien la GRANT va REJOKE su au ng
trong vie c cp phat va huy bo quye n cua nguo i su au ng CSDL.
- Chuong 4 gioi thie u ve thu tuc luu tru va trigger. y la nhung aoi tuo ng
CSDL auo c su aung nha m tang hie u nang khi su aung CSDL.
- Trong chuong phu luc, chung toi gioi thie u cu truc va au lie u cua cac bang su
au ng trong cac v au o chuong 2 ae ba n tie n tra cuu va aoi chieu voi cac v au aa neu.
Ngoa i ra trong chuong na y con co cac ham thuo ng su au ng trong SQL Server ae cac
ban tham khao trong thu c ha nh.
Mac au aa rt co gang nhung giao trinh khong the tranh auo c cac sai sot. Rt
mong nh n auo c su gop y cua cac ba n ae giao trinh nga y ca ng hoa n thien hon.
Tr n Nguyn Phong
6 60 00 00 00 0 1 1. . k k6 60 0k k k k6 60 0 0 0| |k kh h k k6 6h hl l 0 00 0 L LI IL L 0 0
Ngn ngu dinh ngha du li u bao g m ca c cu l nh cho phe p nguo i su dung dinh
ngha CSDL va ca c d i tuo ng trong CSDL nhu ca c ba ng, ca c khung nhln, chi mu c,...
1. Ta o ba ng du li u
Du li u bn trong m t CSDL duo c t chu c luu tru trong ca c ba ng. Bn trong ca c
ba ng, du li u duo c t chu c duo i da ng ca c do ng va ca c c t. M i m t do ng biu di n
m t ba n ghi duy nh t va m i m t c t biu di n cho m t truo ng.
1.1 Ca c thu c tinh lin quan d n ba ng
Khi ta o va la m vi c vo i ca c ba ng du li u, ta c n pha i d y d n ca c thu c tinh
kha c trn ba ng nhu: kiu du li u, ca c ra ng bu c, ca c khoa , ca c qui ta c,... Ca c thu c
tinh na y duo c su du ng nha m ta o ra ca c ra ng bu c toa n ve n trn ca c c t (truo ng), trn
ba ng cu ng nhu ta o ra ca c toa n ve n tham chi u giu a ca c ba ng du li u trong CSDL.
a. Kiu du li u
M i m t c t (truo ng) cu a m t ba ng d u pha i thu c va o m t kiu du li u nh t
dinh da duo c dinh ngha tu truo c. M i m t kiu du li u qui dinh ca c gia tri du li u
duo c cho phe p d i vo i c t do . Ca c h qua n tri CSDL thuo ng cung c p ca c kiu du li u
chun, ngoa i ra co n co th cho phe p nguo i su du ng dinh ngha ca c kiu du li u kha c
du a trn ca c kiu du li u da co .
Duo i dy la m t s kiu du liu thuo ng duo c su du ng trong giao ta c SQL:
Binary
Bit
Char
Datetime
Decimal
Float
Image
Int
Money
Nchar
Ntext
Nvarchar
Real
Smalldatetime
Smallint
Smallmoney
Text
Tinyint
Varbinary
Varchar
b. Ca c ra ng bu c (CONSTRAINTS)
Trn ca c ba ng du li u, ca c ra ng bu c duo c su du ng nha m ca c mu c dich sau:
Qui dinh ca c gia tri du li u hay khun da ng du li u duo c cho phe p ch p nh n trn
ca c c t cu a ba ng (ra ng bu c CHECK)
Qui dinh gia tri ma c dinh cho ca c c t (ra ng bu c DEIAULT).
Gia o trnh th c ha nh SQL
Trang 3
Ta o nn tinh toa n ve n thu c th trong m t ba ng du li u va toa n ve n tham chi u giu a
ca c ba ng du li u trong CSDL (ra ng bu c PRIMARY KEY, UNIQUE va
IOREIGN KEY).
Chu ng ta se tlm hiu chi ti t hon v ca c ra ng bu c na y o ph n trlnh ba y v cu l nh
CREATE TABLE.
1.2 Ta o ba ng b ng truy v n SQL
Ta o ca c ba ng la m t khu quan trong tro ng trong qua trlnh thi t k va ca i da t
ca c CSDL. Bn trong ca c CSDL, m i m t ba ng thuo ng duo c su du ng nha m biu di n
thng thi v ca c d i tuo ng trong th gio i thu c va /hoa c biu di n m i quan h giu a ca c
d i tuo ng do . co th t chu c t t m t ba ng du li u, ba n it nh t c n pha i xa c dinh
duo c ca c yu c u sau:
Ba ng duo c su du ng nha m mu c dich gl va co vai tro nhu th na o bn trong CSDL?
Ba ng se bao g m nhu ng c t na o va kiu du li u cho ca c c t do la gl?
Nhu ng c t na o cho phe p ch p nh n gia tri NULL.
Co su du ng ca c ra ng bu c, ca c ma c dinh hay khng va n u co thl su du ng o du va
nhu th na o?
Nhu ng c t na o se do ng vai tro la khoa chinh, khoa ngoa i, khoa duy nh t? Nhu ng
da ng chi mu c na o la c n thi t va c n o du.
a. Ta o ba ng du li u:
ta o m t ba ng trong CSDL, ba n su du ng cu l nh CREATE TABLE co cu
pha p nhu sau:
CREATE TABLE table_name
(
{colname_1 col_1_properties [constraints_1 ]
[,{colname_2 col_2_properties [constraints_2 ]]
...
[,{colname_N col_N_properties [constraints_N ]]
[table_constraints]
)
Trong do :
- table_name:
Tn ba ng c n ta o. Tn cu a ba ng pha i duy nh t
trong m i CSDL va pha i tun theo ca c qui ta c v
dinh danh
- colname_i:
Tn cu a c t thu i trong ba ng. Ca c c t trong m i
Tr n Nguyn Phong
ba ng pha i co tn kha c nhau va pha i tun theo ca c
qui ta c v dinh danh. M i m t ba ng pha i co it
nh t m t c t
- col_i_properties:
Ca c thu c tinh cu a c t thu i qui dinh kiu du li u
cu a c t va chi dinh c t co cho phe p ch p nh n
gia tri NULL hay khng
- constraints_i:
Ca c ra ng bu c (n u co ) trn c t thu i nhu ca c
ra ng bu c v khoa , ca c ma c dinh, ca c qui dinh v
khun da ng du liu.
- table_constraint:
Ca c ra ng bu c trn ba ng du li u.
Vi du 1.1: Cu l nh duo i dy thu c hi nh vi c ta o ba ng NHANVIEN bao g m ca c c t
MANV, HOTEN, NGAYSINH, DIACHI, DIENTHOAI:
CREATE TABLE nhanvien
(
manv char(10) not null,
hoten char(30) not null,
ngaysinh datetime null,
diachi char(50) null,
dienthoai char(6) null
)
b. Su du ng ca c ra ng bu c trong ba ng du li u
D DD D Ra ng bu c CHECK
Ra ng bu c CHECK duo c su du ng d chi dinh ca c gia tri hay khun da ng du liu
co th duo c ch p nh n d i vo i m t c t. Trn m t c t co th co nhi u ra ng bu c
CHECK. khai ba o m t ra ng bu c CHECK d i vo i m t c t na o do , ta su du ng cu
pha p nhu sau:
[CONSTRAINT constraint_name]
CHECK (expression)
Trong do expression la m t biu thu c logic qui dinh gia tri hay khun da ng cu a du
li u duo c cho phe p. Khi do , chi nhu ng gia tri du li u na o la m cho expression nh n gia
tri du ng mo i duo c ch p nh n.
Vi du 1.2: qui dinh di n thoai cu a nhn vin pha i co da ng '######' (cha ng ha n
826767), cu l nh o vi du 1.1 duo c vi t nhu sau:
CREATE TABLE nhanvien
(
Gia o trnh th c ha nh SQL
Trang 5
manv char(10) not null,
hoten char(30) not null,
ngaysinh datetime null,
diachi char(50) null,
dienthoai char(6) null
constraint check_dienthoai
check (dienthoai like '[0-9][0-9][0-9]
[0-9][0-9] [0-9]')
)
D DD D Ra ng bu c DEFAULT
Ra ng bu c DEIAULT duo c su du ng d qui dinh gia tri ma c dinh cho m t ct.
Gia tri na y se tu d ng duo c ga n cho c t na y khi nguo i su du ng b sung m t ban ghi
ma khng chi dinh gia tri cho c t. Trn m i c t chi co th co nhi u nh t m t ra ng
bu c DEIAULT (tu c la chi co th co t i da m t gia tri ma c dinh).
khai ba o m t gia tri ma c dinh cho m t c t, ta chi dinh m t rang bu c
DEIAULT cho c t ba ng ca ch su du ng cu pha p sau:
[CONSTRAINT constraint_name]
DEFAULT {const_expression
nonarguments_function
NULL}
Vi du 1.3: Cu l nh duo i dy chi dinh gia tri mac dinh la 'khng bi t' cho c t
DIACHI trong ba ng NHANVIEN o vi du 1.1
(*)
CREATE TABLE nhanvien
(
manv char(10) not null,
hoten char(30) not null,
ngaysinh datetime null,
diachi char(50) default 'khng bi t',
dienthoai char(6) null
)
D DD D Ra ng bu c PRIMARY KEY

(*)
O vi du na y, chu ng ti khng da t tn cho ra ng bu c DEIAULT. Khi do , h qua n tri CSDL se tu d ng da t tn
cho ra ng bu c na y. Tuy nhin, d d da ng cho vic qua n tri, ba n nn da t tn cho ca c ra ng bu c.
Tr n Nguyn Phong
Ra ng bu c PRIMARY KEY duo c su du ng d dinh ngha khoa chinh cu a ba ng.
M t ra ng bu c PRIMARY KEY da m ba o ra ng khng co ca c gia tri tru ng la p duoc
dua va o trn ca c c t. Hay no i ca ch kha c, gia tri cu a khoa chinh se giu p cho ta xa c
dinh duo c duy nh t m t do ng (ba n ghi) trong ba ng du li u. M i m t ba ng chi co th
co duy nh t m t khoa chinh va ba n thn khoa chinh khng ch p nh n gia tri NULL.
Ra ng bu c PRIMARY KEY la co so cho vi c da m ba o tinh toa n ve n thu c th cu ng
nhu toa n ve n tham chi u.
khai ba o m t ra ng bu c PRIMARY KEY, ba n su du ng cu pha p sau:
[CONSTRAINT constraint_name ]
PRIMARY KEY [CLUSTERED|NONCLUSTERED]
[( colname [,colname2 [...,colname16]])]
N u khoa chinh cu a m t ba ng chi la m t c t, khi do ba n khng c n thi t pha i chi
dinh danh sa ch ca c c t (su du ng ra ng bu c o mu c c t). Trong truo ng ho p khoa chinh
la m t t p ho p tu hai c t tro ln, ba n pha i chi dinh danh sa ch ca c c t (su du ng ra ng
bu c o mu c ba ng).
Vi du 1.4: ta o ba ng NHANVIEN vo i khoa chinh la MANV
CREATE TABLE nhanvien
(
manv char(10) primary key,
hoten char(30) not null,
ngaysinh datetime null,
diachi char(50) null,
dienthoai char(6) null
)
cu l nh trn co th vi t nhu sau:
CREATE TABLE nhanvien
(
manv char(10) not null,
hoten char(30) not null,
ngaysinh datetime null,
diachi char(50) null,
dienthoai char(6) null
constraint pk_nv primary key(manv)
)
Gia o trnh th c ha nh SQL
Trang 7
D Ra ng bu c UNIQUE
Thay vl su du ng khoa chinh, ba n co th su du ng ra ng bu c UNIQUE d da m
ba o tinh toa n ve n thu c th. Su du ng ra ng bu c UNIQUE trn m t (hay nhi u) c t ba t
bu c ca c gia tri du li u trn m t (hay nhi u) c t na y khng duo c tru ng la p nhau.
khai ba o m t ra ng bu c UNIQUE, ba n su du ng cu pha p l nh sau dy:
[CONSTRAINT constraint_name]
UNIQUE [CLUSTERED | NONCLUSTERED]
[colname1 [,colname2 [...,colname16]])]
D Ra ng bu c FOREIGN KEY
Ca c ba ng bn trong m t CSDL thuo ng co m i quan h vo i nhau. Ca c m i quan
h na y duo c xa c dinh du a trn tinh ba ng nhau giu a m t hay nhi u truo ng cu a ba ng
na y vo i m t hay nhi u truo ng cu a ba ng kha c. N u m t (hay nhi u) c t na o do cu a m t
ba ng co gia tri duo c xa c dinh tu m t (hay nhi u) truo ng khoa cu a ba ng kha c thl ca c
c t do duo c go i la co ra ng bu c khoa ngoa i (Ioreign key). Ca c ra ng bu c IOREIGN
KEY duo c su du ng k t ho p vo i ca c ra ng bu c PRIMARY KEY va UNIQUE nha m
da m ba o tinh toa n ve n tham chi u giu a ca c ba ng duo c chi dinh.
khai ba o khoa ngoa i, ba n su du ng cu pha p l nh nhu sau:
[CONSTRAINT constraint_name ]
[FOREIGN KEY (colname [,colname2 [...,colname16]])]
REFERENCES reference_table [(ref_colname
[,ref_colname2
[...,ref_colname 16]])]
Vi du 1.5: Ta o hai ba ng NHANVIEN(MANV, HOTEN, NGAYSINH, DIACHI,
DIENTHOAI, MADV) va DONVI(MADV, TENDV) theo d hlnh duo i dy:
CREATE TABLE donvi
(
NHANVIEN
#MANV
HOTEN
NGAYSINH
DIACHI
DIENTHOAI
MADV
DONVI
#MADV
TENDV
1

Hinh 1.1
Tr n Nguyn Phong
madv char(2) primary key,
tendv char(20) not null
)
CREATE TABLE nhanvien
(
manv char(10) primary key,
hoten char(20) not null,
ngaysinh datetime null,
diachi char(50) default 'khong biet',
dienthoai char(6) check(dienthoai like '[0-9][0-9][0-9]
[0-9][0-9][0-9]'),
madv char(2) foreign key(madv)
references donvi(madv)
)
1.3 Su a di ba ng
Sau khi da ta o ba ng, ba n co th ti n ha nh su a di c u tru c hay thu c tinh cu a
ba ng nhu b sung c t, b sung khoa , thay di ca c ra ng bu c,... co th su a di
ba ng, ba n su du ng cu l nh ALTER co cu pha p nhu sau:
ALTER TABLE table_name
[ADD
{col_name column_properties [column_constraints]
[[,]table_constraint ] }
[,{next_col_name|next_table_constraint}]...]
[DROP
[CONSTRAINT] constraint_name1
[, constraint_name2]...]
Vi du 1.6: Ta o m t ra ng bu c cho ba ng DONVI trn c t MADV qui dinh ma don vi
pha i co da ng hai chu s (vi du 01, 02,...)
ALTER TABLE donvi
ADD CONSTRAINT check_madv
CHECK (madv LIKE [0-9][0-9])
Gia o trnh th c ha nh SQL
Trang 9
2. Ch mu c (index)
Ca c chi mu c duo c su du ng nha m h tro vi c truy c p d n ca c do ng du li u duo c
nhanh cho ng du a trn ca c gia tri cu a m t hay nhi u c t. Chi mu c duo c chia ra la m hai
loa i: chi mu c tu nho m (clustered index) va chi mu c khng tu nho m (nonclustered
index).
M t chi mu c tu nho m la m t chi mu c ma trong do thu tu logic cu a ca c khoa tuong
tu nhu thu tu v t ly cu a ca c do ng tuong u ng t n ta i trong ba ng. M t ba ng chi co
th co ti da m t chi mu c tu nhom.
M t chi mu c khng tu ho m la m t chi mu c ma trong do thu tu logic cu a ca c khoa
khng nhu thu tu v t ly cu a ca c do ng trong ba ng. Ca c chi mu c tu nho m h tro vi c
truy c p d n ca c do ng du li u nhanh hon nhi u so vo i cac chi mu c khng tu nho m.
Khi ta khai ba o m t khoa chinh hay khoa UNIQUE trn m t hay nhi u c t na o do
cu a ba ng, h qua n tri CSDL se tu d ng ta o chi mu c trn ca c c t do . Ba n co th ta o
thm ca c chi mu c kha c ba ng ca ch su du ng cu l nh co cu phap nhu sau:
CREATE [CLUSTEREDNONCLUSTERED] INDEX index_name
ON table_name(column_name [, column_name]...)
Vi du 1.7: Cu l nh duo i dy se ta o m t chi mu c khng tu nho m trn c t MADV cu a
ba ng NHANVIEN
CREATE NONCLUSTERED INDEX idx_nhanvien_madv
ON nhanvien(madv)
3. Khung nhin (View)
M t khung nhln co th coi nhu la m t "ba ng ao" co ni dung duo c xa c dinh tu
m t truy v n. M t truy v n (query) la m t t p ca c chi d n (instruction) nha m truy
xu t va hin thi du li u tu ca c ba ng trong CSDL. Ca c truy v n duo c thu c hi n ba ng
ca ch su du ng cu l nh SELECT (duo c d c p d n trong chuong 2).
M t khung nhln trong gi ng nhu m t bang vo i m t to ca c tn c t va ca c do ng
du li u. Tuy nhin, khung nhln khng t n ta i nhu la mt c u tru c luu tru du li u trong
CSDL. Du li u bn trong khung nhln thu c ch t la du li u duo c xa c dinh tu m t hay
nhi u ba ng co so va do do phu th c va o ca c ba ng co so .
Cac khung nhln thuo ng duo c su du ng bn trong CSDL nha m ca c mu c dich sau
dy:
Su du ng khung nhln d t p trung trn du li u duo c xa c dinh.
Tr n Nguyn Phong
Su du ng khung nhln d don gia n hoa thao ta c du li u.
Su du ng khung nhln d tuy bin du liu
Su du ng khung nhln d xu t khu (export) du li u.
Su du ng khung nhln d ba o mt du liu.
ta o khung nhln, ba n su du ng cu l nh co cu pha p nhu sau:
CREATE VIEW view_name[(column_name [, column_name]...)]
AS select_statement
Trong do selectstatement la m t cu l nh SELECT du ng d truy xu t du li u tu
m t hay nhi u ba ng.
Khi ta o khung nhln c n luu y m t s dim sau:
Tn khung nhln pha i tun theo ca c qui ta c v dinh danh va pha i duy nh t d i vo i
mi nguo i su dung.
Khng th ra ng bu c ca c ma c dinh, ca c qui ta c cho khung nhln.
Khng th xy du ng chi mu c cho khung nhln.
Trong cu l nh CREATE VIEW khng c n thi t pha i chi dinh tn c t. Tn cu a
ca c c t cu ng nhu kiu du li u cu a chu ng se tuong u ng vo i ca c c t trong danh sa ch
cho n cu a cu l nh SELECT.
Ba n pha i xa c dinh tn c t trong cu l nh CREATE VIEW trong ca c truo ng ho p
sau:
M i ct cua khung nhln duo c phat sinh tu m t biu thuc s ho c, m t ha m ca i
sa n hay m t ha ng.
Hai hay nhi u c t cu a khung nhln co tru ng tn.
Ban mu n thay di tn c t trong khung nhln kha c vo i tn c t cu a ba ng co so .
Vi du 1.8: Cu l nh duo i dy se bi l i do tn cu a c t thu 3 khng xa c dinh duo c:
CREATE VIEW thongtin_nv
AS
SELECT manv,hoten,datediff(year,ngaysinh,getdate()),tendv
FROM nhanvien,donvi
WHERE nhanvien.madv=donvi.madv
cu l nh trn co th thu c hi n duo c, ba n pha i da t tn cho ca c c t cu a khung nhln
nhu sau:
CREATE VIEW thongtin_nv(manv,hoten,tuoi,donvi)
Gia o trnh th c ha nh SQL
Trang 11
AS
SELECT manv,hoten,datediff(year,ngaysinh,getdate()),tendv
FROM nhanvien,donvi
WHERE nhanvien.madv=donvi.madv
Z Y
Tr n Nguyn Phong
6 60 00 00 00 0 Z Z. . k k6 60 0k k k k6 60 0 h h 0 0 6 6 0 00 0 L LI IL L 0 0
Ngn ngu thao ta c du li u cung c p cho nguo i su du ng kha nang ti n ha nh ca c
thao ta c truy xu t, b sung, c p nh t va xoa du li u. Ngn ngu thao ta c du li u bao
g m ca c cu l nh: SELECT, INSERT, UPDATE va DELETE
1. Truy xu t du li u
truy xut d liu t cc dng v cc ct ca mt hay nhiu bng, khung nhn,
ta s dng cu lnh SELECT. Cu lnh ny c th dng thc hin php chn (tc l
truy xut mt tp con cc dng trong mt hay nhiu bng), php chiu (tc l truy
xut mt tp con cc ct trong mt hay nhiu bng) v php ni (tc l lin kt cc
dng trong hai hay nhiu bng truy xut d liu).
C php chung ca cu lnh SELECT c dng nh sau:
SELECT [ ALL | DISTINCT ] select_list
[ INTO [ newtable_name ]]
FROM { table_name | view_name }
................
[,{table_name | view_name }]
[WHERE clause ]
[GROUP BY clause ]
[HAVING BY clause ]
[ORDER BY clause ]
[COMPUTE clause ]
Ch : Cc thnh phn trong mt cu lnh SELECT phi c s dng theo th t
c nu trn.
1.1 Xc nh bng bng mnh FROM
Mnh FROM trong cu lnh SELECT c s dng nhm ch nh cc bng
v khung nhn cn truy xut d liu. Sau mnh FROM l danh sch tn cc bng
v khung nhn tham gia vo truy vn (tn ca cc bng v khung nhn c phn cch
nhau bi du phy).
SELECT select_list
FROM {table_nameview_name list}
Gia o trnh th c ha nh SQL
Trang 13
n gin ho cu hi, ta c th s dng cc b danh (alias) cho cc bng hay
khung nhn. B danh c gn trong mnh FROM bng cch ch nh b danh sau
tn bng. V d cu lnh sau gn b danh n1 cho bng nhanvien.
SELECT ten, diachi FROM nhanvien n1
1.2 Mnh WHERE
Mnh WHERE trong cu lnh SELECT xc nh cc iu kin i vi vic truy
xut d liu. Sau mnh WHERE l mt biu thc logic v ch nhng dng d liu
no tho mn biu thc sau WHERE mi c hin th trong kt qu truy vn. Trong
mnh WHERE thng s dng:
Cc ton t so snh
Gii hn ( BETWEEN v NOT BETWEEN).
Danh sch (IN, NOT IN)
Khun dng (LIKE v NOT LIKE).
Cc gi tr cha bit (IS NULL v IS NOT NULL).
Kt hp cc iu kin (AND, OR).
Cc ton t so snh:
Ton t ngha
= Bng
> Ln hn
< Nh hn
>= Ln hn hoc bng
<= Nh hn hoc bng
<> Khc
!> Khng ln hn
!< Khng nh hn
V d 2.1: Truy vn sau y cho bit tn, a ch v in thoi ca nhng nhn vin
c h s lng ln hn 1.92:
SELECT ten, diachi, dienthoai
FROM nhanvien
WHERE hsluong>1.92
Gii hn (BETWEEN v NOT BETWEEN)
T kho BETWEEN v NOT BETWEEN c s dng nhm ch nh khong
gi tr tm kim i vi cu lnh SELECT. Cu lnh di y cho bit tn v ia ch
ca nhng nhn vin c h s lng nm trong khong 1.92 n 3.11
SELECT ten, tuoi, diachi
FROM nhanvien
WHERE hsluong BETWEEN 1.92 AND 3.11
Tr n Nguyn Phong
Danh sch (IN v NOT IN)
T kho IN c s dng khi ta cn ch nh iu kin tm kim d liu cho cu
lnh SELECT l mt danh sch cc gi tr. Sau IN (hoc NOT IN) c th l mt danh
sch cc gi tr hoc l mt cu lnh SELECT khc.
V d 2.2: hin th thng tin v cc nhn vin c h s lng l 1.86, 1.92
hoc 2.11, thay v s dng cu lnh:
SELECT * FROM nhanvien
WHERE hsluong=1.86 OR hsluong=1.92 OR hsluong=2.11
Ta c th s dng cu lnh sau:
SELECT * FROM nhanvien
WHERE hsluong IN (1.86, 1.92, 2.11)
Cc k t i din v mnh LIKE
T kho LIKE (NOT LIKE) s dng trong cu lnh SELECT nhm m t khun
dng ca d liu cn tm kim. Chng thng c kt hp vi cc k t i din sau
y:
K t i din ngha
% Chui k t bt k gm khng hoc nhiu k t
- K t n bt k
[] K t n bt k trong gii hn c ch nh (v d [a-f])
hay mt tp (v d [abcdef])
[^] K t n bt k khng nm trong gii hn c ch nh (
v d [^a-f] hay mt tp (v d [^abcdef]).
V d 2.3: Cu lnh di y hin th thng tin v cc nhn vin c tn l Nam
SELECT * FROM nhanvien
WHERE hoten LIKE '% Nam'
IS NULL v NOT IS NULL
Gi tr NULL c th c nhp vo mt ct cho php chp nhn gi tr NULL
theo mt trong ba cch sau:
Nu khng c d liu c a vo v khng c mc nh cho ct hay kiu
d liu trn ct .
Ngi s dng trc tip a gi tr NULL vo cho ct .
Mt ct c kiu d liu l kiu s s cha gi tr NULL nu gi tr c ch
nh gy trn s.
Trong mnh WHERE, ta s dng IS NULL hoc IS NOT NULL nh sau:
WHERE col_name IS [NOT] NULL
Cc ton t logic
Cc ton t logic s dng trong mnh WHERE bao gm AND, OR, NOT.
AND v OR c s dng kt hp nhiu iu kin trong WHERE.
1.3 Danh sch chn trong cu lnh SELECT
Gia o trnh th c ha nh SQL
Trang 15
` Chn tt c cc ct trong bng
Khi mun truy xut tt c cc ct trong bng, ta s dng cu lnh SELECT c c
php sau:
SELECT * FROM table_name
Khi s dng cu lnh ny, cc ct trong kt qu s c hin th theo th t m
chng c to ra trong cu lnh CREATE TABLE.
* Chn cc ct c ch nh
chn ra mt s ct no trong bng, ta s dng cu lnh SELECT c c
php sau:
SELECT tn_ct [,...,tn_ct_n]
FROM tn_bng | khung_nhn
Cc tn ct trong cu lnh phi c phn cch nhau bng du phy.
Ch : Trong cu lnh SELECT, th t ca cc ct c nu ra trong cu lnh s
xc nh th t ca cc ct c hin th ra trong kt qu.
* i tn cc ct trong cc kt qu
Khi kt qu c hin th, tiu ca cc ct mc nh s l tn ca cc ct khi
n c to ra trong cu lnh CREATE TABLE. Tuy nhin, cc tiu tr nn
thn thin hn, ta c th i tn cc tiu ca cc ct. lm c vic ny, ta c
th s dng mt trong hai cch vit sau:
tiu__ct = tn_ct
hoc tn_ct tiu__ct
V d 2.4: Hai cu lnh sau s t tiu H v tn cho l hoten v a ch
cho ct diachi khi kt qu c hin th cho ngi s dng:
SELECT 'H v tn'=hoten,
'a ch '= diachi
FROM nhanvien
Hoc:
SELECT hoten 'H v tn',diachi 'ia ch '
FROM nhanvien
* S dng cu trc CASE thay i d liu trong kt qu
Trong cu lnh SELECT, ta c th s dng cu trc CASE thay i cch hin
th kt qu ra mn hnh.
V d 2.5: Cu lnh sau cho bit h tn, h s lng v xp loi lng ca nhn
vin theo h s lng:
SELECT 'H v tn' = ten, 'H s lng' = hsluong,
'Xp loi lng' =
CASE
WHEN lsluong=NULL THEN 'Khng xc nh'
Tr n Nguyn Phong
WHEN hsluong<=1.92 THEN 'Lung thp'
WHEN hsluong<=3.1 THEN 'Lng TB'
WHEN hsluong<=5.2 THEN 'Lng cao'
ELSE 'Lng rt cao'
END
FROM Nhanvien
* Cc chui k t trong kt qu
Ta c th thm cc chui k t vo bn trong truy vn nhm thay i cch thc
trnh by d liu.
V d 2.6: Cu lnh sau s thm chui k t H s lng l vo trc kt qu
ct mc lng tng dng trong kt qu:
SELECT 'H v tn' = hoten,
'H s lng l : ','H s lng'=hsluong
FROM nhanvien
Truy vn trn cho c kt qu c dng nh sau:
H v tn H s lng
---------------- -------------- -------------
Trn Nguyn Phong H s lng l : 1.92
L Hoi Nam H s lng l : 1.86
Nguyn Hu Tnh H s lng l : 1.92
Nguyn Trung Kin H s lng l : 1.86
Nguyn Th Hoa H s lng l : 2.11
Hong Nam Phong H s lng l : 3.21
1.4 Tnh ton cc gi tr trong cu lnh SELECT
Danh sch chn trong cu lnh SELECT c th c cc biu thc s hc. Khi
kt qu ca biu thc s l mt ct trong kt qu truy vn:
V d 2.7: Cu lnh sau cho bit h tn v lng ca cc nhn vin
SELECT 'H v tn'=ten, 'Lng'=hsluong*210000
FROM nhanvien
1.5 T kho DISTINCT
T kho DISTINCT c s dng trong cu lnh SELECT nhm loi b ra khi
kt qu truy vn nhng dng d liu c gi tr ging nhau
V d 2.8: nu ta s dng cu lnh:
SELECT hsluong FROM nhanvien
Ta s c kt qu nh sau:
Gia o trnh th c ha nh SQL
Trang 17
hsluong
-----------------
1.92
1.86
1.92
1.86
2.11
3.21
Nhng nu ta s dng cu lnh:
SELECT DISTINCT hsluong FROM nhanvien
kt qu ca truy vn s l:
hsluong
----------
1.92
1.86
2.11
3.21
1.6 To bng mi bng cu lnh SELECT ... INTO
Cu lnh SELECT ... INTO c tc dng to mt bng mi c cu trc v d liu
c xc nh t kt qu ca truy vn. Bng mi c to ra s c s ct bng s ct
c ch nh trong danh sch chn v s dng s s dng kt qu ca truy vn
V d 2.9: Cu lnh di y to mi mt bng c tn l NHANVIEN_LUU bao
gm h tn v a ch ca nhng nhn vin c h s lng ln hn 1.92:
SELECT hoten, diachi
INTO nhanvien_luu
FROM nhanvien
WHERE hsluong>1.92
1.7 Sp xp kt qu truy vn bng ORDER BY
Mnh ORDER BY c s dng nhm sp xp kt qu truy vn theo mt hay
nhiu ct (ti a l 16 ct). Vic sp xp c th theo th t tng tng (ASC) hoc gim
(DESC). Nu khng ch nh r th mc nh l tng.
V d 2.10: Cu lnh sau s sp xp cc nhn vin theo th t gim dn ca h
s lng v nu h s lng bng nhau th sp xp theo th t tng dn ca ngy sinh:
SELECT hoten,ngaysinh,hsluong
FROM nhanvien
ORDER BY hsluong DESC, ngaysinh
Ta c th s dng cc s thay v s dng tn ct sau mnh ORDER BY.
V d 2.11: cu lnh di y sp xp cc nhn vin theo th t tng dn ca
ngy sinh:
Tr n Nguyn Phong
SELECT hoten,ngaysinh,hsluong
FROM nhanvien
ORDER BY 3
1.8 Php hp v ton t UNION
Ton t UNION cho php ta hp cc kt qu ca hai hay nhiu truy vn thnh
mt tp kt qu duy nht. C php ca php hp nh sau:
Query_1
[UNION [ALL] Query_2 ]
...
[UNION [ALL] Query_N ]
[ORDER BY clause]
[COMPUTE clause]
Trong :
Query_1 c dng:
SELECT select_list
[INTO clause]
[FROM clause]
[WHERE clause]
[GROUP BY clause]
[HAVING clause]
v Query_i (i=2,..,N) c dng:
SELECT select_list
[FROM clause]
[WHERE clause]
[GROUP BY clause]
[HAVING clause]
V d 2.12: Gi s ta c hai bng nh sau:
R S
A B C E F
abc 3 5 edf 15
jks 5 7 hht 1
bdg 10 5 abc 3
Hht 12 0 adf 2
Th php hp:
SELECT A,B FROM R
UNION
Gia o trnh th c ha nh SQL
Trang 19
SELECT * FROM S
C kt qu nh sau:
A B
---- -----------
abc 3
adf 2
bgd 10
edf 15
hht 1
hht 12
jks 5
Theo mc nh, php ton UNION s loi b nhng dng ging nhau trong kt
qu. Nu ta s dng ty chn ALL th cc dng ging nhau s khng b loi b. Ta c
th s dng cc du ngoc xc nh th t tnh ton trong php hp.
1.8.1 Cc nguyn tc khi xy dng cu lnh UNION
Khi xy dng cc cu lnh UNION, ta cn ch cc nguyn tc sau:
Tt c cc danh sch chn trong cu lnh UNION phi c cng s biu thc
(cc tn ct, cc biu thc s hc, cc hm gp,...)
Cc ct tng ng trong tt c cc bng, hoc tp con bt k cc ct c s
dng trong bn thn mi truy vn phi cng kiu d liu.
Cc ct tng ng trong bn thn tng truy vn ca mt cu lnh UNION
phi xut hin theo th t nh nhau. Nguyn nhn l do php hp so snh cc
ct tng ct mt theo th t c cho trong mi truy vn.
Khi cc kiu d liu khc nhau c kt hp vi nhau trong cu lnh
UNION, chng s c chuyn sang kiu d liu cao hn (nu c th c).
Tiu ct trong kt qu ca php hp s l tiu ct c ch nh trong
truy vn u tin.
1.8.2 S dng UNION vi cc giao tc SQL khc
Cc nguyn tc sau phi c tun theo khi s dng php hp vi cc cu lnh
giao tc SQL khc:
Truy vn u tin trong cu lnh UNION c th c INTO to mt bng t
kt qu cui cng.
Mnh ORDER BY v COMPUTE dng xc nh th t kt qu cui
cng hoc tnh ton cc gi tr tm tt ch c cho php s dng cui ca
cu lnh UNION. Chng khng c php s dng trong bt k bn thn
truy vn no trong php hp.
Mnh GROUP BY v HAVING ch c th c s dng trong bn thn
tng truy vn. Chng khng th c s dng tc ng ln kt qu cui
cng.
Tr n Nguyn Phong
Php ton UNION cng c th c s dng bn trong mt cu lnh
INSERT.
Php ton UNION khng th s dng trong cu lnh CREATE VIEW.
1.9 Php ni
Php ni c s dng truy xut d liu t hai hay nhiu bng hoc khung
nhn trong cng CSDL hoc trong cc CSDL khc nhau bi cng mt php x l.
1.9.1 Php ton ni
Mt cu lnh ni (join statament) thc hin cc cng vic sau y:
Xc nh mt ct t mi bng.
So snh cc gi tr trong nhng ct ny theo tng dng.
Kt hp cc dng c nhng gi tr tho mn iu kin thnh nhng dng
mi.
V d 2.13: Cu lnh di y cho bit h tn, a ch ca cc nhn vin v tn
n v m mi nhn vin thc thuc:
SELECT hoten, diachi, tendonvi
FROM nhanvien, donvi
WHERE nhanvien.madonvi = donvi.madonvi
Danh sch chn trong php ni
Ging nh cc cu lnh chn (selection statment), mt cu lnh ni bt u vi
t kha SELECT. Cc ct c ch nh tn sau t kho SELECT l cc ct c da
ra trong kt qu truy vn. Trong danh sch chn ca php ni, ta c th ch nh mt
s ct bng cch ch nh tn ca ct hoc tt c cc ct ca nhng bng tham gia
vo php ni bng cch s dng du sao (*). Danh sch chn khng nht thit phi
bao gm cc ct ca nhng bng tham gia php ni.
Mnh FROM trong php ni
Mnh FROM ca cu lnh ni xc dnh cc bng (hay khung nhn) tham gia
vo php ni. Nu ta s dng du * trong danh sch chn th th t ca cc bng lit
k trong FROM s nh hng n kt qu c hin th.
Mnh WHERE trong php ni
Mnh WHERE xc nh iu kin ni gia cc bng v cc khung nhn c
ch nh. N xc nh tn ca ct c s dng ni v php ton ni c s dng.
Cc ton t so snh di y c s dng xc nh iu kin ni
Php ton ngha
= Bng
> Ln hn
>= Ln hn hoc bng
< Nh hn
<= Nh hn hoc bng
<> Khc
Gia o trnh th c ha nh SQL
Trang 21
!> Khng ln hn
!< Khng nh hn.
1.9.2 Cc loi php ni
* Php ni bng v php ni t nhin
Mt php ni bng (equijoin) l mt php ni trong gi tr ca cc ct c
s dng ni c so snh vi nhau da trn tiu chun bng v tt c cc ct trong
cc bng tham gia ni u c a ra trong kt qu.
V d 2.14:
SELECT * FROM nhanvien, donvi
WHERE nhanvien.madonvi = donvi.madonvi
Trong kt qu ca cu lnh trn, ct madonvi v tendonvi xut hin hai ln trong
kt qu php ni v nh vy l khng cn thit. loi b iu ny, ta c th s dng
php ni t nhin (natural join) bng cch loi b i cc ct trng tn vi nhau.
* Php ni vi cc iu kin b sung
Trong mnh WHERE ca cu lnh ni, ta c th b sung cc iu kin tm
kim khc.
V d 2.15:
SELECT hoten, diachi, tendonvi
FROM nhanvien, donvi
WHERE nhanvien.madonvi = donvi.madonvi AND
Nhanvien.hsluong>=2.11
* Php t ni v cc b danh
Php t ni l php ni m trong ta so snh cc gi tr bn trong mt ct ca
cng mt bng.
V d 2.16: Tm nhng nhn vin c cng a ch vi nhn vin 'Trn Nguyn
Phong'
SELECT n1.hoten
FROM nhanvien n1, nhanvien n2
WHERE n2.hoten='Trn Nguyn Phong' AND
n1.diachi = n2.diachi
* Php ni khng da trn tiu chun bng
Trong php ni ny, cc ct c s dng kt ni c so snh vi nhau
khng da trn iu kin bng.
* Php ni ngoi (outer join)
Trong cc php ni cp trn, ch nhng dng hp l (tc l nhng dng
c gi tr trong cc ct c ch nh tho m iu kin kt ni) mi c a ra trong
kt qu. Theo mt ngha no , nhng php ni ny loi b thng tin cha trong
nhng dng khng hp l. Tuy nhin, i khi ta cng cn gi li nhng thng tin
khng hp l bng cch cho php nhng dng khng hp l c mt trong kt qu ca
Tr n Nguyn Phong
php ni. lm iu ny, ta c th s dng php ni ngoi. Giao tc SQL cung cp
hai php ni ngoi:
Php ni ngoi tri (*=) : Php ni ny cho php ly tt c cc t bng c
tn u tin.
Php ni ngoi phi (=*) : Php ni ny cho php ly tt c cc dng t
bng c tn th hai.
V d 2.17: Gi s ta c hai bng R v S c ni dung nh sau
A B C D
----- ----------- ----------- -----
aaa 2 4 aaaa
fff 8 4 f2
ggg 2 7 g4
xxx 2 12 gdf
ggg 2 12 khf
sss 45 0 k3h
Bng R
E F G
----- ----------- -----------
aaa 3 (null)
xxx 23 26
abc 3 6
(null)12 (null)
sss 20 3
Bng S
Khi cu lnh:
SELECT * FROM R,S
WHERE R.A = S.E
Cho kt qu l:
A B C D E F G
---- ----- ----- ----- ----- ------ --------
aaa 2 4 aaaa aaa 3 (null)
xxx 2 12 gdf xxx 23 26
sss 45 0 k3h sss 20 3
Cn cu lnh:
Gia o trnh th c ha nh SQL
Trang 23
SELECT * FROM R,S
WHERE R.A *= S.E
Cho kt qu l:
A B C D E F G
--- ---- ---- ----- ----- ------ ------
aaa 2 4 aaaa aaa 3 (null)
fff 8 4 f2 (null) (null) (null)
ggg 2 7 g4 (null) (null) (null)
xxx 2 12 gdf xxx 23 26
ggg 2 12 khf (null) (null) (null)
sss 45 0 k3h sss 20 3
V cu lnh
SELECT * FROM R,S
WHERE R.A =* S.E
Cho kt qu l:
A B C D E F G
---- ----- ----- ----- ----- ------ ---------
aaa 2 4 aaaa aaa 3 (null)
xxx 2 12 gdf xxx 23 26
(null)(null) (null) (null) abc 3 6
(null)(null) (null) (null) (null)12 (null)
sss 45 0 k3h sss 20 3
Cc gii hn ca php ni ngoi
Giao tc SQL khng cho php hai php ni ngoi lng nhau v php ni
trong lng vo trong php ni ngoi. Tuy nhin, mt bng c th tham gia trong mt
php ni trong v l bng ngoi (outer table) trong mt php ni ngoi.
Bng di y cho bit cc cch kt hp hp l v khng hp l ca php
ni trong v php ni ngoi:
Hp l Khng hp l
T1 =* T2 *= T3 T1 *= T2 *= T3
T1 = T2 *= T3 T1 *= T2 = T3
T1 *= T2 =* T3
T3 T3
Tr n Nguyn Phong
||
*
T2 =* T1 *= T4
*
||
T5
||
*
T2 =* T1 =* T4
*
||
T5
T3
*
||
T2 *= T1 =* T4
||
*
T5
T3
||
*
T2 *= T1 *= T4
||
*
T5
* Php ni v cc gi tr NULL
Nu trong cc ct ca cc bng tham gia php ni c cc gi tr NULL th cc
gi tr NULL c xem nh l khng bng nhau. Chng hn ta c hai bng:
A
------
B
---------
C
--------
D
--------
1 b1 Null d1
Null b2 4 d2
4 b3
Bng R Bng S
Th cu lnh:
SELECT * FROM R, S
WHERE A *= C
S cho kt qu l:
A
------
B
------
C
------
D
------
1 b1 Null Null
Null b2 Null Null
4 b3 4 D2
1.10 To cc dng thng k d liu vi COMPUTE ... BY
Ta s dng mnh COMPUTE BY kt hp vi cc hm gp dng v mnh
ORDER BY sn sinh ra cc cc bo co (report) nhm thng k cc gi tr d liu
Gia o trnh th c ha nh SQL
Trang 25
theo tng nhm. Nhng gi tr thng k ny xut hin nh l nhng dng b sung
trong kt qu truy vn. Mt mnh COMPUTE BY cho php ta quan st c cc chi
tit v d liu ln cc gi tr thng k. Ta c th tnh cc gi tr thng k cho cc
nhm con (subgroups) v ta cng c th tnh ton nhiu hm gp trn cng mt
nhm.
Mnh COMPUTE BY c c php nh sau:
COMPUTE row-aggregate(col_name)
[,...,row_aggregate(col_name)]
BY col_name [,...,col_name]
Cc hm gp c th s dng c vi COMPUTE BY bao gm SUM, AVG,
MIN, MAX v COUNT.
V d 2.18: Cu lnh di y cho bit h tn, tn n v h s lng ca nhn
vin ng thi cho bit lng trung bnh ca cc nhn vin trong mi n v
SELECT hoten,tendonvi,hsluong
FROM nhanvien,donvi
WHERE nhanvien.madonvi=donvi.madonvi
ORDER BY nhanvien.madonvi
COMPUTE AVG(hsluong) BY nhanvien.madonvi
Kt qu ca truy vn ny s nh sau:
Hoten tendonvi hsluong
--------------- -------------- --------------
Nguyn Th Hoa Phng k ton 2.11
avg
===========
2.11
L Hoi Nam Phng T chc 1.86
Hong Nam Phong Phng T chc 3.21
avg
===========
2.535
Trn Nguyn Phong Phng iu hnh 1.92
Nguyn Hu Tnh Phng iu hnh 1.92
avg
===========
1.92
Nguyn Trung Kin Phng ti v 1.86
Tr n Nguyn Phong
avg
===========
1.86
Khi s dng mnh COMPUTE ... BY cn tun theo cc qui tc di y:
T kha DISTINCT khng cho php s dng vi cc hm gp dng
Cc ct s dng trong mnh COMPUTE phi xut hin trong danh sch
chn.
Khng s dng SELECT INTO trong mt cu lnh SELECT c s dng
COMPUTE.
Nu s dng mnh COMPUTE ... BY th cng phi s dng mnh
ORDER BY. Cc ct lit k trong COMPUTE BY phi ging ht hay l mt
tp con ca nhng g c lit k sau ORDER BY. Chng phi c cng th
t t tri qua phi, bt u vi cng mt biu thc v khng b qua bt k
mt biu thc no.
Chng hn nu mnh ORDER BY c dng:
ORDER BY a, b, c
Th mnh COMPUTE BY c dng di y l hp l:
COMPUTE row_aggregate (column_name) BY a, b, c
COMPUTE row_aggregate (column_name) BY a, b
COMPUTE row_aggregate (column_name) BY a
V cc dng di y l sai
COMPUTE row_aggregate (column_name) BY b, c
COMPUTE row_aggregate (column_name) BY a, c
COMPUTE row_aggregate (column_name) BY c
Phi s dng mt tn ct hoc mt biu thc trong mnh ORDER BY,
vic sp xp (order) khng c thc hin da trn tiu ct.
T kho COMPUTE c th c s dng m khng c BY v khi
ORDER BY l ty chn.
1.11 Thng k d liu vi GROUP BY v HAVING
Ta c th s dng cc mnh GROUP BY v HAVING thng k d liu.
GROUP BY t chc d liu vo cc nhm, HAVING thit lp cc iu kin ln cc
nhm trong kt qu truy vn. Nhng mnh ny thng c s dng kt hp vi
nhau (HAVING c s dng khng km vi GROUP BY c th to ra nhng kt
qu nhm ln).
Cc hm gp tr v cc gi tr tm lc cho c bng hoc cho cc nhm trong
bng. Do , chng thng c s dng vi GROUP BY. Cc hm gp c th xut
hin trong mt dang sch chn hay trong mnh HAVING, nhng khng c s
dng trong mnh WHERE.
Ta c th s dng cc hm gp di y vi GROUP BY (Trong expression
l mt tn ct).
Gia o trnh th c ha nh SQL
Trang 27
Hm gp Chc nng
SUM([ALL | DISTINCT] expression) Tnh tng cc gi tr.
AVG([ALL | DISTINCT] expression) Tnh trung bnh ca cc gi tr
COUNT([ALL | DISTINCT] expression) S cc gi tr trong biu thc.
COUNT(*) S cc dng c chn.
MAX(expression) Tnh gi tr ln nht
MIN(expression) Tnh gi tr nh nht
Trong , SUM v AVG ch lm vic vi nhng gi tr kiu s. SUM, AVG,
COUNT, MAX v MIN b qua cc gi tr null cn COUNT(*) th khng.
V d 2.19: Cu lnh di y cho bit h s lng trung bnh ca cc nhn vin
theo tng n v:
SELECT donvi.madonvi,tendonvi, avg(hsluong)
FROM nhanvien,donvi
WHERE nhanvien.madonvi = donvi.madonvi
GROUP BY donvi.madonvi,tendonvi
Ch : Danh sch cc tn ct trong danh sch chn ca cu lnh SELECT v danh
sch cc tn ct sau GROUP BY phi nh nhau, nu khng cu lnh s khng hp l.
V d cu lnh di y l khng ng:
SELECT donvi.madonvi,tendonvi, avg(hsluong)
FROM nhanvien,donvi
WHERE nhanvien.madonvi = donvi.madonvi
GROUP BY donvi.madonvi
Mnh HAVING thit lp cc iu kin i vi mnh GROUP BY tng t
nh cch thc mnh WHERE thit lp cc iu kin cho cu lnh SELECT. Mnh
HAVING s khng c ngha nu nh khng s dng kt hp vi mnh
WHERE. C mt im khc bit gia HAVING v WHERE l trong iu kin tm
kim ca WHERE khng c c cc hm gp trong khi HAVING li cho php s
dng cc hm gp trong iu kin tm kim ca mnh. Mnh HAVING c th
tham chiu n bt k mc no trong danh sch chn v mnh HAVING c th
cha ti a 128 iu kin tm kim.
V d 2.20: Cu lnh di y cho bit h s lng trung bnh ca cc nhn vin
theo tng n v v ch hin th nhng n v c h s lng trung bnh ln hn 1.92
SELECT donvi.madonvi,tendonvi, avg(hsluong)
FROM nhanvien,donvi
WHERE nhanvien.madonvi = donvi.madonvi
GROUP BY donvi.madonvi,tendonvi
HAVING avg(hsluong)>1.92
1.12 Truy v n con (subquery)
Tr n Nguyn Phong
M t truy v n con la m t cu l nh SELECT duo c l ng va o bn trong m t cu
l nh SELECT, INSERT, UPDATE hay DELETE hoa c bn trong m t truy v n con
kha c. Cu l nh truy v n con co th tham chi u d n cu ng m t ba ng vo i truy v n ngoa i
hoa c m t ba ng kha c. Trong gia o ta c SQL, m t truy v n con tra v m t chi gia tri co
th duo c su du ng ta i nhu ng vi tri ma ta i do m t biu thu c duo c cho phe p su du ng.
Cu pha p truy v n con
M t truy v n con duo c l ng va o bn trong m t cu l nh SELECT co cu pha p
nhu sau:
(SELECT [ALL|DISTINCT] subquery_select_list
[FROM {table_name|view_name} [optimizer_hints]
[[,table_name2|view_bame2} [optimizer_hints]
[...,table_name16|view_name16}[optimizer_hints]]]
[WHERE clause]
[GROUP BY clause]
[HAVING clause])
Cu l nh SELECT cu a truy v n con lun na m trong ca p d u ngoa c. No khng
duo c chu a m nh d ORDER BY, COMPUTE hoa c IOR BROWSE. M t truy v n
con co th duo c l ng va o bn trong m nh d WHERE hay HAVING cu a m t cu
l nh SELECT, INSERT hay DELETE, hoa c bn trong truy v n con kha c. N u m t
truy v n con tra v chi m t gia tri, no co th duo c su du ng ta i nhu ng vi tri ma o do
m t biu thu c duo c cho phe p su du ng. M t truy v n con khng duo c phe p su du ng
bn trong m t danh sa ch cu a m nh d ORDER BY.
Ca c cu l nh chu a truy v n con thuo ng co m t trong s ca c da ng sau:
(1) WHERE expression [NOT]IN (subquery)
(2) WHERE expression comparison_operator [ANY|ALL](subquery)
(3) WHERE [NOT]EXISTS (subquery)
Vi du 2.21: Cu l nh sau dy hin thi thng tin v ca c nhn vin la m vi c o nhu ng
don vi co s din thoa i khng ba t d u boi s 82
SELECT *
FROM nhanvien
WHERE madonvi NOT IN ( SELECT madonvi
FROM donvi
WHERE dienthoai like '82%')
2. B sung, c p nh t va xoa du li u
2.1 B sung du li u
Gia o trnh th c ha nh SQL
Trang 29
b sung du li u va o trong m t ba n du li u, ta su du ng cu l nh INSERT.
Da ng don gia n nh t cu a cu l nh na y co cu pha p nhu sau:
INSERT [INTO] table_name
VALUES(value1, value2, ...)
Trong do tablename la tn cu a ba ng c n thao ta c. S luo ng ca c gia tri duo c chi
dinh pha i gi ng s luo ng ca c c t khi dinh ngha ba ng va kiu du li u cu a ca c gia tri
na y pha i phu ho p vo i kiu du li u cu a ca c c t tuong u ng.
Vi du 2.22: Cu l nh duo i dy b sung thm m t nhn vin va o ba ng nhanvien.
INSERT INTO nhanvien
VALUES('NV02003','L Th Mai','23/5/72',
NULL,'523312',1.92,'02')
Trong truo ng ho p chi nh p du li u cho m t s c t trong ba ng, ta pha i chi dinh
danh sa ch ca c c t c n nh p du li u ngay sau tn ba ng. Khi do cu l nh INSERT co cu
pha p nhu sau:
INSERT [INTO] table_name(col1,col2,..., colN)
VALUES(value1, value2, ...,valueN)
Trong truo ng ho p na y, ca c c t khng duo c nh p du li u se nh n gia tri ma c dinh
(n u co ) hoa c nh n gia tri NULL. N u ta khng nh p du li u cho m t c t khng co
ra ng bu c DEIAULT va cu ng khng cho phe p ch p nh n gia tri NULL, cu l nh se
bi l i.
Vi du 2.23:
INSERT INTO nhanvien(manv,hoten,diachi)
VALUES('NV03002','Nguy n Th Ha nh Dung','56 Tr n Phu ')
Ngoa i hai da ng o trn, cu l nh INSERT co n cho phe p ta nh p du li u cho m t
ba ng ba ng ca ch l y du li u tu m t ba ng kha c. Hay no i ca ch kha c, cu l nh INSERT
co n cho phe p chu ng ta sao luu du li u tu ba ng na y sang ba ng kha c.
Vi du 2.24: Gia su ta co ba ng luong_nhanvien bao g m hai c t hoten va luong,
cu l nh duo i dy b sung du li u va ba ng luongnhanvien ba ng ca ch l y du li u tu
ba ng nhn vin:
INSERT INTO luong_nhanvien
SELECT hoten,hsluong*210000 FROM nhanvien
2.2 C p nh t du li u
Cu l nh UPDATE cho phe p nguo i su du ng thay di du li u da t n ta i bn trong
ba ng du li u. Cu l nh na y co cu pha p nhu sau:
Tr n Nguyn Phong
UPDATE updated_table_name
SET colname = expression
[, ..., colname = expression ]
[FROM table_name [,..., table_name]]
[WHERE conditions ]
Vi du 2.25: Cu l nh duo i dy tang luong ln 0.2 cho nhu ng nhn vin la m vic
ta i don vi co ma don vi la 04
UPDATE nhanvien
SET hsluong = hsluong+0.2
WHERE madonvi ='04'
M nh d IROM trong cu l nh UPDATE duo c su du ng khi c n chi dinh ca c
di u ki n c p nh t ln quan d n ca c ba ng kha c.
Vi du : Gia su ta co hai ba ng MATHANG va NHATKYBANHANG nhu sau:
MATHANG NHATKYBANHANG
MAHANG 1 NGAYBAN
TENHANG

MAHANG
DONGIA SOLUONG
THANHTIEN
Cu l nh duo i dy se c p nh t gia tri cho truo ng THANHTIEN trong ba ng
NHATKYBANHANG theo cng thu c THANHTIEN SOLUONG DONGIA
UPDATE nhatkybanhang
SET thanhtien = soluong*mathang.dongia
FROM mathang
WHERE nhatkybanhang.mahang = mathang.mahang
2.3 Xoa du li u
xoa ca c ba n ghi du li u ra kho i ba ng du li u, ta su du ng cu l nh DELETE
co cu pha p nhu sau:
DELETE [FROM] delete_table_name
[FROM table_name [,..., table_name]]
[WHERE conditions]
Vi du 2.26: Cu l nh duo i dy xoa kho i ba ng nhanvien nhu ng nhn vin la m
vic ta i don vi co s din thoa i la '848484'
DELETE FROM nhanvien
Gia o trnh th c ha nh SQL
Trang 31
FROM donvi
WHERE nhanvien.madonvi = donvi.madonvi AND
donvi.dienthoai ='848484'
Z Y
Tr n Nguyn Phong
6 60 00 00 00 0 J J. . k k6 60 0k k k k6 60 0 0 0I IL L 0 0 k kh hI IL L k k
Ngn ngu di u khin duo c su du ng trong vi c c p pha t hay huy bo quy n cu a
nguo i su du ng d i vo i ca c cu l nh SQL hoa c trn ca c di tuo ng CSDL.
1. Cu l nh GRANT
Cu l nh GRANT duo c su du ng nha m c p pha t quy n cho nguo i su du ng trn
ca c d i tuo ng CSDL hoa c quy n thu c thi ca c cu l nh SQL. Cu pha p cu a cu l nh na y
co hai da ng nhu sau:
Da ng 1: C p pha t quy n d i vo i ca c cu l nh
GRANT ALL | statement [,...,statementN ]
TO account [,...,accountN]
Dang 2: C p pha t quy n d i vo i ca c d i tuo ng CSDL
GRANT ALL | permission [,...,permissionN]
ON table_name |view_name [(column1 [,...,columnN])]
|ON stored_procedure
TO account [,...,accountN]
Trong do :
ALL: la tu khoa duo c su du ng khi mu n c p pha t t t ca ca c quy n co th cho
nguo i su du ng
Statement: la cu l nh duo c c p pha t quy n cho nguo i su du ng. Ca c cu l nh
co th c p pha t cho nguo i su du ng bao g m:
CREATE DATABASE
CREATE DEIAULT
CREATE PROCEDURE
CREATE RULE
CREATE TABLE
CREATE VIEW
BACKUP DATABASE
BACKUP LOG
Gia o trnh th c ha nh SQL
Trang 33
account: la tn ta i khoa n cu a nguo i su du ng khi dang nh p va o h th ng.
Permission: la m t quy n c p pha t cho nguo i su du ng trn d i tuo ng CSDL
va duo c qui dinh nhu sau:
Ca c quy n co th c p pha t trn m t ba ng hoa c khung nhln: SELECT,
INSERT, DELETE va UPDATE.
Ca c quy n co th c p pha t trn ca c c t cu a ba ng hoa c khung nhln:
SELECT va UPDATE.
Quy n co th c p pha t d i vo i thu tu c luu tru : EXCUTE
Vi du 3.1:
C p pha t quy n thu c thi cu l nh CREATE TABLE va CREATE VIEW cho ta i
khoa n co tn la abuser:
GRANT CREATE TABLE, CREATE VIEW
TO db_user
C p pha t cho ca c ta i khoa n co tn la abuser1 va abuser2 quy n duo c xem va
c p nh t du li u trn ca c c t hoten, aiachi, aienthoai va hsluong cu a ba ng nhanvien
GRANT SELECT, UPDATE
ON nhanvien(hoten,diachi,dienthoai,hsluong)
TO db_user1, db_user2
2. Cu l nh REVOKE
Cu l nh REVOKE duo c su du ng d huy bo quy n da duo c c p pha t cho nguo i
su du ng trn ca c d i tuo ng CSDL hoa c cu l nh SQL. Cu l nh REVOKE cu ng co
hai da ng nhu sau:
Da ng 1: Huy bo quy n d i vo i cu l nh
REVOKE ALL | statement [,...,statementN]
FROM account [,...,accountN]
Da ng 2: Huy bo quy n d i voi d i tuong CSDL
REVOKE ALL | permission [,...,permissionN]}
ON table_name | view_name [(column [,...,columnN])]
| stored_procedure
FROM account [,...,accountN ]
Vi du 3.2: Huy bo quy n xem va c p nh t du li u trn c t hsluong cu a ba ng
nhanvien d i vo i ta i khoa n co tn la abuser1
Tr n Nguyn Phong
REVOKE SELECT, UPDATE
ON nhanvien(hsluong)
FROM db_user1
Huy bo t t ca ca c quy n da c p pha t cho ta i khoa n co tn la db_user
REVOKE ALL
FROM db_user
Z ZZ Z Y YY Y
Gia o trnh th c ha nh SQL
Trang 35
6 60 00 00 00 0 4 4. . h h0 0 0 0 6 6 L L0 00 0 0 0 I I6 66 6L L
I. Su dung thu tuc luu tru (stored procedure)
Cc th tc lu tr l mt trong nhng i tng c s d liu. C th xem
chng tng t nh nhng th tc trong cc ngn ng lp trnh. Mi mt th tc lu
tr c th c cc kh nng sau:
Nhn cc tham s u vo, thc thi cc cu lnh bn trong th tc v tr v cc
gi tr.
Bn trong mi th tc c th cha cc cu lnh nhm thc hin cc thao tc
trn c s d liu (k c vic gi n cc th tc lu tr khc)
Tr v mt gi tr trng thi thng qua c th xc nh vic thc thi th tc
l thnh cng hay b li.
Vic s dng cc th tc lu tr bn trong c s d liu s mang li nhng li
ch sau:
Th tc lu tr cho php module ho cng vic, to iu kin thun li cho
vic thc hin cc thao tc trn d liu.
Th tc lu tr c phn tch, ti u v bin dch khi to ra nn vic thc thi
chng nhanh hn nhiu so vi vic s dng mt tp cc cu lnh giao tc
SQL theo nhng cch thng thng.
Th tc lu tr cho php chng ta thc hin cng mt yu cu bng mt cu
lnh n gin thay v phi s dng nhiu dng lnh SQL. iu ny s lm
gim thiu s lu thng trn mng.
Thay v cp pht quyn trc tip cho ngi s dng trn cc cu lnh SQL, ta
c th cp pht quyn cho ngi s dng thng qua cc th tc lu tr, nh
tng kh nng bo mt i vi h thng.
I.1. To cc th tc lu tr
to mt sp, ta s dng cu lnh CREATE PROCEDURE c c php nh sau:
CREATE PROCEDURE procedure_name [;number]
[(parameter1 [,parameter2]...[parameter255])]
AS sql_statements
V d 4.1:
CREATE PROC sp_list @bten char(20)
AS
SELECT hoten, ngaysinh, diachi
FROM nhanvien
WHERE hoten= @bten
Ch : Nu khi gi th tc, chng ta truyn tham s cho th tc di dng:
Tr n Nguyn Phong
@tham_s = gi_tr
Th th t cc tham s khng cn phi tun theo th t nh khi to th tc bng cu
lnh CREATE PROCEDURE. Tuy nhin, nu nh c mt tham s c truyn gi
tr theo cch trn th tt c cc tham s cn li cng phi c truyn gi tr theo cch
.
Ta c th gn mt gi tr mc nh cho tham s trong cu lnh CREATE
PROCEDURE. Gi tr ny, c th l hng bt k, s c ly lm tham s ca th tc
khi ngi s dng khng cung cp gi tr cho tham s khi gi th tc.
V d 4.2:
CREATE PROC sp_list;2 @bten char(20)=Nguyen Van A
AS
SELECT * FROM nhanvien
WHERE hoten = @bten
Vi th tc trn, nu ta gi msp_list;2 m khng c tham s th th tc s ly
tham s mc nh l Nguyn Vn A cho @bten.
Gi tr mc nh c th NULL. Trong trng hp ny, nu ngi s dng khng
cung cp tham s, SQL Server s thi hnh th tc theo cc tham s khc.
V d 4.3: Vi cu lnh
CREATE PROC sp_list;3 @bten char(20)=NULL,@bluong float
AS
SELECT * FROM nhanvien
WHERE hoten=@bten AND hsluong=@bluong
Ta th gi th tc trn nh sau:
msp_list;3 @btuoi=23
m khng b li.
Mc nh c th bao gm cc k t i din (%, _, [], [^] ) nu th tc s dng
tham s vi t kha LIKE.
V d 4.4:
CREATE PROC sp_list;4 @bten char(20) =Trn%
AS
SELECT * FROM nhanvien
WHERE hoten LIKE @bten
I.2. Thng tin tr v t cc th tc lu tr
Cc gi tr trng thi tr v:
Cc th tc c th tr v mt gi tr nguyn c gi l mt trng thi tr v. Gi
tr ny ch ra cho bit th tc c thc hin thnh cng hay gp li v nguyn nhn
ca li (SQL Server nh ngha sn mt tp cc gi tr tr v, cc gi tr ny nm
trong khong [-99;0]; trong gi tr tr v bng 0 tc l vic thc hin th tc thnh
cng, cc gi tr cn li cho bit nguyn do khi b li).
Gi tr tr v do ngi s dng nh ngha
Ngi s dng c th nh ngha cc gi tr tr v ca mnh trong cc th tc
lu tr bng cch b sung mt tham s vo cu lnh RETURN. Tt c cc s nguyn
ngoi tr cc gi tr dnh ring cho h thng u c th c s dng.
Gia o trnh th c ha nh SQL
Trang 37
V d 4.5:
CREATE PROC sp_exam @bten char(20)
AS
IF EXISTS (SELECT * FROM nhanvien WHERE hoten = @bten)
RETURN 1
ELSE
RETURN 2
Cc tham s tr v
Khi c hai cu lnh CREATE PROCEDURE v EXECUTE cha mc chn
OUTPUT cho tn mt tham s, th tc c th s dng mt bin tr v tr ca tham
s n ngi gi. Bng vic s dng t kho OUTPUT, bt c s thay i no n
cng vn cn gi li sau khi th tc c thc hin, v cc bin c th c s dng
trong cc cu lnh SQL b sung sau trong tp lnh hay th tc c gi. Nu t
kho OUTPUT khng c s dng, vic thay i n tham s s khng c gi li
sau khi kt thc thc hin th tc. Ngoi ra, ta cn c th dng RETURN tr v gi
tr.
Mt th tc lu tr c th s dng bt k hoc tt c kh nng sau tr v:
Mt hoc nhiu tp cc gi tr.
Mt gi tr tr v r rng (s dng cu lnh RETURN).
Mt tham s OUTPUT.
Nu chng ta ch nh OUTPUT khi thc hin mt th tc nhng tham s tng
ng khng c nh ngha vi OUTPUT khi to th tc th s b li. Tuy nhin nu
ta nh ngha OUTPUT cho mt tham s trong th tc nhng khng ch nh
OUTPUT khi thc hin th vn khng b li (gi tr tham s khi s khng c tr
v).
V d 4.6:
CREATE PROC Chia @sobichia real,@sochia real,
@kqua real OUTPUT
AS
IF (@sochia =0)
Print Division by zero
ELSE
SELECT @kqua = @sobichia / @sochia
Khi nu ta thc hin nh sau:
DECLARE @ketqua real
EXEC Chia 100, 2, @ketqua OUT
SELECT @ketqua
S cho kt qu l:
----------------------
50.0
Cn nu thc hin
DECLARE @ketqua real
EXEC Chia 100, 2, @ketqua
SELECT @ketqua
Tr n Nguyn Phong
S cho kt qu l:
----------------------
(null)
I.3. Cc qui tc s dng cho sp
Sau y l mt s qui tc cn lu khi to cc th tc lu tr
Cu lnh CREATE PROCEDURE khng th kt hp vi cc cu lnh SQL
khc trong mt khi lnh n (single batch).
Bn thn nh ngha CREATE PROCEDURE c th bao gm bt k s
lng cng nh cu lnh SQL no ngoi tr nhng cu lnh sau:
CREATE VIEW CREATE TRIGGER
CREATE DEFAULT CREATE PROCEDURE
CREATE RULE
Cc i tng CSDL khc c th c to bn trong mt th tc lu tr. Ta
c th tham chiu mt i tng c to trong cng th tc min l n
c to trc khi tham chiu.
Bn trong mt th tc, ta khng th to mt i tng, xo n v sau to
mt i tng mi vi cng tn.
Ta c th tham chiu cc bng tm thi bn trong mt th tc.
Nu ta thc thi mt th tc m gi n th tc khc, th tc c gi c th
truy cp n mi i tng ngoi tr cc bng tm thi c to bi th tc
u tin.
Nu ta to mt bng tm thi ring (private temporary table) bn trong mt
th tc, bng tm thi ch tn ti cho nhng mc ch ca th tc ; n s
mt i khi thot ra khi th tc.
S tham s ti a ca mt th tc l 255.
S bin cc b v ton cc trong mt th tc ch b gii hn bi kh nng b
nh.
Cc th tc tm thi cc b (private) v ton cc (public), tng t nh cc
bng tm thi, c th c to vi du # v ## ng trc tn th tc. # biu
din th tc tm thi cc b cn ## biu din th tc tm thi ton cc.
I.4 Xc nh tn bn trong cc th tc
Bn trong mt th tc, tn cc i tng c s dng vi cu lnh ALTER
TABLE, CREATE TABLE, DROP TABLE, TRUNCATE TABLE, CREATE INDEX,
DROP INDEX, UPDATE STATISTICS v DBCC phi c xc nh vi tn ca
ngi s hu i tng (object owners name) nu nh nhng ngi dng (user) khc
s dng th tc. V d, ngi dng Mary, l s hu ch ca bng marytab, phi ch
nh tn ca bng ca mnh khi n c s dng vi mt trong nhng cu lnh ny
nu c ta mun nhng user khc c th thc hin th tc m trong bng c s
dng.
Qui tc ny l cn thit v tn i tng c phn tch khi cc th tc c
chy. Nu marytab khng c ch nh v user John tm cch thc hin th tc, SQL
Gia o trnh th c ha nh SQL
Trang 39
s tm bng marytab do John s hu. V d di y l mt cch dng ng, n ch ra
cho SQL Server tm bng marytab do Mary s hu:
CREATE PROC p1
AS
CREATE INDEX marytab_ind
ON mary.marytab(col1)
I.5 i tn cc th tc:
S dng th tc:
sp_rename old_name, new_name
Ta ch c th i tn nhng th tc m ta s hu. Ngi s hu CSDL c th
thay i tn ca bt k th tc no ca ngi s dng. Th tc c i tn phi nm
trong CSDL hin thi.
Ta phi xo v to li mt th tc nu ta thay i tn ca mt i tng c
tham chiu bi th tc .
c c bo co v nhng i tng c tham chiu bi mt th tc, ta s
dng th tc h thng: sp_depends.
xem ni dung ca nh ngha mt th tc, ta s dng th tc h thng:
sp_helptext.
I.6. Xo th tc:
xo mt th tc, ta s dng cu lnh:
DROP PROCEDURE proc_name
II. S dng cc Trigger
Mt trigger l mt dng c bit ca th tc lu tr v n c thc hin t
ng khi ngi dng p dng cu lnh sa i d liu ln mt bng c ch nh.
Cc trigger thng c s dng cho vic p buc cc qui tc lm vic v ton vn d
liu. Tnh ton vn tham chiu c th c nh ngha bng cch s dng rng buc
FOREIGN KEY vi cu lnh CREATE TABLE. Nu cc rng buc tn ti trong
bng c s tc ng ca trigger, n c kim tra trc vic thc hin trigger. Nu
cc rng buc b vi phm, trigger s khng thc thi.
Cc trigger c s dng trong nhng cch sau:
Cc trigger c th thay i ng lot (cascade change) cc bng c lin h
trong mt CSDL.
Cc trigger c th khng cho php hoc roll back nhng thay i vi phm
tnh ton vn tham chiu, hy b giao tc sa i d liu.
Cc trigger c th p t cc gii hn phc tp hn nhng gii hn c nh
ngha bng rng buc CHECK. Khc vi rng buc CHECK, cc trigger c
th tham chiu n cc ct trong cc bng khc.
Cc trigger cn c th tm s khc bit gia cc trng thi ca mt bng
trc v sau khi sa i d liu v ly ra nhng tc ng da trn s khc
bit .
Tr n Nguyn Phong
II.1 To cc trigger
Mt trigger l mt i tng CSDL. Ta to mt trigger bng vic ch nh bng
hin hnh v cu lnh sa i d liu kch hot trigger. Sau ta xc nh cc cng
vic m trigger lm.
Mt bng c th c ti a 3 loi trigger: mt trigger cp nht (update trigger),
mt trigger chn (insert trigger) v mt trigger xa (delete trigger). Tuy nhin, mi
trigger c th thc hin nhiu hm v gi n 16 th tc. Mi trigger ch c th p
dng cho mt bng. Tuy nhin, mt trigger n c th p dng cho c 3 cng vic
(UPDATE, INSERT v DELETE).
Ta khng th to mt trigger trn mt khung nhn hay mt bng tm thi mc d
cc trigger c th tham chiu cc khung nhn hay cc bng tm thi.
Cu lnh TRUNCATE TABLE mc d ging cu lnh DELETE khi khng c
mnh WHERE nhng n khng th kch hot mt trigger.
to mi mt trigger, ta s dng cu lnh c c php nh sau:
CREATE TRIGGER trigger_name
ON table_name
FOR {INSERT, UPDATE, DELETE}
AS sql_statements
Hoc s dng mnh IF UPDATE:
CREATE TRIGGER trigger_name
ON table_name
FOR {INSERT, UPDATE}
AS
IF UPDATE (column_name)
[{ANDOR}UPDATE (column_name)...] sql_statements
V d 4.7: Nu chng ta mun sau khi ta cp nht d liu cho bng nhanvien,
SQL Server s hin th ni dung ca bng xem th ta to mt trigger nh sau:
CREATE TRIGGER tgr_check
ON nhanvien
FOR INSERT, UPDATE
AS
print '*** Ket qua sau khi cap nhat ***'
SELECT * FROM nhanvien
II.2 Cc gi tr null ngm nh v hin (implicit and explicit null values)
Mnh IF UPDATE(tn_ct) l ng cho mt cu lnh INSERT khi m ct
c gn mt gi tr trong danh sch chn hay trong mnh VALUES. Mt NULL
hin (explicit) hay mt mc nh gn mt gi tr cho mt ct v v th kch hot
trigger. Vi mt NULL ngm nh, nu gi tr khng c xc nh bi cu hi hoc
bi mc nh c gn, trigger trn ct khng c kch hot.
V d 4.8:
CREATE TABLE vidu(col1 int NULL,col2 int NOT NULL)
GO
CREATE TRIGGER tgr_vidu
ON vidu
Gia o trnh th c ha nh SQL
Trang 41
FOR INSERT
AS
IF UPDATE(col1) AND UPDATE(col2)
Print Firing
GO
CREATE DEFAULT col2_default
AS 99
GO
/* IF UPDATE l ng cho c hai ct, trigger c kch hot */
INSERT vidu(col1,col2) VALUES(1, 2)
/* IF UPDATE l ng cho c hai ct, trigger c kch hot */
INSERT vidu VALUES(1, 2)
/* NULL hin: IF UPDATE l ng cho c hai ct, trigger c kch hot */
INSERT vidu VALUES(null, 2)
/* Khng c mc nh trn ct col1, IF UPDATE khng ng cho c hai ct, trigger
khng c kch hot */
INSERT vidu(col2) VALUES(2)
/* Khng c mc nh trn ct col2, IF UPDATE khng ng cho c hai ct, trigger
khng c kch hot */
INSERT vidu(col1) VALUES(2)
Kt qu tng t c sn sinh vi vic s dng ch mnh
IF UPDATE(col1)
to mt trigger khng cho php vic chn cc gi tr null ngm nh, ta s
dng:
IF UPDATE(col2) OR UPDATE(col2)
Cu lnh SQL trong trigger c th sau kim tra xem col1 l NULL hay
khng.
II.3 Vic i tn v cc trigger
Nu mt bng c tham chiu bi mt trigger b i tn, ta phi xo trigger
i v to li n ph hp vic tham chiu ca n n bng.
Th tc sp_depends c chc nng lit k tt c cc trigger tham chiu n i
tng (chng hn bng hay khung nhn) hoc tt c cc bng hay khung nhn m
trigger tc ng. V d sau y lit k cc i tng c tham chiu bi trigger
tgr_check:
sp_depends tgr_check
II.4 Hin th thng tin v cc trigger
Do cc trigger l cc i tng CSDL nn chng c lit k trong bng h
thng sysobjects. Ct type trong sysobjects xc nh cc trigger vi ch vit tt TR. S
thc thi cc trigger c lu tr trong bng sysprocedures.
Truy vn di y tm cc trigger trong mt CSDL:
SELECT * FROM sysobjects WHERE type=TR
hin th thng tin v mt trigger ta thc hin th tc:
Tr n Nguyn Phong
sp_help trigger_name
Cu lnh CREATE TRIGGER cho mi trigger c lu tr trong bng h thng
syscomments. Ta c th hin th li nh ngha trigger bng cch s dng th tc
sp_helptext.
V d 4.9: thc hin sp_helptext tgr_check ta c kt qu nh sau:
text
--------------
create trigger tgr_check
on nhanvien
for insert,update
as
print '***** Ket qua sau khi cap nhat *****'
select * from nhanvien
II.5 Xo trigger
Ta c th xo mt trigger bng cch xo n hoc xo bng trigger. Khi mt
bng c xa, nhng trigger no c lin quan vi n cng ng thi b xa. DROP
TRIGGER mc nh cho php i vi ngi s dng bng trigger v khng th
chuyn cho ngi khc.
Ta c th xa mt trigger bng cch s dng cu lnh DROP TRIGGER
Gia o trnh th c ha nh SQL
Trang 43
6 60 00 00 00 0 . . F Fh h0 0 L L0 0 6 6
Trong chuong na y, chu ng ti gio i thi u c u tru c va du li u cu a ca c ba ng duo c su
du ng trong ca c vi du trong chuong 2. Sau do gio i thi u m t s ha m thuo ng su du ng
trong SQL Server d giu p ca c ba n tham kha o trong qua trlnh thu c ha nh.
1. C u tru c va du li u cu a ba ng NHANVIEN va DONVI
NHANVIEN DONVI
MANV 1 MADONVI
HOTEN TENDONVI
NGAYSINH DIENTHOAI
DIACHI
DIENTHOAI
HSLUONG
MADONVI

Ba ng NHANVIEN
MANV HOTEN NGAYSINH DIACHI DIENTHOAI HSLUONG MADONVI
NV01001 Nguy n Thi Hoa 05/05/1976 56 L Du n 521304 2.11 01
NV02001 L Hoai Nam 03/05/1976 32 Tr n Phu 823145 1.86 02
NV02002 Hoang Nam Phong 05/08/1971 66 Hoa ng Di u 521247 3.21 02
NV03001 Tr n Nguyn Phong 20/12/1976 7 Ha N i 849290 1.92 03
NV03002 Nguy n Hu u Tlnh 18/08/1976 7 Ha N i 849290 1.92 03
NV05001 Nguy n Trung Kin 14/05/1972 77 Nguy n Hu 823236 1.86 05
Ba ng DONVI
MADONVI TENDONVI DIENTHOAI
01 Pho ng K toa n 821451
02 Pho ng T chuc 831414
03 Pho ng di u ha nh 823351
04 Pho ng d i ngoa i 841457
05 Phong Ta i vu 821451
2. M t s ha m thuo ng su dung trong SQL Server
2.1 Ca c ha m trn du liu kiu nga y va gio
a. Ha m DATEADD
Tr n Nguyn Phong
Cu pha p: DATEADD(aatepart, number, aate)
Chu c nng: Ha m tra v m t gia tri kiu DateTime ba ng ca ch c ng thm m t
khoa ng gia tri la number va o nga y aate duo c chi dinh.
Datepart: tham s chi dinh tha nh ph n se duo c c ng d i vo i gia tri aate bao
gm:
Datepart Vi t t t
year yy, yyyy
quarter qq, q
month mm, m
dayoIyear dy, y
day dd, d
week wk, ww
hour hh
minute mi, n
second ss, s
millisecond ms
b. Ha m DATEDIFF
Cu pha p: DATEDIII(aatepart, startaate, enaaate)
Chu c nng: Ha m tra v khoa ng tho i gian giu a hai gia tri kiu na y duo c chi dinh
tuy thu c va o tham s aatepart
Vi du : ha m Dateaiff(year,5/20/1976,8/9/2001) cho k t qua la 25
c. Ha m DATEPART
Cu pha p: DATEPART(aatepart, aate)
Chu c nng: Ha m tra v m t s nguyn duo c trich ra tu tha nh ph n (duo c chi
dinh bo i tham s partaate) trong gia tri kiu nga y duo c chi dinh.
Vi du : Ha m DatePart(year,'5/20/1976') cho k t qua la 1976
d. Ha m GETDATE
Cu pha p: GETDATE()
Chu c nng: Ha m tra v nga y hi n ta i
e. Ha m DAY, MONTH, YEAR
Cu pha p: DAY(aate), MONTH(aate), YEAR(aate)
Chu c nng: Ha m tra v gia tri nga y (tuong u ng tha ng, nam) cu a gia tri kiu
nga y duo c chi dinh.
2.2 Ca c ha m v chu i
Gia o trnh th c ha nh SQL
Trang 45
a. Ha m LEFT
Cu pha p: LEIT(string, n)
Chu c nang:Ha m trich ra tu chu i string n ky tu tinh tu bn tra i
b. Ha m RIGHT
Cu pha p: LEIT(string, n)
Chu c nng: Ha m trich ra tu chu i string n ky tu tinh tu bn pha i
c. Ha m SUBSTRING
Cu pha p: SUBSTRING(string, m, n)
Chu c nng: Ha m trich ra tu chu i string n ky tu tinh tu ky tu thu m
d. Ha m LTRIM, RTRIM
Cu pha p: LTRIM(string), RTRIM(string)
Chu c nng: Ha m ca t bo ca c khoa ng tra ng thu a bn tra i/ bn pha i chu i string.
e. Ha m LEN
Cu pha p: LEN(string)
Chu c nng: Ha m tra v d da i cu a chu i string.
Tr n Nguyn Phong
M M0 0 6 6 L L0 0 6 6
CHUONG 1: NGN NGU DJNH NGHIA DU LI U.......................................................................................2
1. TA O BANG DU LI U........................................................................................................................................2
1.1 Cac thuo c tnh lien quan aen bang.......................................................................................................2
1.2 Ta o bang ba ng truy vn SQL ................................................................................................................3
1.3 Sua aoi bang..........................................................................................................................................8
2. CH MU C (INDEX) ..........................................................................................................................................9
3. KHUNG NHN (VIEW).....................................................................................................................................9
CHUONG 2: NGN NGU THAO TA C DU LI U........................................................................................12
1. TRUY XU T DU LI U....................................................................................................................................12
1.1 Xc nh bng bng mnh FROM...................................................................................................12
1.2 Mnh WHERE.................................................................................................................................13
1.3 Danh sch chn trong cu lnh SELECT............................................................................................14
1.4 Tnh ton cc gi tr trong cu lnh SELECT .....................................................................................16
1.5 T kho DISTINCT .............................................................................................................................16
1.6 To bng mi bng cu lnh SELECT ... INTO..................................................................................17
1.7 Sp xp kt qu truy vn bng ORDER BY..........................................................................................17
1.8 Php hp v ton t UNION...............................................................................................................18
1.9 Php ni...............................................................................................................................................20
1.10 To cc dng thng k d liu vi COMPUTE ... BY........................................................................24
1.11 Thng k d liu vi GROUP BY v HAVING...................................................................................26
1.12 Truy vn con (subquery)..................................................................................................................27
2. B SUNG, CP NH T VA XOA DU LI U.........................................................................................................28
2.1 Bo sung au lie u....................................................................................................................................28
2.2 C p nh t au lie u..................................................................................................................................29
2.3 Xoa au lie u ..........................................................................................................................................30
CHUONG 3: NGN NGU DI U KHI N.......................................................................................................32
1. CU L NH GRANT.....................................................................................................................................32
2. CU L NH REVOKE ..................................................................................................................................33
CHUONG 4: THU TU C LUU TRU VA TRIGGER......................................................................................35
I. SU DUNG THU TU C LUU TRU (STORED PROCEDURE)......................................................................................35
I.1. To cc th tc lu tr........................................................................................................................35
I.2. Thng tin tr v t cc th tc lu tr.................................................................................................36
I.3. Cc qui tc s dng cho sp .................................................................................................................38
I.4 Xc nh tn bn trong cc th tc .......................................................................................................38
I.5 i tn cc th tc:..............................................................................................................................39
I.6. Xo th tc: .........................................................................................................................................39
II. S DNG CC TRIGGER .................................................................................................................................39
II.1 To cc trigger....................................................................................................................................40
II.2 Cc gi tr null ngm nh v hin (implicit and explicit null values)................................................40
II.3 Vic i tn v cc trigger..................................................................................................................41
II.4 Hin th thng tin v cc trigger .........................................................................................................41
II.5 Xo trigger .........................................................................................................................................42
CHUONG 5: PHU LU C....................................................................................................................................43
1. CU TRU C VA DU LI U CU A BANG NHANVIEN VA DONVI ......................................................................43
2. M T S HA M THUO NG SU DUNG TRONG SQL SERVER ................................................................................43
2.1 Cac ha m tren au lie u kieu nga y va gio ................................................................................................43
2.2 Cac ham v chui..........................................................................................................................44

You might also like