You are on page 1of 145

Gio trnh h qun tr c s d liu SQL

- HCNHN
Bin tp bi:
T HTTT i hc Cng nghip H Ni

Gio trnh h qun tr c s d liu SQL


- HCNHN
Bin tp bi:
T HTTT i hc Cng nghip H Ni
Cc tc gi:
T HTTT i hc Cng nghip H Ni

Phin bn trc tuyn:


http://voer.edu.vn/c/0351a5c3

MC LC
1. Tng quan v DBMS v SQL sever
2. Ngn ng nh ngha d liu
3. Ngn ng thao tc d liu
3.1. Ngn ng thao tc d liu
3.2. Php ni
4. Lm vic vi View ( khung nhn )
5. Bo mt trong SQL
6. Th tc lu tr , hm v trigger
6.1. Th tc lu tr
6.2. Hm v trigger
7. Giao dch SQL
8. Ph lc Giao trinh He quan tri CSDL-SQL
Tham gia ng gp

1/143

Tng quan v DBMS v SQL sever


Tng quan v DBMS v SQL Sever
Chng ny trnh by mt cch nhn khi qut v c s d liu (CSDL/DB), v h qun
tr c s d liu (HQTCSDL/DBMS) v v h c s d liu (HCSDL/DBS). Cc i
hi khi xy dng mt HQTCSDL cng chnh l nhng chc nng m mt HCSDL
cn phi c.
Trong chng ny chng ti cng mun gii thiu tng quan v ngn ng hi c cu
trc (SQL) v cc h qun tr c s d liu quan h l mt trong nhng nn tng k thut
quan trng trong cng nghip my tnh. Cho n nay, c th ni rng SQL c xem
l ngn ng chun trong c s d liu. Cc h qun tr c s d liu quan h thng mi
hin c nh Oracle, SQL Server, Informix, DB2,... u chn SQL lm ngn ng cho sn
phm ca mnh
Vy thc s SQL l g? Ti sao n li quan trng trong cc h qun tr c s d liu?
SQL c th lm c nhng g v nh th no? N c s dng ra sao trong cc h
qun tr c s d liu quan h? Chng ny s cung cp cho chng ta ci nhn tng quan
v SQL v mt s vn lin quan.
Ta tm hiu DBMS trn mt HQCSDL c th: SQL Server 2000. Do vy chng ny
gii thiu ci t SQL Server 2000 v cc thnh phn ca n, gip chng ta ch ng
khai thc trong nm bt v to lp ng dng.
Tng quan v DBMS
MT S KHI NIM
Mt cs d liu - CSDL(DataBase): L mt kho d liu c t chc theo mt
nguyn tc no . l mt tp hp cc tp tin c lin quan vi nhau, c thit k
nhm lm gim thiu s d tha d liu, m bo tnh tin cy khi truy xut d liu. Cc
tp tin ny cha cc thng tin biu din cc i tng trong mt ng dng th gii thc.
CSDL lu gi thng tin ca mt trng i hc nh : khoa, ging vin, sinh vin, kha
hc,
Thng thng, mt c s d liu s bao trm tt c cc thng tin ca mt ng dng,
khng nn t hai c s d liu vo mt ng dng.
H qun tr c s d liu DBMS(DataBaseManagement System): l mt h thng
gm mt CSDL v cc thao tc trn CSDL. l h thng chng trnh, cng c cho
2/143

php qun l v tng tc vi CSDL. Trn ngi dng c th nh ngha, thao tc,
v x l d liu trong mt CSDL xut ra nhng thng tin c ngha.
V d 1-5 : mt DBMS c th qun tr c s d liu ca mt trng i hc cng nh
nhng c s d liu c ngha khc nh : c s d liu phc v tng thu nhp quc gia,
mt c s d liu lin hp quc v d liu a l th gii,v..v
- Mt h c s d liu (HCSDL/ DBS: DataBase System) l mt phn mm cho php
xy dng mt HQTCSDL.
Cc vn cn x l ca h c s d liu

Mt s im bt li chnh ca vic lu gi thng tin c t chc trong h thng x l file


thng thng m h HCSDL cn lu :
D tha d liu v tnh khng nht qun (Data redundancy and inconsistency) : Do
cc file v cc trnh ng dng c to ra bi cc ngi lp trnh khc nhau, nn cc
file c nh dng khc nhau, cc chng trnh c vit trong cc ngn ng lp trnh
khc nhau, cng mt thng tin c th c lu gi trong cc file khc nhau. Tnh khng
thng nht v d tha ny s lm tng chi ph truy xut v lu tr, hn na, n s dn
n tnh khng nht qun ca d liu: cc bn sao ca cng mt d liu c th khng
nht qun .
Kh khn trong vic truy xut d liu: Mi trng ca h thng x l file thng
thng khng cung cp cc cng c cho php truy xut thng tin mt cch hiu qu v
thun li.
S c lp d liu(Data isolation) : Cc gi tr d liu c lu tr trong c s d liu
phi tho mn mt s cc rng buc v tnh nht qun ca d liu ( rng buc nht qun
/ consistency contraints ).
Trong h thng x l file thng thng, rt kh khn trong vic thay i cc chng
trnh tho mn cc yu cu thay i rng buc. Vn tr nn kh khn hn khi cc
rng buc lin quan n cc hng mc d liu nm trong cc file khc nhau.
Cc vn v tnh nguyn t (Atomicity problems):
Tnh nguyn t ca mt hot ng (giao dch) l: hoc n c hon tt trn vn hoc
khng c g c . iu ny c ngha l mt hot ng (giao dch) ch lm thay i cc
d liu bn vng khi n hon tt (kt thc thnh cng) nu khng, giao dch khng
li mt du vt no trn CSDL. Trong h thng x l file thng thng kh m bo
c tnh cht ny.

3/143

Tnh bt thng trong truy xut cnh tranh : Mt h thng cho php nhiu ngi
s dng cp nht d liu ng thi, c th dn n kt qu l d liu khng nht qun.
iu ny i hi mt s gim st. H thng x l file thng thng khng cung cp
chc nng ny.
Vn an ton (Security problems): mt ngi s dng h c s d liu khng cn
thit v cng khng c quyn truy xut tt c cc d liu. Vn ny i hi h thng
phi m bo c tnh phn quyn, chng truy xut tri php ... Cc bt li nu trn
gi m s pht trin cc DBMS. Phn sau ca gio trnh s cp n cc quan nim
v cc thut ton c s dng pht trin mt h c s d liu nhm gii quyt cc
vn nu trn .
Hu ht cc h qun tr CSDL u thc hin cc chc nng sau :

Lu tr d liu
To ra v duy trCSDL
Cho php nhiungi dngtruy xut ngthi
H tr tnh bo mt v ring t
Cho php xem v x l d liu lu tr
Cho php cp nht v lu tr d liu sau khi cp nht
Cung cp mt c ch ch mc (index) hiu qu truy cp nhanh cc d liu la chn
Cung cp tnh nht qun gia cc bn ghi khc nhau
Bo v d liu khi mt mt bng cc qu trnh sao lu (backup) v phc hi (recovery).
Tng quan v c s d liu quan h
M hnh d liu quan h
M hnh d liu quan h c Codd xut nm 1970 v n nay tr thnh m hnh
c s dng ph bin trong cc h qun tr c s d liu thng mi. Ni mt cch
n gin, mt c s d liu quan h l mt c s d liu trong tt c d liu c t
chc trong cc bng c mi quan h vi nhau. Mi mt bng bao gm cc dng v cc
ct: mi mt dng c gi l mt bn ghi (b) v mi mt ct l mt trng (thuc
tnh). Hai hay nhiu bng c th c lin kt nu chng c mt hay nhiu trng chung)
Hnh 1.1 minh ho cho ta thy c 3 bng trong mt c s d liu
4/143

Cc bng trong mt c s d liu

Bng (Table)
Nh ni trn, trong c s d liu quan h, bng l i tng c s dng t
chc v lu tr d liu. Mt c s d liu bao gm nhiu bng v mi bng c xc
nh duy nht bi tn bng. Mt bng bao gm mt tp cc dng v cc ct: mi mt
dng trong bng biu din cho mt thc th (trong hnh 1.1, mi mt dng trong bng
SINHVIEN tng ng vi mt sinh vin), v mi mt ct biu din cho mt tnh cht
ca thc th (chng hn ct NGAYSINH trong bng SINHVIEN biu din cho ngy
sinh ca cc sinh vin c lu tr trong bng).
Nh vy, lin quan n mi mt bng bao gm cc yu t sau:
Tn ca bng: c s dng xc nh duy nht mi bngn trong c s d liu.
Cu trc ca bng: Tp cc ct trong bng. Mi mtct trong bng c xc nh bi
mt tn ct v phi c mt kiu d liu no (chng hn ct NGAYSINH trong bng
SINHVIEN hnh 1.1 c kiu l DATETIME). Kiu d liu ca mi ct qui nh gi
tr d liu c th c chp nhn trn ct .
D liu ca bng: Tp cc dng (bn ghi) hin c trong bng.

5/143

Kho ca bng
Trong mt c sd liu c thit k tt, mi mt bng phi c mt hoc mt tp cc
ct m gi tr d liu ca n xc nh duy nht mt dng trong mt tp cc dng ca
bng.
Tp mt hoc nhiu ct c tnh cht ny c gi l kho ca bng.
Vic chn kho ca bng c vai tr quan trng trong vic thit k v ci t cc c s
d liu quan h. Cc dng d liu trong mt bng phi c gi tr khc nhau trn kho.
Bng MONHOC trong hnh di y c kho l ct MAMONHOC

Bng MONHOC vi kho chnh l MAMONHOC

Mt bng c th c nhiu tp cc ct khc nhau c tnh cht ca kho (tc l gi tr ca


n xc nh duy nht mt dng d liu trong bng). Trong trng hp ny, kho c
chn cho bng c gi l kho chnh (primary key) v nhng kho cn li c gi l
kho ph hay l kho d tuyn (candidate key/unique key).
Mi quan h v kho ngoi
Cc bng trong mt c s d liu khng tn ti c lp m c mi quan h mt thit vi
nhau v mt d liu. Mi quan h ny c th hin thng qua rng buc gi tr d liu
xut hin bng ny phi c xut hin trc trong mt bng khc. Mi quan h gia cc
bng trong c s d liu nhm m bo c tnh ng n v hp l ca d liu trong
c s d liu.
Trong hnh 1.3, hai bng LOP v KHOA c mi quan h vi nhau. Mi quan h ny i
hi gi tr ctMAKHOA ca mt dng (tc l mt lp)trong bng LOP phi c xc
nh t ct MAKHOA ca bng KHOA.

6/143

Mi quan h gia hai bng LOP v KHOA trong c s d liu

Mi quan h gia cc bng trong mt c s d liu th hin ng mi quan h gia cc


thc th trong th gii thc. Trong hnh 1.3, mi quan h gia hai bng LOP v KHOA
khng cho php mt lp no tn ti m li thuc vo mt khoa khng c tht.
Khi nim kho ngoi (Foreign Key) trong c s d liu quan h c s dng biu
din mi quan h gia cc bng d liu. Mt hay mt tp cc ct trong mt bng m gi
tr ca n c xc nh t kha chnh ca mt bng khc c gi l kho ngoi.
Trong hnh 1.3, ct MAKHOA ca bng LOP c gi l kho ngoi ca bng ny,
kho ngoi ny tham chiu n kho chnh ca bng KHOA l ct MAKHOA.
Gii Thiu SQL Server 2000
SQL Server 2000 l mt h thng qun tr c s d liu quan h (Relational Database
Management System (RDBMS) ) s dng Transact-SQL trao i d liu gia Client
computer v SQL Server computer. Mt RDBMS bao gm databases, database engine
v cc ng dng dng qun l d liu v cc b phn khc nhau trong RDBMS.
SQL Server 2000 c ti u c th chy trn mi trng c s d liu rt ln (Very
Large Database Environment) ln n Tera-Byte v c th phc v cng lc cho hng
ngn user. SQL Server 2000 c th kt hp "n " vi cc server khc nh Microsoft
InternetInformation Server (IIS), E-Commerce Server, Proxy Server....
SQL Server c 7 editions
- Enterprise : Cha y cc c trng ca SQL Server v c th chy tt trn h thng
ln n 32 CPUs v 64 GB RAM. Thm vo n c cc dch v gip cho vic phn
tch d liu rt hiu qu (Analysis Services)

7/143

- Standard : Rt thch hp cho cc cng ty va v nh v gi thnh r hn nhiu so vi


Enterprise Edition, nhng li b gii hn mt s chc nng cao cp (advanced features)
khc, edition ny c th chy tt trn h thng ln n 4 CPU v 2 GB RAM.
- Personal: c ti u ha chy trn PC nn c th ci t trn hu ht cc phin bn
windows k c Windows 98.
- Developer : C y cc tnh nng ca Enterprise Edition nhng c ch to c
bit nh gii hn s lng ngi kt ni vo Server cng mt lc.... y l edition m
cc bn mun hc SQL Server cn c. Chng ta s dng edition ny trong sut kha
hc. Edition ny c th ci trn Windows 2000 Professional hay Win NT Workstation.
- Desktop Engine (MSDE): y ch l mt engine chy trn desktop v khng c user
interface (giao din). Thch hp cho vic trin khai ng dng my client. Kch thc
database b gii hn khong 2 GB.
- Win CE : Dng cho cc ng dng chy trn Windows CE
- Trial: C cc tnh nng ca Enterprise Edition, download free, nhng gii hn thi
gian s dng.
Ci t SQL Server 2000 (Installation)
Ta cn c Developer Edition v t nht l 64 MB RAM, 500 MB hard disk c th
install SQL Server. C th install trn Windows Server hay Windows XP Professional,
Windows 2000 Professional hay NT Workstation nhng khng th install trn Win 98
family.
Khi install cn lu cc im sau:
mn hnh th hai bn chn Install Database Server. Sau khi install xong SQL Server
bn c th install thm Analysis Service nu thch.
mn hnh Installation Definition chn Server and Client Tools.
Sau nn chn kiu Customv chn tt ccc b phn ca SQL Server. Ngoi ra nn
chn cc gi tr mc nh (default)
mn hnh Authentication Mode nh chn Mixed Mode. Lu v SQL Server c th
dng chung ch bo mt (security) vi Win NT v cng c th dng ch bo mt
ring ca n. Trong Production Server ngi ta thng dng Windows Authetication v
an ton cao hn v d dng cho ngi qun l mng v c cho ngi s dng. Ngha
l mt khi bn c chp nhn (authenticated) kt ni vo domain th bn c quyn truy

8/143

cp d liu (access data) trong SQL Server. Tuy nhin ta nn chn Mixed Mode d
dng cho vic hc tp.
Sau khi install bn s thy mt icon nm gc phi bn di mn hnh, y chnh l
Service Manager. C th Start, Stop cc SQL Server services d dng bng cch doubleclick vo icon ny.
Mt cht kin thc v cc Version ca SQL Server
SQL Server ca Microsoft c th trng chp nhn rng ri k t version 6.5. Sau
Microsoft ci tin v hu nh vit li mt engine mi cho SQL Server 7.0. Cho
nn c th ni t version 6.5 ln version 7.0 l mt bc nhy vt. C mt s c tnh
ca SQL Server 7.0 khng tng thch vi version 6.5. Trong khi t Version 7.0 ln
version 8.0 (SQL Server 2000) th nhng ci tin ch yu l m rng cc tnh nng v
web v lm cho SQL Server 2000 ng tin cy hn.
Mt im c bit ng lu version 2000 l Multiple-Instance. Ni cho d hiu l
bn c th install version 2000 chung vi cc version trc m khng cn phi uninstall
chng. Ngha l bn c th chy song song version 6.5 hoc 7.0 vi version 2000 trn
cng mt my (iu ny khng th xy ra vi cc version trc y). Khi version
c trn my bn l Default Instance cn version 2000 mi va install s l Named
Instance.
Cc thnh phn quan trng trong SQL Server 2000
SQL Server 2000 c cu to bi nhiu thnh phn nh Relational Database Engine,
Analysis Service v English Query.... Cc thnh phn ny khi phi hp vi nhau to
thnh mt gii php hon chnh gip cho vic lu tr v phn tch d liu mt cch d
dng
Relational Database Engine - Ci li ca SQL Server:
y l mt engine c kh nng cha data cc quy m khc nhau di dng table v
support tt c cc kiu kt ni (data connection) thng dng ca Microsoft nh ActiveX
Data Objects (ADO), OLE DB, and Open Database Connectivity (ODBC). Ngoi ra
n cn c kh nng t iu chnh (tune up) v d nh s dng thm cc ti nguyn
(resource) ca my khi cn v tr li ti nguyn cho h iu hnh khi mt user log off.
Replication - C ch to bn sao (Replica):
Gi s bn c mt database dng cha d liu c cc ng dng thng xuyn cp
nht. Khi bn mun c mt database ging ht nh th trn mt server khc chy bo
co (report database) (cch lm ny thng dng trnh nh hng n performance
ca server chnh). Vn l report server ca bn cng cn phi c cp nht thng
9/143

xuyn m bo tnh chnh xc ca cc bo co. Ta khng th dng c ch back up


and restore trong trng hp ny. Vy cn x l th no? Lc c ch replication
ca SQL Server s c s dng bo m cho d liu 2 database c ng b
(synchronized)
Data Transformation Service ( DTS ) - Mt dch v chuyn dch data hiu qu .
Nu bn lm vic trong mt cng ty ln trong data c cha trong nhiu ni khc
nhau v cc dng khc nhau c th nh cha trong Oracle, DB2 (ca IBM), SQL
Server, Microsoft Access....Bn chc chn s c nhu cu di chuyn data gia cc server
ny (migrate hay transfer) v khng ch di chuyn bn cn mun nh dng (format) n
trc khi lu vo database khc, khi bn s thy DTS gip bn gii quyt cng vic
trn d dng nh th no.
Analysis Service- Mt dch v phn tch d liu rt hay ca Microsoft
D liu (Data) cha trong database s chng c ngha g nhiu nu nh bn khng th
ly c nhng thng tin (Information) b ch t . Do Microsoft cung cp cho bn
mt cng c rt mnh gip cho vic phn tch d liu tr nn d dng v hiu qu bng
cch dng khi nim hnh khi nhiu chiu (multi-dimension cubes) v k thut khai
ph d liu (data mining).
English Query - y l mt dch v gip cho vic query data bng ting Anh "trn"
(plain English).
MetaData Service : Dch v ny gip cho vic cha ng v "xo nu" Meta data d
dng hn. Th th Meta Data l ci g vy? Meta data l nhng thng tin m t v cu
trc ca data trong database nh data thuc loi no String hay Integer..., mt ct no
c phi l Primary key hay khng....Bi v nhng thng tin ny cng c cha trong
database nn cng l mt dng data nhng phn bit vi data "chnh thng" ngi
ta gi n l Meta Data. Phn ny phi xem thm trong mt thnh phn khc ca SQL
Server l SQLServerBooks Online.
SQL Server Books Online - Rt hu dng v khng th thiu (c nh km theo
SQL Server).
SQL Server Tools - y l mt b ngh ca ngi qun tr c s d liu (DBA),
gm:
Enterprise Manager - y l mt cng c cho ta thy ton cnh h thng c s d liu
mt cch rt trc quan. N rt hu ch c bit cho ngi mi hc v khng thng tho
lm v SQL.

10/143

Query Analyzer - i vi mt DBA gii th hu nh ch cn cng c ny l c th qun


l c mt h thng database m khng cn n nhng th khc. y l mt mi trng
lm vic kh tt v ta c th nh bt k cu lnh SQL no v chy ngay lp tc c bit
l n gip cho ta debug stored procedure d dng.
SQL Profiler - N c kh nng "chp" (capture) tt c cc s kin hay hot ng din
ra trn mt SQL server v lu li di dng text file rt hu dng trong vic kim sot
hot ng ca SQL Server.
Ngoi mt s cng c trc quan nh trn chng ta cng thng hay dng osql v bcp
(bulk copy) trong command prompt.
SQL l ngn ng c s d liu quan h
SQL , vit tt ca Structured Query Language (ngn ng hi c cu trc), cng c s
dng t chc, qun l v truy xut d liu uc lu tr trong cc c s d liu. SQL
l mt h thng ngn ng bao gm tp cc cu lnh s dng tng tc vi c s d
liu quan h.
Tn gi ngn ng hi c cu trc phn no lm chng ta lin tng n mt cng c
(ngn ng) dng truy xut d liu trong cc c s d liu. Thc s m ni, kh nng
ca SQL vt xa so vi mt cng c truy xut d liu, mc d y l mc ch ban u
khi SQL c xy dng nn v truy xut d liu vn cn l mt trong nhng chc nng
quan trng ca n. SQL c s dng iu khin tt c cc chc nng m mt h
qun tr c s d liu cung cp cho ngi dng bao gm:
nh ngha d liu : SQL cung cp kh nng nh ngha cc c s d liu, cc cu
trc lu tr v t chc d liu cng nh mi quan h gia cc thnh phn d liu.
Truy xut v thao tc d liu : Vi SQL, ngi dng c th d dng thc hin cc
thao tc truy xut, b sung, cp nht v loi b d liu trong cc c s d liu.
iu khin truy cp - SQL c th c s dng cp pht v kim sot cc thao tc
cangi s dng trn d liu, m bo s an ton cho c s d
m bo ton vn d liu : SQL nh ngha cc rng buc ton vn trong c s d
liu nh m bo tnh hp l v chnh xc ca d liu trc cc thao tc cp nht
cng nh cc li ca h thng.
Nh vy, c th ni rng SQL l mt ngn ng hon thin c s dng trong cch
thng c s d liu v l mt thnh phn khng th thiu trong cc h qun tr c s d
liu. Mc d SQL khng phi l mt ngn ng lp trnh nh C, C++, Java,... song cc
cu lnh m SQL cung cp c th c nhng vo trong cc ngn ng lp trnh nhm
xy dng cc ng dng tng tc vi c s d liu.
11/143

Khc vi cc ngn ng lp trnh quen thuc nh C, C++, Java,... SQL l ngn ng c


tnh khai bo. Vi SQL, ngi dng ch cn m t cc yu cu cn phi thc hin trn
c s d liu m khng cn phi ch ra cch thc thc hin cc yu cu nh th no.
Chnh v vy, SQL l ngn ng d tip cn v d s dng.
Ci t SQL Server
Ci t SQL Server 2000 (Installation)

Ta cn c Developer Edition v t nht l 64 MB RAM, 500 MB hard disk c


th install SQL Server. Bn c th install trn Windows Server hay Windows XP
Professional, Windows 2000 Professional hay NT Workstation nhng khng th install
trn Win 98 family.
V mt trong nhng c im ca cc sn phm Microsoft l d install nn chng ti
khng trnh by chi tit v cch install hay cc bc install m ch trnh by cc im
cn lu khi install m thi. Khi install cn lu cc im sau:
mn hnh th hai bn chn Install Database Server. Sau khi install xong SQL Server
bn c th install thm Analysis Service nu bn thch.
mn hnh Installation Definition bn chn Serverand ClientTools.
Sau bn nn chn kiu Custom v chn tt c cc b phn ca SQL Server. Ngoi
ra nn chn cc gi tr mc nh (default)
mn hnh Authentication Mode nh chn Mixed Mode. Lu v SQL Server c th
dng chung ch bo mt (security) vi Win NT v cng c th dng ch bo mt
ring ca n. Trong Production Server ngi ta thng dng Windows Authetication v
an ton cao hn v d dng cho ngi qun l mng v c cho ngi s dng. Ngha
l mt khi bn c chp nhn (authenticated) kt ni vo domain th bn c quyn truy
cp d liu (access data) trong SQL Server. Tuy nhin ta nn chn Mixed Mode d
dng cho vic hc tp.
Sau khi install bn s thy mt icon nm gc phi bn di mn hnh, y chnh l
Service Manager. Bn c th Start, Stop cc SQL Server services d dng bng cch
double-click vo icon ny.
Mt cht kin thc v cc Version ca SQL Server

SQL Server ca Microsoft c th trng chp nhn rng ri k t version


6.5. Sau Microsoft ci tin v hu nh vit li mt engine mi cho SQL Server
7.0. Cho nn c th ni t version 6.5 ln version 7.0 l mt bc nhy vt. C mt s
12/143

c tnh ca SQL Server 7.0 khng tng thch vi version 6.5. Trong khi t Version
7.0 ln version 8.0 (SQL Server 2000) th nhng ci tin ch yu l m rng cc tnh
nng v web v lm cho SQL Server 2000 ng tin cy hn.
Mt im c bit ng lu version 2000 l Multiple-Instance. Ni cho d hiu
l bn c th install version 2000 chung vi cc version trc m khng cn phi
uninstall chng. Ngha l bn c th chy song song version 6.5 hoc 7.0 vi version
2000 trn cng mt my (iu ny khng th xy ra vi cc version trc y). Khi
version c trn my bn l DefaultInstance cn version 2000 mi va install s l
NamedInstance.
S lc v SQL
Tng quan v T- SQL
Bn thn SQL khng phi l mt h qun tr c s d liu, n khng th tn ti c lp.
SQL thc s l mt phn ca h qun tr c s d liu, n xut hin trong cc h qun
tr c s d liu vi vai tr ngn ng v l cng c giao tip gia ngi s dng v h
qun tr c s d liu.
Trong hu ht cc h qun tr c s d liu quan h, SQL c nhng vai tr nh sau:
SQL l ngn ng hi c tnh tng tc: Ngi s dng c th d dng thng qua cc
trnh tin ch gi cc yu cu di dng cc cu lnh SQL n c s d liu v nhn
kt qu tr v t c s d liu
SQL l ngn ng lp trnh c s d liu: Cc lp trnh vin c th nhng cc cu
lnh SQL vo trong cc ngn ng lp trnh xy dng nn cc chng trnh ng dng
giao tip vi c s d liu
SQL l ngn ng qun tr c s d liu : Thng qua SQL, ngi qun tr c s d
liu c th qun l c c s d liu, nh ngha cc cu trc lu tr d liu, iu khin
truy cp c s d liu,...
SQL l ngn ng cho cc h thng khch/ch (client/server): Trong cc h thng
c s d liu khch/ch, SQL c s dng nh l cng c giao tip gia cc trnh
ng dng pha my khch vi my ch c s d liu.
SQL l ngn ng truy cp d liu trn Internet : Cho n nay, hu ht cc my ch
Web cng nh cc my ch trn Internet s dng SQL vi vai tr l ngn ng tng
tc vi d liu trong cc c s d liu.

13/143

SQL l ngn ng c s d liu phn tn : i vi cc h qun tr c s d liu phn


tn, mi mt h thng s dng SQL giao tip vi cc h thng khc trn mng, gi
v nhn cc yu cu truy xut d liu vi nhau.
SQL l ngn ng s dng cho cc cng giao tip c s d liu : Trong mt h thng
mng my tnh vi nhiu h qun tr c s d liu khc nhau, SQL thng c s dng
nh l mt chun ngn ng giao tip gia cc h qun tr c s d liu SQL chun
bao gm lnh thng c s dng nh t khong 40 cu lnh.
Cc bng pha di lit k danh sch cc cu trong s cc cu lnh ca SQL. Trong cc
h qun trc s d liu khc nhau, mc d cc cu lnh u c cng dng v cng mc
ch s dng song mi mt h qun tr c s d liu c th c mt s thay i no .
iu ny i khi dn n c php chi tit ca cc cu lnh c th s khc nhau trong cc
h qun tr c c s d liu khc nhau.
Cu l nh t hao tc d li u C h c n n g
SELECT

Truy xut d liu

INSERT

B sung d diu

UPDATE

Cp nht d liu

DELETE

Xo d liu

TRUNCATE

Xo ton b d liu trong bng

Cu l nh nh ngha d liu C h c n n g
CREATE TABLE

To bng

DROP TABLE

Xo bng

ALTER TABLE

Sa i bng

CREATE VIEW

To khung nhn

ALTER VIEW

Sa i khung nhn

DROP VIEW

Xo khung nhn

CREATE INDEX

To ch mc

DROP INDEX

Xo ch mc

CREATE SCHEMA

To lc c s d liu

DROP SCHEMA

Xo lc c s d liu

14/143

CREATE PROCEDURE

To th tc lu tr

ALTER PROCEDURE

Sa i th tc lu tr

DROP PROCEDURE

Xo th tc lu tr

CREATE FUNCTION

To hm (do ngi s dng nh ngha)

ALTER FUNCTION

Sa i hm

DROP FUNCTION

Xo hm

CREATE TRIGGER

To trigger

ALTER TRIGGER

