You are on page 1of 46

Gia o trnh th c ha nh SQL

Trang 1
GIOI THIU
SQL (Structurea Query Language) la ngon ngu auoc su aung cho cac he quan
tri co so au lieu quan he. Ngon ngu SQL chun auoc aua ra boi ANSI (American
National Stanaaras Instituae) va ISO (International Stanaaras Organi:ation) voi
phien ban moi nht hien nay la phien ban SQL-92 (phien ban auoc aua ra nam
1992). Mac au co nhieu ngon ngu khac nhau auoc aua ra cho cac he quan tri CSDL
quan he, SQL la ngon ngu auoc su aung rong rai hien nay trong rt nhieu he thong
CSDL thuong mai nhu Oracle, SQL Server, DB2, Microsoft Access... Thong qua SQL,
nguoi su aung co the ae aang ainh ngha auoc au lieu, thao tac voi au lieu,... Mat
khac, ay la ngon ngu co tnh khai bao nen no ae su aung va cung vi vy ma tro nen
pho bien
Giao trinh nay nham cung cp cho ban tai lieu tham khao tuong aoi ay au ve
cac cu lenh giao tac SQL su aung cho he quan tri CSDL Microsoft SQL Server.
Giao trinh bao gom bon chuong.
- Chuong 1 gioi thieu mot so cu lenh su aung trong vie c ainh ngha cac aoi
tuong au lieu nhu bang au lieu, khung nhin va ch muc.
- Chuong 2 trinh bay bon cu lenh thao tac au lieu la SELECT, INSERT,
UPDATE va DELETE, trong ao tp trung chu yeu o cu lenh SELECT.
- Chuong 3 ae cp aen hai cu lenh aieu khien la GRANT va REJOKE su aung
trong viec cp phat va huy bo quyen cua nguoi su aung CSDL.
- Chuong 4 gioi thieu ve thu tuc luu tru va trigger. y la nhung aoi tuong
CSDL auoc su aung nham tang hieu nang khi su aung CSDL.
- Trong chuong phu luc, chung toi gioi thieu cu truc va au lieu cua cac bang su
aung trong cac v au o chuong 2 ae ban tien tra cuu va aoi chieu voi cac v au aa neu.
Ngoai ra trong chuong nay con co cac ham thuong su aung trong SQL Server ae cac
ban tham khao trong thuc hanh.
Mac au aa rt co gang nhung giao trinh khong the tranh auoc cac sai sot. Rt
mong nhn auoc su gop y cua cac ban ae giao trinh ngay cang hoan thien hon.
Trn 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 liu bao gm cac cu lnh cho phe p nguoi su dung dinh
ngha CSDL va cac di tuong trong CSDL nhu cac bang, cac khung nhln, chi muc,...
1. Tao ba ng du liu
Du liu bn trong mt CSDL duoc t chuc luu tru trong cac bang. Bn trong cac
bang, du liu duoc t chuc duoi dang cac dong va cac ct. Mi mt dong biu din
mt ban ghi duy nht va mi mt ct biu din cho mt truong.
1.1 Cac thuc tinh lin quan dn bang
Khi tao va lam vic voi cac bang du liu, ta cn pha i d y dn cac thuc tinh
khac trn bang nhu: kiu du liu, cac rang buc, cac khoa, cac qui tac,... Cac thuc
tinh nay duoc su dung nham tao ra cac rang buc toan ven trn cac ct (truong), trn
bang cung nhu tao ra cac toan ven tham chiu giua cac bang du liu trong CSDL.
a. Kiu du li u
Mi mt ct (truong) cua mt bang du phai thuc vao mt kiu du liu nht
dinh da duoc dinh ngha tu truoc. Mi mt kiu du liu qui dinh cac gia tri du liu
duoc cho phep di voi ct do. Cac h quan tri CSDL thuong cung cp cac kiu du liu
chun, ngoai ra con co th cho phep nguoi su dung dinh ngha cac kiu du liu khac
dua trn cac kiu du liu da co.
Duoi dy la mt s kiu du liu thuong duoc su dung trong giao tac SQL:
Binary
Bit
Char
Datetime
Decimal
Float
Image
Int
Money
Nchar
Ntext
Nvarchar
Real
Smalldatetime
Smallint
Smallmoney
Text
Tinyint
Varbinary
Varchar
b. Cac ra ng buc (CONSTRAINTS)
Trn cac bang du liu, cac rang buc duoc su dung nham cac muc dich sau:
Qui dinh cac gia tri du liu hay khun dang du liu duo c cho phep chp nhn trn
cac ct cua bang (rang buc CHECK)
Qui dinh gia tri mac dinh cho cac ct (rang buc DEIAULT).
Gia o trnh th c ha nh SQL
Trang 3
Tao nn tinh toan ven thuc th trong mt bang du liu va toan ven tham chiu giua
cac bang du liu trong CSDL (rang buc PRIMARY KEY, UNIQUE va
IOREIGN KEY).
Chung ta se tlm hiu chi tit hon v cac rang buc nay o phn trlnh bay v cu lnh
CREATE TABLE.
1.2 Tao bang bng truy vn SQL
Tao cac bang la mt khu quan trong trong trong qua trlnh thit k va cai dat
cac CSDL. Bn trong cac CSDL, mi mt bang thuong duoc su dung nham biu din
thng thi v cac di tuong trong th gioi thuc va/hoac biu din mi quan h giua cac
di tuong do. co th t chuc tt mt bang du liu, ban it nht cn phai xac dinh
duoc cac yu cu sau:
Bang duoc su dung nham muc dich gl va co vai tro nhu th nao bn trong CSDL?
Bang se bao gm nhung ct nao va kiu du liu cho ca c ct do la gl?
Nhung ct nao cho phep chp nhn gia tri NULL.
Co su dung cac rang buc, cac mac dinh hay khng va nu co thl su dung o du va
nhu th nao?
Nhung ct nao se dong vai tro la khoa chinh, khoa ngoai, khoa duy nht? Nhung
dang chi muc nao la cn thit va cn o du.
a. Tao ba ng du liu:
tao mt bang trong CSDL, ban su dung cu lnh CREATE TABLE co cu
phap 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 bang cn tao. Tn cua bang phai duy nht
trong mi CSDL va phai tun theo cac qui tac v
dinh danh
- colname_i:
Tn cua ct thu i trong bang. Cac ct trong mi
Trn Nguyn Phong
bang phai co tn khac nhau va phai tun theo cac
qui tac v dinh danh. Mi mt bang phai co it
nht mt ct
- col_i_properties:
Cac thuc tinh cua ct thu i qui dinh kiu du liu
cua ct va chi dinh ct co cho phep chp nhn
gia tri NULL hay khng
- constraints_i:
Cac rang buc (nu co) trn ct thu i nhu cac
rang buc v khoa, cac mac dinh, cac qui dinh v
khun dang du liu.
- table_constraint:
Cac rang buc trn bang du liu.
Vi du 1.1: Cu lnh duoi dy thuc hinh vic tao bang NHANVIEN bao gm cac ct
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 dung ca c rang buc trong bang du liu
D DD D Rang buc CHECK
Rang buc CHECK duoc su dung d chi dinh cac gia tri hay khun dang du liu
co th duoc chp nhn di voi mt ct. Trn mt ct co th co nhiu rang buc
CHECK. khai bao mt rang buc CHECK di voi mt ct nao do, ta su dung cu
phap nhu sau:
[CONSTRAINT constraint_name]
CHECK (expression)
Trong do expression la mt biu thuc logic qui dinh gia tri hay khun dang cua du
liu duoc cho phep. Khi do, chi nhung gia tri du liu nao lam cho expression nhn gia
tri dung moi duoc chp nhn.
Vi du 1.2: qui dinh din thoai cua nhn vin phai co dang '######' (chang ha n
826767), cu lnh o vi du 1.1 duoc vit 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 Rang buc DEFAULT
Rang buc DEIAULT duoc su dung d qui dinh gia tri mac dinh cho mt ct.
Gia tri nay se tu dng duoc gan cho ct nay khi nguoi su dung b sung mt ban ghi
ma khng chi dinh gia tri cho ct. Trn mi ct chi co th co nhiu nht mt rang
buc DEIAULT (tuc la chi co th co ti da mt gia tri mac dinh).
khai bao mt gia tri mac dinh cho mt ct, ta chi dinh mt rang buc
DEIAULT cho ct bang cach su dung cu phap sau:
[CONSTRAINT constraint_name]
DEFAULT {const_expression
nonarguments_function
NULL}
Vi du 1.3: Cu lnh duoi dy chi dinh gia tri mac dinh la 'khng bit' cho ct
DIACHI trong bang 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 Rang buc PRIMARY KEY

