2. Trn Nguyn Phong Chng 1: NGN NG NH NGHA D LIU Binary Int
Smallint Bit Money Smallmoney Char Nchar Text Datetime Ntext
Tinyint Decimal Nvarchar Varbinary Float Real Varchar Image
Smalldatetime
9. Giao trnh thc hanh SQL CREATE [CLUSTEREDNONCLUSTERED] INDEX
index_name ON table_name(column_name [, column_name]...) CREATE
NONCLUSTERED INDEX idx_nhanvien_madv ON nhanvien(madv)
10. Trn Nguyn Phong CREATE VIEW view_name[(column_name [,
column_name]...)] AS select_statement CREATE VIEW thongtin_nv AS
SELECT manv,hoten,datediff(year,ngaysinh,getdate()),tendv FROM
nhanvien,donvi WHERE nhanvien.madv=donvi.madv CREATE VIEW
thongtin_nv(manv,hoten,tuoi,donvi)
11. Giao trnh thc hanh SQLAS SELECT
manv,hoten,datediff(year,ngaysinh,getdate()),tendv FROM
nhanvien,donvi WHERE nhanvien.madv=donvi.madv
12. Trn Nguyn Phong Chng 2: NGN NG THAO TAC D LIU truy xut d
liu t cc dng v cc ct ca mt hay nhiu bng, khung nhn,ta s dng cu lnh
SELECT. Cu lnh ny c th dng thc hin php chn (tc ltruy xut mt tp con
cc dng trong mt hay nhiu bng), php chiu (tc l truyxut mt tp con cc
ct trong mt hay nhiu bng) v php ni (tc l lin kt ccdng trong hai hay
nhiu bng truy xut d liu). C php chung ca cu lnh SELECT c dng nh
sau: SELECT [ ALL | DISTINCT ] select_list [ INTO [ newtable_name
]] FROM { table_name | view_name } ................ [,{table_name |
view_name }] [WHERE clause ] [GROUP BY clause ] [HAVING BY clause ]
[ORDER BY clause ] [COMPUTE clause ]Ch : Cc thnh phn trong mt cu
lnh SELECT phi c s dng theo th tc nu trn.1.1 Xc nh bng bng mnh FROM
Mnh FROM trong cu lnh SELECT c s dng nhm ch nh cc bngv khung nhn cn
truy xut d liu. Sau mnh FROM l danh sch tn cc bngv khung nhn tham
gia vo truy vn (tn ca cc bng v khung nhn c phn cchnhau bi du phy).
SELECT select_list FROM {table_nameview_name list}
13. Giao trnh thc hanh SQL n gin ho cu hi, ta c th s dng cc b
danh (alias) cho cc bng haykhung nhn. B danh c gn trong mnh FROM
bng cch ch nh b danh sautn bng. V d cu lnh sau gn b danh n1 cho bng
nhanvien. SELECT ten, diachi FROM nhanvien n11.2 Mnh WHERE Mnh
WHERE trong cu lnh SELECT xc nh cc iu kin i vi vic truyxut d liu.
Sau mnh WHERE l mt biu thc logic v ch nhng dng d liuno tho mn biu
thc sau WHERE mi c hin th trong kt qu truy vn. Trongmnh WHERE thng
s dng: Cc ton t so snh Gii hn ( BETWEEN v NOT BETWEEN). Danh sch
(IN, NOT IN) Khun dng (LIKE v NOT LIKE). Cc gi tr cha bit (IS NULL
v IS NOT NULL). Kt hp cc iu kin (AND, OR).Cc ton t so snh: Ton t
ngha = Bng > Ln hn < Nh hn >= Ln hn hoc bng Khng ln hn
!< Khng nh hnV d 2.1: Truy vn sau y cho bit tn, a ch v in thoi
ca nhng nhn vinc h s lng ln hn 1.92: SELECT ten, diachi, dienthoai
FROM nhanvien WHERE hsluong>1.92Gii hn (BETWEEN v NOT BETWEEN) T
kho BETWEEN v NOT BETWEEN c s dng nhm ch nh khonggi tr tm kim i vi
cu lnh SELECT. Cu lnh di y cho bit tn v ia chca nhng nhn vin c h s
lng nm trong khong 1.92 n 3.11 SELECT ten, tuoi, diachi FROM
nhanvien WHERE hsluong BETWEEN 1.92 AND 3.11
14. Trn Nguyn PhongDanh sch (IN v NOT IN) T kho IN c s dng khi
ta cn ch nh iu kin tm kim d liu cho culnh SELECT l mt danh sch cc
gi tr. Sau IN (hoc NOT IN) c th l mt danhsch cc gi tr hoc l mt cu
lnh SELECT khc. V d 2.2: hin th thng tin v cc nhn vin c h s lng l
1.86, 1.92hoc 2.11, thay v s dng cu lnh: SELECT * FROM nhanvien
WHERE hsluong=1.86 OR hsluong=1.92 OR hsluong=2.11Ta c th s dng cu
lnh sau: SELECT * FROM nhanvien WHERE hsluong IN (1.86, 1.92,
2.11)Cc k t i din v mnh LIKE T kho LIKE (NOT LIKE) s dng trong cu
lnh SELECT nhm m t khundng ca d liu cn tm kim. Chng thng c kt hp vi
cc k t i din sauy: K t i din ngha % Chui k t bt k gm khng hoc nhiu
k t - K t n bt k [] K t n bt k trong gii hn c ch nh (v d [a-f]) hay
mt tp (v d [abcdef]) [^] K t n bt k khng nm trong gii hn c ch nh (
v d [^a-f] hay mt tp (v d [^abcdef]). V d 2.3: Cu lnh di y hin th
thng tin v cc nhn vin c tn l Nam SELECT * FROM nhanvien WHERE hoten
LIKE % NamIS NULL v NOT IS NULL Gi tr NULL c th c nhp vo mt ct cho
php chp nhn gi tr NULLtheo mt trong ba cch sau: Nu khng c d liu c a
vo v khng c mc nh cho ct hay kiu d liu trn ct . Ngi s dng trc tip a
gi tr NULL vo cho ct . Mt ct c kiu d liu l kiu s s cha gi tr NULL
nu gi tr c ch nh gy trn s. Trong mnh WHERE, ta s dng IS NULL hoc IS
NOT NULL nh sau: WHERE col_name IS [NOT] NULLCc ton t logic Cc ton
t logic s dng trong mnh WHERE bao gm AND, OR, NOT.AND v OR c s dng
kt hp nhiu iu kin trong WHERE.1.3 Danh sch chn trong cu lnh
SELECT
15. Giao trnh thc hanh SQL n tt c cc ct trong bng Khi mun truy
xut tt c cc ct trong bng, ta s dng cu lnh SELECT c cphp sau: SELECT
* FROM table_name Khi s dng cu lnh ny, cc ct trong kt qu s c hin th
theo th t mchng c to ra trong cu lnh CREATE TABLE.* Chn cc ct c ch
nh chn ra mt s ct no trong bng, ta s dng cu lnh SELECT c cphp sau:
SELECT tn_ct [,...,tn_ct_n] FROM tn_bng | khung_nhn Cc tn ct trong
cu lnh phi c phn cch nhau bng du phy.Ch : Trong cu lnh SELECT, th t
ca cc ct c nu ra trong cu lnh sxc nh th t ca cc ct c hin th ra
trong kt qu.* i tn cc ct trong cc kt qu Khi kt qu c hin th, tiu ca
cc ct mc nh s l tn ca cc ct khin c to ra trong cu lnh CREATE TABLE.
Tuy nhin, cc tiu tr nnthn thin hn, ta c th i tn cc tiu ca cc ct. lm
c vic ny, ta cth s dng mt trong hai cch vit sau: tiu__ct = tn_ct
hoc tn_ct tiu__ct V d 2.4: Hai cu lnh sau s t tiu H v tn cho l
hoten v a chcho ct diachi khi kt qu c hin th cho ngi s dng: SELECT
H v tn=hoten, a ch = diachi FROM nhanvien Hoc: SELECT hoten H v
tn,diachi ia ch FROM nhanvien* S dng cu trc CASE thay i d liu trong
kt qu Trong cu lnh SELECT, ta c th s dng cu trc CASE thay i cch
hinth kt qu ra mn hnh. V d 2.5: Cu lnh sau cho bit h tn, h s lng v
xp loi lng ca nhnvin theo h s lng: SELECT H v tn = ten, H s lng =
hsluong, Xp loi lng = CASE WHEN lsluong=NULL THEN Khng xc nh
16. Trn Nguyn Phong WHEN hsluong= Ln hn hoc bng < Nh hn Khng
ln hn !< Khng nh hn.1.9.2 Cc loi php ni* Php ni bng v php ni t
nhin Mt php ni bng (equijoin) l mt php ni trong gi tr ca cc ct cs
dng ni c so snh vi nhau da trn tiu chun bng v tt c cc ct trongcc
bng tham gia ni u c a ra trong kt qu. V d 2.14: SELECT * FROM
nhanvien, donvi WHERE nhanvien.madonvi = donvi.madonvi Trong kt qu
ca cu lnh trn, ct madonvi v tendonvi xut hin hai ln trongkt qu php
ni v nh vy l khng cn thit. loi b iu ny, ta c th s dngphp ni t nhin
(natural join) bng cch loi b i cc ct trng tn vi nhau.* Php ni vi cc
iu kin b sung Trong mnh WHERE ca cu lnh ni, ta c th b sung cc iu
kin tmkim khc. V d 2.15: SELECT hoten, diachi, tendonvi FROM
nhanvien, donvi WHERE nhanvien.madonvi = donvi.madonvi AND
Nhanvien.hsluong>=2.11* Php t ni v cc b danh Php t ni l php ni m
trong ta so snh cc gi tr bn trong mt ct cacng mt bng. V d 2.16: Tm
nhng nhn vin c cng a ch vi nhn vin Trn Nguyn Phong SELECT n1.hoten
FROM nhanvien n1, nhanvien n2 WHERE n2.hoten=Trn Nguyn Phong AND
n1.diachi = n2.diachi* Php ni khng da trn tiu chun bng Trong php ni
ny, cc ct c s dng kt ni c so snh vi nhaukhng da trn iu kin bng.*
Php ni ngoi (outer join) Trong cc php ni cp trn, ch nhng dng hp l
(tc l nhng dngc gi tr trong cc ct c ch nh tho m iu kin kt ni) mi c
a ra trongkt qu. Theo mt ngha no , nhng php ni ny loi b thng tin
cha trongnhng dng khng hp l. Tuy nhin, i khi ta cng cn gi li nhng
thng tinkhng hp l bng cch cho php nhng dng khng hp l c mt trong kt
qu ca
22. Trn Nguyn Phongphp ni. lm iu ny, ta c th s dng php ni ngoi.
Giao tc SQL cung cphai php ni ngoi: Php ni ngoi tri (*=) : Php ni
ny cho php ly tt c cc t bng c tn u tin. Php ni ngoi phi (=*) : Php
ni ny cho php ly tt c cc dng t bng c tn th hai. V d 2.17: Gi s ta c
hai bng R v S c ni dung nh sau A B C D ----- -----------
----------- ----- aaa 2 4 aaaa fff 8 4 f2 ggg 2 7 g4 xxx 2 12 gdf
ggg 2 12 khf sss 45 0 k3h Bng R E F G ----- ----------- -----------
aaa 3 (null) xxx 23 26 abc 3 6 (null)12 (null) sss 20 3 Bng SKhi cu
lnh: SELECT * FROM R,S WHERE R.A = S.ECho kt qu l: A B C D E F G
---- ----- ----- ----- ----- ------ -------- aaa 2 4 aaaa aaa 3
(null) xxx 2 12 gdf xxx 23 26 sss 45 0 k3h sss 20 3Cn cu lnh:
23. Giao trnh thc hanh SQL SELECT * FROM R,S WHERE R.A *=
S.ECho kt qu l: A B C D E F G --- ---- ---- ----- ----- ------
------ aaa 2 4 aaaa aaa 3 (null) fff 8 4 f2 (null) (null) (null)
ggg 2 7 g4 (null) (null) (null) xxx 2 12 gdf xxx 23 26 ggg 2 12 khf
(null) (null) (null) sss 45 0 k3h sss 20 3V cu lnh SELECT * FROM
R,S WHERE R.A =* S.ECho kt qu l: A B C D E F G ---- ----- -----
----- ----- ------ --------- aaa 2 4 aaaa aaa 3 (null) xxx 2 12 gdf
xxx 23 26 (null)(null) (null) (null) abc 3 6 (null)(null) (null)
(null) (null)12 (null) sss 45 0 k3h sss 20 3Cc gii hn ca php ni
ngoi Giao tc SQL khng cho php hai php ni ngoi lng nhau v php
nitrong lng vo trong php ni ngoi. Tuy nhin, mt bng c th tham gia
trong mtphp ni trong v l bng ngoi (outer table) trong mt php ni
ngoi. Bng di y cho bit cc cch kt hp hp l v khng hp l ca phpni trong
v php ni ngoi: Hp l Khng hp l T1 =* T2 *= T3 T1 *= T2 *= T3 T1 = T2
*= T3 T1 *= T2 = T3 T1 *= T2 =* T3 T3 T3
24. Trn Nguyn Phong || || * * T2 =* T1 *= T4 T2 =* T1 =* T4 * *
|| || T5 T5 T3 T3 * || || * T2 *= T1 =* T4 T2 *= T1 *= T4 || || * *
T5 T5* Php ni v cc gi tr NULL Nu trong cc ct ca cc bng tham gia php
ni c cc gi tr NULL th ccgi tr NULL c xem nh l khng bng nhau. Chng
hn ta c hai bng: A B C D ------ --------- -------- -------- 1 b1
Null d1 Null b2 4 d2 4 b3 Bng R Bng S Th cu lnh: SELECT * FROM R, S
WHERE A *= C S cho kt qu l: A B C D ------ ------ ------ ------ 1
b1 Null Null Null b2 Null Null 4 b3 4 D21.10 To cc dng thng k d liu
vi COMPUTE ... BY Ta s dng mnh COMPUTE BY kt hp vi cc hm gp dng v
mnh ORDER BY sn sinh ra cc cc bo co (report) nhm thng k cc gi tr d
liu
25. Giao trnh thc hanh SQLtheo tng nhm. Nhng gi tr thng k ny
xut hin nh l nhng dng b sungtrong kt qu truy vn. Mt mnh COMPUTE BY
cho php ta quan st c cc chitit v d liu ln cc gi tr thng k. Ta c th
tnh cc gi tr thng k cho ccnhm con (subgroups) v ta cng c th tnh ton
nhiu hm gp trn cng mtnhm. Mnh COMPUTE BY c c php nh sau: COMPUTE
row-aggregate(col_name) [,...,row_aggregate(col_name)] BY col_name
[,...,col_name] Cc hm gp c th s dng c vi COMPUTE BY bao gm SUM,
AVG,MIN, MAX v COUNT. V d 2.18: Cu lnh di y cho bit h tn, tn n v h
s lng ca nhnvin ng thi cho bit lng trung bnh ca cc nhn vin trong mi
n v SELECT hoten,tendonvi,hsluong FROM nhanvien,donvi WHERE
nhanvien.madonvi=donvi.madonvi ORDER BY nhanvien.madonvi COMPUTE
AVG(hsluong) BY nhanvien.madonviKt qu ca truy vn ny s nh sau: Hoten
tendonvi hsluong --------------- -------------- --------------
Nguyn Th Hoa Phng k ton 2.11 avg =========== 2.11 L Hoi Nam Phng T
chc 1.86 Hong Nam Phong Phng T chc 3.21 avg =========== 2.535 Trn
Nguyn Phong Phng iu hnh 1.92 Nguyn Hu Tnh Phng iu hnh 1.92 avg
=========== 1.92 Nguyn Trung Kin Phng ti v 1.86
26. Trn Nguyn Phong avg =========== 1.86Khi s dng mnh COMPUTE
... BY cn tun theo cc qui tc di y: T kha DISTINCT khng cho php s
dng vi cc hm gp dng Cc ct s dng trong mnh COMPUTE phi xut hin trong
danh sch chn. Khng s dng SELECT INTO trong mt cu lnh SELECT c s dng
COMPUTE. Nu s dng mnh COMPUTE ... BY th cng phi s dng mnh ORDER BY.
Cc ct lit k trong COMPUTE BY phi ging ht hay l mt tp con ca nhng g
c lit k sau ORDER BY. Chng phi c cng th t t tri qua phi, bt u vi
cng mt biu thc v khng b qua bt k mt biu thc no. Chng hn nu mnh
ORDER BY c dng: ORDER BY a, b, c Th mnh COMPUTE BY c dng di y l hp
l: COMPUTE row_aggregate (column_name) BY a, b, c COMPUTE
row_aggregate (column_name) BY a, b COMPUTE row_aggregate
(column_name) BY a V cc dng di y l sai COMPUTE row_aggregate
(column_name) BY b, c COMPUTE row_aggregate (column_name) BY a, c
COMPUTE row_aggregate (column_name) BY c Phi s dng mt tn ct hoc mt
biu thc trong mnh ORDER BY, vic sp xp (order) khng c thc hin da trn
tiu ct. T kho COMPUTE c th c s dng m khng c BY v khi ORDER BY l ty
chn.1.11 Thng k d liu vi GROUP BY v HAVING Ta c th s dng cc mnh
GROUP BY v HAVING thng k d liu.GROUP BY t chc d liu vo cc nhm,
HAVING thit lp cc iu kin ln ccnhm trong kt qu truy vn. Nhng mnh ny
thng c s dng kt hp vinhau (HAVING c s dng khng km vi GROUP BY c th
to ra nhng ktqu nhm ln). Cc hm gp tr v cc gi tr tm lc cho c bng hoc
cho cc nhm trongbng. Do , chng thng c s dng vi GROUP BY. Cc hm gp c
th xuthin trong mt dang sch chn hay trong mnh HAVING, nhng khng c
sdng trong mnh WHERE. Ta c th s dng cc hm gp di y vi GROUP BY
(Trong expressionl mt tn ct).
27. Giao trnh thc hanh SQL Hm gp Chc nng SUM([ALL | DISTINCT]
expression) Tnh tng cc gi tr. AVG([ALL | DISTINCT] expression) Tnh
trung bnh ca cc gi tr COUNT([ALL | DISTINCT] expression) S cc gi tr
trong biu thc. COUNT(*) S cc dng c chn. MAX(expression) Tnh gi tr
ln nht MIN(expression) Tnh gi tr nh nht Trong , SUM v AVG ch lm vic
vi nhng gi tr kiu s. SUM, AVG,COUNT, MAX v MIN b qua cc gi tr null
cn COUNT(*) th khng. V d 2.19: Cu lnh di y cho bit h s lng trung
bnh ca cc nhn vintheo tng n v: SELECT donvi.madonvi,tendonvi,
avg(hsluong) FROM nhanvien,donvi WHERE nhanvien.madonvi =
donvi.madonvi GROUP BY donvi.madonvi,tendonviCh : Danh sch cc tn ct
trong danh sch chn ca cu lnh SELECT v danhsch cc tn ct sau GROUP BY
phi nh nhau, nu khng cu lnh s khng hp l.V d cu lnh di y l khng ng:
SELECT donvi.madonvi,tendonvi, avg(hsluong) FROM nhanvien,donvi
WHERE nhanvien.madonvi = donvi.madonvi GROUP BY donvi.madonvi Mnh
HAVING thit lp cc iu kin i vi mnh GROUP BY tng tnh cch thc mnh
WHERE thit lp cc iu kin cho cu lnh SELECT. Mnh HAVING s khng c ngha
nu nh khng s dng kt hp vi mnh WHERE. C mt im khc bit gia HAVING v
WHERE l trong iu kin tmkim ca WHERE khng c c cc hm gp trong khi
HAVING li cho php sdng cc hm gp trong iu kin tm kim ca mnh. Mnh
HAVING c ththam chiu n bt k mc no trong danh sch chn v mnh HAVING c
thcha ti a 128 iu kin tm kim. V d 2.20: Cu lnh di y cho bit h s lng
trung bnh ca cc nhn vintheo tng n v v ch hin th nhng n v c h s lng
trung bnh ln hn 1.92 SELECT donvi.madonvi,tendonvi, avg(hsluong)
FROM nhanvien,donvi WHERE nhanvien.madonvi = donvi.madonvi GROUP BY
donvi.madonvi,tendonvi HAVING avg(hsluong)>1.92
28. Trn Nguyn Phong (SELECT [ALL|DISTINCT] subquery_select_list
[FROM {table_name|view_name} [optimizer_hints]
[[,table_name2|view_bame2} [optimizer_hints]
[...,table_name16|view_name16}[optimizer_hints]]] [WHERE clause]
[GROUP BY clause] [HAVING clause])(1) WHERE expression [NOT]IN
(subquery)(2) WHERE expression comparison_operator
[ANY|ALL](subquery)(3) WHERE [NOT]EXISTS (subquery) SELECT * FROM
nhanvien WHERE madonvi NOT IN ( SELECT madonvi FROM donvi WHERE
dienthoai like 82%)
29. Giao trnh thc hanh SQL INSERT [INTO] table_name
VALUES(value1, value2, ...) INSERT INTO nhanvien VALUES(NV02003,L
Th Mai,23/5/72, NULL,523312,1.92,02) INSERT [INTO]
table_name(col1,col2,..., colN) VALUES(value1, value2,
...,valueN)INSERT INTO
nhanvien(manv,hoten,diachi)VALUES(NV03002,Nguyn Th Hanh Dung,56 Trn
Phu)INSERT INTO luong_nhanvienSELECT hoten,hsluong*210000 FROM
nhanvien
32. Trn Nguyn Phong Chng 3: NGN NG IU KHIN GRANT ALL |
statement [,...,statementN ] TO account [,...,accountN]GRANT ALL |
permission [,...,permissionN] ON table_name |view_name [(column1
[,...,columnN])] |ON stored_procedureTO account
[,...,accountN]
33. Giao trnh thc hanh SQL GRANT CREATE TABLE, CREATE VIEW TO
db_user GRANT SELECT, UPDATE ON
nhanvien(hoten,diachi,dienthoai,hsluong) TO db_user1,
db_user2REVOKE ALL | statement [,...,statementN]FROM account
[,...,accountN]REVOKE ALL | permission [,...,permissionN]} ON
table_name | view_name [(column [,...,columnN])] |
stored_procedureFROM account [,...,accountN ]
35. Giao trnh thc hanh SQL Chng 4: THU TUC LU TR VA TRIGGER Cc
th tc lu tr l mt trong nhng i tng c s d liu. C th xemchng tng t nh
nhng th tc trong cc ngn ng lp trnh. Mi mt th tc lutr c th c cc kh
nng sau: Nhn cc tham s u vo, thc thi cc cu lnh bn trong th tc v tr
v cc gi tr. Bn trong mi th tc c th cha cc cu lnh nhm thc hin cc
thao tc trn c s d liu (k c vic gi n cc th tc lu tr khc) Tr v mt gi
tr trng thi thng qua c th xc nh vic thc thi th tc l thnh cng hay b
li. Vic s dng cc th tc lu tr bn trong c s d liu s mang li nhng lich
sau: Th tc lu tr cho php module ho cng vic, to iu kin thun li cho
vic thc hin cc thao tc trn d liu. Th tc lu tr c phn tch, ti u v bin
dch khi to ra nn vic thc thi chng nhanh hn nhiu so vi vic s dng mt
tp cc cu lnh giao tc SQL theo nhng cch thng thng. Th tc lu tr cho
php chng ta thc hin cng mt yu cu bng mt cu lnh n gin thay v phi s
dng nhiu dng lnh SQL. iu ny s lm gim thiu s lu thng trn mng. Thay v
cp pht quyn trc tip cho ngi s dng trn cc cu lnh SQL, ta c th cp pht
quyn cho ngi s dng thng qua cc th tc lu tr, nh tng kh nng bo mt i
vi h thng. To cc th tc lu tr to mt sp, ta s dng cu lnh CREATE
PROCEDURE c c php nh sau: CREATE PROCEDURE procedure_name [;number]
[(parameter1 [,parameter2]...[parameter255])] AS sql_statements V d
4.1: CREATE PROC sp_list @bten char(20) AS SELECT hoten, ngaysinh,
diachi FROM nhanvien WHERE hoten= @btenCh : Nu khi gi th tc, chng
ta truyn tham s cho th tc di dng:
36. Trn Nguyn Phong @tham_s = gi_trTh th t cc tham s khng cn
phi tun theo th t nh khi to th tc bng culnh CREATE PROCEDURE. Tuy
nhin, nu nh c mt tham s c truyn gitr theo cch trn th tt c cc tham s
cn li cng phi c truyn gi tr theo cch. Ta c th gn mt gi tr mc nh cho
tham s trong cu lnh CREATEPROCEDURE. Gi tr ny, c th l hng bt k, s c
ly lm tham s ca th tckhi ngi s dng khng cung cp gi tr cho tham s
khi gi th tc. V d 4.2: CREATE PROC sp_list;2 @bten char(20)=Nguyen
Van A AS SELECT * FROM nhanvien WHERE hoten = @bten Vi th tc trn,
nu ta gi msp_list;2 m khng c tham s th th tc s lytham s mc nh l
Nguyn Vn A cho @bten. Gi tr mc nh c th NULL. Trong trng hp ny, nu
ngi s dng khngcung cp tham s, SQL Server s thi hnh th tc theo cc
tham s khc. V d 4.3: Vi cu lnh CREATE PROC sp_list;3 @bten
char(20)=NULL,@bluong float AS SELECT * FROM nhanvien WHERE
hoten=@bten AND hsluong=@bluong Ta th gi th tc trn nh sau:
msp_list;3 @btuoi=23 m khng b li. Mc nh c th bao gm cc k t i din
(%, _, [], [^] ) nu th tc s dngtham s vi t kha LIKE. V d 4.4:
CREATE PROC sp_list;4 @bten char(20) =Trn% AS SELECT * FROM
nhanvien WHERE hoten LIKE @bten Thng tin tr v t cc th tc lu trCc gi
tr trng thi tr v: Cc th tc c th tr v mt gi tr nguyn c gi l mt trng
thi tr v. Gitr ny ch ra cho bit th tc c thc hin thnh cng hay gp li
v nguyn nhnca li (SQL Server nh ngha sn mt tp cc gi tr tr v, cc gi
tr ny nmtrong khong [-99;0]; trong gi tr tr v bng 0 tc l vic thc
hin th tc thnhcng, cc gi tr cn li cho bit nguyn do khi b li).Gi tr
tr v do ngi s dng nh ngha Ngi s dng c th nh ngha cc gi tr tr v ca
mnh trong cc th tclu tr bng cch b sung mt tham s vo cu lnh RETURN.
Tt c cc s nguynngoi tr cc gi tr dnh ring cho h thng u c th c s
dng.
37. Giao trnh thc hanh SQL V d 4.5: CREATE PROC sp_exam @bten
char(20) AS IF EXISTS (SELECT * FROM nhanvien WHERE hoten = @bten)
RETURN 1 ELSE RETURN 2Cc tham s tr v Khi c hai cu lnh CREATE
PROCEDURE v EXECUTE cha mc chnOUTPUT cho tn mt tham s, th tc c th s
dng mt bin tr v tr ca thams n ngi gi. Bng vic s dng t kho OUTPUT,
bt c s thay i no ncng vn cn gi li sau khi th tc c thc hin, v cc bin
c th c s dngtrong cc cu lnh SQL b sung sau trong tp lnh hay th tc c
gi. Nu tkho OUTPUT khng c s dng, vic thay i n tham s s khng c gi
lisau khi kt thc thc hin th tc. Ngoi ra, ta cn c th dng RETURN tr v
gitr. Mt th tc lu tr c th s dng bt k hoc tt c kh nng sau tr v: Mt
hoc nhiu tp cc gi tr. Mt gi tr tr v r rng (s dng cu lnh RETURN). Mt
tham s OUTPUT. Nu chng ta ch nh OUTPUT khi thc hin mt th tc nhng
tham s tngng khng c nh ngha vi OUTPUT khi to th tc th s b li. Tuy
nhin nuta nh ngha OUTPUT cho mt tham s trong th tc nhng khng ch
nhOUTPUT khi thc hin th vn khng b li (gi tr tham s khi s khng c
trv). V d 4.6: CREATE PROC Chia @sobichia real,@sochia real, @kqua
real OUTPUT AS IF (@sochia =0) Print Division by zero ELSE SELECT
@kqua = @sobichia / @sochiaKhi nu ta thc hin nh sau: DECLARE
@ketqua real EXEC Chia 100, 2, @ketqua OUT SELECT @ketquaS cho kt
qu l: ---------------------- 50.0Cn nu thc hin DECLARE @ketqua real
EXEC Chia 100, 2, @ketqua SELECT @ketqua
38. Trn Nguyn PhongS cho kt qu l: ----------------------
(null)I.3. Cc qui tc s dng cho sp Sau y l mt s qui tc cn lu khi to
cc th tc lu tr Cu lnh CREATE PROCEDURE khng th kt hp vi cc cu lnh
SQL khc trong mt khi lnh n (single batch). Bn thn nh ngha CREATE
PROCEDURE c th bao gm bt k s lng cng nh cu lnh SQL no ngoi tr nhng
cu lnh sau: CREATE VIEW CREATE TRIGGER CREATE DEFAULT CREATE
PROCEDURE CREATE RULE Cc i tng CSDL khc c th c to bn trong mt th tc
lu tr. Ta c th tham chiu mt i tng c to trong cng th tc min l n c to
trc khi tham chiu. Bn trong mt th tc, ta khng th to mt i tng, xo n
v sau to mt i tng mi vi cng tn. Ta c th tham chiu cc bng tm thi bn
trong mt th tc. Nu ta thc thi mt th tc m gi n th tc khc, th tc c gi
c th truy cp n mi i tng ngoi tr cc bng tm thi c to bi th tc u tin.
Nu ta to mt bng tm thi ring (private temporary table) bn trong mt
th tc, bng tm thi ch tn ti cho nhng mc ch ca th tc ; n s mt i khi
thot ra khi th tc. S tham s ti a ca mt th tc l 255. S bin cc b v
ton cc trong mt th tc ch b gii hn bi kh nng b nh. Cc th tc tm thi
cc b (private) v ton cc (public), tng t nh cc bng tm thi, c th c to
vi du # v ## ng trc tn th tc. # biu din th tc tm thi cc b cn ## biu
din th tc tm thi ton cc.I.4 Xc nh tn bn trong cc th tc Bn trong mt
th tc, tn cc i tng c s dng vi cu lnh ALTERTABLE, CREATE TABLE, DROP
TABLE, TRUNCATE TABLE, CREATE INDEX,DROP INDEX, UPDATE STATISTICS v
DBCC phi c xc nh vi tn cangi s hu i tng (object owners name) nu nh
nhng ngi dng (user) khcs dng th tc. V d, ngi dng Mary, l s hu ch ca
bng marytab, phi chnh tn ca bng ca mnh khi n c s dng vi mt trong
nhng cu lnh nynu c ta mun nhng user khc c th thc hin th tc m trong
bng c sdng. Qui tc ny l cn thit v tn i tng c phn tch khi cc th tc
cchy. Nu marytab khng c ch nh v user John tm cch thc hin th tc,
SQL
39. Giao trnh thc hanh SQLs tm bng marytab do John s hu. V d di
y l mt cch dng ng, n ch racho SQL Server tm bng marytab do Mary s
hu: CREATE PROC p1 AS CREATE INDEX marytab_ind ON
mary.marytab(col1)I.5 i tn cc th tc: S dng th tc: sp_rename
old_name, new_name Ta ch c th i tn nhng th tc m ta s hu. Ngi s hu
CSDL c ththay i tn ca bt k th tc no ca ngi s dng. Th tc c i tn phi
nmtrong CSDL hin thi. Ta phi xo v to li mt th tc nu ta thay i tn ca
mt i tng ctham chiu bi th tc . c c bo co v nhng i tng c tham chiu
bi mt th tc, ta sdng th tc h thng: sp_depends. xem ni dung ca nh
ngha mt th tc, ta s dng th tc h thng:sp_helptext.I.6. Xo th tc: xo
mt th tc, ta s dng cu lnh: DROP PROCEDURE proc_nameII. S dng cc
Trigger Mt trigger l mt dng c bit ca th tc lu tr v n c thc hin tng
khi ngi dng p dng cu lnh sa i d liu ln mt bng c ch nh.Cc trigger
thng c s dng cho vic p buc cc qui tc lm vic v ton vn dliu. Tnh ton
vn tham chiu c th c nh ngha bng cch s dng rng bucFOREIGN KEY vi cu
lnh CREATE TABLE. Nu cc rng buc tn ti trongbng c s tc ng ca
trigger, n c kim tra trc vic thc hin trigger. Nucc rng buc b vi
phm, trigger s khng thc thi. Cc trigger c s dng trong nhng cch sau:
Cc trigger c th thay i ng lot (cascade change) cc bng c lin h trong
mt CSDL. Cc trigger c th khng cho php hoc roll back nhng thay i vi
phm tnh ton vn tham chiu, hy b giao tc sa i d liu. Cc trigger c th
p t cc gii hn phc tp hn nhng gii hn c nh ngha bng rng buc CHECK.
Khc vi rng buc CHECK, cc trigger c th tham chiu n cc ct trong cc
bng khc. Cc trigger cn c th tm s khc bit gia cc trng thi ca mt bng
trc v sau khi sa i d liu v ly ra nhng tc ng da trn s khc bit .
40. Trn Nguyn PhongII.1 To cc trigger Mt trigger l mt i tng
CSDL. Ta to mt trigger bng vic ch nh bnghin hnh v cu lnh sa i d liu
kch hot trigger. Sau ta xc nh cc cngvic m trigger lm. Mt bng c th c
ti a 3 loi trigger: mt trigger cp nht (update trigger),mt trigger
chn (insert trigger) v mt trigger xa (delete trigger). Tuy nhin,
mitrigger c th thc hin nhiu hm v gi n 16 th tc. Mi trigger ch c th
pdng cho mt bng. Tuy nhin, mt trigger n c th p dng cho c 3 cng
vic(UPDATE, INSERT v DELETE). Ta khng th to mt trigger trn mt khung
nhn hay mt bng tm thi mc dcc trigger c th tham chiu cc khung nhn
hay cc bng tm thi. Cu lnh TRUNCATE TABLE mc d ging cu lnh DELETE
khi khng cmnh WHERE nhng n khng th kch hot mt trigger. to mi mt
trigger, ta s dng cu lnh c c php nh sau: CREATE TRIGGER
trigger_name ON table_name FOR {INSERT, UPDATE, DELETE} AS
sql_statementsHoc s dng mnh IF UPDATE: CREATE TRIGGER trigger_name
ON table_name FOR {INSERT, UPDATE} AS IF UPDATE (column_name)
[{ANDOR}UPDATE (column_name)...] sql_statements V d 4.7: Nu chng ta
mun sau khi ta cp nht d liu cho bng nhanvien,SQL Server s hin th ni
dung ca bng xem th ta to mt trigger nh sau: CREATE TRIGGER
tgr_check ON nhanvien FOR INSERT, UPDATE AS print *** Ket qua sau
khi cap nhat *** SELECT * FROM nhanvienII.2 Cc gi tr null ngm nh v
hin (implicit and explicit null values) Mnh IF UPDATE(tn_ct) l ng
cho mt cu lnh INSERT khi m ctc gn mt gi tr trong danh sch chn hay
trong mnh VALUES. Mt NULLhin (explicit) hay mt mc nh gn mt gi tr
cho mt ct v v th kch hottrigger. Vi mt NULL ngm nh, nu gi tr khng c
xc nh bi cu hi hocbi mc nh c gn, trigger trn ct khng c kch hot. V d
4.8: CREATE TABLE vidu(col1 int NULL,col2 int NOT NULL) GO CREATE
TRIGGER tgr_vidu ON vidu
41. Giao trnh thc hanh SQL FOR INSERT AS IF UPDATE(col1) AND
UPDATE(col2) Print Firing GO CREATE DEFAULT col2_default AS 99 GO/*
IF UPDATE l ng cho c hai ct, trigger c kch hot */ INSERT
vidu(col1,col2) VALUES(1, 2)/* IF UPDATE l ng cho c hai ct, trigger
c kch hot */ INSERT vidu VALUES(1, 2)/* NULL hin: IF UPDATE l ng
cho c hai ct, trigger c kch hot */ INSERT vidu VALUES(null, 2)/*
Khng c mc nh trn ct col1, IF UPDATE khng ng cho c hai ct,
triggerkhng c kch hot */ INSERT vidu(col2) VALUES(2)/* Khng c mc nh
trn ct col2, IF UPDATE khng ng cho c hai ct, triggerkhng c kch hot
*/ INSERT vidu(col1) VALUES(2)Kt qu tng t c sn sinh vi vic s dng ch
mnh IF UPDATE(col1) to mt trigger khng cho php vic chn cc gi tr
null ngm nh, ta sdng: IF UPDATE(col2) OR UPDATE(col2) Cu lnh SQL
trong trigger c th sau kim tra xem col1 l NULL haykhng.II.3 Vic i
tn v cc trigger Nu mt bng c tham chiu bi mt trigger b i tn, ta phi
xo trigger i v to li n ph hp vic tham chiu ca n n bng. Th tc
sp_depends c chc nng lit k tt c cc trigger tham chiu n itng (chng
hn bng hay khung nhn) hoc tt c cc bng hay khung nhn mtrigger tc ng.
V d sau y lit k cc i tng c tham chiu bi triggertgr_check:
sp_depends tgr_checkII.4 Hin th thng tin v cc trigger Do cc trigger
l cc i tng CSDL nn chng c lit k trong bng hthng sysobjects. Ct type
trong sysobjects xc nh cc trigger vi ch vit tt TR. S thc thi cc
trigger c lu tr trong bng sysprocedures. Truy vn di y tm cc trigger
trong mt CSDL: SELECT * FROM sysobjects WHERE type=TR hin th thng
tin v mt trigger ta thc hin th tc:
42. Trn Nguyn Phong sp_help trigger_name Cu lnh CREATE TRIGGER
cho mi trigger c lu tr trong bng h thngsyscomments. Ta c th hin th
li nh ngha trigger bng cch s dng th tcsp_helptext. V d 4.9: thc hin
sp_helptext tgr_check ta c kt qu nh sau: text -------------- create
trigger tgr_check on nhanvien for insert,update as print ***** Ket
qua sau khi cap nhat ***** select * from nhanvienII.5 Xo trigger Ta
c th xo mt trigger bng cch xo n hoc xo bng trigger. Khi mtbng c xa,
nhng trigger no c lin quan vi n cng ng thi b xa. DROPTRIGGER mc nh
cho php i vi ngi s dng bng trigger v khng thchuyn cho ngi khc. Ta c
th xa mt trigger bng cch s dng cu lnh DROP TRIGGER
43. Giao trnh thc hanh SQLChng 5: PHU LUC
44. Trn Nguyn Phong
45. Giao trnh thc hanh SQL
46. Trn Nguyn Phong MUC LUC 1.1 Xc nh bng bng mnh FROM
...................................................................................................12
1.2 Mnh
WHERE.................................................................................................................................13
1.3 Danh sch chn trong cu lnh SELECT
............................................................................................14
1.4 Tnh ton cc gi tr trong cu lnh SELECT
.....................................................................................16
1.5 T kho DISTINCT
.............................................................................................................................16
1.6 To bng mi bng cu lnh SELECT ... INTO
..................................................................................17
1.7 Sp xp kt qu truy vn bng ORDER
BY..........................................................................................17
1.8 Php hp v ton t
UNION...............................................................................................................18
1.9 Php
ni...............................................................................................................................................20
1.10 To cc dng thng k d liu vi COMPUTE ...
BY........................................................................24
1.11 Thng k d liu vi GROUP BY v
HAVING...................................................................................26
1.12 Truy vn con
(subquery)..................................................................................................................27
I.1. To cc th tc lu tr
........................................................................................................................35
I.2. Thng tin tr v t cc th tc lu
tr.................................................................................................36
I.3. Cc qui tc s dng cho sp
.................................................................................................................38
I.4 Xc nh tn bn trong cc th tc
.......................................................................................................38
I.5 i tn cc th
tc:..............................................................................................................................39
I.6. Xo th tc:
.........................................................................................................................................39II.
S DNG CC TRIGGER II.1 To cc
trigger....................................................................................................................................40
II.2 Cc gi tr null ngm nh v hin (implicit and explicit null
values)................................................40 II.3 Vic
i tn v cc trigger
..................................................................................................................41
II.4 Hin th thng tin v cc trigger
.........................................................................................................41
II.5 Xo trigger
.........................................................................................................................................42
2.2 Cac ham v
chui..........................................................................................................................44