Sa i trigger

DROP TRIGGER

Xo trigger

Cu l nh iu khin truy cp C h c n n g
GRANT

Cp pht quyn cho ngi s dng

REVOKE

Thu hi quyn t ngi s dng

Cu l nh qun l giao dch C h c n n g


COMMIT

U thc (kt thc thnh cng) giao dch

ROLLBACK

Quay lui giao dch

SAVE TRANSACTION

nh du mt im trong giao dch

Cu l nh lp trnh C h c n n g
DECLARE

Khai bo bin hoc nh ngha con tr

OPEN

M mt con tr truy xut kt qu truy vn

FETCH

c mt dng trong kt qu truy vn (s dng con tr)

CLOSE

ng mt con tr

EXECUTE

Thc thi mt cu lnh SQL

Cc cu lnh ca SQL u c bt u bi cc t lnh, l mt t kho cho bit chc


nng ca cu lnh (chng hn SELECT, DELETE, COMMIT). Sau t lnh l cc mnh
ca cu lnh. Mi mt mnh trong cu lnh cng c bt u bi mt t kho
(chng hn FROM, WHERE,...).

15/143

Cu lnh:
SELECT masv,hodem,ten FROM sinhvien WHERE malop=C24102
dng truy xut d liu trong bng SINHVIEN c bt u bi t lnh SELECT,
trong cu lnh bao gm hai mnh : mnh FROM ch nh tn ca bng cn truy
xut d liu v mnh WHERE ch nh iu kin truy vn d liu.
Qui tc s dng tn trong SQL
Cc i tng trong c s d liu da trn SQL c xc nh thng qua tn ca i
tng. Tn ca cc i tng l duy nht trong mi c s d liu. Tn c s dng
nhiu nht trong cc truy vn SQL v c xem l nn tng trong c s d liu quan h
l tn bng v tn ct.
Trong cc c s d liu ln vi nhiu ngi s dng, khi ta ch nh tn ca mt bng
no trong cu lnh SQL, h qun tr c s d liu hiu l tn ca bng do ta s
hu (tc l bng do ta to ra). Thng thng, trong cc h qun tr c s d liu ny cho
php nhng ngi dng khc nhau to ra nhng bng trng tn vi nhau m khng gy
ra xung t v tn. Nu trong mt cu lnh SQL ta cn ch n mt bng do mt ngi
dng khc s hu (hin nhin l phi c php) th tn ca bng phi c vit sau tn
ca ngi s hu v phn cch vi tn ngi s hu bi du chm:
tn_ngi_s_hu.tn_bng
Mt s i tng c s d liu khc (nh khung nhn, th tc, hm), vic s dng tn
cng tng t nh i vi bng.
Ta c th s dng tn ct mt cch bnh thng trong cc cu lnh SQL bng cch ch
cn ch nh tn ca ct trong bng. Tuy nhin, nu trong cu lnh c lin quan n hai
ct tr ln c cng tn trong cc bng khc nhau th bt buc phi ch nh thm tn
bng trc tn ct; tn bng v tn ct c phn cch nhau bi du chm.
V d di y minh ho cho ta thy vic s dng tn bng v tn ct trong cu lnh
SQL
SELECT masv,hodem,ten,sinhvien.malop,tenlop FROM
dbo.sinhvien,dbo.lop WHERE sinhvien.malop = lop.malop
Kiu d liu
Chun ANSI/ISO SQL cung cp cc kiu d liu khc nhau s dng trong cc c s
d liu da trn SQL v trong ngn ng SQL. Da trn c s cc kiu d liu do chun
ANSI/ISO SQL cung cp, cc h qun tr c s d liu thng mi hin nay c th s
16/143

dng cc dng d liu khc nhau trong sn phm ca mnh. Bng 1.2 di y lit k
mt s kiu d liu thng dng c s dng trong SQL.
Mt s kiu d liu thng dng trong SQL
Tn kiu

M t

CHAR (n)

Kiu chui vi di c nh

NCHAR (n)

Kiu chui vi di c nh h tr UNICODE

VARCHAR (n)

Kiu chui vi di chnh xc

NVARCHAR (n)

Kiu chui vi di chnh xc h tr UNICODE

INTEGER

S nguyn c gi tr t -231 n 231 - 1

INT

Nh kiu Integer

TINYTINT

S nguyn c gi tr t 0 n 255.

SMALLINT

S nguyn c gi tr t -215 n 215 1

BIGINT

S nguyn c gi tr t -263 n 263-1

NUMERIC (p,s)

Kiu s vi chnh xc c nh.

DECIMAL (p,s)

Tng t kiu Numeric

FLOAT

S thc c gi tr t -1.79E+308 n 1.79E+308

REAL

S thc c gi tr t -3.40E + 38 n 3.40E + 38

MONEY

Kiu tin t

BIT

Kiu bit (c gi tr 0 hoc 1)

DATETIME

Kiu ngy gi (chnh xc n phn trm ca giy)

SMALLDATETIME Kiu ngy gi (chnh xc n pht)


TIMESTAMP
BINARY

D liu nh phn vi di c nh (ti a 8000 bytes)

VARBINARY

D liu nh phn vi di chnh xc (ti a 8000 bytes)

IMAGE

D liu nh phn vi di chnh xc (ti a 2,147,483,647


bytes)

TEXT

D liu kiu chui vi di ln (ti a 2,147,483,647 k t)

NTEXT

D liu kiu chui vi di ln v h tr UNICODE (ti a


1,073,741,823 k t)

17/143

Cu lnh di y nh ngha bng vi kiu d liu c qui nh cho cc ct trong


bng
CREATE TABLE NHANVIEN ( MANV NVARCHAR(10) NOT NULL, HOTEN
NVARCHAR(30) NOT NULL, GIOITINH BIT, NGAYSINH
SMALLDATETIME, NOISINH NCHAR(50), HSLUONG DECIMAL(4,2),
MADV INT )
Gi tr NULL
Mt c s d liu l s phn nh ca mt h thng trong th gii thc, do cc gi tr
d liu tn ti trong c s d liu c th khng xc nh c. Mt gi tr khng xc
nh c xut hin trong c s d liu c th do mt s nguyn nhn sau:
Gi tr c tn ti nhng khng bit.
Khng xc nh c gi tr c tn ti hay khng.
Ti mt thi im no gi tr cha c nhng ri c th s c.
Gi tr b li do tnh ton (trn s, chia cho khng,...)
Nhng gi tr khng xc nh c biu din trong c s d liu quan h bi cc gi tr
NULL. y l gi tr c bit v khng nn nhm ln vi chui rng (i vi d liu
kiu chui) hay gi tr khng (i vi gi tr kiu s). Gi tr NULL ng mt vai tr
quan trng trong cc c s d liu v hu ht cc h qun tr c s d liu quan h hin
nay u h tr vic s dng gi tr ny.
Cc tp tin vt l lu tr c s d liu
Mc d phi qun l nhiu i tng bn trong c s d liu nhng Microsoft SQL
Server ch t chc hai loi tp tin lu tr.
Mt c s d liu trong Microsoft SQL Server ti thiu s dng hai (2) tp tin vt l
lu tr d liu:
Datafile: dng lu tr d liu.
Transaction log file : dng lu tr cc hnh ng thc hin trn c s d liu trong
qu trnh s dng. Cc hnh ng thc hin trn CSDL gi l cc giao tc.

18/143

Cc loi tp tin lu tr d liu ca SQL Sever 2000

Cc loi tp tin lu tr d liu ca SQL Sever 2000


Cc tp tin lu tr c s d liu bn trong Microsoft SQL Server c phn chia thnh
ba loi tp tin vt l khc nhau:
Tp tin d liu chnh (Primary Data File) : y l tp tin chnh dng lu tr cc
thng tin h thng ca c s d liu v phn cn li dng lu tr mt phn d liu. Phn
m rng ca tp tin ny thng thng l *.MDF.
Tp tin d liu th yu(Secondary Data Files) : y l tp tin dng lu tr cc i
tng d liu khng nm trong tp tin d liu chnh. Loi tp tin ny khng bt buc
phi c khi to mi c s d liu. Phn m rng ca tp tin ny thng thng l *.NDF.
Tp tin lu vt (Log Files): y l tp tin dng lu vt cc giao tc l nhng hnh
ng cp nht d liu (thm, sa, xa) vo cc bng do ngi s dng tc ng trn
c s d liu. Tp tin s ny h tr cho php cc bn c th hy b (rollback) cc thao
tc cp nht d liu c thc hin hay gip SQL Server phc hi d liu trong cc
trng hp gp s c nh mt in, Phn m rng ca tp tin ny thng thng l
*.LDF.
Kt chng
Nh vy, SQL (vit tt ca StructuredQueryLanguage) l h thng ngn ng c s
dng cho cc h qun tr c s d liu quan h. Thng qua SQL c th thc hin c

19/143

cc thao tc trn c s d liu nh nh ngha d liu, thao tc d liu, iu khin truy


cp, qun l ton vn d liu... SQL l mt thnh phn quan trng v khng th thiu
trong h qun tr c s d liu quan h.
SQL ra i nhm s dng cho cc c s d liu theo m hnh quan h. Trong mt c
s d liu quan h, d liu c t chc v lu tr trong cc bng. Mi mt bng l
mt tp hp bao gm cc dng v cc ct; mi mt dng l mt bn ghi v mi mt ct
tng ng vi mt trng, tp cc tn ct cng vi kiu d liu v cc tnh cht khc
to nn cu trc ca bng, tp cc dng trong bng chnh l d liu ca bng.
Cc bng trong mt c s d liu c mi quan h vi nhau. Cc mi quan h c biu
din thng qua kho chnh v kho ngoi ca cc bng. Kho chnh ca bng l tp mt
hoc nhiu ct c gi tr duy nht trong bng v do gi tr ca n xc nh duy nht
mt dng d liu trong bng. Mt kho ngoi l mt tp mt hoc nhiu ct c gi tr
c xc nh t kho chnh ca cc bng khc.

20/143

Ngn ng nh ngha d liu


Ngn ng nh ngha d liu
Cc cu lnh SQL cp n trong chng 2 c s dng nhm thc hin cc thao
tc b sung, cp nht, loi b v xem d liu. Nhm cc cu lnh ny c gi l ngn
ng thao tc d liu (DML). Trong chung ny, chng ta s tm hiu nhm cc cu lnh
c s dng nh ngha v qun l cc i tng CSDL nh bng, khung nhn, ch
mc,... v c gi l ngn ng nh ngha d liu (DLL).
V c bn, ngn ng nh ngha d liu bao gm cc lnh:
CREATE: nh ngha v to mi i tng CSDL.
ALTER: thay i nh ngha ca i tng CSDL.
DROP: Xo i tng CSDL c.
To CSDL
Sau khi c khi nim v cch thc t chc cc tp tin vt l lu tr d liu trong
Microsoft SQL Server, chng ta s t to mt c s d liu cho ring mnh nhm lu tr
cc d liu ring bit v a vo khai thc cc d liu . Cch d nht cc bn to
ra mt c s d liu l s dng tin ch Enterprise Manager. Ch nhng ngi vi vai
tr l qun tr h thng (sysadmin) th mi c th to lp c s d liu. Do cc bn
c th ng nhp vo vi tn ti khon ngi dng l sa thc hin vic to c s d
liu mi cho ng dng ca mnh. Trc khi gii thiu tng bc to lp c s d liu,
phn k tip m chng ti mun trnh by l cc thuc tnh ca mt c s d liu trong
Microsoft SQL Server. Cc thuc tnh nhm gip cc bn hiu r thm v bn trong c
s d liu ca Microsoft SQL Server, chng gm c:
Tn c s d liu(database name) : l duy nht trong mt Microsoft SQL Server, di
ti a l 123 k t. Theo chng ti cc bn nn t tn c s d liu gi nh. Th d:
QLBanhang (Qun l bn hng), QLHocsinh (Qun l hc sinh)...
V tr tp tin (File location) : l tn v ng dn vt l ca cc loi tp tin d liu
dng lu tr c s d liu ca Microsoft SQL Server. Thng thng cc tp tin ny
s c lu ti th mc C:\MSSQL\DATA.
Tn tp tin (File name) :l tn logic ca mi loi tp tin d liu tng ng m h thng
Microsoft SQL Server dng qun l bn trong. Tng ng mi loi tp tin d liu s
c mt tn tp tin ring bit.
21/143

Kch thc ban u(Initial size) : l kch thc khi to ca tp tin d liu khi c s d
liu mi c to lp. n v tnh l MegaByte (MB). Thng thng kch thc ban u
ca mt c s d liu mi ti thiu phi bng vi kch thc ca c s d liu Model,
bi v Microsoft SQL Server s ly c s d liu Model lm khun dng mu khi hnh
thnh mt c s d liu mi.
Vic tng trng kch thc tp tin d liu (File growth) : l cc qui nh cho vic
tng trng t ng kch thc tp tin d liu, bi v cc d liu s c lu tr ngy
cng nhiu hn so vi kch thc ban u khi to lp. Vic tng trng s t ng lm
tng kch thc tp tin d liu theo tng MB hoc theo t l phn trm (by percent) ca
kch thc hin hnh khi cc d liu bn trong Microsoft SQL Server lu tr gn y so
vi kch thc tp tin vt l hin thi. Mc nh kch thc tp tin d liu s c tng
t ng 10% khi d liu lu tr gn y.
Kch thc ti a tp tin d liu (Maximum file size) : l vic qui nh s tng trng
t ng kch thc ca cc tp tin d liu nhng c gii hn (restrict file growth) n
MB no hoc l khng c gii hn (un-restrict file growth). Trong trng hp nu
cc bn chn c gii hn kch thc ca tp tin d liu th chng ta phi bit t thm
vo cc tp tin d liu mi khi d liu lu tr bng vi kch thc ti a ca tp
tin d liu. Cc tp tin d liu mi ny chnh l loi tp tin th yu (Secondary data
file) v chng ta c th lu tr cc tp tin vt l ny ti cc a cng khc c bn trong
Microsoft SQL Server. y cng l mt trong nt c trng ca m hnh c s d liu
phn tn (distributed database). i vi cc CSDL thc t, vic xc nh cc tham s v
kch thc ban u rt quan trng v nhiu l do. m bo c khng gian lu tr
d liu, bn cn dnh trc cho CSDL phng khi nhng ng hay CSDL khc s dng
ht a cng. CSDL c kch thc nh cng s nh hng ti tc do SQL Server cn
phi thc hin nhiu ln thao tc m rng kch thc tp tin CSDL khi c d liu thm
mi. Ngoi ra, a s cc d liu trong CSDL thc t theo thi gian khng th xo b m
cn phi lu tr (backup) li trc. Vic lu tr v phc hi (restore) d liu cng nh
hng bi kch thc cc tp tin do chng phi nh lu trn cc a CD- ROM
hay bng t. Cc bc m chng ti m t bn di s gip cc bn to ra mt c s d
liu mi bng tin ch Enterprise Manager.
Bc1: Khi ng ng dng Enterprise Manager, chn mt (1) Microsoft SQL Server
c ng k qun tr trc . Chn chc nng New Database... trong thc n tt
sau khi nhn chut phi trn i tng Database

22/143

Chn chc nng New Database

Bc 2: Trong mn hnh cc thuc tnh ca c s d liu (Database Properties) ti trang


General g vo tn c s d liu mun to mi.

23/143

Trang Genneral vi cc thuc tnh ca CSDL

Bc 3: Trong mn hnh cc thuc tnh ca c s d liu (Database Properties) ti trang


Data Files, ch nh kch thc ban u khi khi to ca tp tin d liu chnh, k tip
thay i cc thuc tnh khc (nu cn). Chuyn sang trang Transaction Log thay i
cc thuc tnh ca tp tin lu vt theo cch tng t.

24/143

Cc thuc tnh trong trang Transaction Log

Ty thuc vo kch thc ca c s d liu m thi gian thc hin to c s d liu s


nhanh hoc lu. Ngoi ra chng ta cn c th to mi mt c s d liu bng cu lnh
CREATE DATABASE c thc hin trong tin ch Query Analyzer. Cc thnh phn
trong cu lnh ny hon ton ging vi cc thuc tnh ca c s d liu m chng ti
gii thiu trong phn trn.
to ra mt c s d liu c tn QLBanHang vi kch thc ban u lc khi to ca
tp tin d liu chnh l 50MB, t ng tng kch thc ln 10% khi d liu b y, kch
thc tng trng tp tin d liu ti a khng qu 200MB. V tp tin lu vt vi kch
thc ban u lc khi to l 10MB, t ng tng kch thc tp tin ln 5MB khi d
liu b y, kch thc tng trng tp tin khng gii hn. Cc bn s thc hin cu lnh
CREATE DATABASE nh sau:

25/143

Xo c s d liu c
Mt c s d liu sau khi to xong sau mt thi gian di m cc bn khng cn khai
thc d liu bn trong th cc bn c th hy b lm cho dung lng a trng
c tng ln. Tuy nhin phi chc rng cc thng tin d liu trong c s d liu m cc
bn d nh xa s khng cn hu ch v sau na. Bi v chng ta khng th khi phc
khi xa. hy b c s d liu trong Microsoft SQL Server chng ta c nhiu cch
thc hin: s dng cu lnh DROP DATABASE, nhn phm Delete hoc nhn chut
trn biu tng Delete v xc nh ng hy b c s d liu chn trong tin ch
Enterprise Manager. hy b c s d liu QLBanHang, thc hin cu lnh DROP
DATABSE nh sau: DROP DATABASE QLBanHang
Hoc nhn phm Delete trn tn ca c s d liu ny trong tin ch Enterprise Manager
v xc nhn l ng (chn Yes) hy b c s d liu QLBanHang. H thng
Microsoft SQL Server khng cho ngi s dng c th hy b cc c s d liu h thng
nh l: Master, Model, Tempdb bi v cc c s d liu lun c h thng Microsoft
SQL Server s dng. Ngoi ra hy b mt c s d liu thnh cng th phi m bo
khng cn ngi s dng no ang truy cp vo c s d liu . Trong trng hp khi
thc hin hy b c s d liu ang cn ngi s dng truy cp th h thng s hin th
thng bo bn di.
Ch

26/143

T uyt i khng xa c s d liu bng c ch s dng W i n dows Explo r e r ho c W i


n do w s Commander h y b cc loi tp tin d l i u t r ong th m c C:\MSSQL\
D A T A\ v lm nh th s nh hng t rc tip n h thng c s d liu Mic r osoft
S QL Serve r .
To bng d liu
Nh ni n chng 1, bng d liu l cu trc c vai tr quan trng nht trong
c s d liu quan h. Ton b d liu ca c s d liu c t chc trong cc bng,
nhng bng ny c th l nhng bng h thng c to ra khi to lp c s d liu, v
cng c th l nhng bng do ngi s dng nh ngha.

Hnh 2.4: Bng trong CSDL quan h


Trong cc bng, d liu c chc di dng cc dng v ct. Mi mt dng l mt
bn ghi duy nht trong bng v mi mt ct l mt trng. Cc bng trong c s d liu
c s dng biu din thng tin, lu gi d liu v cc i tng trong th gii thc
v/hoc mi quan h gia cc i tng. Bng trong hnh 3.1 bao gm 10 bn ghi v 4
trng l MAKHOA, TENKHOA, DIENTHOAI v TRUONGKHOA.
Cu lnh CREATE TABLE c s dng nh ngha mt bng d liu mi trong c
s d liu. Khi nh ngha mt bng d liu mi, ta cn phi xc nh c cc yu cu
sau y:
Bng mi c to ra s dng vi mc ch g v c vai tr nh th no trong c s
d liu.
Cu trc ca bng bao gm nhng trng (ct) no, mi mt trng c ngha nh
th no trong vic biu din d liu, kiu d liu ca mi trng l g v trng c
cho php nhn gi tr NULL hay khng.

27/143

Nhng trng no s tham gia vo kha chnh ca bng. Bng c quan h vi nhng
bng khc hay khng v nu c th quan h nh th no.
Trn cc trng ca bng c tn ti nhng rng buc v khun dng, iu kin hp l
ca d liu hay khng; nu c th s dng u v nh th no.
To cu trc bng d liu bng EM
Sau khi xem xt v hiu c cc thuc tnh lin quan n cu trc ca bng, trong
phn ny chng ti s hng dn cc bn cc cch to cu trc bng d liu mi.
to cu trc bng chng ti hng dn cc bn hai (2) cch thc hin. u tin l to
cu trc bng bng tin ch Enterprise Manager. K t by gi chng ti xem nh cc
bn ng k qun tr mt Microsoft SQL Server v bn trong Microsoft SQL Server
ny, c s d liu qun l bn hng (QLBanHang) c to lp. Cc bng d liu v
nhng i tng khc cc phn trnh by k tip s c to ra bn trong c s d liu
QLBanHang ny. Cc bc thc hin vic to bng d liu trong Enterprise Manager
nh sau:
Bc 1:Trong ng dng Enterprise Manager, m rng c s d liu thy cc i
tng bn trong. Nhn chut phi trn i tng Tables, chn chc nng New Table...
trong thc n tt.

To bng d liu

Bc 2: Trong mn hnh thit k cu trc bng (design table), ln lt g vo tn cc


ct bn trong bng, chn la cc kiu d liu tng ng thch hp v ch nh cc thuc
tnh cn thit cho cc ct bn trong bng.

28/143

Mn hnh xy dng cu trc bng

Bc 3: nh ngha kha chnh cho bng v lu li cu trc bng va nh ngha. ng


mn hnh thit k cu trc bng li kt thc qu trnh to cu trc bng bng tin ch
EM

Mn hnh ch nh tn bng mi

To cu trc bng bng T-SQL


Cu lnh CREATE TABLE c c php nh sau:

29/143

CREATE TABLE tn_bng ( tn_ct thuc_tnh_ct


cc_rng_buc [,... ,tn_ct_n thuc_tnh_ct_n
cc_rng_buc_ct_n] [,cc_rng_buc_trn_bng] )
Tn_bng Tn ca bng cn to. Tn phi tun theo qui tc nh danh v khng c
vt qu 128 k t.
tn_ct L tn ca ct (trng) cn nh ngha, tn ct phi tun theo qui tc nh danh
v khng c trng nhau trong mi mt bng. Mi mt bng phi c t nht mt ct.
Nu bng c nhiu ct th nh ngha ca cc ct (tn ct, thuc tnh v cc rng buc)
phi phn cch nhau bi du phy.
Thuc_tnh_ct Mi mt ct trong mt bng ngoi tn ct cn c cc thuc tnh bao
gm:
Kiu d liu ca ct. y l thuc tnh bt buc phi c i vi mi ct.
Gi tr mc nh ca ct: l gi tr c t ng gn cho ct nu nh ngi s d
ng khng nhp d liu cho ct mt cch tng minh. Mi mt ct ch c th
c nhiu nht mt gi tr mc nh.
Ct c tnh cht IDENTITY hay khng? tc l gi tr ca ct c c t ng
tng mi khi c bn ghi mi c b sung hay khng. Tnh cht ny ch c th
s dng i vicc trng kiu s.
Ct c chp nhn gi tr NULL hay khng
y l phn v d , xc nh khong ca v d ri chn style
Khai bo di y nh ngha ct STT c kiu d liu l int v ct c tnh cht
IDENTITY:
stt INT IDENTITY
hay nh ngha ct NGAY c kiu datetime v khng cho php chp nhn gi tr NULL:
ngay DATETIME NOT NULL
v nh ngha ct SOLUONGkiu intv c gi tr mc nh l 0:
soluong INT DEFAULT (0)
Cc_rng_buc: Cc rng buc c s dng trn mi ct hoc trn bng nhm cc mc
ch sau:

30/143