(*)
O vi du nay, chung ti khng dat tn cho rang buc DEIAULT. Khi do, h quan tri CSDL se tu dng dat tn
cho rang buc nay. Tuy nhin, d d dang cho vic quan tri, ban nn dat tn cho cac rang buc.
Trn Nguyn Phong
Rang buc PRIMARY KEY duoc su dung d dinh ngha khoa chinh cua bang.
Mt rang buc PRIMARY KEY dam bao rang khng co cac gia tri trung lap duoc
dua vao trn cac ct. Hay noi cach khac, gia tri cua khoa chinh se giup cho ta xac
dinh duoc duy nht mt dong (ban ghi) trong bang du liu. Mi mt bang chi co th
co duy nht mt khoa chinh va ban thn khoa chinh khng chp nhn gia tri NULL.
Rang buc PRIMARY KEY la co so cho vic dam bao tinh toan ven thuc th cung
nhu toan ven tham chiu.
khai bao mt rang buc PRIMARY KEY, ban su dung cu phap sau:
[CONSTRAINT constraint_name ]
PRIMARY KEY [CLUSTERED|NONCLUSTERED]
[( colname [,colname2 [...,colname16]])]
Nu khoa chinh cua mt bang chi la mt ct, khi do ban khng cn thit phai chi
dinh danh sach cac ct (su dung rang buc o muc ct). Trong truong hop khoa chinh
la mt tp hop tu hai ct tro ln, ban phai chi dinh danh sach cac ct (su dung rang
buc o muc bang).
Vi du 1.4: tao bang NHANVIEN voi 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 lnh trn co th vit 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 Rang buc UNIQUE
Thay vl su dung khoa chinh, ban co th su dung rang buc UNIQUE d dam
bao tinh toan ven thuc th. Su dung rang buc UNIQUE trn mt (hay nhiu) ct bat
buc cac gia tri du liu trn mt (hay nhiu) ct nay khng duoc trung lap nhau.
khai bao mt rang buc UNIQUE, ban su dung cu phap lnh sau dy:
[CONSTRAINT constraint_name]
UNIQUE [CLUSTERED | NONCLUSTERED]
[colname1 [,colname2 [...,colname16]])]
D Rang buc FOREIGN KEY
Cac bang bn trong mt CSDL thuong co mi quan h voi nhau. Cac mi quan
h nay duoc xac dinh dua trn tinh bang nhau giua mt hay nhiu truong cua bang
nay voi mt hay nhiu truong cua bang khac. Nu mt (hay nhiu) ct nao do cua mt
bang co gia tri duoc xac dinh tu mt (hay nhiu) truong khoa cua bang khac thl cac
ct do duoc goi la co rang buc khoa ngoai (Ioreign key). Cac rang buc IOREIGN
KEY duoc su dung kt hop voi cac rang buc PRIMARY KEY va UNIQUE nham
dam bao tinh toan ven tham chiu giua cac bang duoc chi dinh.
khai bao khoa ngoai, ban su dung cu phap lnh nhu sau:
[CONSTRAINT constraint_name ]
[FOREIGN KEY (colname [,colname2 [...,colname16]])]
REFERENCES reference_table [(ref_colname
[,ref_colname2
[...,ref_colname 16]])]
Vi du 1.5: Tao hai bang NHANVIEN(MANV, HOTEN, NGAYSINH, DIACHI,
DIENTHOAI, MADV) va DONVI(MADV, TENDV) theo d hlnh duoi dy:
CREATE TABLE donvi
(
NHANVIEN
#MANV
HOTEN
NGAYSINH
DIACHI
DIENTHOAI
MADV
DONVI
#MADV
TENDV
1

Hinh 1.1
Trn 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 Sua di ba ng
Sau khi da tao bang, ban co th tin hanh sua di cu truc hay thuc tinh cua
bang nhu b sung ct, b sung khoa, thay di cac rang buc,... co th sua di
bang, ban su dung cu lnh ALTER co cu phap 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: Tao mt rang buc cho bang DONVI trn ct MADV qui dinh ma don vi
phai co dang 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 muc (index)
Cac chi muc duoc su dung nham h tro vic truy cp dn cac dong du liu duoc
nhanh chong dua trn cac gia tri cua mt hay nhiu ct. Chi muc duoc chia ra lam hai
loai: chi muc tu nhom (clustered index) va chi muc khng tu nhom (nonclustered
index).
Mt chi muc tu nhom la mt chi muc ma trong do thu tu logic cua cac khoa tuong
tu nhu thu tu vt ly cua cac dong tuong ung tn tai trong bang. Mt bang chi co
th co ti da mt chi muc tu nhom.
Mt chi muc khng tu hom la mt chi muc ma trong do thu tu logic cua cac khoa
khng nhu thu tu vt ly cua cac dong trong bang. Cac chi muc tu nhom h tro vic
truy cp dn cac dong du liu nhanh hon nhiu so voi cac chi muc khng tu nhom.
Khi ta khai bao mt khoa chinh hay khoa UNIQUE trn mt hay nhiu ct nao do
cua bang, h quan tri CSDL se tu dng tao chi muc trn cac ct do. Ban co th tao
thm cac chi muc khac bang cach su dung cu lnh co cu phap nhu sau:
CREATE [CLUSTEREDNONCLUSTERED] INDEX index_name
ON table_name(column_name [, column_name]...)
Vi du 1.7: Cu lnh duoi dy se tao mt chi muc khng tu nhom trn ct MADV cua
bang NHANVIEN
CREATE NONCLUSTERED INDEX idx_nhanvien_madv
ON nhanvien(madv)
3. Khung nhin (View)
Mt khung nhln co th coi nhu la mt "bang ao" co ni dung duoc xac dinh tu
mt truy vn. Mt truy vn (query) la mt tp cac chi dn (instruction) nham truy
xut va hin thi du liu tu cac bang trong CSDL. Cac truy vn duoc thuc hin bang
cach su dung cu lnh SELECT (duoc d cp dn trong chuong 2).
Mt khung nhln trong ging nhu mt bang voi mt to cac tn ct va cac dong
du liu. Tuy nhin, khung nhln khng tn tai nhu la mt cu truc luu tru du liu trong
CSDL. Du liu bn trong khung nhln thuc cht la du liu duoc xac dinh tu mt hay
nhiu bang co so va do do phu thc vao cac bang co so.
Cac khung nhln thuong duoc su dung bn trong CSDL nham cac muc dich sau
dy:
Su dung khung nhln d tp trung trn du liu duoc xac dinh.
Trn Nguyn Phong
Su dung khung nhln d don gian hoa thao tac du liu.
Su dung khung nhln d tuy bin du liu
Su dung khung nhln d xut khu (export) du liu.
Su dung khung nhln d bao mt du liu.
tao khung nhln, ban su dung cu lnh co cu phap nhu sau:
CREATE VIEW view_name[(column_name [, column_name]...)]
AS select_statement
Trong do selectstatement la mt cu lnh SELECT dung d truy xut du liu tu
mt hay nhiu bang.
Khi tao khung nhln cn luu y mt s dim sau:
Tn khung nhln phai tun theo cac qui tac v dinh danh va phai duy nht di voi
mi nguoi su dung.
Khng th rang buc cac mac dinh, cac qui tac cho khung nhln.
Khng th xy dung chi muc cho khung nhln.
Trong cu lnh CREATE VIEW khng cn thit phai chi dinh tn ct. Tn cua
cac ct cung nhu kiu du liu cua chung se tuong ung voi cac ct trong danh sach
chon cua cu lnh SELECT.
Ban phai xac dinh tn ct trong cu lnh CREATE VIEW trong cac truong hop
sau:
Mi ct cua khung nhln duoc phat sinh tu mt biu thuc s hoc, mt ham cai
san hay mt hang.
Hai hay nhiu ct cua khung nhln co trung tn.
Ban mun thay di tn ct trong khung nhln khac voi tn ct cua bang co so.
Vi du 1.8: Cu lnh duoi dy se bi li do tn cua ct thu 3 khng xac dinh duoc:
CREATE VIEW thongtin_nv
AS
SELECT manv,hoten,datediff(year,ngaysinh,getdate()),tendv
FROM nhanvien,donvi
WHERE nhanvien.madv=donvi.madv
cu lnh trn co th thuc hin duoc, ban phai dat tn cho cac ct cua 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
Trn 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 tac du liu cung cp cho nguoi su dung kha nang tin hanh cac
thao tac truy xut, b sung, cp nht va xoa du liu. Ngn ngu thao tac du liu bao
gm cac cu lnh: SELECT, INSERT, UPDATE va DELETE
1. Truy xut du liu
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
Trn 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'
Trn 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:
Trn 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.
Trn 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
Trn 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
Trn 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
Trn 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 vn con (subquery)
Trn Nguyn Phong
Mt truy vn con la mt cu lnh SELECT duoc lng vao bn trong mt cu
lnh SELECT, INSERT, UPDATE hay DELETE hoac bn trong mt truy vn con
khac. Cu lnh truy vn con co th tham chiu dn cung mt bang voi truy vn ngoai
hoac mt bang khac. Trong giao tac SQL, mt truy vn con tra v mt chi gia tri co
th duoc su dung tai nhung vi tri ma tai do mt biu thuc duoc cho phep su dung.
Cu phap truy vn con
Mt truy vn con duoc lng vao bn trong mt cu lnh SELECT co cu phap
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 lnh SELECT cua truy vn con lun nam trong cap du ngoac. No khng
duoc chua mnh d ORDER BY, COMPUTE hoac IOR BROWSE. Mt truy vn
con co th duoc lng vao bn trong mnh d WHERE hay HAVING cua mt cu
lnh SELECT, INSERT hay DELETE, hoac bn trong truy vn con khac. Nu mt
truy vn con tra v chi mt gia tri, no co th duoc su dung tai nhung vi tri ma o do
mt biu thuc duoc cho phep su dung. Mt truy vn con khng duoc phep su dung
bn trong mt danh sach cua mnh d ORDER BY.
Cac cu lnh chua truy vn con thuong co mt trong s cac dang 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 lnh sau dy hin thi thng tin v cac nhn vin lam vic o nhung
don vi co s din thoai khng bat du boi s 82
SELECT *
FROM nhanvien
WHERE madonvi NOT IN ( SELECT madonvi
FROM donvi
WHERE dienthoai like '82%')
2. B sung, cp nht va xoa du li u
2.1 B sung du liu
Gia o trnh th c ha nh SQL
Trang 29
b sung du liu vao trong mt ban du liu, ta su dung cu lnh INSERT.
Dang don gian nht cua cu lnh nay co cu phap nhu sau:
INSERT [INTO] table_name
VALUES(value1, value2, ...)
Trong do tablename la tn cua bang cn thao tac. S luong cac gia tri duoc chi
dinh phai ging s luong cac ct khi dinh ngha bang va kiu du liu cua cac gia tri
nay phai phu hop voi kiu du liu cua cac ct tuong ung.
Vi du 2.22: Cu lnh duoi dy b sung thm mt nhn vin vao bang nhanvien.
INSERT INTO nhanvien
VALUES('NV02003','L Th Mai','23/5/72',
NULL,'523312',1.92,'02')
Trong truong hop chi nhp du liu cho mt s ct trong bang, ta phai chi dinh
danh sach cac ct cn nhp du liu ngay sau tn bang. Khi do cu lnh INSERT co cu
phap nhu sau:
INSERT [INTO] table_name(col1,col2,..., colN)
VALUES(value1, value2, ...,valueN)
Trong truong hop nay, cac ct khng duoc nhp du liu se nhn gia tri mac dinh
(nu co) hoac nhn gia tri NULL. Nu ta khng nhp du liu cho mt ct khng co
rang buc DEIAULT va cung khng cho phep chp nhn gia tri NULL, cu lnh se
bi li.
Vi du 2.23:
INSERT INTO nhanvien(manv,hoten,diachi)
VALUES('NV03002','Nguy n Th Ha nh Dung','56 Trn Phu ')
Ngoai hai dang o trn, cu lnh INSERT con cho phep ta nhp du liu cho mt
bang bang cach ly du liu tu mt bang khac. Hay noi cach khac, cu lnh INSERT
con cho phep chung ta sao luu du liu tu bang nay sang bang khac.
Vi du 2.24: Gia su ta co bang luong_nhanvien bao gm hai ct hoten va luong,
cu lnh duoi dy b sung du liu va bang luongnhanvien bang cach ly du liu tu
bang nhn vin:
INSERT INTO luong_nhanvien
SELECT hoten,hsluong*210000 FROM nhanvien
2.2 Cp nht du li u
Cu lnh UPDATE cho phep nguoi su dung thay di du liu da tn tai bn trong
bang du liu. Cu lnh nay co cu phap nhu sau:
Trn Nguyn Phong
UPDATE updated_table_name
SET colname = expression
[, ..., colname = expression ]
[FROM table_name [,..., table_name]]
[WHERE conditions ]
Vi du 2.25: Cu lnh duoi dy tang luong ln 0.2 cho nhung nhn vin lam vic
tai don vi co ma don vi la 04
UPDATE nhanvien
SET hsluong = hsluong+0.2
WHERE madonvi ='04'
Mnh d IROM trong cu lnh UPDATE duoc su dung khi cn chi dinh cac
diu kin cp nht ln quan dn cac bang khac.
Vi du: Gia su ta co hai bang MATHANG va NHATKYBANHANG nhu sau:
MATHANG NHATKYBANHANG
MAHANG 1 NGAYBAN
TENHANG

MAHANG
DONGIA SOLUONG
THANHTIEN
Cu lnh duoi dy se cp nht gia tri cho truong THANHTIEN trong bang
NHATKYBANHANG theo cng thuc THANHTIEN SOLUONG DONGIA
UPDATE nhatkybanhang
SET thanhtien = soluong*mathang.dongia
FROM mathang
WHERE nhatkybanhang.mahang = mathang.mahang
2.3 Xoa du li u
xoa cac ban ghi du liu ra khoi bang du liu, ta su dung cu lnh DELETE
co cu phap nhu sau:
DELETE [FROM] delete_table_name
[FROM table_name [,..., table_name]]
[WHERE conditions]
Vi du 2.26: Cu lnh duoi dy xoa khoi bang nhanvien nhung nhn vin lam
vic tai don vi co s din thoai 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
Trn 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 diu khin duoc su dung trong vic cp phat hay huy bo quyn cua
nguoi su dung di voi cac cu lnh SQL hoac trn cac di tuong CSDL.
1. Cu lnh GRANT
Cu lnh GRANT duoc su dung nham cp phat quyn cho nguoi su dung trn
cac di tuong CSDL hoac quyn thuc thi cac cu lnh SQL. Cu phap cua cu lnh nay
co hai dang nhu sau:
Da ng 1: Cp phat quyn di voi cac cu lnh
GRANT ALL | statement [,...,statementN ]
TO account [,...,accountN]
Dang 2: Cp phat quyn di voi cac di tuong CSDL
GRANT ALL | permission [,...,permissionN]
ON table_name |view_name [(column1 [,...,columnN])]
|ON stored_procedure
TO account [,...,accountN]
Trong do:
ALL: la tu khoa duoc su dung khi mun cp phat tt ca cac quyn co th cho
nguoi su dung
Statement: la cu lnh duoc cp phat quyn cho nguoi su dung. Cac cu lnh
co th cp phat cho nguoi su dung bao gm:
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 tai khoan cua nguoi su dung khi dang nhp vao h thng.
Permission: la mt quyn cp phat cho nguoi su dung trn di tuong CSDL
va duoc qui dinh nhu sau:
Cac quyn co th cp phat trn mt bang hoac khung nhln: SELECT,
INSERT, DELETE va UPDATE.
Cac quyn co th cp phat trn cac ct cua bang hoac khung nhln:
SELECT va UPDATE.
Quyn co th cp phat di voi thu tuc luu tru: EXCUTE
Vi du 3.1:
Cp phat quyn thuc thi cu lnh CREATE TABLE va CREATE VIEW cho tai
khoan co tn la abuser:
GRANT CREATE TABLE, CREATE VIEW
TO db_user
Cp phat cho cac tai khoan co tn la abuser1 va abuser2 quyn duoc xem va
cp nht du liu trn cac ct hoten, aiachi, aienthoai va hsluong cua bang nhanvien
GRANT SELECT, UPDATE
ON nhanvien(hoten,diachi,dienthoai,hsluong)
TO db_user1, db_user2
2. Cu lnh REVOKE
Cu lnh REVOKE duoc su dung d huy bo quyn da duoc cp phat cho nguoi
su dung trn cac di tuong CSDL hoac cu lnh SQL. Cu lnh REVOKE cung co
hai dang nhu sau:
Da ng 1: Huy bo quyn di voi cu lnh
REVOKE ALL | statement [,...,statementN]
FROM account [,...,accountN]
Da ng 2: Huy bo quyn di voi di tuong CSDL
REVOKE ALL | permission [,...,permissionN]}
ON table_name | view_name [(column [,...,columnN])]
| stored_procedure
FROM account [,...,accountN ]
Vi du 3.2: Huy bo quyn xem va cp nht du liu trn ct hsluong cua bang
nhanvien di voi tai khoan co tn la abuser1
Trn Nguyn Phong
REVOKE SELECT, UPDATE
ON nhanvien(hsluong)
FROM db_user1
Huy bo tt ca cac quyn da cp phat cho tai khoan 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:
Trn 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
Trn 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 .
Trn 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:
Trn 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 nay, chung ti gioi thiu cu truc va du liu cua cac bang duoc su
dung trong cac vi du trong chuong 2. Sau do gioi thiu mt s ham thuong su dung
trong SQL Server d giup cac ban tham khao trong qua trlnh thuc hanh.
1. Cu truc va du li u cua ba ng NHANVIEN va DONVI
NHANVIEN DONVI
MANV 1 MADONVI
HOTEN TENDONVI
NGAYSINH DIENTHOAI
DIACHI
DIENTHOAI
HSLUONG
MADONVI

Bang NHANVIEN
MANV HOTEN NGAYSINH DIACHI DIENTHOAI HSLUONG MADONVI
NV01001 Nguyn Thi Hoa 05/05/1976 56 L Dun 521304 2.11 01
NV02001 L Hoai Nam 03/05/1976 32 Trn Phu 823145 1.86 02
NV02002 Hoang Nam Phong 05/08/1971 66 Hoang Diu 521247 3.21 02
NV03001 Trn Nguyn Phong 20/12/1976 7 Ha Ni 849290 1.92 03
NV03002 Nguyn Huu Tlnh 18/08/1976 7 Ha Ni 849290 1.92 03
NV05001 Nguyn Trung Kin 14/05/1972 77 Nguyn Hu 823236 1.86 05
Bang DONVI
MADONVI TENDONVI DIENTHOAI
01 Phong K toan 821451
02 Phong T chuc 831414
03 Phong diu hanh 823351
04 Phong di ngoai 841457
05 Phong Tai vu 821451
2. Mt s ham thuong su dung trong SQL Server
2.1 Cac ham trn du liu kiu ngay va gio
a. Ham DATEADD
Trn Nguyn Phong
Cu phap: DATEADD(aatepart, number, aate)
Chuc nng: Ham tra v mt gia tri kiu DateTime bang cach cng thm mt
khoang gia tri la number vao ngay aate duoc chi dinh.
Datepart: tham s chi dinh thanh phn se duoc cng di voi gia tri aate bao
gm:
Datepart Vit tt
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. Ham DATEDIFF
Cu phap: DATEDIII(aatepart, startaate, enaaate)
Chuc nng: Ham tra v khoang thoi gian giua hai gia tri kiu nay duoc chi dinh
tuy thuc vao tham s aatepart
Vi du: ham Dateaiff(year,5/20/1976,8/9/2001) cho kt qua la 25
c. Ham DATEPART
Cu phap: DATEPART(aatepart, aate)
Chuc nng: Ham tra v mt s nguyn duoc trich ra tu thanh phn (duoc chi
dinh boi tham s partaate) trong gia tri kiu ngay duoc chi dinh.
Vi du: Ham DatePart(year,'5/20/1976') cho kt qua la 1976
d. Ham GETDATE
Cu phap: GETDATE()
Chuc nng: Ham tra v ngay hin tai
e. Ham DAY, MONTH, YEAR
Cu phap: DAY(aate), MONTH(aate), YEAR(aate)
Chuc nng: Ham tra v gia tri ngay (tuong ung thang, nam) cua gia tri kiu
ngay duoc chi dinh.
2.2 Cac ham v chui
Gia o trnh th c ha nh SQL
Trang 45
a. Ham LEFT
Cu phap: LEIT(string, n)
Chuc nang:Ham trich ra tu chui string n ky tu tinh tu bn trai
b. Ham RIGHT
Cu phap: LEIT(string, n)
Chuc nng: Ham trich ra tu chui string n ky tu tinh tu bn phai
c. Ham SUBSTRING
Cu phap: SUBSTRING(string, m, n)
Chuc nng: Ham trich ra tu chui string n ky tu tinh tu ky tu thu m
d. Ham LTRIM, RTRIM
Cu phap: LTRIM(string), RTRIM(string)
Chuc nng: Ham cat bo cac khoang trang thua bn trai/ bn phai chui string.
e. Ham LEN
Cu phap: LEN(string)
Chuc nng: Ham tra v d dai cua chui string.
Trn Nguyn Phong
M M0 0 6 6 L L0 0 6 6
CHUONG 1: NGN NGU DJNH NGHIA DU LIU.......................................................................................2
1. TAO BANG DU LIU........................................................................................................................................2
1.1 Cac thuoc tnh lien quan aen bang.......................................................................................................2
1.2 Tao bang bang truy vn SQL ................................................................................................................3
1.3 Sua aoi bang..........................................................................................................................................8
2. CH MUC (INDEX) ..........................................................................................................................................9
3. KHUNG NHN (VIEW).....................................................................................................................................9
CHUONG 2: NGN NGU THAO TAC DU LIU........................................................................................12
1. TRUY XUT DU LIU....................................................................................................................................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 NHT VA XOA DU LIU.........................................................................................................28
2.1 Bo sung au lieu....................................................................................................................................28
2.2 Cp nht au lieu..................................................................................................................................29
2.3 Xoa au lieu ..........................................................................................................................................30
CHUONG 3: NGN NGU DIU KHIN.......................................................................................................32
1. CU LNH GRANT.....................................................................................................................................32
2. CU LNH REVOKE ..................................................................................................................................33
CHUONG 4: THU TUC LUU TRU VA TRIGGER......................................................................................35
I. SU DUNG THU TUC 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 LUC....................................................................................................................................43
1. CU TRUC VA DU LIU CUA BANG NHANVIEN VA DONVI ......................................................................43
2. MT S HAM THUONG SU DUNG TRONG SQL SERVER ................................................................................43
2.1 Cac ham tren au lieu kieu ngay va gio ................................................................................................43
2.2 Cac ham v chui..........................................................................................................................44

You might also like