Quy nh khun dng hay gi tr d liu c cho php trn ct (chng hn qui nh tui
ca mt hc sinh phi ln hn 6 v nh hn 20, s in thoi phi l mt chui bao gm
6 ch s,...). Nhng rng buc kiu ny c gi l rng buc CHECK
m bo tnh ton vn d liu trong mt bng v ton vn tham chiu gia cc bng
trong c s d liu. Nhng loi rng buc ny nhm m bo tnh ng ca d liu nh:
s chng minh nhn dn ca mi mt ngi phi duy nht, nu sinh vin hc mt lp
no th lp phi tn ti,... Lin quan n nhng loi rng buc ny bao gm cc
rng buc PRIMARY KEY (kho chnh), UNIQUE (kha d tuyn) v FOREIGN KEY
(kho ngoi)
Cc loi rng buc ny s c trnh by chi tit hn phn sau.
Cu lnh di y nh ngha bng NHANVIEN vi cc trng MANV (m nhn vin),
HOTEN (h v tn), NGAYSINH (ngy sinh ca nhn vin), DIENTHOAI (in thoi)
v HSLUONG (h s lng)
CREATE TABLE nhanvien ( manv NVARCHAR(10) NOT NULL, hoten
NVARCHAR(50) NOT NULL, ngaysinh DATETIME NULL, dienthoai
NVARCHAR(10) NULL, hsluong DECIMAL(3,2) DEFAULT (1.92) )
Trong cu lnh trn, trng MANV v HOTEN ca bng NHANVIEN khng c
NULL (tc l bt buc phi c d liu), trng NGAYSINH v DIENTHOAI s nhn
gi tr NULL nu ta khng nhp d liu cho chng cn trng HSLUONG s nhn gi
tr mc nh l 1.92 nu khng c nhp d liu.
Nu ta thc hin cc cu lnh di y sau khi thc hin cu lnh trn b sung d
liu cho bng NHANVIEN
INSERT INTO nhanvien VALUES('NV01','Le Van A','2/4/
75','886963',2.14) INSERT INTO
nhanvien(manv,hoten)VALUES('NV02','Mai Thi B') INSERT INTO
nhanvien(manv,hoten,dienthoai) VALUES('NV03','Tran Thi
C','849290')
Ta s c c d liu trong bng NHANVIEN nh sau:

31/143

Rng buc CHECK


Rng buc CHECK c s dng nhm ch nh iu kin hp l i vi d liu. Mi
khi c s thay i d liu trn bng (INSERT, UPDATE), nhng rng buc ny s c
s dng nhm kim tra xem d liu mi c hp l hay khng.
Rng buc CHECK c khai bo theo c php nh sau:
[CONTRAINT tn_rng_buc] CHECK (iu kin)
Trong , iu_kin l mt biu thc logic tc ng ln ct nhm qui nh gi tr hoc
khun dng d liu c cho php. Trn mi mt bng cng nh trn mi mt ct c
th c nhiu rng buc CHECK.
Cu lnh di y to bng DIEMTOTNGHIEP trong qui nh gi tr ca ct
DIEMVAN v DIEMTOAN phi ln hn hoc bng 0 v nh hn hoc bng 10
CREATE TABLE diemtotnghiep ( Hoten NVARCHAR(30) NOT NULL
Ngaysinh DATETIME, Diemvan DECIMAL(4,2) CONSTRAINT
chk_diemvan CHECK(diemvan>=0 AND diemvan<=10), diemtoan
DECIMAL(4,2) CONSTRAINT chk_diemtoan CHECK(diemtoan>=0 AND
diemtoan<=10), )
Nh vy, vi nh ngha nh trn ca bng DIEMTOTNGHIEP, cc cu lnh di y
l hp l:
CREATE TABLE diemtotnghiep ( INSERT INTO
diemtotnghiep(hoten,diemvan,diemtoan) VALUES('Le Thanh
Hoang',9.5,2.5) INSERT INTO diemtotnghiep(hoten,diemvan)
VALUES('Hoang Thi Mai',2.5) )
cn cu lnh di y l khng hp l:
INSERT INTO diemtotnghiep(hoten,diemvan,diemtoan)
VALUES('Tran Van Hanh',6,10.5)
do ct DIEMTOAN nhn gi tr 10.5 khng tho mn iu kin ca rng buc
Trong v d trn, cc rng buc c ch nh phn khai bo ca mi ct. Thay v ch
nh rng buc trn mi ct, ta c th ch nh cc rng buc mc bng bng cch khai
bo cc rng buc sau khi khai bo xong cc ct trong bng.
Cu lnh
32/143

CREATE TABLE lop ( malop NVARCHAR(10) NOT NULL , tenlop


NVARCHAR(30) NOT NULL , khoa SMALLINT NULL , hedaotao
NVARCHAR(25) NULL CONSTRAINT chk_lop_hedaotao CHECK
(hedaotao IN ('chnh quy','ti chc')), namnhaphoc INT
NULL CONSTRAINT chk_lop_namnhaphoc CHECK
(namnhaphoc<=YEAR(GETDATE())), makhoa NVARCHAR(5)
c th c vit li nh sau:
CREATE TABLE lop ( malop NVARCHAR(10) NOT NULL , tenlop
NVARCHAR(30) NOT NULL , khoa SMALLINT NULL , hedaotao
NVARCHAR(25) NULL, namnhaphoc INT NULL , makhoa
NVARCHAR(5), CONSTRAINT chk_lop CHECK
(namnhaphoc<=YEAR(GETDATE()) AND hedaotao IN ('chnh
quy','ti chc')) )

Rng buc PRIMARY KEY


Rng buc PRIMARY KEY c s dng nh ngha kho chnh ca bng. Kho
chnh ca mt bng l mt hoc mt tp nhiu ct m gi tr ca chng l duy nht trong
bng. Hay ni cch khc, gi tr ca kho chnh s gip cho ta xc nh c duy nht
mt dng (bn ghi) trong bng d liu. Mi mt bng ch c th c duy nht mt kho
chnh v bn thn kho chnh khng chp nhn gi tr NULL. Rng buc PRIMARY
KEY l c s cho vic m bo tnh ton vn thc th cng nh ton vn tham chiu.
khai bo mt rng buc PRIMARY KEY, ta s dng c php nh sau:
[CONSTRAINT tn_rng_buc] PRIMARY KEY [(danh_sch_ct)]
Nu kho chnh ca bng ch bao gm ng mt ct v rng buc PRIMARY KEY
c ch nh mc ct, ta khng cn thit phi ch nh danh sch ct sau t kho
PRIMARY KEY. Tuy nhin, nu vic khai bo kho chnh c tin hnh mc bng
(s dng khi s lng cc ct tham gia vo kho l t hai tr ln) th bt buc phi ch
nh danh sch ct ngay sau t kha PRIMARY KEY v tn cc ct c phn cch
nhau bi du phy.
Cu lnh di y nh ngha bng SINHVIEN vi kho chnh l MASV
CREATE TABLE sinhvien ( masv NVARCHAR(10) CONSTRAINT
pk_sinhvien_masv PRIMARY KEY, hodem NVARCHAR(25) NOT NULL
, ten NVARCHAR(10) NOT NULL , ngaysinh DATETIME, gioitinh
BIT, noisinh NVARCHAR(255), malop NVARCHAR(10) )

33/143

Vi bng va c to bi cu lnh trn, nu ta thc hin cu lnh:


INSERT INTO sinhvien(masv,hodem,ten,gioitinh,malop)
VALUES('0261010001','L Hong Phng','Anh',0,'C26101')
mt bn ghi mi s c b sung vo bng ny. Nhng nu ta thc hin tip cu lnh:
INSERT INTO sinhvien(masv,hodem,ten,gioitinh,malop)
VALUES('0261010001','L Huy','an',1,'C26101')
th cu lnh ny s b li do trng gi tr kho vi bn ghi c.
Cu lnh di y to bng DIEMTHI vi kho chnh l tp bao gm hai ct
MAMONHOC v MASV
CREATE TABLE diemthi ( ma NVARCHAR(10) NOTNULL
Diemlan1NUMERIC(4, 2), Diemlan2NUMERIC(4, 2), CONSTRAINT
pk_diemthi PRIMARY KEY(mamonhoc,masv) )
Lu :
Mi mt bng ch c th c nhiu nht mt rng buc PRIMARY KEY.
Mt kho chnh c th bao gm nhiu ct nhng khng vt qu 16 ct.

Rng buc UNIQUE


Trn mt bng ch c th c nhiu nht mt kha chnh nhng c th c nhiu ct hoc
tp cc ct c tnh cht nh kho chnh, tc l gi tr ca chng l duy nht trong bng.
Tp mt hoc nhiu ct c gi tr duy nht v khng c chn lm kho chnh c
gi l kho ph (kho d tuyn) ca bng. Nh vy, mt bng ch c nhiu nht mt
kho chnh nhng c th c nhiu kho ph.
Rng buc UNIQUE c s dng trong cu lnh CREATE TABLE nh ngha kho
ph cho bng v c khai bo theo c php sau y:
[CONSTRAINT tn_rng_buc] UNIQUE [(danh_sch_ct)]
Gi s ta cn nh ngha bng LOP vi kho chnh l ct MALOP nhng ng thi li
khng cho php cc lp khc nhau c trng tn lp vi nhau, ta s dng cu lnh nh
sau:

34/143

CREATE TABLE lop ( ma NVARCHAR(10) ten NVARCHAR(10) khoa


SMALLINT NULL hedaotao NVARCHAR(10) NULL namnhaphoc INT
NULL makhoa NVARCHAR (10) CONSTRAINT pk_lop PRIMARY KEY
(malop), CONSTRAINT unique_lop_tenlop UNIQUE(tenlop) )

Rng buc FOREIGN KEY


Cc bng trong mt c s d liu c mi quan h vi nhau. Nhng mi quan h ny biu
din cho s quan h gia cc i tng trong th gii thc. V mt d liu, nhng mi
quan h c m bo thng qua vic i hi s c mt ca mt gi tr d liu trong
bng ny phi ph thuc vo s tn ti ca gi tr d liu trong mt bng khc.
Rng buc FOREIGN KEY c s dng trong nh ngha bng d liu nhm to nn
mi quan h gia cc bng trong mt c s d liu. Mt hay mt tp cc ct trong
mt bng c gi l kho ngoi, tc l c rng buc FOREIGN KEY, nu gi tr ca
n c xc nh t kho chnh (PRIMARY KEY) hoc kho ph (UNIQUE) ca mt
bng d liu khc.
Hnh di y cho ta thy c mi quan h gia 3 bng DIEMTHI, SINHVIEN
v MONHOC. Trong bng DIEMTHI, MASV l kho ngoi tham chiu n ct
MASV ca bng SINHVIEN v MAMONHOC l kho ngoi tham chiu n ct
MAMONHOC ca bng MONHOC.

Mi quan h gia cc bng

35/143

Vi mi quan h c to ra nh hnh trn, h qun tr c s d liu s kim tra tnh hp


l ca mi bn ghi trong bng DIEMTHI mi khi c b sung hay cp nht. Mt bn
ghi bt k trong bng DIEMTHI ch hp l (m bo rng buc FOREIGN KEY) nu
gi tr ca ct MASV phi tn ti trong mt bn ghi no ca bng SINHVIEN
v gi tr ca ct MAMONHOC phi tn ti trong mt bn ghi no ca bng
MONHOC.
Rng buc FOREIGN KEY c nh ngha theo c php di y:
[CONSTRAINT tn_rng_buc] FOREIGN KEY [(danh_sch_ct)]
REFERENCES tn_bng_tham_chiu(danh_sch_ct_tham_chiu)
[ON DELETE CASCADE | NO ACTION | SET NULL | SET DEFAULT]
[ON UPDATE CASCADE | NO ACTION | SET NULL | SET DEFAULT]
Vic nh ngha mt rng buc FOREIGN KEY bao gm cc yu t sau:
Tn ct hoc danh sch ct ca bng c nh ngha tham gia vo kho ngoi.
Tn ca bng c tham chiu bi kho ngoi v danh sch cc ct c tham chiu
n trong bng tham chiu.
Cch thc x l i vi cc bn ghi trong bng c nh ngha trong trng hp cc
bn ghi c tham chiu trong bng tham chiu b xo (ON DELETE) hay cp nht (ON
UPDATE). SQL chun a ra 4 cch x l:
CASCADE: T ng xo (cp nht) nu bn ghi c tham chiu b xo (cp
nht).
NO ACTION: (Mc nh) Nu bn ghi trong bng tham chiu ang c tham
chiu bi mt bn ghi bt k trong bng c nh ngha th bn ghi khng
c php xo hoc cp nht (i vi ct c tham chiu).
SET NULL: Cp nht li kho ngoi ca bn ghi thnh gi tr NULL (nu ct
cho php nhn gi tr NULL).
SET DEFAULT: Cp nht li kho ngoi ca bn ghi nhn gi tr mc nh
(nu ct c qui nh gi tr mc nh).
Cu lnh di y nh ngha bng DIEMTHI vi hai kho ngoi trn ct
MASV v ct MAMONHOC (gi s hai bng SINHVIEN v MONHOC c nh
ngha)
CREATE TABLE diemthi ( ma NVARCHAR (10) ma NVARCHAR(10)
diemlan1 NUMERIC(4,2) diemlan2 NUMERIC(4,2) CONSTRAINT

36/143

pk_diemthi PRIMARY KEY(mamonhoc,masv), CONSTRAINT


fk_diemthi_mamonhoc FOREIGN KEY(mamonhoc) REFERENCES
monhoc(mamonhoc) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_diemthi_masv FOREIGN KEY(masv) REFERENCES
sinhvien(masv) ON DELETE CASCADE ON UPDATE CASCADE )
Lu :
Ct c tham chiu trong bng tham chiu phi l kho chnh (hoc l kho ph).
Ct c tham chiu phi c cng kiu d liu v di vi ct tng ng trong kha
ngoi.
Bng tham chiu phi c nh ngha trc. Do , nu cc bng c mi quan h
vng, ta c th khng th nh ngha rng buc FOREIGN KEY ngay trong cu lnh
CREATE TABLE m phi nh ngha thng qua lnh ALTER TABLE.

Sa i nh ngha bng
Mt bng sau khi c nh ngha bng cu lnh CREATE TABLE c th c sa
i thng qua cu lnh ALTER TABLE. Cu lnh ny cho php chng ta thc hin c
cc thao tc sau:
B sung mt ct vo bng.
Xo mt ct khi bng.
Thay i nh ngha ca mt ct trong bng.
Xo b hoc b sung cc rng buc cho bng C php ca cu lnh ALTER TABLE
nh sau: ALTER TABLE tn_bng
ADD nh_ngha_ct | ALTER COLUMN tn_ct kiu_d_liu
[NULL | NOT NULL] | DROP COLUMN tn_ct | ADD CONSTRAINT
tn_rng_buc nh_ngha_rng_buc | DROP CONSTRAINT
tn_rng_buc
Cc v d di y minh ho cho ta cch s dng cu lnh ALTER TABLE trong cc
trng hp.
Gi s ta c hai bng DONVI v NHANVIEN vi nh ngha nh sau:

37/143

CREATE TABLE donvi ( madvINTNOT NULLPRIMARY KEY,


tendvNVARCHAR(30)NOT NULL ) CREATE TABLE nhanvien ( ma
NVARCHAR(10) hoten NVARCHAR(30) ngaysinh DATETIME,
diachiCHAR(30)NOT NULL )
B sung vo bng NHANVIEN ct DIENTHOAI vi rng buc CHECK nhm qui nh
in thoi ca nhn vin l mt chui 6 ch s:
ALTER TABLE nhanvien ADD dienthoai NVARCHAR(6) CONSTRAINT
chk_nhanvien_dienthoai CHECK (dienthoai LIKE '[09][09][09][09][09][09]')
B sung thm ct MADV vo bng NHANVIEN:
ALTER TABLE nhanvien ADD madv INT NULL
nh ngha li kiu d liu ca ct DIACHI trong bng NHANVIEN v cho php ct
ny chp nhn gi tr NULL:
ALTER TABLE nhanvien ALTER COLUMN diachi NVARCHAR(100)
NULL
Xo ct ngy sinh khi bng NHANVIEN :
ALTER TABLE nhanvien DROP COLUMN ngaysinh
nh ngha kho chnh (rng buc PRIMARY KEY) cho bng NHANVIEN l ct
MANV:
ALTER TABLE nhanvien ADD CONSTRAINT pk_nhanvien PRIMARY
KEY(manv)
nh ngha kho ngoi cho bng NHANVIEN trn ct MADV tham chiu n ct
MADV ca bng DONVI :
ALTER TABLE nhanvien ADD CONSTRAINT_nhavien_madv FOREIGN
KEY(madv) REFERENCES donvi(madv) ON DELETE CASCADE ON
UPDATE CASCADE
Xo b rng buc kim tra s in thoi ca nhn vin
ALTER TABLE nhanvien DROP CONSTRAINT
CHK_NHANVIEN_DIENTHOAI
38/143

L u :
Nu b sung thm mt ct vo bng v trong bng c t nht mt bn ghi th ct
mi cn b sung phi cho php chp nhn gi tr NULL hoc phi c gi tr mc nh.
Mun xo mt ct ang c rng buc bi mt rng buc hoc ang c tham chiu
bi mt kho ngoi, ta phi xo rng buc hoc kho ngoi trc sao cho trn ct khng
cn bt k mt rng buc v khng cn c tham chiu bi bt k kho ngoi no.
Nu b sung thm rng buc cho mt bng c d liu v rng buc cn b sung
khng c tho mn bi cc bn ghi c trong bng th cu lnh ALTER TABLE
khng thc hin c.

Xo bng
Khi mt bng khng cn cn thit , ta c th xo n ra khi c s d liu bng cu lnh
DROP TABLE. Cu lnh ny cng ng thi xo tt c nhng rng buc, ch
mc, trigger lin quan n bng .
Cu lnh c c php nh sau:
DROP TABLE tn_bng
Trong cc h qun tr c s d liu, khi xo mt bng bng lnh DROP TABLE, ta
khng th khi phc li bng cng nh d liu ca n. Do , cn phi cn thn khi s
dng cu lnh ny.
Cu lnh DROP TABLE khng th thc hin c nu bng cn xo ang c tham
chiu bi mt rng buc FOREIGN KEY. Trong trng hp ny, rng buc FOREIGN
KEY ang tham chiu hoc bng ang tham chiu n bng cn xo phi c xo
trc.
Khi mt bng b xo, tt c cc rng buc, ch mc v trigger lin quan n bng cng
ng thi b xa theo. Do , nu ta to li bng th cng phi to li cc i tng ny.
Gi s ct MADV trong bng DONVI ang c tham chiu bi kho ngoi
fk_nhanvien_madvtrong bng NHANVIEN. xo bng DONVI ra khi c s d liu,
ta thc hin hai cu lnh sau:
Xo b rng buc fk_nhanvien_madv khi bng NHANVIEN:
ALTER TABLE nhanvien DROP CONSTRAINT fk_nhanvien_madv

39/143

Xo bng DONVI:
DROP TABLE donvi

40/143

Ngn ng thao tc d liu


Ngn ng thao tc d liu
i vi a s ngi s dng, SQL c xem nh l cng c hu hiu thc hin cc
yu cu truy vn v thao tc trn d liu. Trong chng ny, ta s bn lun n nhm
cc cu lnh trong SQL c s dng cho mc ch ny. Nhm cc cu lnh ny c
gi chung l ngn ng thao tc d liu (DML: Data Manipulation Language) bao gm
cc cu lnh sau:
SELECT: S dng truy xut d liu t mt hoc nhiu bng.
INSERT: B sung d liu.
UPDATE: Cp nht d liu
DELETE: Xo d liu
Trong s cc cu lnh ny, c th ni SELECT l cu lnh tng i phc tp v c
s dng nhiu trong c s d liu. Vi cu lnh ny, ta khng ch thc hin cc yu cu
truy xut d liu n thun m cn c th thc hin c cc yu cu thng k d liu
phc tp. Cng chnh v vy, phn u ca chng ny s tp trung tng i nhiu n
cu lnh SELECT. Cc cu lnh INSERT, UPDATE v DELETE c bn lun n
cui chng

Truy xut d liu vi cu lnh SELECT


Cu lnh SELECT c s dng truy xut d liu t cc dng v cc ct ca mt hay
nhiu bng, khung nhn. 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). Ngoi ra, cu lnh ny cn cung cp kh nng
thc hin cc thao tc truy vn v thng k d liu phc tp khc.
C php chung ca cu lnh SELECT c dng:
SELECT ALL | DISTINCT][TOP n] danh_sch_chn [INTO
tn_bng_mi] FROMdanh_sch_bng/khung_nhn
[WHEREiu_kin] [GROUP BYdanh_sch_ct] [HAVING
iu_kin] [ ORDER BYct_sp_xp]
[COMPUTEdanh_sch_hm_gp [BY danh_sch_ct]]
41/143

iu cn lu u tin i vi cu lnh ny l cc thnh phn trong cu lnh SELECT


nu c s dng phi tun theo ng th t nh trong c php. Nu khng, cu lnh s
c xem l khng hp l.
Cu lnh SELECT c s dng tc ng ln cc bng d liu v kt qu ca cu
lnh cng c hin th di dng bng, tc l mt tp hp cc dng v cc ct (ngoi
tr trng hp s dng cu lnh SELECT vi mnh COMPUTE).
Kt qu ca cu lnh sau y cho bit m lp, tn lp v h o to ca cc lp hin c
SELECT malop,tenlop,hedaotao FROM lop

Mnh FROM
Mnh FROM trong cu lnh SELECT c s dung nhm ch nh cc bng v
khung nhn cn truy xut d liu. Sau FROM l danh sch tn ca cc bng v khung
nhn tham gia vo truy vn, tn ca cc bng v khung nhn c phn cch nhau bi
du phy.
Cu lnh di y hin th danh sch cc khoa trong trng
SELECT * FROM khoa
kt qu cu lnh nh sau:

42/143

Ta c th s dng cc b danh cho cc bng hay khung nhn trong cu lnh SELECT. B
danh c gn trong mnh FROM bng cch ch nh b danh ngay sau tn bng.
Cu lnh sau gn b danh l cho bng khoa
SELECT * FROM khoa a

Danh sch chn trong cu lnh SELECT


Danh sch chn trong cu lnh SELECT c s dng ch nh cc trng,cc biu
thc cn hin th trong cc ct ca kt qu truy vn. Cc trng, cc biu thc c ch
nh ngay sau t kho SELECT v phn cch nhau bi du phy. S dng danh sch
chn trong cu lnh SELECT bao gm cc trng hp sau:
Chn tt c cc ct trong bng
Khi cn hin th tt c cc trng trong cc bng, s dng k t * trong danh sch chn
thay v phi lit k danh sch tt c cc ct. Trong trng hp ny, cc ct c hin th
trong kt qu truy vn s tun theo th t m chng c to ra khi bng c nh
ngha.
Cu lnh
SELECT * FROM lop
cho kt qu bao nh sau:

43/143

Tn ct trong danh sch chn


Trong trng hp cn ch nh c th cc ct cn hin th trong kt qu truy vn, ta ch
nh danh sch cc tn ct trong danh sch chn. Th t ca cc ct trong kt qu truy
vn tun theo th t ca cc trng trong danh sch chn.
Cu lnh
SELECT malop,tenlop,namnhaphoc,khoa FROM lop
cho bit m lp, tn lp, nm nhp hc v kho ca cc lp v c kt qu nh sau:

Lu : Nu truy vn c thc hin trn nhiu bng/khung nhn v trong cc bng/


khung nhn c cc trng trng tn th tn ca nhng trng ny nu xut hin trong
danh sch chn phi c vit di dng:
tn_bng.tn_trng
SELECT malop, tenlop, lop.makhoa, tenkhoa FROM lop, khoa
WHERE lop.malop = khoa.makhoa
44/143

Thay i tiu cc ct
Trong kt qu truy vn, tiu ca cc ct mc nh s l tn ca cc trng tng ng
trong bng. Tuy nhin, cc tiu tr nn thn thin hn, ta c th i tn cc tiu
ca cc ct. t tiu cho mt ct no , ta s dng cch vit:
tiu__ct = tn_trng
hoc
tn_trng AS tiu__ct
hoc
tn_trngtiu__ct
Cu lnh di y:
SELECT 'M lp'= malop,tenlop 'Tn lp',khoa AS 'Kho'
FROM lop
cho bit m lp, tn lp v kho hc ca cc lp trong trng. Kt qu ca cu lnh nh
sau:

S dng cu trc CASE trong danh sch chn


Cu trc CASE c s dng trong danh sch chn nhm thay i kt qu ca truy vn
tu thuc vo cc trng hp khc nhau. Cu trc ny c c php nh sau:
CASE biu_thc WHEN biu_thc_kim_tra THEN kt_qu [ ...
] [ELSE kt_qu_ca_else] END

45/143

hoc
CASE WHEN iu_kin THEN kt_qu [ ... ] [ELSE
kt_qu_ca_else] END
hin th m, h tn v gii tnh (nam hoc n) ca cc sinh vin, ta s dng cu lnh
SELECT masv,hodem,ten,CASE gioitinh WHEN 1 THEN Nam ELSE
N' END AS gioitinh FROM sinhvien
hoc
SELECT masv,hodem,ten, CASE WHEN gioitinh=1 THEN 'Nam'
ELSE 'N' END AS gioitinh FROM sinhvien
Kt qu ca hai cu lnh trn u c dng nh sau

Hng v biu thc trong danh sch chn


Ngoi danh sch trng, trong danh sch chn ca cu lnh SELECT cn c th s dng
cc biu thc. Mi mt biu thc trong danh sch chn tr thnh mt ct trong kt qu
truy vn.
cu lnh di y cho bit tn v s tit ca cc mn hc
SELECT tenmonhoc,sodvht*15 AS sotiet FROM monhoc

46/143

Nu trong danh sch chn c s xut hin ca gi tr hng th gi tr ny s xut hin


trong mt ct ca kt qu truy vn tt c cc dng
Cu lnh
SELECT tenmonhoc,S tit:',sodvht*15 AS sotiet FROM monhoc
cho kt qu nh sau:

Loi b cc dng d liu trng nhau trong kt qu truy vn


Trong kt qu ca truy vn c th xut hin cc dng d liu trng nhau. loi b bt
cc dng ny, ta ch nh thm t kha DISTINCT ngay sau t kho SELECT.
Hai cu lnh di y
SELECT khoa FROM lop
V

47/143

SELECT DISTINCT khoa FROM lop


c kt qu ln lt nh sau:

Gii hn s lng dng trong kt qu truy vn


Kt qu ca truy vn c hin th thng s l tt c cc dng d liu truy vn c.
Trong trng hp cn hn ch s lng cc dng xut hin trong kt qu truy vn, ta ch
nh thm mnh TOP ngay trc danh sch chn ca cu lnh SELECT.
Cu lnh di y hin th h tn v ngy sinh ca 5 sinh vin u tin trong danh sch
SELECT TOP 5 hodem,ten,ngaysinh FROM sinhvien
Ngoi cch ch nh c s lng dng cn hin th trong kt qu truy vn, ta c th ch
nh s lng cc dng cn hin th theo t l phn trm bng cch s dng thm t
kho PERCENT nh v d di y.
Cu lnh di y hin th h tn v ngy sinh ca 10% s lng sinh vin hin c trong
bng SINHVIEN
SELECT TOP 10 PERCENT hodem,ten,ngaysinh FROM sinhvien
Ch nh iu kin truy vn d liu
Mnh WHERE trong cu lnh SELECT c s dng nhm 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 iu kin c ch nh mi c hin th trong kt qu truy
vn.
Cu lnh di y hin th danh sch cc mn hc c s n v hc trnh ln hn 3

48/143

SELECT * FROM monhoc WHERE sodvht>3


Kt qu ca cu lnh ny nh sau:

Trong mnh WHERE thng s dng:


Cc ton t kt hp iu kin (AND, OR)
Cc ton t so snh
Kim tra gii hn ca d liu (BETWEEN/ NOT BETWEEN)
Danh sch
Kim tra khun dng d liu.
Cc gi tr NULL
Cc ton t so snh
T on t ng h a
=

Bng

>

Ln hn

<

Nh hn

>=

Ln hn hoc bng

<=

Nh hn hoc bng

<>

khc

!>

Khng ln hn

!<

Khng nh hn

Cu lnh:
49/143

SELECT masv,hodem,ten,,ngaysinh FROM sinhvien WHERE


(tenn=Anh) AND (YEAR(GETDATE())-YEAR(ngaysinh)<=20)
cho bit m, h tn v ngy sinh ca cc sinh vin c tn l Anhv c tui nh hn hoc
bng 20.

Kim tra gii hn ca d liu


kim tra xem gi tr d liu nm trong (ngoi) mt khong no , ta s dng ton
t BETWEEN (NOT BETWEEN) nh sau:
C c h s d n g

n g h a

gi_tr BETWEEN a AND b

a gi_tr b

gi_tr NOT BETWEEN a AND b (gi_tr < a) AND (gi_tr>b)


Cu lnh di y cho bit h tn v tui ca cc sinh vin c tn l Bnh
v c tui nm trong khong t 20 n 22
SELECT hodem,ten,year(getdate())-year(ngaysinh) AS tuoi
FROM sinhvien WHERE ten =Bnh AND YEAR(GETDATE())YEAR(ngaysinh) BETWEEN 20 AND 22
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.
bit danh sch cc mn hc c s n v hc trnh l 2, 4 hoc 5, thay v s dng cu
lnh

50/143

SELECT * FROM monhoc WHERE sodvht=2 OR sodvht=4 OR


sodvht=5 ta c th s dng cu lnh SELECT * FROM monhoc
WHERE sodvht IN (2,4,5)
Ton t LIKE v cc k t i din
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

n g h a

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 chnh ( v d [^a-f]


hay mt tp (v d [^abcdef]).

Cu lnh di y
SELECT hodem,ten FROM sinhvien WHERE hodem LIKE 'L%'
cho bit h tn ca cc sinh vin c h l L v c kt qu nh sau

Cu lnh:
SELECT hodem,ten FROM sinhvien WHERE hodem LIKE 'L%' AND
ten LIKE '[AB]%'

51/143

C kt qu l:

Gi tr NULL
D liu trong mt ct cho php NULL s nhn gi tr NULL trong cc trng hp sau:
Nu khng c d liu c nhp cho ct 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, kim tra gi tr ca mt ct c gi tr NULL hay khng, ta
s dng cch vit:
WHEREtn_ctIS NULL
Hoc :
WHERE tn_ct IS NOT NULL

To mi bng d liu t kt qu ca cu lnh SELECT


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 l s dng kt qu ca truy vn
Cu lnh di y truy vn d liu t bng SINHVIEN v to mt bng
TUOISV bao gm cc trng HODEM, TEN v TUOI
SELECT hodem,ten,YEAR(GETDATE())YEAR(ngaysinh) AS tuoi
INTO tuoisv FROM sinhvien

52/143

Lu :Nu trong danh sch chn c cc biu thc th nhng biu thc ny phi c
t tiu .

Sp xp kt qu truy vn
Mc nh, cc dng d liu trong kt qu ca cu truy vn tun theo th t ca chng
trong bng d liu hoc c sp xp theo ch mc (nu trn bng c ch mc). Trong
trng hp mun d liu c sp xp theo chiu tng hoc gim ca gi tr ca mt
hoc nhiu trng, ta s dng thm mnh ORDER BY trong cu lnh SELECT; Sau
ORDER BY l danh sch cc ct cn sp xp (ti a l 16 ct). D liu c sp xp c
th theo chiu tng (ASC) hoc gim (DESC), mc nh l sp xp theo chiu tng.
Cu lnh di y hin th danh sch cc mn hc v sp xp theo chiu gim dn ca
s n v hc trnh
SELECT * FROM monhoc ORDER BY sodvht DESC

Nu sau ORDER BY c nhiu ct th vic sp xp d liu s c u tin theo th t t


tri qua phi.
Cu lnh
SELECT hodem,ten,gioitinh YEAR(GETDATE())-YEAR(ngaysinh)
AS tuoi FROM sinhvien WHERE ten=Bnh ORDER BY
gioitinh,tuoi
c kt qu l:

53/143

Thay v ch nh tn ct sau ORDER BY, ta c th ch nh s th t ca ct cn c


sp xp. Cu lnh v d trn c th c vit li nh sau:
SELECT hodem,ten,gioitinh YEAR(GETDATE())-YEAR(ngaysinh)
AS tuoi FROM sinhvien WHERE ten = Bnh ORDER BY 3, 4

Php hp
Php hp c s dng trong trng hp ta cn gp kt qu ca hai hay nhiu truy vn
thnh mt tp kt qu duy nht. SQL cung cp ton t UNION thc hin php hp.
C php nh sau
Cu_lnh_1 UNION [ALL] Cu_lnh_2 [UNION [ALL] Cu_lnh_3]
...
[UNION [ALL] Cu_lnh_n] [ORDER BY ct_sp_xp] [COMPUTE
danh_sch_hm_gp [BY danh_sch_ct]]
Trong
Cu_lnh_1 c dng
SELECTdanh_sch_ct [INTO tn_bng_mi] [FROM
danh_sch_bng|khung_nhn] [WHERE iu_kin] [GROUP BY
danh_sch_ct] [HAVING iu_kin]
v
Cu_lnh_i (i = 2,..,n) c dng
SELECT danh_sch_ct [FROM danh_sch_bng|khung_nhn]
[WHERE iu_kin] [GROUP BY danh_sch_ct] [HAVING
iu_kin]

54/143

Gi s ta c hai bng Table1 v Table2 ln lt nh sau:

cu lnh
SELECT A,B FROM Table1 UNION SELECT D,E FROM table2
Cho kt qu nh sau:

Mc nh, nu trong cc truy vn thnh phn ca php hp xut hin nhng dng d liu
ging nhau th trong kt qu truy vn ch gi li mt dng. Nu mun gi li cc dng
ny, ta phi s dng thm t kho ALL trong truy vn thnh phn.
Cu lnh
SELECT A,B FROM Talbe1 UNION ALL SELECT D,E FROM table2
Cho kt qu nh sau

55/143

Khi s dng ton t UNION thc hin php hp, ta cn ch cc nguyn tc sau:
Danh sch ct trong cc truy vn thnh phn phi c cng s lng.
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 thnh phn phi cng kiu d liu.
Cc ct tng ng trong bn thn tng truy vn thnh phn 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.
Truy vn thnh phn u tin c th c INTO to mi mt bng t kt qu ca chnh
php hp.
Mnh ORDER BY v COMPUTE dng sp xp kt qu truy vn hoc tnh ton
cc gi tr thng k ch c s dng cui cu lnh UNION. Chng khng c s
dng trong bt k truy vn thnh phn no.
Mnh GROUP BY v HAVING ch c th c s dng trong bn thn tng truy
vn thnh phn. Chng khng c php s dng tc ng ln kt qu chung ca
php hp.
Php ton UNION c th c s dng bn trong cu lnh INSERT.
Php ton UNION khng c s dng trong cu lnh CREATE VIEW.

56/143

Php ni
Khi cn thc hin mt yu cu truy vn d liu t hai hay nhiu bng, ta phi s dng
n php ni. Mt cu lnh ni kt hp cc dng d liu trong cc bng khc nhau li
theo mt hoc nhiu iu kin no v hin th chng trong kt qu truy vn.
Xt hai bng sau y:

Bng KHOA

Bng LOP

Gi s ta cn bit m lp v tn lp ca cc lp thuc Khoa Cng ngh Thng tin, ta


phi lm nh sau:
Chn ra dng trong bng KHOA c tn khoa l Khoa Cng ngh Thng tin,
t xc nh c m khoa (MAKHOA) l DHT02 .
Tm kim trong bng LOP nhng dng c gi tr trng MAKHOA l DHT02 (tc l
bng MAKHOA tng ng trong bng KHOA) v a nhng dng ny vo kt qu truy
vn

57/143

Nh vy, thc hin c yu cu truy vn d liu trn, ta phi thc hin php ni
gia hai bng KHOA v LOP vi iu kin ni l MAKHOA ca KHOA bng vi
MAKHOA ca LOP. Cu lnh s c vit nh sau:
SELECT malop,tenlop FROM khoa,lop WHERE khoa.makhoa =
lop.makhoa AND tenkhoa='Khoa Cng ngh Thng tin'
S dng php ni
Php ni l c s thc hin cc yu cu truy vn d liu lin quan n nhiu bng.
Mt cu lnh ni thc hin ly cc dng d liu trong cc bng tham gia truy vn, so
snh gi tr ca cc dng ny trn mt hoc nhiu ct c ch nh trong iu kin ni
v kt hp cc dng tho mn iu kin thnh nhng dng trong kt qu truy vn.
thc hin c mt php ni, cn phi xc nh c nhng yu t sau:
Nhng ct no cn hin th trong kt qu truy vn
Nhng bng no c tham gia vo truy vn.
iu kin thc hin php ni gia cc bng d liu l g
Trong cc yu t k trn, vic xc nh chnh xc iu kin thc hin php ni gia
cc bng ng vai tr quan trng nht. Trong a s cc trng hp, iu kin ca php
ni c xc nh nh vo mi quan h gia cc bng cn phi truy xut d liu. Thng
thng, l iu kin bng nhau gia kho chnh v kho ngoi ca hai bng c mi
58/143

quan h vi nhau. Nh vy, c th a ra mt cu lnh ni thc hin chnh xc yu


cu truy vn d liu i hi phi hiu c mi quan h cng nh ngha ca chng
gia cc bng d liu.
Danh sch chn trong php ni
Mt cu lnh ni cng c bt u vi t kha SELECT. Cc ct c ch nh tn
sau t kho SELECT l cc ct c hin th trong kt qu truy vn. Vic s dng tn
cc ct trong danh sch chn c th l:
Tn ca mt s ct no trong cc bng c tham gia vo truy vn. Nu tn ct trong
cc bng trng tn nhau th tn ct phi c vit di dng
tn_bng.tn_ct
Du sao (*) c s dng trong danh sch chn khi cn hin th tt c cc ct ca cc
bng tham gia truy vn.
Trong trng hp cn hin th tt c cc ct ca mt bng no , ta s dng cch vit:
tn_bng.*
Mnh FROM trong php ni
Sau mnh FROM ca cu lnh ni l danh sch tn cc bng (hay khung nhn) tham
gia vo truy vn. Nu ta s dng du * trong danh sch chn th th t ca
cc bng lit k sau FROM s nh hng n th t cc ct c hin th trong kt qu
truy vn.
Mnh WHERE trong php ni
Khi hai hay nhiu bng c ni vi nhau, ta phi ch nh iu kin thc hin php
ni ngay sau mnh WHERE. iu kin ni c biu din di dng biu thc logic
so snh gi tr d liu gia cc ct ca cc bng tham gia truy vn.
Cc ton t so snh di y c s dng xc nh iu kin ni
T on t ng h a
=

Bng

>

Ln hn

59/143

<

Nh hn

>=

Ln hn hoc bng

<=

Nh hn hoc bng

<>

khc

!>

Khng ln hn

!<

Khng nh hn

Cu lnh di y hin th danh sch cc sinh vin vi cc thng tin: m sinh vin, h
v tn, m lp, tn lp v tn khoa
SELECT masv,hodem,ten,sinhvien.malop,tenlop,tenkhoa FROM
sinhvien,lop,khoa WHERE sinhvien.malop = lop.malop AND
lop.makhoa=khoa.makhoa
rong cu lnh trn, cc bng tham gia vo truy vn bao gm SINHVIEN, LOP v
KHOA. iu kin thc hin php ni gia cc bng bao gm hai iu kin:
sinhvien.malop = lop.malop vlop.malop = khoa.malop
iu kin ni gia cc bng trong cu lnh trn l iu kin bng gia kho ngoi v
kho chnh ca cc bng c mi quan h vi nhau. Hay ni cch khc, iu kin ca
php ni c xc nh da vo mi quan h gia cc bng trong c s d liu.

60/143

Php ni
Cc loi php ni
Php ni bng v php ni t nhin
Mt php ni bng(equi-join) 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.
Cu lnh di y thc hin php ni bng gia hai bng LOP v KHOA
SELECT * FROM lop,khoa WHERE lop.makhoa=khoa.makhoa
Trong kt qu ca cu lnh trn, ct makhoa (m khoa) xut hin hai ln trong kt qu
php ni (ct makhoa ca bng khoa v ct makhoa ca bng lop) v nh vy l khng
cn thit. Ta c th loi b bt i nhng ct trng tn trong kt qu truy vn bng cch
ch nh danh sch ct cn c hin th trong danh sch chn ca cu lnh.
Mt dng c bit ca php ni bng c s dng nhiu l php ni t nhin (naturaljoin). Trong php ni t nhin, iu kin ni gia hai bng chnh l iu kin bng gia
kho ngoi v kho chnh ca hai bng. V trong danh sch chn ca cu lnh ch gi
li mt ct trong hai ct tham gia vo iu kin ca php ni
thc hin php ni t nhin, cu lnh trong v d 2.25 c vit li nh sau
SELECT malop,tenlop,khoa,hedaotao,namnhaphoc,
siso,lop.makhoa,tenkhoa,dienthoai FROM lop,khoa WHERE
lop.makhoa=khoa.makhoa
hoc vit di dng ngn gn hn:
SELECT lop.*,tenkhoa,dienthoai FROM lop,khoa WHERE
lop.makhoa=khoa.makhoa
Php ni vi cc iu kin b sung
Trong cc cu lnh ni, ngoi iu kin ca php ni c ch nh trong mnh
WHERE cn c th ch nh cc iu kin tm kim d liu khc (iu kin chn) .
Thng thng, cc iu kin ny c kt hp vi iu kin ni thng qua ton t AND.

61/143

Cu lnh di y hin th h tn v ngy sinh ca cc sinh vin Khoa Cng ngh Thng
tin
SELECT hodem,ten,ngaysinh FROM sinhvien,lop,khoa WHERE
tenkhoa='Khoa Cng ngh Thng tin' AND sinhvien.malop =
lop.malop AND lop.makhoa = khoa.makhoa
Php t ni v cc b danh
Php t ni l php ni m trong iu kin ni c ch nh lin quan n cc ct
ca cng mt bng. Trong trng hp ny, s c s xut hin tn ca cng mt bng
hiu ln trong mnh FROM v do cc bng cn phi c t b danh.
bit c h tn v ngy sinh ca cc sinh vin c cng ngy sinh vi sinh vin Trn
Th Kim Anh, ta phi thc hin php t ni ngay trn chnh bng sinhvien.
Trong cu lnh ni, bng sinhvien xut hin trong mnh FROM vi b danh l a v b
. Bng sinhvien vi b danh l a s dng chn ra sinh vin c h tn l Trn Th Kim
Anh v bng sinhvien vi b danh l b s dng xc nh cc sinh vin trng ngy sinh
vi sinh vin Trn Th Kim Anh.
Cu lnh c vit nh sau:
SELECT b.hodem,b.ten,b.ngaysinh FROM sinhvien a, sinhvien
b WHERE a.hodem='Trn Th Kim' AND a.ten='Anh' AND
a.ngaysinh=b.ngaysinh AND a.masv<>b.masv
Php ni khng da trn tiu chun bng
Trong php ni ny, iu kin thc hin php ni gia cc bng d liu khng phi
l iu kin so snh bng gia cc ct. Loi php ni ny trong thc t thng t c
s dng.
Php ni ngoi (outer-join)
Trong cc php ni cp trn, ch nhng dng c gi tr trong cc ct c ch
nh tho mn iu kin kt ni mi c hin th trong kt qu truy vn, v c gi
l php ni trong (inner join) Theo mt ngha no , nhng php ni ny loi b thng
tin cha trong nhng dng khng tho mn iu kin ni. Tuy nhin, i khi ta cng
cn gi li nhng thng tin ny bng cch cho php nhng dng khng tho mn iu
kin ni c mt trong kt qu ca php ni. lm iu ny, ta c th s dng php ni
ngoi .

62/143

SQL cung cp cc loi php ni ngoi sau y:


Php ni ngoi tri(k hiu: *=): Php ni ny hin th trong kt qu truy vn tt
c cc dng d liu ca bng nm bn tri trong iu kin ni cho d nhng dng ny
khng tho mn iu kin ca php ni
Php ni ngoi phi>(k hiu: =*): Php ni ny hin th trong kt qu truy vn tt c
cc dng d liu ca bng nm bn phi trong iu kin ni cho
d nhng dng ny khng tho iu kin ca php ni.
Gi s ta c hai bng DONVI v NHANVIEN nh sau:

Cu lnh:
SELECT * FROM nhanvien,donvi WHERE
nhanvien.madv=donvi.madv
c kt qu l:

Nu thc hin php ni ngoi tri gia bng NHANVIEN v bng DONVI:
SELECT * FROM nhanvien,donvi WHERE
nhanvien.madv*=donvi.madv

63/143

kt qu ca cu lnh s l:

V kt qu ca php ni ngoi phi:


select * from nhanvien,donvi where
nhanvien.madv=*donvi.madv
nh sau:

Php ni v cc gi tr NULL
Nu trong cc ct ca cc bng tham gia vo iu kin ca php ni c cc gi tr NULL
th cc gi tr NULL c xem nh l khng bng nhau.
Gi s ta c hai bng TABLE1 v TABLE2 nh sau:
A

b1

NULL b2
4

b3

NULL d1

64/143

d2

Cu lnh:
SELECT * FROM table1, table2 WHERE A *= C
C kt qu l:
A

B C

b1 NULL NULL

NULL b2 NULL NULL


4

b3 4

d2

S dng php ni trong SQL2


phn trc cp n phng php s dng php ni trong v php ni ngoi
trong truy vn SQL. Nh trnh by, iu kin ca php ni trong cu lnh c ch
nh trong mnh WHERE thng qua cc biu thc so snh gia cc bng tham gia
truy vn.
Chun SQL2 (SQL-92) a ra mt cch khc biu din cho php ni, trong cch biu
din ny, iu kin ca php ni khng c ch nh trong mnh WHERE m c
ch nh ngay trong mnh FROM ca cu lnh. Cch s dng php ni ny cho php
ta biu din php ni cng nh iu kin ni c r rng, c bit l trong trng hp
php ni c thc hin trn ba bng tr ln.
Php ni trong
iu kin thc hin php ni trong c ch nh trong mnh FROM theo c php
nh sau:
tn_bng_1 [INNER] JOIN tn_bng_2 ON iu_kin_ni
hin th h tn v ngy sinh ca cc sinh vin lp TinK24, thay v s dng cu lnh:
SELECT hodem,ten,ngaysinh FROM sinhvien,lop WHERE
tenlop='Tin K24' AND sinhvien.malop=lop.malop
ta c th s dng cu lnh nh sau:

65/143

SELECT hodem,ten,ngaysinh FROM sinhvien INNER JOIN lop ON


sinhvien.malop=lop.malop WHERE tenlop='Tin K24'
Php ni ngoi
SQL2 cung cp cc php ni ngoi sau y:
Php ni ngoi tri (LEFT OUTER JOIN)
Php ni ngoi phi (RIGHT OUTER JOIN)
Php ni ngoi y (FULL OUTER JOIN)
Cng tng t nh php ni trong, iu kin ca php ni ngoi cng c ch nh
ngay trong mnh FROM theo c php:
tn_bng_1 LEFT|RIGHT|FULL [OUTER] JOIN tn_bng_2 ON
iu_kin_ni
Gi s ta c hai bng d liu nh sau:
Bng DONVI Bng NHANVIEN

Php ni ngoi tri gia hai bng NHANVIEN v DONVI c biu din bi cu lnh:
SELECT * FROM nhanvien LEFT OUTER JOIN donvi ON
nhanvien.madv=donvi.madv
c kt qu l:

66/143

Cu lnh:
SELECT * FROM nhanvien RIGHT OUTER JOIN donvi ON
nhanvien.madv=donvi.madv
thc hin php ni ngoi phi gia hai bng NHANVIEN v DONVI, v c kt qu l:

Nu php ni ngoi tri (tng ng phi) hin th trong kt qu truy vn c nhng dng
d liu khng tho iu kin ni ca bng bn tri (tng ng phi) trong php ni th
php ni ngoi y hin th trong kt qu truy vn c nhng dng d liu khng tho
iu kin ni ca c hai bng tham gia vo php ni.
Vi hai bng NHANVIEN v DONVI nh trn, cu lnh
SELECT * FROM nhanvien FULL OUTER JOIN donvi ON
nhanvien.madv=donvi.madv
cho kt qu l:

67/143

Thc hin php ni trn nhiu bng


Mt c im ni bt ca SQL2 l cho php biu din php ni trn nhiu bng d liu
mt cch r rng. Th t thc hin php ni gia cc bng c xc nh theo ngha kt
qu ca php ni ny c s dng trong mt php ni khc.
Cu lnh di y hin th h tn v ngy sinh ca cc sinh vin thuc
Khoa Cng ngh Thng Tin
SELECT hodem,ten,ngaysinh FROM (sinhvien INNER JOIN lop ON
sinhvien.malop=lop.malop) INNER JOIN khoa ON
lop.makhoa=khoa.makhoa WHERE tenkhoa=N'Khoa cng ngh
thng tin'
Trong cu lnh trn, th t thc hin php ni gia cc bng c ch nh r rng: php
ni gia hai bng sinhvien v lop c thc hin trc v kt qu ca php ni ny li
tip tc c ni vi bng khoa.

Thng k d liu vi GROUP BY


Ngoi kh nng thc hin cc yu cu truy vn d liu thng thng (chiu, chn,
ni,) nh cp nh cc phn trc, cu lnh SELECT cn cho php thc hin
cc thao tc truy vn v tnh ton thng k trn d liu nh: cho bit tng s tit dy ca
mi gio vin,im trung bnh cc mn hc ca mi sinh vin,
Mnh GROUP BY s dng trong cu lnh SELECT nhm phn hoch cc dng d
liu trong bng thnh cc nhm d liu, v trn mi nhm d liu thc hin tnh ton
cc gi tr thng k nh tnh tng, tnh gi tr trung bnh,...
Cc hm gp c s dng tnh gi tr thng k cho ton bng hoc trn mi nhm
d liu. Chng c th c s dng nh l cc ct trong danh sch chn ca cu lnh

68/143

SELECT hoc xut hin trong mnh HAVING, nhng khng c php xut hin
trong mnh WHERE
SQL cung cp cc hm gp di y:
Hm gp

Chcnng

SUM([ALL | DISTINCT] biu_thc)

Tnh tng cc gi tr.

AVG([ALL | DISTINCT] biu_thc)

Tnh trung bnh ca cc gi tr

COUNT([ALL | DISTINCT] biu_thc) m s cc gi tr trong biu thc.


COUNT(*)

m s cc dng c chn

MAX(biu_thc)

Tnh gi tr ln nht

MIN(biu_thc)

Tnh gi tr nh nht

Trong :
Hm SUM v AVG ch lm vic vi cc biu thc s.
Hm SUM, AVG, COUNT, MIN v MAX b qua cc gi tr NULL khi tnh ton.
Hm COUNT(*) khng b qua cc gi tr NULL.
Mc nh, cc hm gp thc hin tnh ton thng k trn ton b d liu. Trong trng
hp cn loi b bt cc gi tr trng nhau (ch gi li mt gi tr), ta ch nh thm t
kho DISTINCT trc biu thc l i s ca hm.
Thng k trn ton b d liu
Khi cn tnh ton gi tr thng k trn ton b d liu, ta s dng cc hm gp trong
danh sch chn ca cu lnh SELECT. Trong trng hp ny, trong danh sch chn
khng c s dng bt k mt tn ct hay biu thc no ngoi cc hm gp.
thng k trung bnh im ln 1 ca tt c cc mn hc, ta s dng cu lnh nh sau:
SELECT AVG(diemlan1) FROM diemthi
cn cu lnh di y cho bit tui ln nht, tui nh nht v tui trung bnh ca tt
c cc sinh vin sinh ti Hu:

69/143

SELECT MAX(YEAR(GETDATE())-YEAR(ngaysinh)),
MIN(YEAR(GETDATE())-YEAR(ngaysinh)), AVG(YEAR(GETDATE())YEAR(ngaysinh)) FROM sinhvien WHERE noisinh=Hu
Thng k d liu trn cc nhm
Trong trng hp cn thc hin tnh ton cc gi tr thng k trn cc nhm d liu, ta
s dng mnh GROUP BY phn hoch d liu vo trong cc nhm. Cc hm gp
c s dng s thc hin thao tc tnh ton trn mi nhm v cho bit gi tr thng k
theo cc nhm d liu.
Cu lnh di y cho bit s s (s lng sinh vin) ca mi lp
SELECT lop.malop,tenlop,COUNT(masv) AS siso FROM
lop,sinhvien WHERE lop.malop=sinhvien.malop GROUP BY
lop.malop,tenlop
v c kt qu l

cn cu lnh:
SELECT sinhvien.masv,hodem,ten,
sum(diemlan1*sodvht)/sum(sodvht) FROM
sinhvien,diemthi,monhoc WHERE sinhvien.masv=diemthi.masv
AND diemthi.mamonhoc=monhoc.mamonhoc GROUP BY
sinhvien.masv,hodem,ten
cho bit trung bnh im thi ln 1 cc mn hc ca cc sinh vin

70/143

Lu : Trong trng hp danh sch chn ca cu lnh SELECT c c cc hm gp


v nhng biu thc khng phi l hm gp th nhng biu thc ny phi c mt y
trong mnh GROUP BY, nu khng cu lnh s khng hp l.
Di y l mt cu lnh sai
SELECT lop.malop,tenlop,COUNT(masv) FROM lop,sinhvien
WHERE lop.malop=sinhvien.malop GROUP BY lop.malop
do thiu trng TENLOP sau mnh GROUP BY.
Ch nh iu kin i vi hm gp
Mnh HAVING c s dng nhm ch nh iu kin i vi cc gi tr thng k
c sn sinh t cc hm gp tng t nh cch thc mnh WHERE thit lp cc
iu kin cho cu lnh SELECT. Mnh HAVING thng khng thc s c ngha
nu nh khng s dng kt hp vi mnh GROUP BY. Mt im khc bit gia
HAVING v WHERE l trong iu kin ca WHERE khng c c cc hm gp trong
khi HAVING li cho php s dng cc hm gp trong iu kin ca mnh.
bit trung bnh im thi ln 1 ca cc sinh vin c im trung bnh ln hn hoc
bng 5, ta s dng cu lnh nh sau:
SELECT sinhvien.masv,hodem,ten,
SUM(diemlan1*sodvht)/sum(sodvht) FROM
sinhvien,diemthi,monhoc WHERE sinhvien.masv=diemthi.masv
AND diemthi.mamonhoc=monhoc.mamonhoc GROUP BY
sinhvien.masv,hodem,ten HAVING
sum(diemlan1*sodvht)/sum(sodvht)>=5

Thng k d liu vi COMPUTE


Khi thc hin thao tc thng k vi GROUP BY, kt qu thng k (c sn sinh bi
hm gp) xut hin di mt ct trong kt qu truy vn. Thng qua dng truy vn ny,
ta bit c gi tr thng k trn mi nhm d liu nhng khng bit c chi tit d
liu trn mi nhm
Cu lnh:
SELECT khoa.makhoa,tenkhoa,COUNT(malop) AS solop FROM
khoa,lop WHERE khoa.makhoa=lop.makhoa GROUP BY
khoa.makhoa,tenkhoa

71/143

cho ta bit c s lng lp ca mi khoa vi kt qu nh sau:

nhng c th mi khoa bao gm nhng lp no th chng ta khng th bit c trong


kt qu truy vn trn.
Mnh COMPUTE s dng kt hp vi cc hm gp (dng) v ORDER BY trong
cu lnh SELECT cng cho chng ta cc kt qu thng k (ca hm gp) trn cc nhm
d liu. im khc bit gia COMPUTE v GROUP BY l kt qu thng k xut hin
di dng mt dng trong kt qu truy vn v cn cho chng ta c chi tit v d liu
trong mi nhm. Nh vy, cu lnh SELECT vi COMPUTE cho chng ta c chi tit
d liu v gi tr thng k trn mi nhm.
Mnh COMPUTE BY c c php nh sau:
COMPUTE hm_gp(tn_ct) [,, hm_gp (tn_ct)] BY
danh_sch_ct
Trong :
Cc hm gp c th s dng bao gm SUM, AVG, MIN, MAX v COUNT.
danh_sch_ct: l danh sch ct s dng phn nhm d liu
Cu lnh di y cho bit danh sch cc lp ca mi khoa v tng s cc lp ca mi
khoa:
SELECT khoa.makhoa,tenkhoa,malop,tenlop FROM khoa,lop
WHERE khoa.makhoa=lop.makhoa ORDER BY khoa.makhoa COMPUTE
COUNT(malop) BY khoa.makhoa
kt qu ca cu lnh nh sau:
MAKHOA TENKHOA

MALOP TENLOP

DHT01

Khoa Ton c Tin hc C24101 Ton K24

DHT01

Khoa Ton c Tin hc C25101 Ton K25

72/143

DHT01

Khoa Ton c Tin hc C26101 Ton K26

CNT : 3

MAKHOA TENKHOA

MALOP TENLOP

DHT02

Khoa Cng ngh thng tin C26102 Tin K26

DHT02

Khoa Cng ngh thng tin C25102 Tin K25

DHT02

Khoa Cng ngh thng tin C24102 Tin K24

CNT : 3

MAKHOA TENKHOA MALOP TENLOP


DHT03

Khoa Vt l C24103 L K24

DHT03

Khoa Vt l C25103 L K25

CNT : 2

MAKHOA TENKHOA

MALOP TENLOP

DHT05

Khoa Sinh hc C25301 Sinh K25

DHT05

Khoa Sinh hc C24103 Sinh K24

CNT : 2

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
Hm COUNT(*) khng c s dng trong COMPUTE.

73/143

Sau COMPUTE c th s dng nhiu hm gp, khi cc hm phi phn cch nhau
bi du phy.
Cc ct s dng trong cc hm gp xut hin trong mnh COMPUTE phi c mt
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 vi hm gp F trn ct X theo mt trong cc cch di
y l hp l:
V cc cch s dng di y l sai:
COMPUTE F(X) BY b, c COMPUTE F(X) BY a, c COMPUTE F(X) BY
c
Phi s dng mt tn ct hoc mt biu thc trong mnh ORDER BY, vic sp xp
khng c thc hin da trn tiu ct.
Trong trng hp s dng COMPUTE m khng c BY th c th khng cn s dng
ORDER BY, khi phm vi tnh ton ca hm gp l trn ton b d liu.
Cu lnh di y hin th danh sch cc lp v tng s lp hin c:
SELECT malop,tenlop,hedaotao FROM lop ORDER BY makhoa
COMPUTE COUNT(malop)
kt qu ca cu lnh nh sau:
MALOP TENLOP HEDAOTAO
C24101 Ton K24 Chnh quy
C25101 Ton K25 Chnh quy

74/143

C26101 Ton K26 Chnh quy


C26102 Tin K26

Chnh quy

C25102 Tin K25

Chnh quy

C24102 Tin K24

Chnh quy

C24103 L K24

Chnh quy

C25103 L K25

Chnh quy

C25301 Sinh K25 Chnh quy


C24301 Sinh K24 Chnh quy
CNT10

C th thc hin vic tnh ton hm gp dng trn cc nhm lng nhau bng
cch s dng nhiu mnh COMPUTE BY trong cng mt cu lnh SELECT
Cu lnh:
SELECT khoa.makhoa,tenkhoa,malop,tenlop FROM khoa,lop
WHERE khoa.makhoa=lop.makhoa ORDER BY khoa.makhoa COMPUTE
COUNT(malop) BY khoa.makhoa COMPUTE COUNT(malop)
Cho bit danh sch cc lp ca mi khoa, tng s lp theo mi khoa v tng s lp hin
c vi kt qu nh sau:
MAKHOA TENKHOA

MALOP TENLOP

DHT01

Khoa Ton c Tin hc C24101 Ton K24

DHT01

Khoa Ton c Tin hc C25101 Ton K25

DHT01

Khoa Ton c Tin hc C26101 Ton K26


CNT3

MAKHOA TENKHOA

MALOP TENLOP

DHT02

Khoa Cng ngh thng tin C26102 Tin K26

DHT02

Khoa Cng ngh thng tin C25102 Tin K25

75/143

DHT02

Khoa Cng ngh thng tin C24102 Tin K24


CNT3

MAKHOA TENKHOA MALOP TENLOP


DHT03

Khoa Vt l C24103 L K24

DHT03

Khoa Vt l C25103 L K25


CNT2

MAKHOA TENKHOA

MALOP TENLOP

DHT05

Khoa Sinh hc C25301 Sinh K25

DHT05

Khoa Sinh hc C24103 Sinh K24


CNT2

Truy vn con (Subquery)


Truy vn con l mt cu lnh SELECT c lng vo bn trong mt cu lnh SELECT,
INSERT, UPDATE, DELETE hoc bn trong mt truy vn con khc. Loi truy vn ny
c s dng biu din cho nhng truy vn trong iu kin truy vn d liu cn
phi s dng n kt qu ca mt truy vn khc.
C php ca truy vn con nh sau:
(SELECT [ALL | DISTINCT] danh_sch_chn FROMdanh_sch_bng
[WHEREiu_kin] [GROUP BYdanh_sch_ct] [HAVING
iu_kin])
Khi s dng truy vn con cn lu mt s quy tc sau:
Mt truy vn con phi c vit trong cp du ngoc. Trong hu ht cc trng hp,
mt truy vn con thng phi c kt qu l mt ct (tc l ch c duy nht mt ct trong
danh sch chn).
Mnh COMPUTE v ORDER BY khng c php s dng trong truy vn con.
Cc tn ct xut hin trong truy vn con c th l cc ct ca cc bng trong truy vn
ngoi.

76/143

Mt truy vn con thng c s dng lm iu kin trong mnh WHERE hoc


HAVING ca mt truy vn khc.
Nu truy vn con tr v ng mt gi tr, n c th s dng nh l mt thnh phn bn
trong mt biu thc (chng hn xut hin trong mt php so snh bng)
Php so snh i vi vi kt qu truy vn con
Kt qu ca truy vn con c th c s dng thc hin php so snh s hc vi
mt biu thc ca truy vn cha. Trong trng hp ny, truy vn con c s dng di
dng:
WHERE biu_thc php_ton_s_hc [ANY|ALL] (truy_vn_con)
Trong php ton s hc c th s dng bao gm: =, <>, >, <, >=, <=; V truy vn
con phi c kt qu bao gm ng mt ct.
Cu lnh di y cho bit danh sch cc mn hc c s n v hc trnh ln hn hoc
bng s n v hc trnh ca mn hc c m l TI-001
SELECT * FROM monhoc WHERE sodvht>=(SELECT sodvht FROM
monhoc WHERE mamonhoc='TI-001')
Nu truy vn con tr v nhiu hn mt gi tr, vic s dng php so snh nh trn s
khng hp l. Trong trng hp ny, sau php ton so snh phi s dng thm lng t
ALL hoc ANY. Lng t ALL c s dng khi cn so snh gi tr ca biu thc vi
tt c cc gi tr tr v trong kt qu ca truy vn con; ngc lai, php so snh vi lng
t ANY c kt qu ng khi ch cn mt gi tr bt k no trong kt qu ca truy vn
con tho mn iu kin.
Cu lnh di y cho bit h tn ca nhng sinh vin lp TinK25
SELECT hodem,ten FROM sinhvien JOIN lop ON
sinhvien.malop=lop.malop WHERE tenlop='Tin K25' AND
ngaysinh<ALL(SELECT ngaysinh FROM sinhvien JOIN lop ON
sinhvien.malop=lop.malop WHERE lop.tenlop='Ton K25')
v cu lnh:
SELECT hodem,ten FROM sinhvien JOIN lop on
sinhvien.malop=lop.malop WHERE tenlop='Tin K25' AND
year(ngaysinh)= ANY(SELECT year(ngaysinh) FROM sinhvien

77/143

JOIN lop ON sinhvien.malop=lop.malop WHERE


lop.tenlop='Ton K25')
cho bit h tn ca nhng sinh vin lp TinK25.
S dng truy vn con vi ton t IN
Khi cn thc hin php kim tra gi tr ca mt biu thc c xut hin (khng xut hin)
trong tp cc gi tr ca truy vn con hay khng, ta c th s dng ton t IN(NOT IN)
nh sau:
WHERE biu_thc [NOT] IN (truy_vn_con)
hin th h tn ca nhng sinh vin lp Tin K25 c nm sinh bng vi nm sinh ca
mt sinh vin no ca lp Ton K25, thay v s dng cu lnh nh v d trn, ta c
th s dng cu lnh nh sau:
SELECT hodem,ten FROM sinhvien JOIN lop on
sinhvien.malop=lop.malop WHERE tenlop='Tin K25' AND
year(ngaysinh)IN(SELECT year(ngaysinh) FROM sinhvien JOIN
lop ON sinhvien.malop=lop.malop WHERE lop.tenlop='Ton
K25')
S dng lng t EXISTS vi truy vn con
Lng t EXISTS c s dng kt hp vi truy vn con di dng:
WHERE [NOT] EXISTS (truy_vn_con)
kim tra xem mt truy vn con c tr v dng kt qu no hay khng. Lng t
EXISTS (tng ng NOT EXISTS) tr v gi tr True (tng ng False) nu kt qu
ca truy vn con c t nht mt dng (tng ng khng c dng no). iu khc bit
ca vic s dng EXISTS vi hai cch nu trn l trong danh sch chn ca truy
vn con c th c nhiu hn hai ct.
Cu lnh di y cho bit h tn ca nhng sinh vin hin cha c im thi ca bt k
mt mn hc no SELECT hodem,ten FROM sinhvien
WHERE NOT EXISTS(SELECT masv FROM diemthi WHERE
diemthi.masv=sinhvien.masv)

78/143

S dng truy vn con vi mnh HAVING


Mt truy vn con c th c s dng trong mnh HAVING ca mt truy vn khc.
Trong trng hp ny, kt qu ca truy vn con c s dng to nn iu kin i
vi cc hm gp.
Cu lnh di y cho bit m, tn v trung bnh im ln 1 ca cc mn hc c trung
bnh ln hn trung bnh im ln 1 ca tt c cc mn hc
SELECT diemthi.mamonhoc,tenmonhoc,AVG(diemlan1) FROM
diemthi,monhoc WHERE diemthi.mamonhoc=monhoc.mamonhoc
GROUP BY diemthi.mamonhoc,tenmonhoc HAVING AVG(diemlan1)>
(SELECT AVG(diemlan1) FROM diemthi)

B sung, cp nht v xo d liu


Cc cu lnh thao tc d liu trong SQL khng nhng ch s dng truy vn d liu
m cn thay i v cp nht d liu trong c s d liu. So vi cu lnh SELECT,
vic s dng cc cu lnh b sung, cp nht hay xo d liu n gin hn nhiu.
Trong phn cn li ca chng ny s cp n 3 cu lnh:
Lnh INSERT
Lnh UPDATE
Lnh DELETE
B sung d liu
D liu trong cc bng c th hin di dng cc dng (bn ghi). b sung thm
cc dng d liu vo mt bng, ta s dng cu lnh INSERT. Hu ht cc h qun tr
CSDL da trn SQL cung cp cc cch di y thc hin thao tc b sung d liu
cho bng:
B sung tng dng d liu vi mi cu lnh INSERT. y l cc s dng thng gp
nht trong giao dch SQL.
B sung nhiu dng d liu bng cch truy xut d liu t cc bng d liu khc.
B sung tng dng d liu vi lnh INSERT
b sung mt dng d liu mi vo bng, ta s dng cu lnh INSERT vi c php
nh sau:

79/143

INSERT INTO tn_bng[(danh_sch_ct)] VALUES(danh_sch_tr)


Trong cu lnh INSERT, danh sch ct ngay sau tn bng khng cn thit phi ch nh
nu gi tr cc trng ca bn ghi mi c ch nh y trong danh sch tr. Trong
trng hp ny, th t cc gi tr trong danh sch tr phi bng vi s lng cc trng
ca bng cn b sung d liu cng nh phi tun theo ng th t ca cc trng nh
khi bng c nh ngha.
Cu lnh di y b sung thm mt dng d liu vo bng KHOA
INSERT INTO khoa VALUES(DHT10,Khoa Lut,054821135)
Trong trng hp ch nhp gi tr cho mt s ct trong bng, ta phi ch nh danh sch
cc ct cn nhp d liu ngay sau tn bng. Khi , cc ct khng c nhp d liu s
nhn gi tr mc nh (nu c) hoc nhn gi tr NULL (nu ct cho php chp nhn gi
tr NULL). Nu mt ct khng c gi tr mc nh v khng chp nhn gi tr NULL m
khng uc nhp d liu, cu lnh s b li.
Cu lnh di y b sung mt bn ghi mi cho bng SINHVIEN
INSERT INTO sinhvien(masv,hodem,ten,gioitinh,malop)
VALUES(0241020008,Nguyn Cng,Chnh,1,C24102)
cu lnh trn cn c th c vit nh sau:
INSERT INTO sinhvien VALUES(0241020008,Nguyn
Cng,Chnh, NULL,1,NULL,C24102)
B sung nhiu dng d liu t bng khc
Mt cch s dng khc ca cu lnh INSERT c s dng b sung nhiu dng d
liu vo mt bng, cc dng d liu ny c ly t mt bng khc thng qua cu lnh
SELECT. cch ny, cc gi tr d liu c b sung vo bng khng c ch nh
tng minh m thay vo l mt cu lnh SELECT truy vn d liu t bng khc.
C php cu lnh INSERT c dng nh sau:
INSERTINTO tn_bng[(danh_sch_ct)] cu_lnh_SELECT
Gi s ta c bng LUUSINHVIEN bao gm cc trng HODEM, TEN, NGAYSINH.
Cu lnh di y b sung vo bng LUUSINHVIEN cc dng d liu c c t cu
truy vn SELECT:

80/143

INSERT INTO luusinhvien SELECThodem,ten,ngaysinh FROM


sinhvien WHERE noisinh like %H Ni%
Khi b sung d liu theo cch ny cn lu mt s im sau:
Kt qu ca cu lnh SELECT phi c s ct bng vi s ct c ch nh trong bng
ch v phi tng thch v kiu d liu.
Trong cu lnh SELECT c s dng mnh COMPUTE ... BY
Cp nht d liu
Cu lnh UPDATE trong SQL c s dng cp nht d liu trong cc bng.
Cu lnh ny c c php nh sau:
UPDATE tn_bng SETtn_ct = biu_thc [, ..., tn_ct_k =
biu_thc_k] [FROMdanh_sch_bng] [WHERE iu_kin]
Sau UPDATE l tn ca bng cn cp nht d liu. Mt cu lnh UPDATE c th cp
nht d liu cho nhiu ct bng cch ch nh cc danh sch tn ct v biu thc tng
ng sau t kho SET. Mnh WHERE trong cu lnh UPDATE thng c s dng
ch nh cc dng d liu chu tc ng ca cu lnh (nu khng ch nh, phm vi
tc ng ca cu lnh c hiu l ton b cc dng trong bng)
Cu lnh di y cp nht li s n v hc trnh ca cc mn hc c s n v hc
trnh nh hn 2
UPDATE monhoc
SET sodvht = 3
WHERE sodvht = 2
S dng cu trc CASE trong cu lnh UPDATE
Cu trc CASE c th c s dng trong biu thc khi cn phi a ra cc quyt nh
khc nhau v gi tr ca biu thc
Gi s ta c bng NHATKYPHONG sau y

81/143

Sau khi thc hin cu lnh:


UPDATE nhatkyphong SET tienphong=songay*CASE WHEN
loaiphong='A' THEN 100 WHEN loaiphong='B' THEN 70 ELSE 50
END
D liu trong bng s l

iu kin cp nht d liu lin quan n nhiu bng


Mnh FROM trong cu lnh UPDATE c s dng khi cn ch nh cc iu kin
lin quan n cc bng khc vi bng cn cp nht d liu. Trong trung hp ny, trong
mnh WHERE thng c iu kin ni gia cc bng.
Gi s ta c hai bng MATHANG v NHATKYBANHANG nh sau:

Cu lnh di y s cp nht gi tr trng THANHTIEN ca bng


NHATKYBANHANG theo cng thc THANHTIEN = SOLUONG GIA
UPDATE nhatkybanhang SET thanhtien = soluong*gia FROM
mathang WHERE nhatkybanhang.mahang = mathang.mahang

82/143

Cu lnh UPDATE vi truy vn con


Tng t nh trong cu lnh SELECT, truy vn con c th c s dng trong mnh
WHERE ca cu lnh UPDATE nhm ch nh iu kin i vi cc dng d liu cn
cp nht d liu.
Cu lnh trn c th c vit nh sau:
UPDATE nhatkybanhang SETthanhtien = soluong*gia FROM
mathang WHERE mathang.mahang =(SELECT mathang.mahang FROM
mathang WHERE mathang.mahang=nhatkybanhang.mahang)
Xo d liu
xo d liu trong mt bng, ta s dng cu lnh DELETE . C php ca cu lnh ny
nh sau:
DELETE FROM tn_bng [FROM danh_sch_bng] [WHERE
iu_kin]
Trong cu lnh ny, tn ca bng cn xo d liu c ch nh sau DELETE FROM.
Mnh WHERE trong cu lnh c s dng ch nh iu kin i vi cc dng
d liu cn xo. Nu cu lnh DELETE khng c mnh WHERE th ton b cc
dng d liu trong bng u b xo.
Cu lnh di y xo khi bng SINHVIEN nhng sinh vin sinh ti Hu
DELETE FROM sinhvien WHERE noisinh LIKE %Hu%
Xo d liu khi iu kin lin quan n nhiu bng
Nu iu kin trong cu lnh DELETE lin quan n cc bng khng phi l bng cn
xa d liu, ta phi s dng thm mnh FROM v sau l danh sch tn cc bng
. Trong trng hp ny, trong mnh WHERE ta ch nh thm iu kin ni gia
cc bng
Cu lnh di y xo ra khi bng SINHVIEN nhng sinh vin lp Tin K24
DELETE FROM sinhvien FROM lop WHERE
lop.malop=sinhvien.malop AND tenlop='Tin K24'

83/143

S dng truy vn con trong cu lnh DELETE


Mt cu lnh SELECT c th c lng vo trong mnh WHERE trong cu lnh
DELETE lm iu kin cho cu lnh tng t nh cu lnh UPDATE.
Cu lnh di y xo khi bng LOP nhng lp khng c sinh vin no hc
DELETE FROM lop WHERE malop NOT IN (SELECT DISTINCT malop
FROM sinhvien)
Xo ton b d liu trong bng
Cu lnh DELETE khng ch nh iu kin i vi cc dng d liu cn xo trong
mnh WHERE s xo ton b d liu trong bng. Thay v s dng cu lnh DELETE
trong trng hp ny, ta c th s dng cu lnh TRUNCATE c c php nh sau:
TRUNCATE TABLE tn_bng
Cu lnh sau xo ton b d liu trong bng diemthi:
DELETE FROM diemthi c tc dng tng t vi cu lnh
TRUNCATE TABLE diemthi

Bi tp chng 3
C s d liu di y c s dng qun l cng tc giao hng trong mt cng ty
kinh doanh. Cc bng trong c s d liu ny c biu din trong s di y:

84/143

Trong :
Bng NHACUNGCAP lu tr d liu v cc i tc cung cp hng cho cng ty.
Bng MATHANG lu tr d liu v cc mt hng hin c trong cng ty.
Bng LOAIHANG phn loi cc mt hng hin c.
Bng NHANVIEN c d liu l thng tin v cc nhn vin lm vic trong cng ty.
Bng KHACHHANG c s dng lu gi thng tin v cc khch hng ca cng
ty.
Khch hng t hng cho cng ty thng qua cc n t hng. Thng tin chung v cc
n t hng c lu tr trong bng DONDATHANG (Mi mt n t hng phi do
mt nhn vin ca cng ty lp v do bng ny c quan h vi bng NHANVIEN)

85/143

Thng tin chi tit ca cc n t hng (t mua mt hng g, s lng, gi c,...)


c lu tr trong bng CHITIETDATHANG. Bng ny c quan h vi hai bng
DONDATHANG v MATHANG.
S dng cu lnh SELECT vit cc yu cu truy vn d liu sau y
2. 1 - Cho bit danh sch cc i tc cung cp hng cho cng ty.
2. 2 - M hng, tn hng v s lng ca cc mt hng hin c trong cng ty.
2. 3 - H tn v a ch v nm bt u lm vic ca cc nhn vin trong cng ty.
2. 4 - a ch v in thoi ca nh cung cp c tn giao dch VINAMILK l g ?
2. 5 - Cho bit m v tn ca cc mt hng c gi ln hn 100000 v s lng hin c t
hn 50.
2. 6 - Cho bit mi mt hng trong cng ty do ai cung cp.
2. 7 - Cng ty Vit Tin cung cp nhng mt hng no?
2. 20 - Tng s tin m khch hng phi tr cho mi n t hng l bao nhiu?
2. 21 - Trong nm 2003, nhng mt hng no ch c t mua ng mt ln.
2. 22 - Hy cho bit mi mt khch hng phi b ra bao nhiu tin
2. 8 - Loi hng thcphmdo nhng cng ty no cung cp v a ch ca cc cng ty
l g?
2. 9 - Nhng khch hng no (tn giao dch) t mua mt hng SahpXYZ ca cng
ty?
2. 10 - n t hng s 1 do ai t v do nhn vin no lp, thi gian v a im giao
hng l u?
2. 11 - Hy cho bit s tin lng m cng ty phi tr cho mi nhn vin l bao nhiu
(lng = lng c bn + ph cp).
2. 12 - Trong n t hng s 3 t mua nhng mt hng no v s tin m khch
hng phi tr cho mi mt hng l bao nihiu (s tin phi tr c tnh theo cng thc
SOLUONGGIABANSOLUONGGIABANMUCGIAMGIA/100)

86/143

2. 13 - Hy cho bit cnhng khch hng no li chnh l i tc cung cp hng ca


cng ty (tc l c cng tn giao dch).
2. 14 - Trong cng ty c nhng nhn vin no c cng ngy sinh?
2. 15 - Nhng n t hng no yu cu giao hng ngay ti cng ty t hng v nhng
n l ca cng ty no?
2. 16 - Cho bit tn cng ty, tn giao dch, a ch v in thoi ca cc khch hng v
cc nh cung cp hng cho cng ty
2. 17 - Nhng mt hng no cha tng c khch hng t mua?
2. 18 - Nhng nhn vin no ca cng ty cha tng lp bt k mt ho n t hng
no?
2. 19 - Nhng nhn vin no ca cng ty c lng c bn cao nh t mua hng ca
cng ty?
2. 23 - Mi mt nhn vin ca cng ty lp bao nhiu n t hng (nu nhn vin
cha h lp mt ho n no th cho kt qu l 0)
2.24 - Cho bit tng s tin hng m ca hng thu c trong mi thng ca nm 2003
(thi c gian tnh theo ngy t hng).
2.25 - Hy cho bit tng s tin li m cng ty thu c t mi mt hng trong nm
2003.
2.26 - Hy cho bit tng s lng hng ca mi mt hng m cng ty c (tng s
lng hng hin c v bn).
2.27 - Nhn vin no ca cng ty bn c s lng hng nhiu nht v s lng hng
bn c ca nhng nhn vin ny l bao nhiu?
2. 28 - n t hng no c s lng ng c t mua t nht?
2. 29 - S tin nhiu nht m mi khch hng tng b ra t hng trong cc n
t hng l bao nhiu?
2. 30 - Mi mt n t hng t mua nhng mt hng no v tng s tin m mi n
t hng phi tr l bao nhiu?

87/143

2.31 - Hy cho bit mi mt loi hng bao gm nhng mt hng no, tng s lng
hng ca mi loi v tng s lng ca tt c cc mt hng hin c trong cng ty l bao
nhiu?
2. 32 - Thng k xem trong nm 2003, mi mt mt hng trong mi thng v trong c
nm bn c vi s lng bao nhiu
Yucu:Kt qu c hin th di dng bng, hai ct ct u l m hng v tn hng,
cc ct cn li tng ng vi cc thng t 1 n 12 v c nm. Nh vy mi dng trong
kt qu cho bit s l ng hng bn c mi thng v trong c nm ca mi mt hng.
S dng cu lnh UPDATE thc hin cc yu cu sau
2. 33 - Cp nht li gi tr trng NGAYCHUYENHANG ca nhng bn ghi c
NGAYCHUYENHANG cha xc nh (NULL) trong bng DONDATHANG bng vi
gi tr ca trng NGAYDATHANG.
2. 34 - Tng s lng hng ca nhng mt hng do cng ty VINAMILK cung cp ln
gp i.
2. 35 - Cp nht gi tr ca trng NOIGIAOHANG trong bng DONDATHANG bng
a ch ca khch hng i vi nhng n t hng cha xc nh c ni giao hng
(gi tr trng NOIGIAOHANG bng NULL).
2. 36 - Cp nht li d liu trong bng KHACHHANG sao cho nu tn cng ty v tn
giao dch ca khch hng trng vi tn cng ty v tn giao dch ca mt nh cung cp
no th a ch, in thoi, fax v e-mail phi ging nhau.
2. 37 - Tng lng ln gp ri cho nhng nhn vin bn c s lng hng nhiu hn
100 trong nm 2003.
2. 38 - Tng ph cp ln bng 50% lng cho nhng nhn vin bn c hng nhiu
nht.
2. 39 - Gim 25%lng ca nh ng nhn v i n n n t hng no.n trong nm 2003
khng lp c bt k
2. 40 - Gi s trong bng DONDATHANG c thm trng SOTIEN cho bit s tin m
khch hng phi tr trong mi n t hng. Hy tnh gi tr cho trng ny. Thc hin
cc yu cu di y bng cu lnh DELETE.
2. 41 - Xo khi bng NHANVIEN nhng nhn vin lm vic trong cng ty qu 40
nm.

88/143

2. 42 - Xo nhng n t hng trc nm 2000 ra khi c s d liu.


2. 43 - Xo khi bng LOAIHANG nhng loi hng hin khng c mt hng.
2. 44 - Xo khi bng KHACHHANG nhng khch hng hin khng c bt k n mt
hng no cho cng ty.
2. 4 - Xo khi bng MATHANG nhng mt hng c s lng bng 0 v khng c
t mua trong bt k n hng no

89/143

Lm vic vi View ( khung nhn )


Lm vic vi View
Khi nim view (Khung nhn)
Cc bng trong c s d liu ng vai tr l cc i tng t chc v lu tr d liu.
Nh vy, ta c th quan st c d liu trong c s d liu bng cch thc hin cc
truy vn trn bng d liu. Ngoi ra, SQL cn cho php chng ta quan st c d liu
thng qua vic nh ngha cc khung nhn.
Mt khung nhn (view) c th c xem nh l mt bng o trong c s d liu c ni
dung c nh ngha thng qua mt truy vn (cu lnh SELECT). Nh vy, mt khung
nhn trng ging nh mt bng vi mt tn khung nhn v l mt tp bao gm cc dng
v cc ct. im khc bit gia khung nhn v bng l khung nhn khng c xem l
mt cu trc lu tr d liu tn ti trong c s d liu. Thc cht d liu quan st c
trong khung nhn c ly t cc bng thng qua cu lnh truy vn d liu.
Hnh di y minh ho cho ta thy khung nhn c tn DSSV c nh ngha thng
qua cu lnh SELECT truy vn d liu trn hai bng SINHVIEN v LOP:
SELECT masv,hodem,ten, DATEDIFF(YY,ngaysinh,GETDATE()) AS
tuoi,tenlop FROM sinhvien,lop WHERE
sinhvien.malop=lop.malop
Khi khung nhn DSSV c nh ngha, ta c th s dng cu lnh SELECT truy
vn d liu t khung nhn nh i vi cc bng. Khi trong cu truy vn xut hin khung
nhn, h qun tr c s d liu s da vo inh ngha ca khung nhn chuyn yu cu
truy vn d liu lin quan n khung nhn thnh yu cu tng t trn cc bng c s
v vic truy vn d liu c thc hin bi yu cu tng ng trn cc bng.
Vic s dng khung nhn trong c s d liu em li cc li ch sau y:
Bo mt d liu :Ngi s dng c cp pht quyn trn cc khung nhn vi nhng
phn d liu m ngi s dng c php. iu ny hn ch c phn no vic ngi
s dng truy cp trc tip d liu.
n gin ho cc thao tc truy vn d liu:Mt khung nhn ng vai tr nh l mt
i tng tp hp d liu t nhiu bng khc nhau vo trong mt bng. Nh vo ,
ngi s dng c th thc hin cc yu cu truy vn d liu mt cch n gin t khung
nhn thay v phi a ra nhng cu truy vn phc tp.

90/143

Tp trung v n gin ho d liu :Thng qua khung nhn ta c th cung cp cho


ngi s dng nhng cu trc n gin, d hiu hn v d liu trong c s d liu ng
thi gip cho ngi s dng tp trung hn trn nhng phn d liu cn thit.
c lp d : Mt khung nhn c th cho php ngi s dng c c ci nhn v d
liu c lp vi cu trc ca cc bng trong c s d liu cho d cc bng c s c b
thay i phn no v cu trc.

Khung nhn DSSV vi d liu c ly t bng SINHVIEN v LOP

Tuy nhin, vic s dng khung nhn c ng tn ti mt s nhc im sau:


Do h qun tr c s d liu thc hin vic chuyn i cc truy vn trn khung nhn
thnh nhng truy vn trn cc bng c s nn nu mt khung nhn c nh ngha bi
mt truy vn phc tp th s dn n chi ph v mt thi gian khi thc hin truy vn lin
quan n khung nhn s ln.
Mc d thng qua khung nhn c th thc hin c thao tc b sung v cp nht d
liu cho bng c s nhng ch hn ch i vi nhng khung nhn n gin. i vi
nhng khung nhn phc tp th thng khng thc hin c , hay ni cch khc l d
liu trong khung nhn l ch c.
91/143

To khung nhn
Cu lnh CREATE VIEW c s dng to ra khung nhn v c c php nh sau:
CREATE VIEW tn_khung_nhn[(danh_sch_tn_ct)] AS
cu_lnh_SELECT
Cu lnh di y to khung nhn c tn DSSV t cu lnh SELECT truy vn d liu t
hai bng SINHVIEN v LOP
CREATE VIEW dssv AS SELECT masv,hodem,ten,
DATEDIFF(YY,ngaysinh,GETDATE()) AS tuoi,tenlop FROM
sinhvien,lop WHERE sinhvien.malop=lop.malop
v nu thc hin cu lnh:
SELECT * FROM dssv
ta c c kt qu nh sau:

Nu trong cu lnh CREATE VIEW, ta khng ch nh danh sch cc tn ctcho khung


nhn, tn cc ct trong khung nhn s chnh l tiu cc ct trong kt qu ca cu lnh
SELECT. Trong trng hp tn cc ct ca khung nhn c ch nh, chng phi c
cng s lng vi s lng ct trong kt qu ca cu truy vn.
Cu lnh di y to khung nhn t cu truy vn tng t nh v d trn nhng c t
tn cho cc ct trong khung nhn:

92/143

CREATE VIEW dssv(ma,ho,ten,tuoi,lop) AS SELECT


masv,hodem,ten, DATEDIFF(YY,ngaysinh,GETDATE()),tenlop
FROM sinhvien,lop WHERE sinhvien.malop=lop.malop
v cu lnh
SELECT * FROM dssv
trong trng hp ny c kt qu nh sau:

Khi to khung nhn vi cu lnh CREATE VIEW, ta cn phi lu mt s nguyn tc


sau:
Tn khung nhn v tn ct trong khung nhn, cng ging nh bng, phi tun theo qui
tc nh danh.
Khng th qui nh rng buc v to ch mc cho khung nhn.
Cu lnh SELECT vi mnh COMPUTE ... BY khng c s dng nh ngha
khung nhn.
Phi t tn cho cc ct ca khung nhn trong cc trng hp sau y:
Trong kt qu ca cu lnh SELECT c t nht mt ct c sinh ra bi mt biu thc
(tc l khng phi l mt tn ct trong bng c s) v ct khng c t tiu .
Tn ti hai ct trong kt qu ca cu lnh SELECT c cng tiu ct.
Cu lnh di y l cu lnh sai do ct th 4 khng xc nh c tn ct

93/143

CREATE VIEW tuoisinhvien AS SELECT


masv,hodem,ten,DATEDIFF(YY,ngaysinh,GETDATE()) FROM
sinhvien

Cp nht, b sung v xo d liu thng qua khung nhn


i vi mt s khung nhn, ta c th tin hnh thc hin cc thao tc cp nhp,b sung
v xo d liu. Thc cht, nhng thao tc ny s c chuyn thnh nhng thao tc
tng t trn cc bng c s v c tc ng n nhng bng c s.
V mt l thuyt, c th thc hin thao tc b sung, cp nht v xo, mt khung nhn
trc tin phi tho mn cc iu kin sau y:
Trong cu lnh SELECT nh ngha khung nhn khng c s dng t kho
DISTINCT, TOP, GROUP BY v UNION.
Cc thnh phn xut hin trong danh sch chn ca cu lnh SELECT phi
l cc ct trong cc bng c s. Trong danh sch chn khng c cha cc biu thc
tnh ton, cc hm gp.
Ngoi nhng iu kin trn, cc thao tc thay i n d liu thng qua khung nhn cn
phi m bo tho mn cc rng buc trn cc bng c s, tc l vn m bo tnh ton
vn d liu. V d di y s minh ho cho ta thy vic thc hin cc thao tc b sung,
cp nht v xo d liu thng qua khung nhn.
Xt nh ngha hai bng DONVI v NHANVIEN nh sau:
CREATE TABLE donvi ( madv INT PRIMARY KEY, tendv
NVARCHAR(30) NOT NULL, dienthoai NVARCHAR(10) NULL, )
CREATE TABLE nhanvien ( manv NVARCHAR(10) PRIMARY KEY,
hoten NVARCHAR(30) NOT NULL, ngaysinh DATETIME NULL,
diachi NVARCHAR(50) NULL, madv INT FOREIGN KEY
REFERENCES donvi(madv ON DELETE CASCADE ON UPDATE CASCADE
)
Gi s trong hai bng ny c d liu nh sau:

Bng DONVI

94/143

Bng NHANVIEN

Cu lnh di y nh ngha khung nhn NV1 cung cp cc thng tin v m nhn vin,
h tn v m n v nhn vin lm vic:
CREATE VIEW nv1 AS SELECT manv,hoten,madv FROM nhanvien
Nu ta thc hin cu lnh INSERT INTO nv1
VALUES('NV04','Le Thi D',1)
Mt bn ghi mi s c b sung vo bng NHANVIEN v d liu trong bng ny s
l:

Thng qua khung nhn ny, ta cng c th thc hin thao tc cp nht v xo d liu.
Chng hn, nu ta thc hin cu lnh:
DELETE FROM nv1 WHERE manv='NV04'
Th bn ghi tng ng vi nhn vin c m NV04 s b xo khi bng NHANVIEN
Nu trong danh sch chn ca cu lnh SELECT c s xut hin ca biu thc tnh ton
n gin, thao tc b sung d liu thng qua khung nhn khng th thc hin c. Tuy
nhin, trong trng hp ny thao tc cp nht v xo d liu vn c th c kh nng
thc hin c (hin nhin khng th cp nht d liu i vi mt ct c c t mt
biu thc tnh ton).
Xt khung nhn NV2 c nh ngha nh sau:
CREATE VIEW nv2 AS SELECT manv,hoten,YEAR(ngaysinh) AS
namsinh,madv FROM nhanvien

95/143

i vi khung nhn NV2, ta khng th thc hin thao tc b sung d liu nhng c th
cp nht hoc xo d liu trn bng thng qua khung nhn ny. Cu lnh di y l
khng th thc hin c trn khung nhn NV2
INSERT INTO nv2(manv,hoten,madv) VALUES('NV05','Le Van
E',1)
Nhng cu lnh:
UPDATE nv2 SET hoten='Le Thi X' WHERE manv='NV04'
hoc cu lnh
DELETE FROM nv2 WHERE manv='NV04'
li c th thc hin c v c tc ng i vi d liu trong bng NHANVIEN.
Trong trng hp khung nhn c to ra t mt php ni (trong hoc ngoi) trn nhiu
bng, ta c th thc hin c thao tc b sung hoc cp nht d liu nu thao tc ny
ch c tc ng n ng mt bng c s (cu lnh DELETE khng th thc hin c
trong trng hp ny).
Vi khung nhn c nh ngha nh sau:

CREATE VIEW nv3 AS


SELECT manv,hoten,ngaysinh,diachi,nhanvien.madv AS noilamviec,donvi.
FROM nhanvien FULL OUTER JOIN donvi ON
nhanvien.madv=donvi.madv
Cu lnh
INSERT INTO nv3(manv,hoten,noilamviec) VALUES('NV05','Le
Van E',1)
s b sung thm vo bng NHANVIEN mt bn ghi mi. Hoc cu lnh: INSERT INTO
nv3(madv,tendv) VALUES(3,'P. Ke toan') b sung thm vo bng DONVI mt bn ghi
do c hai cu lnh ny ch c tc ng n ng mt bng c s.
Cu lnh di y khng th thc hin c do c tc ng mt lc n hai bng c s.
INSERT INTO nv3(manv,hoten,noilamviec,madv,tendv)
VALUES('NV05','Le Van E',1,3,'P. Ke toan')

96/143

Sa i khung nhn
Cu lnh ALTER VIEW c s dng nh ngha li khung nhn hin c nhng
khng lm thay i cc quyn c cp pht cho ngi s dng trc . Cu lnh
ny s dng tng t nh cu lnh CREATE VIEW v c c php nh sau:
ALTER VIEW tn_khung_nhn [(danh_sch_tn_ct)] AS
Cu_lnh_SELECT
Ta nh ngha khung nhn nh sau:
CREATE VIEW viewlop AS SELECT malop,tenlop,tenkhoa FROM
lop INNER JOIN khoa ON lop.makhoa=khoa.makhoa WHERE
tenkhoa='Khoa Vt l
v c th nh ngha li khung nhn trn bng cu lnh:
ALTER VIEW view_lop AS SELECT malop,tenlop,hedaotao FROM
lop INNER JOIN khoa ON lop.makhoa=khoa.makhoa WHERE
tenkhoa=Khoa Cng ngh thng tin'

Xo khung nhn
Khi mt khung nhn khng cn s dng, ta c th xo n ra khi c s d liu thng qua
cu lnh:
DROP VIEW tn_khung_nhn
Nu mt khung nhn b xo, ton b nhng quyn cp pht cho ngi s dng trn
khung nhn cng ng thi b xo. Do , nu ta to li khung nhn th phi tin hnh
cp pht li quyn cho ngi s dng.
Cu lnh di y xo khung nhn VIEW_LOP ra khi c s d liu
DROP VIEW view_lop

Bi tp chng 3
3.1 S dng cu lnh CREATE TABLE to cc bng trong c s d liu nh
s di y (bn t la chn kiu d liu cho ph hp)

97/143

3.2 B sung rng buc thit lp gi tr mc nh bng 1 cho ct SOLUONG v bng0


cho ct MUCGIAMGIA trong bng CHITIETDATHANG
3.3 B sung cho bng DONDATHANG rng buc kim tra ngy giao hng v
ngychuyn hng phi sau hoc bng vi ngy t hng.
3.4 B sung rng buc cho bng NHANVIEN m bo rng mt nhn vin chc th
lm vic trong cng ty khi 18 tui v khng qu 60 tui.
3.5 Vi cc bng to c, cu lnh:
DROP TABLE nhacungcap
c th thc hin c khng? Ti sao?
3.6 Cho khung nhn c nh ngha nh sau:
CREATE VIEW view_donhang AS SELECT
dondathang.sohoadon,makhachhang,manhanvien,
98/143

ngaydathang,ngaygiaohang,ngaychuyenhang,
noigiaohang,mahang, giaban,soluong,mucgiamgia FROM
dondathang INNER JOIN chitietdathang ON
dondathang.sohoadon = chitietdathang.sohoadon
a. C th thng qua khung nhn ny b sung d liu cho bng
DONDATHANG c khng?
b. C th thng qua khung nhn ny b sung d liu cho bngCHITIETDATHANG
c khng?
3.7 Vi khung nhn c nh ngha nh sau:
CREATE VIEW view_donhang AS SELECT
dondathang.sohoadon,makhachhang,manhanvien,
ngaydathang,ngaygiaohang,ngaychuyenhang,
noigiaohang,mahang,giaban*soluong as thanhtien,mucgiamgia
FROM dondathang INNER JOIN chitietdathang ON
dondathang.sohoadon = chitietdathang.sohoadon
a. C th thng qua khung nhn ny xo hay cp nht d liu trong
bngDONDATHANG c khng?
Li gii
3.1 To cc bng d liu:
CREATE TABLE nhacungcap ( macongty NVARCHAR(10)
NOT NULL
CONSTRAINT pk_nhacungcap PRIMARY KEY(macongty), tencongty
NVARCHAR(40)
NOT NULL, tengiaodich NVARCHAR(30)
NULL,
diachi NVARCHAR(60)
NULL, dienthoai
NVARCHAR(20)
NULL, fax NVARCHAR(20)
NULL, email
NVARCHAR(50)
NULL ) CREATE TABLE loaihang ( maloaihang
INT NOT NULL CONSTRAINT pk_loaihang
PRIMARY KEY(maloaihang), tenloaihang
NVARCHAR(15)
NOT NULL ) CREATE TABLE mathang ( mahang
NVARCHAR(10) NOT NULL CONSTRAINT pk_mathang
PRIMARY KEY(mahang), tenhang NVARCHAR(50)
NOT NULL,
macongty NVARCHAR(10)
NULL , maloaihang INT NULL ,
soluong
INT
NULL, donvitinh
NVARCHAR(20)
NULL , giahang
MONEY
NULL )
99/143

CREATE TABLE nhanvien ( manhanvien NVARCHAR(10)


NOT NULL
CONSTRAINT pk_nhanvien PRIMARY KEY(manhanvien), ho
NVARCHAR(20)
NOT NULL , ten NVARCHAR(10)
NOT NULL ,
ngaysinh DATETIME NULL , ngaylamviec DATETIME NULL ,
diachi NVARCHAR(50)
NULL , dienthoai
NVARCHAR(15)
NULL , luongcoban MONEYNULL , phucap MONEY
NULL ) CREATE TABLE khachhang ( makhachhang NVARCHAR(10)
NOT NULL CONSTRAINT pk_khachhang PRIMARY KEY(makhachhang),
tencongty NVARCHAR(50) NOT NULL , tengiaodich NVARCHAR(30)
NOT NULL , diachi NVARCHAR(50) NULL , email NVARCHAR(30)
NULL , dienthoai NVARCHAR(15) NULL , fax NVARCHAR(15) NULL
) CREATE TABLE dondathang ( sohoadon INT NOT NULL
CONSTRAINT pk_dondathang PRIMARY KEY(sohoadon),
makhachhang NVARCHAR(10) NULL , manhanvien NVARCHAR(10)
NULL , ngaydathang SMALLDATETIME NULL , ngaygiaohang
SMALLDATETIME NULL , ngaychuyenhang SMALLDATETIME NULL ,
noigiaohang NVARCHAR(50) NULL ) CREATE TABLE
chitietdathang ( sohoadon INT NOT NULL , mahang
NVARCHAR(10) NOT NULL , giaban MONEY NOT NULL , soluong
SMALLINT NOT NULL , mucgiamgia REAL NOT NULL, CONSTRAINT
pk_chitietdathang PRIMARY KEY(sohoadon,mahang) )
Thit lp mi quan h gia cc bng
ALTER TABLE mathang ADD CONSTRAINT fk_mathang_loaihang
FOREIGN KEY (maloaihang) REFERENCES loaihang(maloaihang)
ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT
fk_mathang_nhacungcap FOREIGN KEY (macongty)REFERENCES
nhacungcap(macongty) ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE dondathang ADD CONSTRAINT
fk_dondathang_khachhang FOREIGN KEY (makhachhang)
REFERENCES khachhang(makhachhang) ON DELETE CASCADE ON
UPDATE CASCADE , CONSTRAINT fk_dondathang_nhanvien FOREIGN
KEY (manhanvien)REFERENCES nhanvien(manhanvien) ON DELETE
CASCADE ON UPDATE CASCADE ALTER TABLE chitietdathang ADD
CONSTRAINT fk_chitiet_dondathang FOREIGN KEY (sohoadon)
REFERENCES dondathang(sohoadon) ON DELETE CASCADE ON
UPDATE CASCADE , CONSTRAINT fk_chitiet_mathang FOREIGN KEY
(mahang) REFERENCES mathang(mahang) ON DELETE CASCADE ON
UPDATE CASCADE

100/143

3.2
ALTER TABLE chitietdathang ADD CONSTRAINT
df_chitietdathang_soluong DEFAULT(1) FOR soluong,
CONSTRAINT df_chitietdathang_mucgiamgia DEFAULT(0) FOR
Mucgiamgia
3.3
ALTER TABLE dondathang ADD
CONSTRAINT chk_dondathang_ngay
CHECK (ngaygiaohang>=ngaydathang AND
ngaychuyenhang>=ngaydathang)
3.4
ALTER TABLE nhanvien ADD
CONSTRAINT chk_nhanvien_ngaylamviec
CHECK (datediff(yy,ngaysinh,ngaylamviec)
BETWEEN 18 AND 60)
3.5 Cu lnh khng thc hin c do bng cn xo ang c tham chiu bi bng
MATHANG
3.6
a. Khng.
b. Khng
3.7
a.C th cp nht nhng khng th xo b.
C th c

101/143

Bo mt trong SQL
Bo mt trong SQL
Cc khi nim
Bo mt l mt trong nhng yu t ng vai tr quan trng i vi s sng cn ca c
s d liu. Hu ht cc h qun tr c s d liu thng mi hin nay u cung cp kh
nng bo mt c s d liu vi nhng chc nng nh:
Cp pht quyn truy cp c s d liu cho ngi dng v cc nhm ngi dng, pht
hin v ngn chn nhng thao tc tri php ca ngi s dng trn c s d liu.
Cp pht quyn s dng cc cu lnh, cc i tng c s d liu i vi ngi dng.
Thu hi (hu b) quyn ca ngi dng.
Bo mt d liu trong SQL c thc hin da trn ba khi nim chnh sau y:
Ngi dng c s d liu (Database user) : L i tng s dng c s d liu, thc
thi cc thao tc trn c s d liu nh to bng, truy xut d liu,... Mi mt ngi dng
trong c s d liu c xc nh thng qua tn ngi dng (User ID). Mt tp nhiu
ngi dng c th c t chc trong mt nhm v c gi l nhm ngi dng (User
Group). Chnh sch bo mt c s d liu c th c p dng cho mi ngi dng hoc
cho cc nhm ngi dng.
Cc i tng c s d liu (Database objects): Tp hp cc i tng, cc cu trc
lu tr c s dng trong c s d liu nh bng, khung nhn, th tc, hm c gi l
cc i tng c s d liu. y l nhng i tng cn c bo v trong chnh sch
bo mt ca c s d liu.
c quyn (Privileges): L tp nhng thao tc c cp pht cho ngi dng trn cc
i tng c s d liu. Chng hn mt ngi dng c th truy xut d liu trn mt
bng bng cu lnh SELECT nhng c th khng th thc hin cc cu lnh INSERT,
UPDATE hay DELETE trn bng .
SQL cung cp hai cu lnh cho php chng ta thit lp cc chnh sch bo mt
trong c s d liu
Lnh GRANT: S dng cp pht quyn cho ngi s dng trn cc i tng c s
d liu hoc quyn s dng cc cu lnh SQL trong c s d liu.
102/143

Lnh REVOKE: c s dng thu hi quyn i vi ngi s dng.


Cp pht quyn
Cu lnh GRANT c s dng cp pht quyn cho ngi dng hay nhm ngi
dng trn cc i tng c s d liu. Cu lnh ny thng c s dng trong cc
trng hp sau:
Ngi s hu i tng c s d liu mun cho php ngi dng khc quyn s dng
nhng i tng m anh ta ang s hu.
Ngi s hu c s d liu cp pht quyn thc thi cc cu lnh (nh CREATE
TABLE, CREATE VIEW,...) cho nhng ngi dng khc.
Cp pht quyn cho ngi dng trn cc i tng c s d liu
Ch c ngi s hu c s d liu hoc ngi s hu i tng c s d liu mi c
th cp pht quyn cho ngi dng trn cc i tng c s d liu. Cu lnh GRANT
trong trng hp ny c c php nh sau:
GRANT ALL [PRIVILEGES]| cc_quyn_cp_pht
[(danh_sch_ct)])] ON tn_bng|tn_khung_nhn |ON
tn_bng| tn_khung_nhn[(danh_sch_ct)])] |ON
tn_th_tc |ON tn_hm TO danh_sch_ngi_dng|
nhm_ngi_dng [WITH GRANT OPTION ]
Trong :
ALL [PRIVILEGES] Cp pht tt c cc quyn cho ngi dng trn i tng c s d
liu c ch nh. Cc quyn c th cp pht cho ngi dng bao gm:
i vi bng, khung nhn, v hm tr v d liu kiu bng: SELECT, INSERT,
DELETE, UPDATE v REFERENCES.
i vi ct trong bng, khung nhn: SELECT v UPDATE.
i vi th tc lu tr v hm v hng: EXECUTE.
Trong cc quyn c cp n trn, quyn REFERENCES c s dng nhm cho
php to kha ngoi tham chiu n bng cp pht.
cc_quyn_cp_pht Danh sch cc quyn cn cp pht cho ngi dng trn i tng
c s d liu c ch nh. Cc quyn c phn cch nhau bi du phy

103/143

tn_bng|tn_khung_nhn Tn ca bng hoc khung nhn cn cp pht quyn.


danh_sch_ct Danh sch cc ct ca bng hoc khung nhn cn cp pht quyn.
tn_th_tc Tn ca th tc c cp pht cho ngi dng.
tn_hm Tn hm (do ngi dng nh ngha) c cp pht quyn.
danh_sch_ngi_dng Danh sch tn ngi dng nhn quyn c cp pht. Tn ca
cc ngi dng c phn cch nhau bi du phy.
WITH GRANT OPTION Cho php ngi dng chuyn tip quyn cho ngi dng
khc.
Cc v d di y s minh ho cho ta cch s dng cu lnh GRANT cp pht quyn
cho ngi dng trn cc i tng c s d liu.
Cp pht cho ngi dng c tn thuchanh quyn thc thi cc cu lnh
SELECT, INSERT v UPDATE trn bng LOP GRANT
SELECT,INSERT,UPDATE ON lop TO thuchanh
Cho php ngi dng thuchanh quyn xem h tn v ngy sinh ca cc sinh vin (ct
HODEM,TEN v NGAYSINH ca bng SINHVIEN)
GRANT SELECT (hodem,ten,ngaysinh) ON sinhvien TO thuchanh
hoc: GRANT SELECT ON sinhvien(hodem,ten,ngaysinh) TO
thuchanh
Vi quyn c cp pht nh trn, ngi dng thuchanh c th thc hin cu lnh sau
trn bng SINHVIEN
SELECT hoden,ten,ngaysinh FROM sinhvien
Nhng cu lnh di y li khng th thc hin c
SELECT * FROM sinhvien
Trong trng hp cn cp pht tt c cc quyn c th thc hin c trn i tng c
s d liu cho ngi dng, thay v lit k cc cu lnh, ta ch cn s dng t kho ALL
PRIVILEGES (t kha PRIVILEGES c th khng cn ch nh). Cu lnh di y
cp pht cho ngi dng thuchanh cc quyn SELECT, INSERT, UPDATE, DELETE
V REFERENCES trn bng DIEMTHI

104/143

GRANT ALL ON DIEMTHI TO thuchanh


Khi ta cp pht quyn no cho mt ngi dng trn mt i tng c s d liu,
ngi dng c th thc thi cu lnh c cho php trn i tng cp pht. Tuy
nhin, ngi dng khng c quyn cp pht nhng quyn m mnh c php cho
nhng ngi s dng khc.Trong mt s trng hp, khi ta cp pht quyn cho mt
ngi dng no , ta c th cho php ngi chuyn tip quyn cho ngi dng khc
bng cch ch nh tu chn WITH GRANT OPTION trong cu lnh GRANT.
Cho php ngi dng thuchanh quyn xem d liu trn bng SINHVIEN ng thi c
th chuyn tip quyn ny cho ngi dng khc
GRANT SELECT ON sinhvien TO thuchanh WITH GRANT OPTION
Cp pht quyn thc thi cc cu lnh
Ngoi chc nng cp pht quyn cho ngi s dng trn cc i tng c s d liu,
cu lnh GRANT cn c th s dng cp pht cho ngi s dng mt s quyn trn
h qun tr c s d liu hoc c s d liu. Nhng quyn c th cp pht trong trng
hp ny bao gm:
To c s d liu: CREATE DATEBASE.
To bng: CREATE RULE
To khung nhn: CREATE VIEW
To th tc lu tr: CREATE PROCEDURE.
To hm: CREATE FUNCTION
Sao lu c s d liu: BACKUP DATABASE
Cu lnh GRANT s dng trong trng hp ny c c php nh sau:
GRANT ALL | danh_sch_cu_lnh TO danh_sch_ngi_dng
cp pht quyn to bng v khung nhn cho ngi dng c tn l thuchanh, ta s
dng cu lnh nh sau:
GRANT CREATE TABLE,CREATE VIEW TO thuchanh

105/143

Vi cu lnh GRANT, ta c th cho php ngi s dng to cc i tng c s d liu


trong c s d liu. i tng c s d liu do ngi dng no to ra s do ngi s
hu v do ngi ny c quyn cho ngi dng khc s dng i tng v cng c
th xa b (DROP) i tng do mnh to ra.
Khc vi trng hp s dng cu lnh GRANT cp pht quyn trn i tng c
s d liu, cu lnh GRANT trong trng hp ny khng th s dng tu chn WITH
GRANT OPTION, tc l ngi dng khng th chuyn tip c cc quyn thc thi cc
cu lnh c cp pht.
Thu hi quyn
Cu lnh REVOKE c s dng thu hi quyn c cp pht cho ngi dng.
Tng ng vi cu lnh GRANT, cu lnh REVOKE c s dng trong hai trng
hp:
Thu hi quyn cp pht cho ngi dng trn cc i tng c s d liu.
Thu hi quyn thc thi cc cu lnh trn c s d liu cp pht cho ngi dng.
Thu hi quyn trn i tng c s d liu:
C php cu lnh REVOKE s dng thu hi quyn cp pht trn i tng c s
d liu c c php nh sau:
REVOKE [GRANT OPTION FOR] ALL [PRIVILEGES]|
cc_quyn_cn_thu_hi
[(danh_sch_ct)] ON tn_bng | tn_khung_nhn
|ON tn_bng | tn_khung_nhn [(danh_sch_ct)] |ON
tn_th_tc |ON tn_hm FROM danh_sch_ngi_dng
[CASCADE]
Cu lnh REVOKE c th s dng thu hi mt s quyn cp pht cho ngi dng
hoc l thu hi tt c cc quyn (ALL PRIVILEGES).
Thu hi quyn thc thi lnh INSERT trn bng LOP i vi ngi dng thuchanh.
REVOKE INSERT ON lop FROM thuchanh
Gi s ngi dng thuchanh c cp pht quyn xem d liu trn cc ct HODEM,
TEN v NGAYSINH ca bng SINHVIEN, cu lnh di y s thu hi quyn cp
pht trn ct NGAYSINH (ch cho php xem d liu trn ct HODEM v TEN)

106/143

REVOKE SELECT ON sinhvien(ngaysinh) FROM thuchanh


Khi ta s dng cu lnh REVOKE thu hi quyn trn mt i tng c s d liu t
mt ngi dng no , ch nhng quyn m ta cp pht trc mi c thu hi,
nhng quyn m ngi dng ny c cho php bi nhng ngi dng khc vn cn
c hiu lc. Ni cch khc, nu hai ngi dng khc nhau cp pht cng cc quyn trn
cng mt i tng c s d liu cho mt ngi dng khc, sau ngi thu nht thu
hi li quyn cp pht th nhng quyn m ngi dng th hai cp pht vn c hiu
lc.
Gi s trong c s d liu ta c 3 ngi dng l A, Bv C. A v B u c quyn s dng
v cp pht quyn trn bng R. A thc hin lnh sau cp pht quyn xem d liu trn
bng R cho C:
GRANT SELECT ON R TO C
v B cp pht quyn xem v b sung d liu trn bng R cho C bng cu lnh:
GRANT SELECT, INSERTON R TO C
Nh vy, C c quyn xem v b sung d liu trn bng R. By gi, nu B thc hin
lnh:
REVOKE SELECT, INSERT ON R FROM C
Ngi dng C s khng cn quyn b sung d liu trn bng R nhng vn c th xem
c d liu ca bng ny (quyn ny do A cp cho C v vn cn hiu lc).
Nu ta cp pht quyn cho ngi dng no bng cu lnh GRANT vi tu chn
WITH GRANT OPTION th khi thu hi quyn bng cu lnh REVOKE phi ch nh
tu chn CASCADE. Trong trng hp ny, cc quyn c chuyn tip cho nhng
ngi dng khc cng ng thi c thu hi.
Ta cp pht cho ngi dng A trn bng R vi cu lnh GRANT nh sau:
GRANT SELECT ON R TO A WITH GRANT OPTION
sau ngi dng A li cp pht cho ngi dng B quyn xem d liu trn R vi cu
lnh:
GRANT SELECT ON R TO B
Nu mun thu hi quyn cp pht cho ngi dng A, ta s dng cu lnh REVOKE
nh sau:
107/143

REVOKE SELECT ON NHANVIEN FROM A CASCADE


Cu lnh trn s ng thi thu hi quyn m A cp cho B v nh vy c A v B u
khng th xem c d liu trn bng R.
Trong trng hp cn thu hi cc quyn c chuyn tip v kh nng chuyn tip
cc quyn i vi nhng ngi c cp pht quyn vi tu chn WITH GRANT
OPTION, trong cu lnh REVOKE ta ch nh mnh GRANT OPTION FOR.
Trong v d trn, nu ta thay cu lnh:
REVOKE SELECT ON NHANVIEN FROM A CASCADE
bi cu lnh:
REVOKE GRANT OPTION FOR SELECT ON NHANVIEN FROM A CASCADE
Th B s khng cn quyn xem d liu trn bng R ng thi A khng th chuyn tip
quyn m ta cp pht cho nhng ngi dng khc (tuy nhin A vn cn quyn xem
d liu trn bng R).
Thu hi quyn thc thi cc cu lnh:
Vic thu hi quyn thc thi cc cu lnh trn c s d liu (CREATE DATABASE,
CREATE TABLE, CREATE VIEW,...) c thc hin n gin vi cu lnh REVOKE
c c php:
REVOKE ALL | cc_cu_lnh_cn_thu_hi FROM
danh_sch_ngi_dng
khng cho php ngi dng thuchanhthc hin lnh CREATE TABLE trn c s
d liu, ta s dng cu lnh:
REVOKE CREATE TABLE FROM thuchanh

108/143

Th tc lu tr , hm v trigger
Th tc lu tr
Th tc lu tr (stored procedure)
Cc khi nim
Nh cp cc chng trc, SQL c thit k v ci t nh l mt ngn ng
thc hin cc thao tc trn c s d liu nh to lp cc cu trc trong c s d liu,
b sung, cp nht, xo v truy vn d liu trong c s d liu. Cc cu lnh SQL c
ngi s dng vit v yu cu h qun tr c s d liu thc hin theo ch tng tc.
Cc cu lnh SQL c th c nhng vo trong cc ngn ng lp trnh, thng qua
chui cc thao tc trn c s d liu c xc nh v thc thi nh vo cc cu lnh, cc
cu trc iu khin ca bn thn ngn ng lp trnh c s dng.
Vi th tc lu tr, mt phn no kh nng ca ngn ng lp trnh c a vo
trong ngn ng SQL. Mt th tc l mt i tng trong c s d liu bao gm mt tp
nhiu cu lnh SQL c nhm li vi nhau thnh mt nhm vi nhng kh nng sau:
Cc cu trc iu khin (IF, WHILE, FOR) c th c s dng trong th tc.
Bn trong th tc lu tr c th s dng cc bin nh trong ngn ng lp trnh nhm
lu gi cc gi tr tnh ton c, cc gi tr c truy xut c t c s d liu.
Mt tp cc cu lnh SQL c kt hp li vi nhau thnh mt khi lnh bn trong mt
th tc. Mt th tc c th nhn cc tham s truyn vo cng nh c th tr v cc gi
tr thng qua cc tham s (nh trong cc ngn ng lp trnh). Khi mt th tc lu tr
c nh ngha, n c th c gi thng qua tn th tc, nhn cc tham s truyn vo,
thc thi cc cu lnh SQL bn trong th tc v c th tr v cc gi tr sau khi thc hin
xong.
S dng cc th tc lu tr trong c s d liu s gip tng hiu nng ca c s d liu,
mang li cc li ch sau:
n gin ho cc thao tc trn c s d liu nh vo kh nng module ho cc thao
tc ny.

109/143

Th tc lu tr c phn tch, ti u khi to ra nn vic thc thi chng nhanh hn


nhiu so vi vic phi thc hin mt tp ri rc cc cu lnh SQL tng ng theo
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 v trn cc
i tng c s d liu, 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.
To th tc lu tr
Th tc lu tr c to bi cu lnh CREATE PROCEDURE vi c php nh sau:
CREATE PROCEDURE tn_th_tc [(danh_sch_tham_s)] [WITH
RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS
Cc_cu_lnh_ca_th_tc
Trong :
tn_th_tc Tn ca th tc cn to. Tn phi tun theo qui tc nh danh v khng
c vt qu 128 k t.
danh_sch_tham_s Cc tham s ca th tc c khai bo ngay sau tn th tc
v nu th tc c nhiu tham s th cc khai bo phn cch nhau bi du phy. Khai bo
ca mi mt tham s ti thiu phi bao gm hai phn:
tn tham s c bt u bi du @.
kiu d liu ca tham s
@mamonhoc nvarchar(10)
RECOMPILE Thng thng, th tc s c phn tch, ti u v dch sn ln gi u
tin. Nu tu chn WITH RECOMPILE c ch nh, th tc s c dch li mi khi
c gi.
ENCRYPTION Th tc s c m ho nu tu chn WITH ENCRYPTION c ch
nh. Nu th tc c m ho, ta khng th xem c ni dung ca th tc.

110/143

cc_cu_lnh_ca_th_tc Tp hp cc cu lnh s dng trong ni dung th


tc. Cc cu lnh ny c th t trong cp t kho BEGIN...END hoc c th khng.
Gi s ta cn thc hin mt chui cc thao tc nh sau trn c s d liu
1. B sung thm mn hc csd liu c m TI-005 v s n v hc trnh l 5 vo bng
MONHOC
2. Ln danh sch nhp im thi mn csd liu cho cc sinh vin hc lp c m
C24102(tc l b sung thm vo bng DIEMTHI cc bn ghi vi ct MAMONHOC
nhn gi tr TI-005, ct MASV nhn gi tr ln lt l m cc sinh vin hc lp c m
C24105 v cc ct im l NULL).
Nu thc hin yu cu trn thng qua cc cu lnh SQL nh thng thng, ta phi thc
thi hai cu lnh nh sau:
INSERT INTO MONHOC VALUES('TI005','C s d liu',5)
INSERT INTO DIEMTHI(MAMONHOC,MASV) SELECT TI005,MASV
FROM SINHVIEN WHERE MALOP='C24102'
Thay v phi s dng hai cu lnh nh trn, ta c th nh ngha mt th tc lu tr vi
cc tham s vo l @mamonhoc, @tenmonhoc, @sodvhtv @malop nh sau:
CREATE PROC sp_LenDanhSachDiem( @mamonhocNVARCHAR(10),
@tenmonhocNVARCHAR(50), @sodvhtSMALLINT,
@malopNVARCHAR(10)) AS BEGIN INSERT INTO monhoc
VALUES(@mamonhoc,@tenmonhoc,@sodvht) INSERT INTO
diemthi(mamonhoc,masv) SELECT @mamonhoc,masv FROM sinhvien
WHERE malop=@malop END sp_LenDanhSachDiem 'TI005','C s
d liu',5,'C24102'
Li gi th tc lu tr
Nh thy v d trn, khi mt th tc lu tr c to ra, ta c th yu cu h
qun tr c s d liu thc thi th tc bng li gi th tc c dng:
tn_th_tc[danh_sch_cc_i_s]
S lng cc i s cng nh th t ca chng phi ph hp vi s lng v th t ca
cc tham s khi nh ngha th tc.
Trong trng hp li gi th tc c thc hin bn trong mt th tc khc, bn trong
mt trigger hay kt hp vi cc cu lnh SQL khc, ta s dng c php nh sau:
111/143

EXECUTE tn_th_tc [danh_sch_cc_i_s]


Th t ca cc i s c truyn cho th tc c th khng cn phi tun theo th t
ca cc tham s nh khi nh ngha th tc nu tt c cc i s c vit di dng:
@tn_tham_s= gi_tr
Li gi th tc v d trn c th vit nh sau:
sp_LenDanhSachDiem@malop='C24102', @tenmonhoc='C s d
liu', @mamonhoc='TI005', @sodvht=5
S dng bin trong th tc
Ngoi nhng tham s c truyn cho th tc, bn trong th tc cn c th s dng cc
bin nhm lu gi cc gi tr tnh ton c hoc truy xut c t c s d liu. Cc
bin trong th tc c khai bo bng t kho DECLARE theo c php nh sau:
DECLARE@tn_binkiu_d_liu
Tn bin phi bt u bi k t @ v tun theo qui tc v nh danh. V d di y
minh ho vic s dng bin trong th tc
Trong nh ngha ca th tc di y s dung cc bin cha cc gi tr truy xut c
t c s d liu.
CREATE PROCEDURE sp_Vidu( @malop1 NVARCHAR(10), @malop2
NVARCHAR(10)) AS DECLARE @tenlop1 NVARCHAR(30) DECLARE
@namnhaphoc1 INT DECLARE @tenlop2 NVARCHAR(30) DECLARE
@namnhaphoc2 INT SELECT @tenlop1=tenlop,
@namnhaphoc1=namnhaphoc FROM lop WHERE malop=@malop1
SELECT @tenlop2=tenlop, @namnhaphoc2=namnhaphoc FROM lop
WHERE malop=@malop2 PRINT @tenlop1+' nhap hoc nam
'+str(@namnhaphoc1) print @tenlop2+' nhap hoc nam
'+str(@namnhaphoc2) IF @namnhaphoc1=@namnhaphoc2 PRINT
'Hai lp nhp hc cng nm ELSE' PRINT 'Hai lp nhp hc
khc nm
Gi tr tr v ca tham s trong th tc lu tr
Trong cc v d trc, nu i s truyn cho th tc khi c li gi n th tc l bin,
nhng thay i gi tr ca bin trong th tc s khng c gi li khi kt thc qu trnh
thc hin th tc.
112/143

Xt cu lnh sau y
CREATE PROCEDURE sp_Conghaiso(@aINT,@b INT, @c INT)
ASSELECT @c=@a+@b
Nu sau khi to th tc vi cu lnh trn, ta thc thi mt tp cc cu lnh nh sau:
DECLARE @tong INT SELECT @tong=0 EXECUTE sp_Conghaiso
100,200,@tong SELECT @tong
Cu lnh SELECT @tong cui cng trong lot cc cu lnh trn s cho kt qu l: 0
Trong trng hp cn phi gi li gi tr ca i s sau khi kt thc th tc, ta phi khai
bo tham s ca th tc theo c php nh sau:
@tn_tham_skiu_d_liuOUTPUT @tn_tham_skiu_d_liuOUT
hoc v trong li gi th tc, sau i s c truyn cho th tc, ta cng phi ch nh
thm t kho OUTPUT (hoc OUT)
Ta nh ngha li th tc v d trn nh sau:
CREATE PROCEDURE sp_Conghaiso(@aINT, @bINT, @cINT OUTPUT)
AS SELECT @c=@a+@b
v thc hin li gi th tc trong mt tp cc cu lnh nh sau:
DECLARE @tong INT SELECT @tong=0 EXECUTE sp_Conghaiso
100,200,@tong OUTPUT SELECT @tong
th cu lnh SELECT @tong s cho kt qu l: 300
Tham s vi gi tr mc nh
Cc tham s c khai bo trong th tc c th nhn cc gi tr mc nh. Gi tr mc
nh s c gn cho tham s trong trng hp khng truyn i s cho tham s khi c
li gi n th tc.
Tham s vi gi tr mc nh c khai bo theo c php nh sau:
@tn_tham_s kiu_d_liu = gi_tr_mc_nh
Trong cu lnh di y:

113/143

CREATE PROC sp_TestDefault( @tenlop NVARCHAR(30)=NULL,


@noisinh NVARCHAR(100)='Hu') AS BEGIN IF @tenlop IS NULL
SELECT hodem,ten FROM sinhvien INNER JOIN lop ON
sinhvien.malop=lop.malop WHERE noisinh=@noisinh ELSE
SELECT hodem,ten FROM sinhvien INNER JOIN lop ON
sinhvien.malop=lop.malop WHERE noisinh=@noisinh AND
tenlop=@tenlopEND
Th tc sp_TestDefaultc nh ngha vi tham s @tenlop c gi tr mc nh
l NULLv tham s @noisinhc gi tr mc nh l Hu. Vi th tc c nh ngha
nh trn, ta c th thc hin cc li gi vi cc mc ch khc nhau nh sau:
Cho bit h tn ca cc sinh vin sinh ti Hu:
sp_testdefault
Cho bit h tn ca cc sinh vin lp TinK24sinh ti Hu:
sp_testdefault @tenlop ='Tin K24'
Cho bit h tn ca cc sinh vin sinh ti NghAn:
sp_testDefault @noisinh=N'Ngh An'
Cho bit h tn ca cc sinh vin lp TinK26sinh ti Nng:
sp_testdefault @tenlop ='Tin K26' ,@noisinh =' Nng'
Sa i th tc
Khi mt th tc c to ra, ta c th tin hnh nh ngha li th tc bng cu
lnh ALTER PROCEDURE c c php nh sau:
ALTER PROCEDURE tn_th_tc [(danh_sch_tham_s)] [WITH
RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS
Cc_cu_lnh_Ca_th_tc
Cu lnh ny s dng tng t nh cu lnh CREATE PROCEDURE. Vic sa i li
mt th tc c khng lm thay i n cc quyn cp pht trn th tc cng nh
khng tc ng n cc th tc khc hay trigger ph thuc vo th tc ny.

114/143

Xo th tc
xo mt th tc c, ta s dng cu lnh DROP PROCEDURE vi c php nh
sau:
DROP PROCEDURE tn_th_tc
Khi xo mt th tc, tt c cc quyn cp cho ngi s dng trn th tc cng
ng thi b xo b. Do , nu to li th tc, ta phi tin hnh cp pht li cc quyn
trn th tc .

115/143

Hm v trigger
Hm do ngi dng nh ngha
Hm l i tng c s d liu tng t nh th tc. im khc bit gia hm v th
tc l hm tr v mt gi tr thng qua tn hm cn th tc th khng. iu ny cho php
ta s dng hm nh l mt thnh phn ca mt biu thc (chng hn trong danh sch
chn ca cu lnh SELECT).
Ngoi nhng hm do h qun tr c s d liu cung cp sn, ngi s dng c th nh
ngha thm cc hm nhm phc v cho mc ch ring ca mnh.
nh ngha v s dng hm
Hm c nh ngha thng qua cu lnh CREATE FUNCTION vi c php nh sau:
CREATE FUNCTION tn_hm ([danh_sch_tham_s]) RETURNS
(kiu_tr_v_ca_hm) AS BEGIN cc_cu_lnh_ca_hm END
Cu lnh di y nh ngha hm tnh ngy trong tun (th trong tun) ca mt gi tr
kiu ngy
CREATE FUNCTION thu(@ngay
DATETIME) RETURNS NVARCHAR(10)ASBEGIN DECLARE @st
NVARCHAR(10) SELECT @st=CASE DATEPART(DW,@ngay) WHEN 1
THEN 'Chu nht' WHEN 2 THEN 'Th hai' WHEN 3 THEN 'Th ba'
WHEN 4 THEN 'Th t' WHEN 5 THEN 'Th nm' WHEN 6 THEN
'Th su' ELSE 'Th by' ENDRETURN (@st) /* Tr tr v ca
hm */ END
Mt hm khi c nh ngha c th c s dng nh cc hm do h qun tr c s
d liu cung cp (thng thng trc tn hm ta phi ch nh thm tn ca ngi s
hu hm)
Cu lnh SELECT di y s dng hm c nh ngha v d trc:
SELECT masv,hodem,ten,dbo.thu(ngaysinh),ngaysinh FROM
sinhvien WHERE malop=C24102
c kt qu l:

116/143

Hm vi gi tr tr v l d liu kiu bng


Ta bit c chc nng cng nh s tin li ca vic s dng cc khung nhn trong
c s d liu. Tuy nhin, nu cn phi s dng cc tham s trong khung nhn (chng
hn cc tham s trong mnh WHERE ca cu lnh SELECT) th ta li khng th thc
hin c. iu ny phn no lm gim tnh linh hot trong vic s dng khung nhn.
Xt khung nhn c nh ngha nh sau:
CREATE VIEW sinhvien_k25 AS SELECT masv,hodem,ten,ngaysinh
FROM sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop
WHERE khoa=25
vi khung nhn trn, thng qua cu lnh:
SELECT * FROM sinhvien_K25
ta c th bit c danh sch cc sinh vin kho 25 mt cch d dng nhng r rng
khng th thng qua khung nhn ny bit c danh sch sinh vin cc kho khc do
khng th s dng iu kin c dng KHOA = @thamso trong mnh WHERE ca
cu lnh SELECT c.
Nhc im trn ca khung nhn c th khc phc bng cch s dng hm vi gi tr
tr v di dng bng v c gi l hm ni tuyn (inline function). Vic s dng hm
loi ny cung cp kh nng nh khung nhn nhng cho php chng ta s dng c cc
tham s v nh tnh linh hot s cao hn.
Mt hm ni tuyn c nh ngha bi cu lnh CREATE TABLE vi c php nh
sau:
CREATE FUNCTION tn_hm ([danh_sch_tham_s])
RETURNS TABLE AS RETURN (cu_lnh_select)

117/143

C php ca hm ni tuyn phi tun theo cc qui tc sau:


Kiu tr v ca hm phi c ch nh bi mnh RETURNS TABLE.
Trong phn thn ca hm ch c duy nht mt cu lnh RETURN xc nh gi tr tr
v ca hm thng qua duy nht mt cu lnh SELECT. Ngoi ra, khng s dng bt k
cu lnh no khc trong phn thn ca hm.
Ta nh ngha hm func_XemSVnh sau
CREATE FUNCTION func_XemSV(@khoa SMALLINT) RETURNS TABLE
AS RETURN(SELECT masv,hodem,ten,ngaysinh FROM sinhvien
INNER JOIN lop ON sinhvien.malop=lop.malop WHERE
khoa=@khoa)
hm trn nhn tham s u vo l kha ca sinh vin cn xem v gi tr tr v ca hm
l tp cc dng d liu cho bit thng tin v cc sinh vin ca kho . Cc hm tr v
gi tr di dng bng c s dng nh l cc bng hay khung nhn trong cc cu lnh
SQL.
Vi hm c nh ngha nh trn, bit danh sch cc sinh vin kho 25, ta s dng
cu lnh nh sau:
SELECT * FROM dbo.func_XemSV(25)
cn cu lnh di y cho ta bit c danh sch sinh vin kho 26
SELECT * FROM dbo.func_XemSV(26)
i vi hm ni tuyn, phn thn ca hm ch cho php s xut hin duy nht ca cu
lnh RETURN. Trong trng hp cn phi s dng n nhiu cu lnh trong phn thn
ca hm, ta s dng c php nh sau nh ngha hm:
CREATE FUNCTION tn_hm([danh_sch_tham_s])
RETURNS @bin_bng TABLE nh_ngha_bng AS BEGIN
cc_cu_lnh_trong_thn_hm RETURN END
Khi nh ngha hm dng ny cn lu mt s im sau:
Cu trc ca bng tr v bi hm c xc nh da vo nh ngha ca bng trong
mnh RETURNS. Bin @bin_bng trong mnh RETURNS c phm vi s dng
trong hm v c s dng nh l mt tn bng.

118/143

Cu lnh RETURN trong thn hm khng ch nh gi tr tr v. Gi tr tr v ca hm


chnh l cc dng d liu trong bng c tn l @binbngc nh ngha trong mnh
RETURNS
Cng tng t nh hm ni tuyn, dng hm ny cng c s dng trong cc cu lnh
SQL vi vai tr nh bng hay khung nhn. V d di y minh ho cch s dng dng
hm ny trong SQL.
Ta nh ngha hm func_TongSV nh sau:
CREATE FUNCTION Func_Tongsv(@khoa SMALLINT) RETURNS
@bangthongke TABLE ( makhoa NVARCHAR(5), tenkhoa
NVARCHAR(50), tongsosv INT ) AS BEGIN IF @khoa=0 INSERT
INTO @bangthongke SELECT khoa.makhoa,tenkhoa,COUNT(masv)
FROM (khoa INNER JOIN lop ON khoa.makhoa=lop.makhoa) INNER
JOIN sinhvien on lop.malop=sinhvien.malop GROUP BY
khoa.makhoa,tenkhoa ELSE INSERT INTO @bangthongke SELECT
khoa.makhoa,tenkhoa,COUNT(masv) FROM (khoa INNER JOIN lop
ON khoa.makhoa=lop.makhoa) INNER JOIN sinhvien ON
lop.malop=sinhvien.malop WHERE khoa=@khoa GROUP BY
khoa.makhoa,tenkhoa RETURN /*Tr kt qu v cho hm*/ END
Vi hm c nh ngha nh trn, cu lnh:
SELECT * FROM dbo.func_TongSV(25)
S cho kt qu thng k tng s sinh vin kho 25 ca mi khoa:

Cn cu lnh:
SELECT * FROM dbo.func_TongSV(0)

119/143

Cho ta bit tng s sinh vin hin c (tt c cc kho) ca mi khoa

Trigger
Trong chng 4, ta bit cc rng buc c s dng m bo tnh ton vn d liu
trong c s d liu. Mt i tng khc cng thng c s dng trong cc c s d
liu cng vi mc ch ny l cc trigger. Cng tng t nh th tc lu tr, mt trigger
l mt i tng cha mt tp cc cu lnh SQL v tp cc cu lnh ny s c thc
thi khi trigger c gi. im khc bit gia th tc lu tr v trigger l: cc th tc lu
tr c thc thi khi ngi s dng c li gi n chng cn cc trigger li c gi
t ng khi xy ra nhng giao dch lm thay i d liu trong cc bng.
Mi mt trigger c to ra v gn lin vi mt bng no trong c s d liu. Khi
d liu trong bng b thay i (tc l khi bng chu tc ng ca cc cu lnh INSERT,
UPDATE hay DELETE) th trigger s c t ng kch hot.
S dng trigger mt cch hp l trong c s d liu s c tc ng rt ln trong vic
tng hiu nng ca c s d liu. Cc trigger thc s hu dng vi nhng kh nng sau:
Mt trigger c th nhn bit, ngn chn v hu b c nhng thao tc lm thay i
tri php d liu trong c s d liu.
Cc thao tc trn d liu (xo, cp nht v b sung) c th c trigger pht hin ra v
t ng thc hin mt lot cc thao tc khc trn c s d liu nhm m bo tnh hp
l ca d liu.
Thng qua trigger, ta c th to v kim tra c nhng mi quan h phc tp hn
gia cc bng trong c s d liu m bn thn cc rng buc khng th thc hin c.
nh ngha trigger
Mt trigger l mt i tng gn lin vi mt bng v c t ng kch hot khi xy
ra nhng giao dch lm thay i d liu trong bng. nh ngha mt trigger bao gm cc
yu t sau:
Trigger s c p dng i vi bng no?
Trigger c kch hot khi cu lnh no c thc thi trn bng: INSERT, UPDATE,
DELETE?
Trigger s lm g khi c kch hot?

120/143

Cu lnh CREATE TRIGGER c s dng inh ngha trigger v c c php nh


sau:
CREATE TRIGGER tn_trigger ON tn_bng FOR
{[INSERT][,][UPDATE][,][DELETE]} AS [IF UPDATE(tn_ct)
[AND UPDATE(tn_ct)|OR UPDATE(tn_ct)]...]
cc_cu_lnh_ca_trigger
Ta nh ngha cc bng nh sau:
Bng MATHANG lu tr d liu v cc mt hng:
CREATE TABLE mathang ( mahang NVARCHAR(5) PRIMARY KEY,
/*m hng*/ tenhang NVARCHAR(50) NOT NULL, /*tn hng*/
soluong INT, /*s lng hng hin c*/ )
Bng NHATKYBANHANG lu tr thng tin v cc ln bn hng
CREATE TABLE nhatkybanhang ( stt INT IDENTITY PRIMARY KEY,
ngay DATETIME, /*ngy bn hng*/ nguoimua
NVARCHAR(30),/*tn ngi mua hng*/ mahang NVARCHAR(5)
/*m mt hng c bn*/ FOREIGN KEY REFERENCES
mathang(mahang), soluong INT, /*gi bn hng*/ giaban
MONEY /*s lng hng c bn*/ )
Cu lnh di y nh ngha trigger trg_nhatkybanhang_insert. Trigger ny c chc
nng t ng gim s lng hng hin c khi mt mt hng no c bn (tc l khi
cu lnh INSERT c thc thi trn bng NHATKYBANHANG).
CREATE TRIGGER trg_nhatkybanhang_insert ON nhatkybanhang
FOR INSERT AS UPDATE mathang SET
mathang.soluong=mathang.soluonginserted.soluong FROM
mathang INNER JOIN inserted ON
mathang.mahang=inserted.mahang
Vi trigger va to trn, nu d liu trong bng MATHANG l:

th sau khi ta thc hin cu lnh:

121/143

INSERT INTO
nhatkybanhang(ngay,nguoimua,mahang,soluong,giaban)
VALUES('5/5/2004','Tran Ngoc Thanh','H1',10,5200)
d liu trong bng MATHANG s nh sau:

Trong cu lnh CREATE TRIGGER v d trn, sau mnh ON l tn ca bng m


trigger cn to s tc ng n. Mnh tip theo ch nh cu lnh s kch hot trigger
FOR INSERT). Ngoi INSERT, ta cn c th ch nh UPDATE hoc DELETE cho
mnh ny, hoc c th kt hp chng li vi nhau. Phn thn ca
trigger nm sau t kho AS bao gm cc cu lnh m trigger s thc thi khi c kch
hot.
Chun SQL nh ngha hai bng logic INSERTED v DELETED s dng trong cc
trigger. Cu trc ca hai bng ny tng t nh cu trc ca bng m trigger tc ng.
D liu trong hai bng ny tu thuc vo cu lnh tc ng ln bng lm kch hot
trigger; c th trong cc trng hp sau:
Khi cu lnh DELETE c thc thi trn bng, cc dng d liu b xo s c sao
chp vo trong bng DELETED. Bng INSERTED trong trng hp ny khng c d
liu.
D liu trong bng INSERTED s l dng d liu c b sung vo bng gy nn s
kch hot i vi trigger bng cu lnh INSERT. Bng DELETED trong trng hp ny
khng c d liu.
Khi cu lnh UPDATE c thc thi trn bng, cc dng d liu c chu s tc ng
ca cu lnh s c sao chp vo bng DELETED, cn trong bng INSERTED s l
cc dng sau khi c cp nht.
S dng mnh IF UPDATE trong trigger
Thay v ch nh mt trigger c kch hot trn mt bng, ta c th ch nh trigger
c kch hot v thc hin nhng thao tc c th khi vic thay i d liu ch lin quan
n mt s ct nht nh no ca ct. Trong trng hp ny, ta s dng mnh IF
UPDATE trong trigger. IF UPDATE khng s dng c i vi cu lnh DELETE.

122/143

Xt li v d vi hai bng MATHANG v NHATKYBANHANG, trigger di y c


kch hot khi ta tin hnh cp nht ct SOLUONG cho mt bn ghi ca bng
NHATKYBANHANG (lu l ch cp nht ng mt bn ghi)
CREATE TRIGGER trg_nhatkybanhang_update_soluong ON
nhatkybanhang FOR UPDATE AS IF UPDATE(soluong) UPDATE
mathang SET mathang.soluong = mathang.soluong
(inserted.soluong-deleted.soluong) FROM (deleted INNER
JOIN inserted ON deleted.stt = inserted.stt) INNER JOIN
mathang ON mathang.mahang = deleted.mahang
Vi trigger v d trn, cu lnh:
UPDATE nhatkybanhang SET soluong=soluong+20 WHERE stt=1
s kch hot trigger ng vi mnh IF UPDATE (soluong) v cu lnh UPDATE trong
trigger s c thc thi. Tuy nhin cu lnh:
UPDATE nhatkybanhang SET nguoimua='Mai Hu Ton'
WHERE stt=3
li khng kch hot trigger ny.
Mnh IF UPDATE c th xut hin nhiu ln trong phn thn ca trigger. Khi ,
mnh IF UPDATE no ng th phn cu lnh ca mnh s c thc thi khi
trigger c kch hot.
Gi s ta nh ngha bng R nh sau:
CREATE TABLE R ( A INT, B INT, C INT )
v trigger trg_R_updatecho bng R:
CREATE TRIGGER trg_R_test ON R FOR UPDATE AS IF UPDATE(A)
Print 'A updated' IF UPDATE(C) Print 'C updated'
Cu lnh
UPDATE R SET A=100 WHERE A=1
s kch hot trigger v cho kt qu l: A updated
v cu lnh:
123/143

UPDATE R SET C=100 WHERE C=2


cng kch hot trigger v cho kt qu l: C updated
cn cu lnh:
UPDATE R SET B=100 WHERE B=3
hin nhin s khng kch hot trigger
ROLLBACK TRANSACTION v trigger
Mt trigger c kh nng nhn bit c s thay i v mt d liu trn bng d liu,
t c th pht hin v hu b nhng thao tc khng m bo tnh ton vn d liu.
Trong mt trigger, hu b tc dng ca cu lnh lm kch hot trigger, ta s dng cu
lnh(1):
ROLLBACK TRANSACTION >
Nu trn bng MATHANG, ta to mt trigger nh sau:
CREATE TRIGGER trg_mathang_delete ON mathang FOR DELETE AS
ROLLBACK TRANSACTION
Th cu lnh DELETE s khng th c tc dng i vi bng MATHANG. Hay ni cch
khc, ta khng th xo c d liu trong bng.
Trigger di y c kch hot khi cu lnh INSERT c s dng b sung mt
bn ghi mi cho bng NHATKYBANHANG. Trong trigger ny kim tra iu kin hp
l ca d liu l s lng hng bn ra phi nh hn hoc bng s lng hng hin c.
Nu iu kin ny khng tho mn th hu b thao tc b sung d liu.
CREATE TRIGGER trg_nhatkybanhang_insert ON NHATKYBANHANG
FOR INSERT AS DECLARE @sl_co int /*
S lng hng hin c */
DECLARE @sl_ban int /* S lng hng c bn */
DECLARE @mahang nvarchar(5) /* M hng c bn */
SELECT @mahang=mahang,@sl_ban=soluong FROM inserted
SELECT @sl_co = soluong FROM mathang where mahang=@mahang
/*Nu s lng hng hin c nh hn s lng bn th
hu b thao tc b sung d liu */ IF @sl_co<@sl_ban
ROLLBACK TRANSACTION /* Nu d liu hp l

124/143

th gim s lng hng hin c */ ELSE UPDATE mathang SET


soluong=soluong-@sl_ban WHERE mahang=@mahang
S dng trigger trong trng hp cu lnh INSERT, UPDATE v DELETE c
tc ng n nhiu dng d liu
Trong cc v d trc, cc trigger ch thc s hot ng ng mc ch khi cc cu lnh
kch hot trigger ch c tc dng i vi ng mt dng d liu. Ta c th nhn thy l
cu lnh UPDATE v DELETE thng c tc dng trn nhiu dng, cu lnh INSERT
mc d t ri vo trng hp ny nhng khng phi l khng gp; l khi ta s dng
cu lnh c dng INSERT INTO ... SELECT ... Vy lm th no trigger hot ng
ng trong trng hp nhng cu lnh c tc ng ln nhiu dng d liu?
C hai gii php c th s dng i vi vn ny:
S dng truy vn con.
S dng bin con tr.
S dng truy vn con
Ta hnh dung vn ny v cch khc phc qua v d di y:
Ta xt li trng hp ca hai bng MATHANG v NHATKYBANHANG
nh s di y:

125/143

Trigger di y cp nht li s lng hng ca bng MATHANG khi cu lnh UPDATE


c s dng cp nht ct SOLUONG ca bng NHATKYBANHANG.
CREATE TRIGGER trg_nhatkybanhang_update_soluong ON
nhatkybanhang FOR UPDATE AS IF UPDATE(soluong) UPDATE
mathang SET mathang.soluong = mathang.soluong
(inserted.soluong-deleted.soluong) FROM (deleted INNER
JOIN inserted ON deleted.stt = inserted.stt) INNER JOIN
mathang ON mathang.mahang = deleted.mahang
th d liu trong hai bng MATHANG v NHATKYBANHANG s l:

Bng MATHANG

Bng NHATKYBANHANG

Tc l s lng ca mt hng c m H1 c gim i 10. Nhng nu thc hin tip


cu lnh:
UPDATE nhatkybanhang SET soluong=soluong + 5 WHERE
mahang='H2'
d liu trong hai bng sau khi cu lnh thc hin xong s nh sau:

Bng MATHANG

Bng NHATKYBANHANG

126/143

Ta c th nhn thy s lng ca mt hng c m H2cn li 40(gim i 5) trong khi


ng ra phi l 35(tc l phi gim 10). Nh vy, trigger trn khng hot ng ng
trong trng hp ny.
khc phc li gp phi nh trn, ta nh ngha li trigger nh sau:
CREATE TRIGGER trg_nhatkybanhang_update_soluong ON
nhatkybanhang FOR UPDATE AS IF UPDATE(soluong) UPDATE
mathang SET mathang.soluong = mathang.soluong - (SELECT
SUM(inserted.soluong-deleted.soluong) FROM inserted INNER
JOIN deleted ON inserted.stt=deleted.stt WHERE
inserted.mahang = mathang.mahang) WHERE mathang.mahang IN
(SELECT mahang FROM inserted)
hoc:
CREATE TRIGGER trg_nhatkybanhang_update_soluong ON
nhatkybanhang FOR UPDATE AS IF UPDATE(soluong) /* Nu s
lng dng c cp nht bng 1 */ IF @@ROWCOUNT = 1 BEGIN
UPDATE mathang SET mathang.soluong = mathang.soluong
(inserted.soluong-deleted.soluong) FROM (deleted INNER
JOIN inserted ON deleted.stt = inserted.stt) INNER JOIN
mathang ON mathang.mahang = deleted.mahang END ELSE BEGIN
UPDATE mathang SET mathang.soluong = mathang.soluong (SELECT SUM(inserted.soluong-deleted.soluong) FROM
inserted INNER JOIN deleted ON inserted.stt=deleted.stt
WHERE inserted.mahang = mathang.mahang) WHERE
mathang.mahang IN (SELECT mahang FROM inserted) END
S dng bin con tr
Mt cch khc khc phc li xy ra nh trong v d 5.17 l s dng con tr duyt
qua cc dng d liu v kim tra trn tng dng. Tuy nhin, s dng bin con tr trong
trigger l gii php nn chn trong trng hp thc s cn thit.
Mt bin con tr c s dng duyt qua cc dng d liu trong kt qu ca mt truy
vn v c khai bo theo c php nh sau:
DECLARE tn_con_tr

CURSOR FOR cu_lnh_SELECT

Trong cu lnh SELECT phi c kt qu di dng bng. Tc l trong cu lnh khng


s dng mnh COMPUTE v INTO.

127/143

m mt bin con tr ta s dng cu lnh:


OPEN tn_con_tr
s dng bin con tr duyt qua cc dng d liu ca truy vn, ta s dng cu lnh
FETCH. Gi tr ca bin trng thi @@FETCH_STATUS bng khng nu cha duyt ht
cc dng trong kt qu truy vn.
Cu lnh FETCH c c php nh sau:
FETCH [[NEXT|PRIOR|FIST|LAST] FROM] tn_con_tr [INTO
danh_sch_bin ]
Trong cc bin trong danh sch bin c s dng cha cc gi tr ca cc trng
ng vi dng d liu m con tr tr n. S lng cc bin phi bng vi s lng cc
ct ca kt qu truy vn trong cu lnh DECLARE CURSOR.
Tp cc cu lnh trong v d di y minh ho cch s dng bin con tr duyt qua
cc dng trong kt qu ca cu lnh SELECT
DECLARE contro CURSOR FOR SELECT mahang,tenhang,soluong
FROM mathang OPEN contro DECLARE @mahang NVARCHAR(10)
DECLARE @tenhang NVARCHAR(10) DECLARE @soluong INT
/*Bt u duyt qua cc dng trong kt qu truy vn*/
FETCH NEXT FROM contro INTO @mahang,@tenhang,@soluong
WHILE @@FETCH_STATUS=0 BEGIN PRINT 'Ma hang:'+@mahang
PRINT 'Ten hang:'+@tenhang PRINT 'So luong:'+STR(@soluong)
FETCH NEXT FROM contro INTO @mahang,@tenhang,@soluong END
/*ng con tr v gii phng vng nh*/ CLOSE contro
DEALLOCATE contro
Trigger di y l mt cch gii quyt khc ca trng hp c cp trn
CREATE TRIGGER trg_nhatkybanhang_update_soluong
ON nhatkybanhang FOR UPDATE AS IF UPDATE(soluong) BEGIN
DECLARE @mahang NVARCHAR(10) DECLARE @soluong INT
DECLARE contro CURSOR FOR SELECT inserted.mahang,
inserted.soluongdeleted.soluong AS soluong
FROM inserted INNER JOIN deleted ON
inserted.stt=deleted.stt OPEN contro FETCH NEXT FROM
contro INTO @mahang,@soluong WHILE @@FETCH_STATUS=0 BEGIN
UPDATE mathang SET soluong=soluong@soluong
128/143

WHERE mahang=@mahang
FETCH NEXT FROM contro INTO @mahang,@soluong END
CLOSE contro DEALLOCATE contro END END

Bi tp chng 5
Da trn c s d liu bi tp chng 2, thc hin cc yu cu sau:
5.1 To th tc lu tr thng qua th tc ny c th b sung thm mt bn ghi mi
cho bng MATHANG (th tc phi thc hin kim tra tnh hp l ca d liu cn b
sung: khng trng kho chnh v m bo ton vn tham chiu)
5.2 To th tc lu tr c chc nng thng k tng s lng hng bn c ca mt mt
hng c m bt k (m mt hng cn thng k l tham s ca th tc).
5.3 Vit hm tr v mt bng trong cho bit tng s lng hng bn c ca mi
mt hng. S dng hm ny thng k xem tng s lng hng (hin c v bn)
ca mi mt hng l bao nhiu.
5.4 Vit trigger cho bng CHITIETDATHANG theo yu cu sau:
Khi mt bn ghi mi c b sung vo bng ny th gim s lng hng hin c nu
s lng hng hin c ln hn hoc bng s lng hng c bn ra. Ngc li th hu
b thao tc b sung.
Khi cp nht li s lng hng c bn, kim tra s lng hng c cp nht li c
ph hp hay khng (s lng hng bn ra khng c vt qu s lng hng hin c
v khng c nh hn 1). Nu d liu hp l th gim (hoc tng) s lng hng hin
c trong cng ty, ngc li th hu b thao tc cp nht.
5.5 Vit trigger cho bng CHITIETDATHANG sao cho ch chp nhn gi hng bn
ra phi nh hn hoc bng gi gc (gi ca mt hng trong bng MATHANG)
5.6 qun l cc bn tin trong mt Website, ngi ta s dng hai bng sau:
Bng LOAIBANTIN (loi bn tin)
CREATE TABLE loaibantin ( maphanloai INT
NOT NULL PRIMARY KEY, tenphanloai
NVARCHAR(100) NOT NULL , bantinmoinhat INT DEFAULT(0) )
Bng BANTIN (bn tin)

129/143

CREATE TABLE bantin ( maso INT NOT NULLmPRIMARY KEY,


ngayduatin DATETIME NULL , tieude NVARCHAR(200) NULL ,
noidung NTEXT NULL , maphanloai INT NULL FOREIGN KEY
REFERENCES loaibantin(maphanloai)
)
Trong bng LOAIBANTIN, gi tr ct BANTINMOINHAT cho bit m s ca bn tin
thuc loi tng ng mi nht (c b sung sau cng).
Hy vit cc trigger cho bng BANTIN sao cho:
Khi mt bn tin mi c b sung, cp nht li ct BANTINMOINHAT ca dng
tng ng vi loi bn tin va b sung.
Khi mt bn tin b xo, cp nht li gi tr ca ct BANTINMOINHAT trong bng
LOAIBANTIN ca dng ng vi loi bn tin va xa l m s ca bn tin trc (da
vo ngy a tin). Nu khng cn bn tin no cng loi th gi tr ca ct ny bng 0.
Khi cp nht li m s ca mt bn tin v nu l bn tin mi nht th cp nht li gi
tr ct BANTINMOINHAT l m s mi.
5.1
CREATE PROCEDURE sp_insert_mathang( @mahang @tenhang
NVARCHAR(50), @macongty NVARCHAR(10) = NULL, @maloaihang
INT = NULL, @soluong INT = 0, @donvitinh NVARCHAR(20) =
NULL, @giahang money = 0) AS IF NOT EXISTS(SELECT mahang
FROM mathang WHERE mahang=@mahang) IF (@macongty IS NULL
OR EXISTS(SELECT macongty FROM nhacungcap WHERE
macongty=@macongty)) AND (@maloaihang IS NULL OR
EXISTS(SELECT maloaihang FROM loaihang WHERE
maloaihang=@maloaihang)) INSERT INTO mathang
VALUES(@mahang,@tenhang, @macongty,@maloaihang,
@soluong,@donvitinh,@giahang)
5.2
CREATE PROCEDURE sp_thongkebanhang(@mahang NVARCHAR(10))
AS SELECT mathang.mahang,tenhang,
SUM(chitietdathang.soluong) AS tongsoluong FROM mathang
LEFT OUTER JOIN chitietdathang ON

130/143

mathang.mahang=chitietdathang.mahang WHERE
mathang.mahang=@mahang GROUP BY mathang.mahang,tenhang
5.3 nh ngha hm
CREATE FUNCTION func_banhang() RETURNS TABLE AS RETURN
(SELECT mathang.mahang,tenhang, CASE WHEN
sum(chitietdathang.soluong) IS NULL THEN 0 ELSE
sum(chitietdathang.soluong) END AS tongsl FROM mathang
LEFT OUTER JOIN chitietdathang ON mathang.mahang =
chitietdathang.mahang GROUP BY mathang.mahang,tenhang)
S dng hm nh ngha
SELECT a.mahang,a.tenhang,soluong+tongsl FROM mathang AS a
INNER JOIN dbo.func_banhang() AS b ON a.mahang=b.mahang
5.4 nh ngha hm
CREATE TRIGGER trg_chitietdathang_insert ON chitietdathang
FOR INSERT AS BEGIN DECLARE @mahang NVARCHAR(100) DECLARE
@soluongban INT DECLARE @soluongcon INT SELECT
@mahang=mahang,@soluongban=soluong FROM inserted SELECT
@soluongcon=soluong FROM mathang WHERE mahang=@mahang IF
@soluongcon>=@soluongban UPDATE mathang SET
soluong=soluong@soluongban WHERE mahang=@mahang ELSE
ROLLBACK TRANSACTION END CREATE TRIGGER
trg_chitietdathang_update_soluong ON chitietdathang FOR
UPDATE AS IF UPDATE(soluong) BEGIN IF EXISTS SELECT
sohoadon FROM inserted WHERE soluong 0 ROLLBACK
TRANSACTION ELSE BEGIN UPDATE mathang SET soluong=soluong
(SELECT SUM(inserted.soluong ,deleted.soluong) FROM
inserted INNER JOIN deleted ON
inserted.sohoadon=deleted.sohoadon AND
inserted.mahang=deleted.mahang WHERE
inserted.mahang=mathang.mahang GROUP BY inserted.mahang)
WHERE mahang IN (SELECT DISTINCT mahang FROM inserted) IF
EXISTS SELECT mahang FROM mathang WHERE soluong 0 ROLLBACK
TRANSACTION END END
5.5

131/143

CREATE TRIGGER trg_chitietdathang_giaban ON chitietdathang


FOR INSERT,UPDATE AS IF UPDATE(giaban) IF EXISTS(SELECT
inserted.mahang FROM mathang INNER JOIN inserted ON
mathang.mahang=inserted.mahang WHERE
mathang.giahang>inserted.giaban) ROLLBACK TRANSACTION

132/143

Giao dch SQL


Giao dch SQL
Mt khi nim quan trng l khi nim giao dch (Transaction). Cc tnh cht mt giao
dch phi c m bo mt HQTCSDL, c xy dng trn HCSDL tng ng, trong
sut qu trnh hot ng s lun cho mt CSDL tin cy (d liu lun nht qun). Qun
tr giao dch nhm m bo mi giao dch trong h thng c cc tnh cht m mt giao
dch phi c. Mt iu cn ch l trong cc tnh cht ca mt giao dch, tnh cht nht
qun trc ht phi c m bo bi ngi lp trnh- ngi vit ra giao dch.
Giao dch v cc tnh cht ca giao dch
Mt giao dch (transaction) l mt hoc mt chui nhiu cu lnh SQL c kt hp li
vi nhau thnh mt khi cng vic. Cc cu lnh SQL xut hin trong giao dch thng
c mi quan h tng i mt thit vi nhau v thc hin cc thao tc c lp. Vic kt
hp cc cu lnh li vi nhau trong mt giao dch nhm m bo tnh ton vn d liu
v kh nng phc hi d liu. Trong mt giao dch, cc cu lnh c th c lp vi nhau
nhng tt c cc cu lnh trong mt giao dch i hi hoc phi thc thi trn vn hoc
khng mt cu lnh no c thc thi.
Cc c s d liu s dng nht k giao dch (transaction log) ghi li cc thay i m
giao dch to ra trn c s d liu v thng qua c th phc hi d liu trong trng
hp gp li hay h thng c s c.
Mt giao dch i hi phi c c bn tnh cht sau y:
Tnh nguyn t (Atomicity): Mi thay i v mt d liu hoc phi c thc
hin trn vn khi giao dch thc hin thnh cng hoc khng c bt k s thay
i no v d liu xy ra nu giao dch khng thc hin c trn vn. Ni
cch khc, tc dng ca cc cu lnh trong mt giao dch phi nh l mt cu
lnh n.
Tnh nht qun (Consistency):Tnh nht quan i hi sau khi giao dch kt
thc, cho d l thnh cng hay b li, tt c d liu phi trng thi nht qun
(tc l s ton vn d liu phi lun c bo ton).
Tnh c lp (Isolation):Tnh c lp ca giao dch c ngha l tc dng ca
mi mt giao dch phi ging nh khi ch mnh n c thc hin trn chnh h
thng . Ni cch khc, mt giao dch khi c thc thi ng thi vi nhng
giao dch khc trn cng h thng khng chu bt k s nh hng no ca cc
giao dch .

133/143

Tnh bn vng (Durability):Sau khi mt giao dch thc hin thnh cng,
mi tc dng m n to ra phi tn ti bn vng trong c s d liu, chod
l h thng c b li i chng na.
M hnh giao dch trong SQL
Giao dch SQL c nh ngha da trn cc cu lnh x l giao dch sau y:
BEGIN TRANSACTION: Bt u mt giao dch
SAVE TRANSACTION: nh du mt v tr trong giao dch (gi l im nh du).
ROLLBACK TRANSACTION: Quay lui tr li u giao dch hoc mt im nh du
trc trong giao dch.
COMMIT TRANSACTION: nh du im kt thc mt giao dch. Khi cu lnh ny
thc thi cng c ngha l giao dch thc hin thnh cng.
ROLLBACK [WORK]: Quay lui tr li u giao dch.
COMMIT [WORK]: nh du kt thc giao dch.
Mt giao dch trong SQL c bt u bi cu lnh BEGIN TRANSACTION. Cu lnh
ny nh du im bt u ca mt giao dch v c c php nh sau:
BEGIN TRANSACTION [tn_giao_tc]
Mt giao dch s kt thc trong cc trng hp sau
Cu lnh COMMIT TRANSACTION (hoc COMMIT WORK) c thc thi. Cu
lnh ny bo hiu s kt thc thnh cng ca mt giao dch. Sau cu lnh ny,
mt giao dch mi s c bt u.
Khi cu lnh ROLLBACK TRANSACTION (hoc ROLLBACK WORK) c
thc thi hu b mt giao dch v a c s d liu v trng thi nh trc
khi giao dch bt u. Mt giao dch mi s bt u sau khi cu lnh
ROLLBACK c thc thi.
Mt giao dch cng s kt thc nu trong qu trnh thc hin gp li (chng hn
h thng gp li, kt ni mng b t,...). Trong trng hp ny, h thng s
t ng phc hi li trng thi c s d liu nh trc khi giao dch bt u
(tng t nh khi cu lnh ROLLBACK c thc thi hu b mt giao dch).
Tuy nhin, trong trng hp ny s khng c giao dch mi c bt u.

134/143

Giao dch di y kt thc do lnh ROLLBACK TRANSACTION v mi thay i v


mt d liu m giao dch thc hin (UPDATE) u khng c tc dng.
BEGIN TRANSACTION giaotac1 UPDATE monhoc SET sodvht=4
WHERE sodvht=3 UPDATE diemthi SET diemlan2=0 WHERE
diemlan2 IS NULL ROLLBACK TRANSACTION giaotac1
cn giao dch di y kt thc bi lnh COMMIT v thc hin thnh cng vic cp nht
d liu trn cc bng MONHOC v DIEMTHI.
BEGIN TRANSACTION giaotac2 UPDATE monhoc SET sodvht=4
WHERE sodvht=3 UPDATE diemthi SET diemlan2=0 WHERE
diemlan2 IS NULL COMMIT TRANSACTION giaotac2
Cu lnh:
SAVE TRANSACTION tn_im_dnh_du
c s dng nh du mt v tr trong giao dch. Khi cu lnh ny c thc thi,
trng thi ca c s d liu ti thi im s c ghi li trong nht k giao dch.
Trong qu trnh thc thi giao dch c th quay tr li mt im nh du bng cch s
dng cu lnh:
ROLLBACK TRANSACTION tn_im_nh_du
Trong trng hp ny, nhng thay i v mt d liu m giao dch thc hin t im
nh du n trc khi cu lnh ROLLBACK c triu gi s b hu b. Giao dch s
c tip tc vi trng thi c s d liu c c ti im nh du . Hnh di m t
cho ta thy hot ng ca mt giao dch c s dng cc im nh du:

135/143

Hot ng ca 1 giao dch

Sau khi cu lnh ROLLBACK TRANSACTION c s dng quay lui li mt im


nh du trong giao dch, giao dch vn c tip tc vi cc cu lnh sau . Nhng
nu cu lnh ny c s dng quay lui li u giao dch (tc l hu b giao dch),
giao dch s kt thc v do cu lnh COMMIT TRANSACTION trong trng hp ny
s gp li.
Cu lnh COMMIT TRANSACTION trong giao dch di y kt thc thnh cng mt
giao dch
BEGIN TRANSACTION giaotac3 UPDATE diemthi SET diemlan2=0
WHERE diemlan2 IS NULL SAVE TRANSACTION a UPDATE monhoc

136/143

SET sodvht=4 WHERE sodvht=3 ROLLBACK TRANSACTION a UPDATE


monhoc SET sodvht=2 WHERE sodvht=3 COMMIT TRANSACTION
giaotac3
v trong v d di y, cu lnh COMMIT TRANSACTION gp li:
BEGIN TRANSACTION giaotac4 UPDATE diemthi SET diemlan2=0
WHERE diemlan2 IS NULL SAVE TRANSACTION a UPDATE monhoc
SET sodvht=4 WHERE sodvht=3 ROLLBACK TRANSACTION giaotac4
UPDATE monhoc SET sodvht=2 WHERE sodvht=3 COMMIT
TRANSACTION giaotac4
Giao dch lng nhau
Cc giao dch trong SQL c th c lng vo nhau theo tng cp. iu ny thng gp
i vi cc giao dch trong cc th tc lu tr c gi hoc t mt tin trnh trong mt
giao dch khc.
V d di y minh ho cho ta trng hp cc giao dch lng nhau.
Ta nh ngha bng T nh sau:
CREATE TABLE T ( A INT PRIMARY KEY, B INT )
v th tc sp_TransEx:
CREATE PROC sp_TranEx(@a INT,@b INT) AS BEGIN END BEGIN
TRANSACTION T1 IF NOT EXISTS (SELECT * FROM T WHERE A=@A )
INSERT INTO T VALUES(@A,@B)> IF NOT EXISTS (SELECT * FROM
T WHERE A=@A+1) INSERT INTO T VALUES(@A+1,@B+1) COMMIT
TRANSACTION T1
Li gi n th tc sp_TransEx c thc hin trong mt giao dch khc nh sau:
BEGIN TRANSACTION T3
Trong giao dch trn, cu lnh ROLLBACK TRANSACTION T3 hu b giao dch v do
tc dng ca li gi th tc trong giao dch khng cn tc dng, tc l khng c dng
d liu no mi c b sung vo bng T (cho d giao dch T1 trong th tc sp_tranex
thc hin thnh cng vi lnh COMMIT TRANSACTION T1).
Ta xt tip mt trng hp ca mt giao dch khc trong c li gi n th tc
sp_tranex nh sau :
137/143

BEGIN TRANSACTION EXECUTE sp_tranex 20,40 SAVE TRANSACTION


a EXECUTE sp_tranex 30,60 ROLLBACK TRANSACTION a EXECUTE
sp_tranex 40,80 COMMIT TRANSACTION
sau khi giao dch trn thc hin xong, d liu trong bng T s l:
A B
20 40
21 41
40 80
41 81
Nh vy, tc dng ca li gi th tc sp_tranex 30,60 trong giao dch b hu b bi
cu lnh ROLLBACK TRANSACTION trong giao dch.
Nh thy trong v d trn, khi cc giao dch SQL c lng vo nhau, giao dch ngoi
cng nht l giao dch c vai tr quyt nh. Nu giao dch ngoi cng nht c u thc
(commit) th cc giao dch c lng bn trong cng ng thi u thc.
V nu giao dch ngoi cng nht thc hin lnh ROLLBACK th nhng giao dch lng
bn trong cng chu tc ng ca cu lnh ny (cho d nhng giao dch lng bn trong
thc hin lnh COMMIT TRANSACTION).

138/143

Ph lc Giao trinh He quan tri CSDL-SQL


C s d liu mu s dng trong gio trnh
Trong ton b ni dung gio trnh, hu ht cc v d c da trn c s d liu mu
c m t di y. C s d liu ny c ci t trong h qun tr c s
d liu SQL Server 2000 v c s dng qun l sinh vin v im thi ca sinh vin
trong mt trng i hc. tin cho vic tra cu v kim chng i vi cc v
d, trong phn u ca ph lc chng ti gii thiu s qua v c s d liu ny.
C s d liu bao gm cc bng sau y:
Bng KHOA lu tr d liu v cc khoa hin c trong trng
Bng LOP bao gm d liu v cc lp trong trng
Bng SINHVIEN c s dng lu tr d liu v cc sinh vin trong trng.
Bng MONHOC bao gm cc mn hc (hc phn) c ging dy trong trng
Bng DIEMTHI vi d liu cho bit im thi kt thc mn hc ca cc sinh vin
Mi quan h gia cc bng c th hin qua s di y

Cc bng trong c s d liu, mi quan h gia chng v mt s rng buc c ci t


nh sau:

139/143

CREATE TABLE khoa ( makhoa NVARCHAR(5) NOT NULL


CONSTRAINT pk_khoa PRIMARY KEY, tenkhoa NVARCHAR(50)
NOT NULL , dienthoai NVARCHAR(15)
NULL )
CREATE TABLE lop ( malop NVARCHAR(10) NOT NULL
CONSTRAINT pk_lop PRIMARY KEY, tenlop NVARCHAR(30) NULL
, khoa SMALLINT NULL
, hedaotao NVARCHAR(25) NULL
,
namnhaphocINT NULL , siso INT
NULL , makhoa
NVARCHAR(5) NULL ) CREATE TABLE sinhvien ( masv
NVARCHAR(10) NOT NULL
CONSTRAINT pk_sinhvien PRIMARY KEY, hodem NVARCHAR(25)
NOT NULL , ten NVARCHAR(10) NOT NULL , ngaysinh
SMALLDATETIME NULL , gioitinh
BIT
NULL ,
noisinh NVARCHAR(100) NULL , malop NVARCHAR(10) NULL )
CREATE TABLE monhoc ( mamonhoc NVARCHAR(10) NOT NULL
CONSTRAINT pk_monhoc PRIMARY KEY, tenmonhoc
NVARCHAR(50) NOT NULL , sodvht SMALLINT NOT NULL )
CREATE TABLE diemthi ( mamonhoc NVARCHAR(10) NOT NULL ,
masv NVARCHAR(10) NOT NULL , diemlan1 NUMERIC(5, 2)
NULL , diemlan2 NUMERIC(5, 2) NULL,
CONSTRAINT pk_diemthi PRIMARY KEY(mamonhoc,masv) )
ALTER TABLE lop ADD CONSTRAINT fk_lop_khoa
FOREIGN KEY(makhoa) REFERENCES khoa(makhoa)
ON DELETE CASCADE ON UPDATE CASCADE ALTER TABLE sinhvien
ADD CONSTRAINT fk_sinhvien_lop FOREIGN KEY (malop)
REFERENCES lop(malop) ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE diemthi ADD CONSTRAINT fk_diemthi_monhoc
FOREIGN KEY (mamonhoc) REFERENCES monhoc(mamonhoc)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_diemthi_sinhvien FOREIGN KEY (masv)
REFERENCES sinhvien(masv) ON DELETE CASCADE ON UPDATE
CASCADE ALTER TABLE monhoc ADD CONSTRAINT chk_monhoc_sodht
CHECK(sodvht>0 and sodvht<=5) ALTER TABLE diemthi ADD
CONSTRAINT chk_diemthi_diemlan1
CHECK (diemlan1>=0 and diemlan1<=10),
CONSTRAINT chk_diemthi_diemlan2
CHECK (diemlan2>=0 and diemlan2<=10)

140/143

Tham gia ng gp
Ti liu: Gio trnh h qun tr c s d liu SQL - HCNHN
Bin tp bi: T HTTT i hc Cng nghip H Ni
URL: http://voer.edu.vn/c/0351a5c3
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Tng quan v DBMS v SQL sever
Cc tc gi: T HTTT i hc Cng nghip H Ni
URL: http://www.voer.edu.vn/m/df67417f
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Ngn ng nh ngha d liu
Cc tc gi: T HTTT i hc Cng nghip H Ni
URL: http://www.voer.edu.vn/m/a61dadee
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Ngn ng thao tc d liu
Cc tc gi: T HTTT i hc Cng nghip H Ni
URL: http://www.voer.edu.vn/m/d6a4172b
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Php ni
Cc tc gi: T HTTT i hc Cng nghip H Ni
URL: http://www.voer.edu.vn/m/67d8246a
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Lm vic vi View ( khung nhn )
Cc tc gi: T HTTT i hc Cng nghip H Ni
URL: http://www.voer.edu.vn/m/3d2ab5b9
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Bo mt trong SQL
Cc tc gi: T HTTT i hc Cng nghip H Ni
URL: http://www.voer.edu.vn/m/ac9d8195

141/143

Giy php: http://creativecommons.org/licenses/by/3.0/


Module: Th tc lu tr
Cc tc gi: T HTTT i hc Cng nghip H Ni
URL: http://www.voer.edu.vn/m/42411b5a
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Hm v trigger
Cc tc gi: T HTTT i hc Cng nghip H Ni
URL: http://www.voer.edu.vn/m/493b4dc2
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Giao dch SQL
Cc tc gi: T HTTT i hc Cng nghip H Ni
URL: http://www.voer.edu.vn/m/18941bab
Giy php: http://creativecommons.org/licenses/by/3.0/
Module: Ph lc Giao trinh He quan tri CSDL-SQL
Cc tc gi: T HTTT i hc Cng nghip H Ni
URL: http://www.voer.edu.vn/m/76b8e0c0
Giy php: http://creativecommons.org/licenses/by/3.0/

142/143

Chng trnh Th vin Hc liu M Vit Nam


Chng trnh Th vin Hc liu M Vit Nam (Vietnam Open Educational Resources
VOER) c h tr bi Qu Vit Nam. Mc tiu ca chng trnh l xy dng kho
Ti nguyn gio dc M min ph ca ngi Vit v cho ngi Vit, c ni dung phong
ph. Cc ni dung u tun th Giy php Creative Commons Attribution (CC-by) 4.0
do cc ni dung u c th c s dng, ti s dng v truy nhp min ph trc
ht trong trong mi trng ging dy, hc tp v nghin cu sau cho ton x hi.
Vi s h tr ca Qu Vit Nam, Th vin Hc liu M Vit Nam (VOER) tr thnh
mt cng thng tin chnh cho cc sinh vin v ging vin trong v ngoi Vit Nam. Mi
ngy c hng chc nghn lt truy cp VOER (www.voer.edu.vn) nghin cu, hc
tp v ti ti liu ging dy v. Vi hng chc nghn module kin thc t hng nghn
tc gi khc nhau ng gp, Th Vin Hc liu M Vit Nam l mt kho tng ti liu
khng l, ni dung phong ph phc v cho tt c cc nhu cu hc tp, nghin cu ca
c gi.
Ngun ti liu m phong ph c trn VOER c c l do s chia s t nguyn ca cc
tc gi trong v ngoi nc. Qu trnh chia s ti liu trn VOER tr ln d dng nh
m 1, 2, 3 nh vo sc mnh ca nn tng Hanoi Spring.
Hanoi Spring l mt nn tng cng ngh tin tin c thit k cho php cng chng d
dng chia s ti liu ging dy, hc tp cng nh ch ng pht trin chng trnh ging
dy da trn khi nim v hc liu m (OCW) v ti nguyn gio dc m (OER) . Khi
nim chia s tri thc c tnh cch mng c khi xng v pht trin tin phong
bi i hc MIT v i hc Rice Hoa K trong vng mt thp k qua. K t , phong
tro Ti nguyn Gio dc M pht trin nhanh chng, c UNESCO h tr v c
chp nhn nh mt chng trnh chnh thc nhiu nc trn th gii.

143/143

You might also like