You are on page 1of 46

Giao trnh thc hanh SQL

*,lv,7+,j8

64/ 6WUXFWXUHG4XHU\/DQJXDJH OD QJQQJ FV GXQJFKRFDFK TXDQ


WU F V G OLX TXDQ K 1JQ QJ 64/ FKXQ F D UD EL $16, $PHULFDQ
1DWLRQDO 6WDQGDUGV ,QVWLWXGH  YD  ,62 ,QWHUQDWLRQDO 6WDQGDUGV 2UJDQL]DWLRQ  YL
SKLQ EDQ PL QKW KLQ QD\ OD SKLQ EDQ 64/ SKLQ EDQ F D UD QP
 0FGXFRQKLXQJQQJNKDFQKDXFDUDFKRFDFK TXDQWU&6'/
TXDQK64/OD QJQQJ FV GXQJUQJUDLKLQQD\WURQJUWQKLXK WKQJ
&6'/WKQJPDLQK2UDFOH64/6HUYHU'%0LFURVRIW$FFHVV7KQJTXD64/
QJL V GXQJ FR WK G GDQJ QK QJKD F G OLX WKDR WDF YL G OLX 0W
NKDF\OD QJQQJ FR WQKNKDLEDRQQQR G V GXQJYD FXQJYY\PD WU QQ
SKELQ
*LDRWULQKQD\QKPFXQJFSFKREDQWDLOLXWKDPNKDRWQJL\X Y
FDF FX OQK JLDR WDF 64/ V GXQJ FKR K TXDQ WU &6'/ 0LFURVRIW 64/ 6HUYHU
*LDRWUQKEDRJPEQFKQJ
 &KQJ  JLL WKLX PW V FX OQK V GXQJ WURQJ YLF QK QJKD FDF L
WQJGOLXQKEDQJGOLXNKXQJQKQYDFKPXF
 &KQJ  WUQK ED\ EQ FX OQK WKDR WDF G OLX OD 6(/(&7 ,16(57
83'$7(YD'(/(7(WURQJRWSWUXQJFKX\XFXOQK6(/(&7
&KQJFSQKDLFXOQKLXNKLQOD *5$17YD 5(92.(V GXQJ
WURQJYLFFSSKDWYDKX\ERTX\QFXDQJLVGXQJ&6'/
 &KQJ  JLL WKLX Y WKX WXF OX WU YD WULJJHU j\ OD QKQJ L WQJ
&6'/FVGXQJQKPWQJKLXQQJNKLVGXQJ&6'/
7URQJFKQJSKXOXFFKXQJWLJLLWKLXFXWUXFYDGOLXFXDFDFEDQJV
GXQJWURQJFDFYGXFKQJEDQWLQWUDFXYDLFKLXYLFDFYGXDQX
1JRDLUDWURQJFKQJQD\FRQFRFDFKDPWKQJV GXQJWURQJ64/6HUYHU FDF
EDQWKDPNKDRWURQJWKFKDQK
0FGX D UWF JQJQKQJJLDRWUQKNKQJWK WUDQKXFFDFVDLVRW5W
PRQJQKQFVJRS\FXDFDFEDQJLDRWUQKQJD\FDQJKRDQWKLQKQ

7UDQJ

Trn Nguyn Phong

Chng 1: NGN NG NH NGHA D LIU


1JQQJQKQJKDGOLXEDRJPFDFFXOQKFKRSKHSQJLVGXQJQK
QJKD&6'/YDFDFLWQJWURQJ&6'/QKFDFEDQJFDFNKXQJQKQFKPXF
7DREDQJGOLX
'OLXEQWURQJPW&6'/FWFKFOXWUWURQJFDFEDQJ%QWURQJFDF
EDQJG OLXFW FKFGLGDQJFDFGRQJYD FDFFW0LPWGRQJELXGLQ
PWEDQJKLGX\QKWYDPLPWFWELXGLQFKRPWWUQJ
&DFWKXFWQKOLQTXDQQEDQJ
.KLWDR YD ODP YLF YL FDF EDQJ G OLX WD FQ SKDL  \ Q FDF WKXF WQK
NKDFWUQEDQJQKNLXG OLXFDFUDQJEXFFDFNKRDFDFTXLWF&DFWKXF
WQKQD\FV GXQJQKPWDRUDFDFUDQJEXFWRDQYHQWUQFDFFW WUQJ WUQ
EDQJFXQJQKWDRUDFDFWRDQYHQWKDPFKLXJLDFDFEDQJGOLXWURQJ&6'/
D.LXGOLX
0L PW FW WUQJ  FXD PW EDQJ X SKDL WKXF YDR PW NLX G OLX QKW
QKD FQKQJKDW WUF 0L PW NLX G OLX TXL QK FDF JLD WU G OLX
FFKRSKHSLYLFWR&DFKTXDQWU&6'/WKQJFXQJFSFDFNLXGOLX
FKXQQJRDLUDFRQFR WK FKRSKHSQJLV GXQJQKQJKDFDFNLXG OLXNKDF
GDWUQFDFNLXGOLXDFR
'L\ODPWVNLXGOLXWKQJFVGXQJWURQJJLDRWDF64/
Binary

Int

Smallint

Bit

Money

Smallmoney

Char

Nchar

Text

Datetime

Ntext

Tinyint

Decimal

Nvarchar

Varbinary

Float

Real

Varchar

Image

Smalldatetime

E&DFUDQJEXF &21675$,176
7UQFDFEDQJGOLXFDFUDQJEXFFVGXQJQKPFDFPXFFKVDX
4XLQKFDFJLDWUGOLXKD\NKXQGDQJGOLXFFKRSKHSFKSQKQWUQ
FDFFWFXDEDQJ UDQJEXF&+(&.
4XLQKJLDWUPFQKFKRFDFFW UDQJEXF'()$8/7 

Giao trnh thc hanh SQL

7DRQQWQKWRDQYHQWKFWKWURQJPWEDQJGOLXYDWRDQYHQWKDPFKLXJLD
FDF EDQJ G OLX WURQJ &6'/ UDQJ EXF 35,0$5< .(< 81,48( YD
)25(,*1.(< 
&KXQJWDVH WPKLXFKLWLWKQY FDFUDQJEXFQD\ SKQWUQKED\Y FXOQK
&5($7(7$%/(
7DREDQJEQJWUX\YQ64/
7DRFDFEDQJOD PWNKXTXDQ WURQJ WURQJ WURQJ TXD WUQK WKLW N YD FDL GW
FDF&6'/%QWURQJFDF&6'/PLPWEDQJWKQJFVGXQJQKPELXGLQ
WKQJWKLYFDFLWQJWURQJWKJLLWKFYDKRFELXGLQPLTXDQKJLDFDF
LWQJRj FR WK W FKFWWPWEDQJG OLXEDQWQKWFQSKDL[DFQK
FFDF\XFXVDX
%DQJFVGXQJQKPPXFFKJYDFRYDLWURQKWKQDREQWURQJ&6'/"
%DQJVHEDRJPQKQJFWQDRYDNLXGOLXFKRFDFFWRODJ"
1KQJFWQDRFKRSKHSFKSQKQJLDWU18//
&RVGXQJFDFUDQJEXFFDFPFQKKD\NKQJYDQXFRWKVGXQJXYD
QKXWKQDR"
1KQJFWQDRVH RQJYDLWUR OD NKRD FKQKNKRD QJRDLNKRD GX\QKW"1KQJ
GDQJFKPXFQDRODFQWKLWYDFQX
D7DREDQJGOLX
j WDR PW EDQJ WURQJ &6'/ EDQ V GXQJ FX OQK &5($7( 7$%/( FR FX
SKDSQKVDX
CREATE TABLE

table_name

(
{colname_1

col_1_properties

[,{colname_2 col_2_properties

[constraints_1 ]
[constraints_2 ]]

...
[,{colname_N col_N_properties

[constraints_N ]]

[table_constraints]
)

7URQJR
- table_name:

7Q EDQJ FQ WDR 7Q FXD EDQJ SKDL GX\ QKW
WURQJPL&6'/YDSKDLWXQWKHRFDFTXLWFY
QKGDQK

- colname_i:

7QFXDFWWK LWURQJEDQJ&DFFWWURQJ PL
7UDQJ

Trn Nguyn Phong

EDQJSKDLFRWQNKDFQKDXYDSKDLWXQWKHRFDF
TXL WF Y QK GDQK 0L PW EDQJ SKDL FR W
QKWPWFW
- col_i_properties:

&DFWKXFWQKFXDFWWK LTXLQKNLXG OLX


FXD FW YD FK QK FW FR FKR SKHS FKS QKQ
JLDWU18//KD\NKQJ

- constraints_i:

&DF UDQJ EXF QX FR  WUQ FW WK L QK FDF


UDQJEXFYNKRDFDFPFQKFDFTXLQKY
NKXQGDQJGOLX

- table_constraint:

&DFUDQJEXFWUQEDQJGOLX

9GX&XOQKGL\WKFKLQKYLFWDREDQJ1+$19,(1EDRJPFDFFW
0$19+27(11*$<6,1+',$&+,',(17+2$,
CREATE TABLE nhanvien
(
manv

char(10) not null,

hoten

char(30) not null,

ngaysinh

datetime null,

diachi

char(50) null,

dienthoai

char(6)

null

E6GXQJFDFUDQJEXFWURQJEDQJGOLX
D5DQJEXF&+(&.
5DQJEXF&+(&.FVGXQJFKQKFDFJLDWUKD\NKXQGDQJGOLX
FR WK F FKS QKQ L YL PW FW 7UQ PW FW FR WK FR QKLX UDQJ EXF
&+(&.j NKDLEDRPWUDQJEXF&+(&.LYLPWFWQDRRWDV GXQJFX
SKDSQKVDX
[CONSTRAINT constraint_name]
CHECK (expression)

7URQJR H[SUHVVLRQOD PWELXWKF ORJLF TXL QK JLD WU KD\ NKXQ GDQJ FXD G
OLXFFKRSKHS.KLRFKQKQJJLDWUGOLXQDRODPFKRH[SUHVVLRQQKQJLD
WUXQJPLFFKSQKQ
9 GX  j TXL QK LQ WKRDL FXD QKQ YLQ SKDL FR GDQJ

 FKQJ KDQ
 FXOQKYGXFYLWQKVDX
CREATE TABLE nhanvien
(

Giao trnh thc hanh SQL


manv

char(10) not null,

hoten

char(30) not null,

ngaysinh

datetime null,

diachi

char(50) null,

dienthoai

char(6)

null

constraint check_dienthoai
check (dienthoai like '[0-9][0-9][0-9]
[0-9][0-9] [0-9]')
)

D5DQJEXF'()$8/7
5DQJEXF'()$8/7FV GXQJ TXLQKJLD WUPFQKFKRPWFW
*LD WUQD\VH W QJFJDQFKRFWQD\NKLQJLV GXQJE VXQJPWEDQJKL
PD NKQJ FK QK JLD WU FKR FW 7UQ PL FW FK FR WK FR QKLX QKW PW UDQJ
EXF'()$8/7 WFODFKFRWKFRWLDPWJLDWUPFQK 
j NKDL EDR PW JLD WU PF QK FKR PW FW WD FK QK PW UDQJ EXF
'()$8/7FKRFWEQJFDFKVGXQJFXSKDSVDX
[CONSTRAINT constraint_name]
DEFAULT {const_expression
nonarguments_function
NULL}

9 GX  &X OQK GL \ FK QK JLD WU PF QK OD
NKQJ ELW
 FKR FW
',$&+,WURQJEDQJ1+$19,(1YGX
CREATE TABLE nhanvien
(
manv

char(10) not null,

hoten

char(30) not null,

ngaysinh

datetime null,

diachi

char(50) default 'khng bit',

dienthoai

char(6)

null

D5DQJEXF35,0$5<.(<


muYGXQD\FKXQJWLNKQJWWQFKRUDQJEXF'()$8/7.KLRKTXDQWU&6'/VHWQJWWQ
FKRUDQJEXFQD\7X\QKLQGGDQJFKRYLFTXDQWUEDQQQWWQFKRFDFUDQJEXF

7UDQJ

Trn Nguyn Phong

5DQJEXF35,0$5<.(<FV GXQJ QKQJKDNKRD FKQKFXDEDQJ


0W UDQJ EXF 35,0$5< .(< DP EDR UQJ NKQJ FR FDF JLD WU WUXQJ OS F
D YDR WUQ FDF FW +D\ QRL FDFK NKDF JLD WU FXD NKRD FKQK VH JLXS FKR WD [DF
QKFGX\QKWPWGRQJ EDQJKL WURQJEDQJG OLX0LPWEDQJFKFR WK
FR GX\QKWPWNKRD FKQKYD EDQWKQNKRD FKQKNKQJFKSQKQJLD WU18//
5DQJEXF35,0$5<.(<OD FV FKRYLFDPEDRWQKWRDQYHQWKFWK FXQJ
QKWRDQYHQWKDPFKLX
jNKDLEDRPWUDQJEXF35,0$5<.(<EDQVGXQJFXSKDSVDX
[CONSTRAINT constraint_name ]
PRIMARY KEY [CLUSTERED|NONCLUSTERED]
[( colname [,colname2 [...,colname16]])]

1XNKRDFKQKFXDPWEDQJFKODPWFWNKLREDQNKQJFQWKLWSKDLFK
QKGDQKVDFKFDFFW V GXQJUDQJEXF PFFW 7URQJWUQJKSNKRD FKQK
OD PWWSKSW KDLFWWU OQEDQSKDLFKQKGDQKVDFKFDFFW V GXQJUDQJ
EXFPFEDQJ 
9GXWDREDQJ1+$19,(1YLNKRDFKQKOD0$19
CREATE TABLE nhanvien
(
manv

char(10) primary key,

hoten

char(30) not null,

ngaysinh

datetime null,

diachi

char(50) null,

dienthoai

char(6)

null

FXOQKWUQFRWKYLWQKVDX
CREATE TABLE nhanvien
(
manv

char(10) not null,

hoten

char(30) not null,

ngaysinh

datetime null,

diachi

char(50) null,

dienthoai

char(6)

null

constraint pk_nv primary key(manv)


)

Giao trnh thc hanh SQL

D 5DQJEXF81,48(
7KD\ Y V GXQJ NKRD FKQK EDQ FR WK V GXQJ UDQJ EXF 81,48(  DP
EDRWQKWRDQYHQWKFWK6 GXQJUDQJEXF81,48(WUQPW KD\QKLX FWEW
EXFFDFJLD WUG OLXWUQPW KD\QKLX FWQD\NKQJFWUXQJOSQKDXj
NKDLEDRPWUDQJEXF81,48(EDQVGXQJFXSKDSOQKVDX\
[CONSTRAINT constraint_name]
UNIQUE [CLUSTERED | NONCLUSTERED]
[colname1 [,colname2 [...,colname16]])]

D 5DQJEXF)25(,*1.(<
&DFEDQJEQWURQJPW&6'/WKQJFR PLTXDQK YLQKDX&DFPLTXDQ
K QD\ F [DF QK GD WUQ WQK EQJ QKDX JLD PW KD\ QKLX WUQJ FXD EDQJ
QD\YLPWKD\QKLXWUQJFXDEDQJNKDF1XPW KD\QKLX FWQDRRFXDPW
EDQJFR JLD WUF[DFQKW PW KD\QKLX WUQJNKRD FXDEDQJNKDFWKFDF
FWR FJRLOD FR UDQJEXFNKRD QJRDL IRUHLJQNH\ &DFUDQJEXF)25(,*1
.(<FV GXQJ NW KS YL FDF UDQJ EXF 35,0$5< .(< YD 81,48( QKP
DPEDRWQKWRDQYHQWKDPFKLXJLDFDFEDQJFFKQK
jNKDLEDRNKRDQJRDLEDQVGXQJFXSKDSOQKQKVDX
[CONSTRAINT constraint_name ]
[FOREIGN KEY (colname [,colname2 [...,colname16]])]
REFERENCES

reference_table [(ref_colname
[,ref_colname2
[...,ref_colname 16]])]

9 GX  7DR KDL EDQJ 1+$19,(1 0$19 +27(1 1*$<6,1+ ',$&+,
',(17+2$,0$'9 YD'219, 0$'97(1'9 WKHRKQKGL\

1+$19,(1
0$19
+27(1
1*$<6,1+
',$&+,
',(17+2$,
0$'9


+QK 

CREATE TABLE donvi


(
7UDQJ

'219,
0$'9
7(1'9

Trn Nguyn Phong


madv

char(2)

primary key,

tendv

char(20) not null

CREATE TABLE nhanvien


(
manv

char(10) primary key,

hoten

char(20) not null,

ngaysinh

datetime null,

diachi

char(50) default 'khong biet',

dienthoai char(6)

check(dienthoai like '[0-9][0-9][0-9]


[0-9][0-9][0-9]'),

madv

char(2)

foreign key(madv)
references donvi(madv)

6DLEDQJ
6DXNKLD WDREDQJEDQ FR WK WLQ KDQK VD L FX WUXF KD\ WKXF WQK FXD
EDQJ QK E VXQJ FW E VXQJ NKRD WKD\ L FDF UDQJ EXF j FR WK VXD L
EDQJEDQVGXQJFXOQK$/7(5FRFXSKDSQKVDX
ALTER TABLE table_name
[ADD
{col_name

column_properties

[column_constraints]

[[,]table_constraint ] }
[,{next_col_name|next_table_constraint}]...]
[DROP
[CONSTRAINT] constraint_name1
[, constraint_name2]...]

9GX 7DRPWUDQJEXFFKREDQJ'219,WUQFW0$'9TXLQKPD QY


SKDLFRGDQJKDLFKV YGX
ALTER TABLE
ADD

donvi

CONSTRAINT check_madv
CHECK (madv LIKE [0-9][0-9])

Giao trnh thc hanh SQL

&KPXF LQGH[
&DFFKPXFFVGXQJQKPKWUYLFWUX\FSQFDFGRQJGOLXF
QKDQKFKRQJGDWUQFDFJLDWUFXDPWKD\QKLXFW&KPXFFFKLDUDODPKDL
ORDL FK PXF WX QKRP FOXVWHUHG LQGH[  YD FK PXF NKQJ WX QKRP QRQFOXVWHUHG
LQGH[ 
0WFKPXFWXQKRPODPWFKPXFPDWURQJRWKWORJLFFXDFDFNKRDWQJ
W QKWK W YWO\ FXDFDFGRQJWQJQJWQWDLWURQJEDQJ0WEDQJFKFR
WKFRWLDPWFKPXFWXQKRP
0WFKPXFNKQJWX KRPOD PWFKPXFPD WURQJR WK W ORJLFFXDFDFNKRD
NKQJQKWKWYWO\FXDFDFGRQJWURQJEDQJ&DFFKPXFWXQKRPKWUYLF
WUX\FSQFDFGRQJGOLXQKDQKKQQKLXVRYLFDFFKPXFNKQJWXQKRP
.KLWDNKDLEDRPWNKRDFKQKKD\NKRD81,48(WUQPWKD\QKLXFWQDRR
FXDEDQJK TXDQWU&6'/VH W QJWDRFKPXFWUQFDFFWR%DQFR WK WDR
WKPFDFFKPXFNKDFEQJFDFKVGXQJFXOQKFRFXSKDSQKVDX
CREATE [CLUSTEREDNONCLUSTERED] INDEX index_name
ON

table_name(column_name [, column_name]...)

9GX&XOQKGL\VHWDRPWFKPXFNKQJWXQKRPWUQFW0$'9FXD
EDQJ1+$19,(1
CREATE NONCLUSTERED INDEX idx_nhanvien_madv
ON nhanvien(madv)

.KXQJQKQ 9LHZ
0WNKXQJQKQFR WK FRLQKOD PWeEDQJDRfFR QLGXQJF[DFQKW
PW WUX\ YQ 0W WUX\ YQ TXHU\  OD PW WS FDF FK GQ LQVWUXFWLRQ  QKP WUX\
[XWYD KLQWKG OLXW FDFEDQJWURQJ&6'/&DFWUX\YQFWKFKLQEQJ
FDFKVGXQJFXOQK6(/(&7 FFSQWURQJFKQJ 
0WNKXQJQKQWURQJJLQJQKPWEDQJYLPWWRFDFWQFWYD FDFGRQJ
GOLX7X\QKLQNKXQJQKQNKQJWQWDLQKODPWFXWUXFOXWUGOLXWURQJ
&6'/' OLXEQWURQJNKXQJQKQWKFFKWOD G OLXF[DFQKW PWKD\
QKLXEDQJFVYDGRRSKXWKFYDRFDFEDQJFV
&DFNKXQJQKQWKQJFV GXQJEQWURQJ&6'/QKPFDFPXFFKVDX
\
6GXQJNKXQJQKQWSWUXQJWUQGOLXF[DFQK
7UDQJ

Trn Nguyn Phong

6GXQJNKXQJQKQQJLDQKRDWKDRWDFGOLX
6GXQJNKXQJQKQWX\ELQGOLX
6GXQJNKXQJQKQ[XWNKX H[SRUW GOLX
6GXQJNKXQJQKQEDRPWGOLX
jWDRNKXQJQKQEDQVGXQJFXOQKFRFXSKDSQKVDX
CREATE VIEW view_name[(column_name [, column_name]...)]
AS select_statement

7URQJRVHOHFWBVWDWHPHQWODPWFXOQK6(/(&7GXQJWUX\[XWGOLXW
PWKD\QKLXEDQJ
.KLWDRNKXQJQKQFQOX\PWVLPVDX
7QNKXQJQKQSKDLWXQWKHRFDFTXLWFY QKGDQKYD SKDLGX\QKWLYL
PLQJLVGXQJ
.KQJWKUDQJEXFFDFPFQKFDFTXLWFFKRNKXQJQKQ
.KQJWK[\GQJFKPXFFKRNKXQJQKQ
7URQJ FX OQK &5($7( 9,(: NKQJ FQ WKLW SKDL FK QK WQ FW 7Q FXD
FDFFWFXQJQKNLXGOLXFXDFKXQJVHWQJQJYLFDFFWWURQJGDQKVDFK
FKRQFXDFXOQK6(/(&7
%DQSKDL[DFQKWQFWWURQJFX OQK &5($7( 9,(: WURQJ FDF WUQJ KS
VDX
0LFWFXDNKXQJQKQFSKDWVLQKW PWELXWKFV KRFPWKDPFDL
VQKD\PWKQJ
+DLKD\QKLXFWFXDNKXQJQKQFRWUXQJWQ
%DQPXQWKD\LWQFWWURQJNKXQJQKQNKDFYLWQFWFXDEDQJFV
9GX&XOQKGL\VHEOLGRWQFXDFWWKNKQJ[DFQKF
CREATE VIEW thongtin_nv
AS
SELECT manv,hoten,datediff(year,ngaysinh,getdate()),tendv
FROM nhanvien,donvi
WHERE nhanvien.madv=donvi.madv

j FXOQKWUQFR WK WKFKLQFEDQSKDLWWQFKRFDFFWFXDNKXQJQKQ


QKVDX
CREATE VIEW thongtin_nv(manv,hoten,tuoi,donvi)

Giao trnh thc hanh SQL


AS
SELECT manv,hoten,datediff(year,ngaysinh,getdate()),tendv
FROM nhanvien,donvi
WHERE nhanvien.madv=donvi.madv

Z Y

7UDQJ

Trn Nguyn Phong

Chng 2: NGN NG THAO TAC D LIU


1JQQJ WKDRWDFG OLXFXQJFSFKRQJLV GXQJNKD QQJWLQKDQKFDF
WKDRWDFWUX\[XWE VXQJFSQKWYD [RD G OLX1JQQJ WKDRWDFG OLXEDR
JPFDFFXOQK6(/(&7,16(5783'$7(YD'(/(7(

7UX\[XWGOLX
truy xut d liu t cc dng v cc ct ca mt hay nhiu bng, khung nhn,
ta s dng cu lnh SELECT. Cu lnh ny c th dng thc hin php chn (tc l
truy xut mt tp con cc dng trong mt hay nhiu bng), php chiu (tc l truy
xut mt tp con cc ct trong mt hay nhiu bng) v php ni (tc l lin kt cc
dng trong hai hay nhiu bng truy xut d liu).
C php chung ca cu lnh SELECT c dng nh sau:
SELECT

[ ALL | DISTINCT ]

[ INTO
FROM

select_list

[ newtable_name ]]

{ table_name | view_name }
................
[,{table_name | view_name }]

[WHERE

clause ]

[GROUP BY

clause ]

[HAVING BY clause ]
[ORDER BY

clause ]

[COMPUTE

clause ]

Ch : Cc thnh phn trong mt cu lnh SELECT phi c s dng theo th t


c nu trn.
1.1 Xc nh bng bng mnh FROM
Mnh FROM trong cu lnh SELECT c s dng nhm ch nh cc bng
v khung nhn cn truy xut d liu. Sau mnh FROM l danh sch tn cc bng
v khung nhn tham gia vo truy vn (tn ca cc bng v khung nhn c phn cch
nhau bi du phy).
SELECT
FROM

select_list

{table_nameview_name list}

Giao trnh thc hanh SQL

n gin ho cu hi, ta c th s dng cc b danh (alias) cho cc bng hay


khung nhn. B danh c gn trong mnh FROM bng cch ch nh b danh sau
tn bng. V d cu lnh sau gn b danh n1 cho bng nhanvien.
SELECT

ten, diachi FROM

nhanvien

n1

1.2 Mnh WHERE


Mnh WHERE trong cu lnh SELECT xc nh cc iu kin i vi vic truy
xut d liu. Sau mnh WHERE l mt biu thc logic v ch nhng dng d liu
no tho mn biu thc sau WHERE mi c hin th trong kt qu truy vn. Trong
mnh WHERE thng s dng:
Cc ton t so snh
Gii hn ( BETWEEN v NOT BETWEEN).
Danh sch (IN, NOT IN)
Khun dng (LIKE v NOT LIKE).
Cc gi tr cha bit (IS NULL v IS NOT NULL).
Kt hp cc iu kin (AND, OR).
Cc ton t so snh:
Ton t

ngha

Bng

>

Ln hn

<

Nh hn

>=

Ln hn hoc bng

<=

Nh hn hoc bng

<>

Khc

!>

Khng ln hn

!<

Khng nh hn

V d 2.1: Truy vn sau y cho bit tn, a ch v in thoi ca nhng nhn vin
c h s lng ln hn 1.92:
SELECT ten, diachi, dienthoai
FROM nhanvien
WHERE hsluong>1.92

Gii hn (BETWEEN v NOT BETWEEN)


T kho BETWEEN v NOT BETWEEN c s dng nhm ch nh khong
gi tr tm kim i vi cu lnh SELECT. Cu lnh di y cho bit tn v ia ch
ca nhng nhn vin c h s lng nm trong khong 1.92 n 3.11
SELECT

ten, tuoi, diachi

FROM nhanvien
WHERE

hsluong BETWEEN
7UDQJ

1.92 AND 3.11

Trn Nguyn Phong

Danh sch (IN v NOT IN)


T kho IN c s dng khi ta cn ch nh iu kin tm kim d liu cho cu
lnh SELECT l mt danh sch cc gi tr. Sau IN (hoc NOT IN) c th l mt danh
sch cc gi tr hoc l mt cu lnh SELECT khc.
V d 2.2: hin th thng tin v cc nhn vin c h s lng l 1.86, 1.92
hoc 2.11, thay v s dng cu lnh:
SELECT * FROM nhanvien
WHERE

hsluong=1.86 OR hsluong=1.92 OR hsluong=2.11

Ta c th s dng cu lnh sau:


SELECT * FROM nhanvien
WHERE

hsluong IN (1.86, 1.92, 2.11)

Cc k t i din v mnh LIKE


T kho LIKE (NOT LIKE) s dng trong cu lnh SELECT nhm m t khun
dng ca d liu cn tm kim. Chng thng c kt hp vi cc k t i din sau
y:
K t i din

ngha

Chui k t bt k gm khng hoc nhiu k t

K t n bt k

[]

K t n bt k trong gii hn c ch nh (v d [a-f])


hay mt tp (v d [abcdef])

[^]

K t n bt k khng nm trong gii hn c ch nh (


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

V d 2.3: Cu lnh di y hin th thng tin v cc nhn vin c tn l Nam


SELECT *
WHERE

FROM nhanvien

hoten LIKE '% Nam'

IS NULL v NOT IS NULL


Gi tr NULL c th c nhp vo mt ct cho php chp nhn gi tr NULL
theo mt trong ba cch sau:
Nu khng c d liu c a vo v khng c mc nh cho ct hay kiu
d liu trn ct .
Ngi s dng trc tip a gi tr NULL vo cho ct .
Mt ct c kiu d liu l kiu s s cha gi tr NULL nu gi tr c ch
nh gy trn s.
Trong mnh WHERE, ta s dng IS NULL hoc IS NOT NULL nh sau:
WHERE col_name IS [NOT] NULL
Cc ton t logic
Cc ton t logic s dng trong mnh WHERE bao gm AND, OR, NOT.
AND v OR c s dng kt hp nhiu iu kin trong WHERE.
1.3 Danh sch chn trong cu lnh SELECT

Giao trnh thc hanh SQL

&Kn tt c cc ct trong bng


Khi mun truy xut tt c cc ct trong bng, ta s dng cu lnh SELECT c c
php sau:
SELECT

FROM

table_name

Khi s dng cu lnh ny, cc ct trong kt qu s c hin th theo th t m


chng c to ra trong cu lnh CREATE TABLE.
* Chn cc ct c ch nh
chn ra mt s ct no trong bng, ta s dng cu lnh SELECT c c
php sau:
SELECT
FROM

tn_ct [,...,tn_ct_n]
tn_bng | khung_nhn

Cc tn ct trong cu lnh phi c phn cch nhau bng du phy.


Ch : Trong cu lnh SELECT, th t ca cc ct c nu ra trong cu lnh s
xc nh th t ca cc ct c hin th ra trong kt qu.
* i tn cc ct trong cc kt qu
Khi kt qu c hin th, tiu ca cc ct mc nh s l tn ca cc ct khi
n c to ra trong cu lnh CREATE TABLE. Tuy nhin, cc tiu tr nn
thn thin hn, ta c th i tn cc tiu ca cc ct. lm c vic ny, ta c
th s dng mt trong hai cch vit sau:
tiu__ct = tn_ct
hoc

tn_ct tiu__ct

V d 2.4: Hai cu lnh sau s t tiu H v tn cho l hoten v a ch


cho ct diachi khi kt qu c hin th cho ngi s dng:
SELECT 'H v tn'=hoten,
'a ch '= diachi
FROM

nhanvien

Hoc:
SELECT hoten 'H v tn',diachi 'ia ch '
FROM

nhanvien

* S dng cu trc CASE thay i d liu trong kt qu


Trong cu lnh SELECT, ta c th s dng cu trc CASE thay i cch hin
th kt qu ra mn hnh.
V d 2.5: Cu lnh sau cho bit h tn, h s lng v xp loi lng ca nhn
vin theo h s lng:
SELECT

'H v tn' = ten,

'H s lng' = hsluong,

'Xp loi lng' =


CASE
WHEN

lsluong=NULL THEN
7UDQJ

'Khng xc nh'

Trn Nguyn Phong


WHEN

hsluong<=1.92 THEN

'Lung thp'

WHEN

hsluong<=3.1 THEN

'Lng TB'

WHEN

hsluong<=5.2 THEN

'Lng cao'

ELSE

'Lng rt cao'

END
FROM

Nhanvien

* Cc chui k t trong kt qu
Ta c th thm cc chui k t vo bn trong truy vn nhm thay i cch thc
trnh by d liu.
V d 2.6: Cu lnh sau s thm chui k t H s lng l vo trc kt qu
ct mc lng tng dng trong kt qu:
SELECT

'H v tn' = hoten,


'H s lng l : ','H s lng'=hsluong

FROM nhanvien

Truy vn trn cho c kt qu c dng nh sau:


H v tn

H s lng

----------------

--------------

-------------

Trn Nguyn Phong

H s lng l :

1.92

L Hoi Nam

H s lng l :

1.86

Nguyn Hu Tnh

H s lng l :

1.92

Nguyn Trung Kin

H s lng l :

1.86

Nguyn Th Hoa

H s lng l :

2.11

Hong Nam Phong

H s lng l :

3.21

1.4 Tnh ton cc gi tr trong cu lnh SELECT


Danh sch chn trong cu lnh SELECT c th c cc biu thc s hc. Khi
kt qu ca biu thc s l mt ct trong kt qu truy vn:
V d 2.7: Cu lnh sau cho bit h tn v lng ca cc nhn vin
SELECT 'H v tn'=ten, 'Lng'=hsluong*210000
FROM

nhanvien

1.5 T kho DISTINCT


T kho DISTINCT c s dng trong cu lnh SELECT nhm loi b ra khi
kt qu truy vn nhng dng d liu c gi tr ging nhau
V d 2.8: nu ta s dng cu lnh:
SELECT

hsluong FROM nhanvien

Ta s c kt qu nh sau:

Giao trnh thc hanh SQL


hsluong
----------------1.92
1.86
1.92
1.86
2.11
3.21

Nhng nu ta s dng cu lnh:


SELECT DISTINCT

hsluong FROM nhanvien

kt qu ca truy vn s l:
hsluong
---------1.92
1.86
2.11
3.21

1.6 To bng mi bng cu lnh SELECT ... INTO


Cu lnh SELECT ... INTO c tc dng to mt bng mi c cu trc v d liu
c xc nh t kt qu ca truy vn. Bng mi c to ra s c s ct bng s ct
c ch nh trong danh sch chn v s dng s s dng kt qu ca truy vn
V d 2.9: Cu lnh di y to mi mt bng c tn l NHANVIEN_LUU bao
gm h tn v a ch ca nhng nhn vin c h s lng ln hn 1.92:
SELECT hoten, diachi
INTO

nhanvien_luu

FROM

nhanvien

WHERE hsluong>1.92
1.7 Sp xp kt qu truy vn bng ORDER BY
Mnh ORDER BY c s dng nhm sp xp kt qu truy vn theo mt hay
nhiu ct (ti a l 16 ct). Vic sp xp c th theo th t tng tng (ASC) hoc gim
(DESC). Nu khng ch nh r th mc nh l tng.
V d 2.10: Cu lnh sau s sp xp cc nhn vin theo th t gim dn ca h
s lng v nu h s lng bng nhau th sp xp theo th t tng dn ca ngy sinh:
SELECT hoten,ngaysinh,hsluong
FROM nhanvien
ORDER BY hsluong DESC, ngaysinh

Ta c th s dng cc s thay v s dng tn ct sau mnh ORDER BY.


V d 2.11: cu lnh di y sp xp cc nhn vin theo th t tng dn ca
ngy sinh:
7UDQJ

Trn Nguyn Phong


SELECT hoten,ngaysinh,hsluong
FROM nhanvien
ORDER BY 3

1.8 Php hp v ton t UNION


Ton t UNION cho php ta hp cc kt qu ca hai hay nhiu truy vn thnh
mt tp kt qu duy nht. C php ca php hp nh sau:
Query_1
[UNION [ALL] Query_2 ]
...
[UNION [ALL] Query_N ]
[ORDER BY
[COMPUTE

clause]
clause]

Trong :
Query_1 c dng:
SELECT

select_list

[INTO clause]
[FROM clause]
[WHERE clause]
[GROUP BY clause]
[HAVING clause]

v Query_i (i=2,..,N) c dng:


SELECT

select_list

[FROM clause]
[WHERE clause]
[GROUP BY clause]
[HAVING clause]

V d 2.12: Gi s ta c hai bng nh sau:


R

abc

edf

15

jks

hht

bdg

10

abc

Hht

12

adf

Th php hp:
SELECT A,B FROM R
UNION

Giao trnh thc hanh SQL


SELECT * FROM S

C kt qu nh sau:
A

----

-----------

abc

adf

bgd

10

edf

15

hht

hht

12

jks

Theo mc nh, php ton UNION s loi b nhng dng ging nhau trong kt
qu. Nu ta s dng ty chn ALL th cc dng ging nhau s khng b loi b. Ta c
th s dng cc du ngoc xc nh th t tnh ton trong php hp.
1.8.1 Cc nguyn tc khi xy dng cu lnh UNION
Khi xy dng cc cu lnh UNION, ta cn ch cc nguyn tc sau:
Tt c cc danh sch chn trong cu lnh UNION phi c cng s biu thc
(cc tn ct, cc biu thc s hc, cc hm gp,...)
Cc ct tng ng trong tt c cc bng, hoc tp con bt k cc ct c s
dng trong bn thn mi truy vn phi cng kiu d liu.
Cc ct tng ng trong bn thn tng truy vn ca mt cu lnh UNION
phi xut hin theo th t nh nhau. Nguyn nhn l do php hp so snh cc
ct tng ct mt theo th t c cho trong mi truy vn.
Khi cc kiu d liu khc nhau c kt hp vi nhau trong cu lnh
UNION, chng s c chuyn sang kiu d liu cao hn (nu c th c).
Tiu ct trong kt qu ca php hp s l tiu ct c ch nh trong
truy vn u tin.
1.8.2 S dng UNION vi cc giao tc SQL khc
Cc nguyn tc sau phi c tun theo khi s dng php hp vi cc cu lnh
giao tc SQL khc:
Truy vn u tin trong cu lnh UNION c th c INTO to mt bng t
kt qu cui cng.
Mnh ORDER BY v COMPUTE dng xc nh th t kt qu cui
cng hoc tnh ton cc gi tr tm tt ch c cho php s dng cui ca
cu lnh UNION. Chng khng c php s dng trong bt k bn thn
truy vn no trong php hp.
Mnh GROUP BY v HAVING ch c th c s dng trong bn thn
tng truy vn. Chng khng th c s dng tc ng ln kt qu cui
cng.
7UDQJ

Trn Nguyn Phong

Php ton UNION cng c th c s dng bn trong mt cu lnh


INSERT.
Php ton UNION khng th s dng trong cu lnh CREATE VIEW.
1.9 Php ni
Php ni c s dng truy xut d liu t hai hay nhiu bng hoc khung
nhn trong cng CSDL hoc trong cc CSDL khc nhau bi cng mt php x l.
1.9.1 Php ton ni
Mt cu lnh ni (join statament) thc hin cc cng vic sau y:
Xc nh mt ct t mi bng.
So snh cc gi tr trong nhng ct ny theo tng dng.
Kt hp cc dng c nhng gi tr tho mn iu kin thnh nhng dng
mi.
V d 2.13: Cu lnh di y cho bit h tn, a ch ca cc nhn vin v tn
n v m mi nhn vin thc thuc:
SELECT hoten, diachi, tendonvi
FROM nhanvien, donvi
WHERE nhanvien.madonvi = donvi.madonvi

Danh sch chn trong php ni


Ging nh cc cu lnh chn (selection statment), mt cu lnh ni bt u vi
t kha SELECT. Cc ct c ch nh tn sau t kho SELECT l cc ct c da
ra trong kt qu truy vn. Trong danh sch chn ca php ni, ta c th ch nh mt
s ct bng cch ch nh tn ca ct hoc tt c cc ct ca nhng bng tham gia
vo php ni bng cch s dng du sao (*). Danh sch chn khng nht thit phi
bao gm cc ct ca nhng bng tham gia php ni.
Mnh FROM trong php ni
Mnh FROM ca cu lnh ni xc dnh cc bng (hay khung nhn) tham gia
vo php ni. Nu ta s dng du * trong danh sch chn th th t ca cc bng lit
k trong FROM s nh hng n kt qu c hin th.
Mnh WHERE trong php ni
Mnh WHERE xc nh iu kin ni gia cc bng v cc khung nhn c
ch nh. N xc nh tn ca ct c s dng ni v php ton ni c s dng.
Cc ton t so snh di y c s dng xc nh iu kin ni
Php ton

ngha

Bng

>

Ln hn

>=

Ln hn hoc bng

<

Nh hn

<=

Nh hn hoc bng

<>

Khc

Giao trnh thc hanh SQL

!>

Khng ln hn

!<

Khng nh hn.

1.9.2 Cc loi php ni


* Php ni bng v php ni t nhin
Mt php ni bng (equijoin) l mt php ni trong gi tr ca cc ct c
s dng ni c so snh vi nhau da trn tiu chun bng v tt c cc ct trong
cc bng tham gia ni u c a ra trong kt qu.
V d 2.14:
SELECT * FROM nhanvien, donvi
WHERE nhanvien.madonvi = donvi.madonvi

Trong kt qu ca cu lnh trn, ct madonvi v tendonvi xut hin hai ln trong


kt qu php ni v nh vy l khng cn thit. loi b iu ny, ta c th s dng
php ni t nhin (natural join) bng cch loi b i cc ct trng tn vi nhau.
* Php ni vi cc iu kin b sung
Trong mnh WHERE ca cu lnh ni, ta c th b sung cc iu kin tm
kim khc.
V d 2.15:
SELECT hoten, diachi, tendonvi
FROM nhanvien, donvi
WHERE nhanvien.madonvi = donvi.madonvi AND
Nhanvien.hsluong>=2.11

* Php t ni v cc b danh
Php t ni l php ni m trong ta so snh cc gi tr bn trong mt ct ca
cng mt bng.
V d 2.16: Tm nhng nhn vin c cng a ch vi nhn vin 'Trn Nguyn
Phong'
SELECT n1.hoten
FROM nhanvien n1, nhanvien n2
WHERE n2.hoten='Trn Nguyn Phong' AND
n1.diachi = n2.diachi
* Php ni khng da trn tiu chun bng
Trong php ni ny, cc ct c s dng kt ni c so snh vi nhau
khng da trn iu kin bng.
* Php ni ngoi (outer join)
Trong cc php ni cp trn, ch nhng dng hp l (tc l nhng dng
c gi tr trong cc ct c ch nh tho m iu kin kt ni) mi c a ra trong
kt qu. Theo mt ngha no , nhng php ni ny loi b thng tin cha trong
nhng dng khng hp l. Tuy nhin, i khi ta cng cn gi li nhng thng tin
khng hp l bng cch cho php nhng dng khng hp l c mt trong kt qu ca
7UDQJ

Trn Nguyn Phong

php ni. lm iu ny, ta c th s dng php ni ngoi. Giao tc SQL cung cp


hai php ni ngoi:

Php ni ngoi tri (*=) : Php ni ny cho php ly tt c cc t bng c


tn u tin.

Php ni ngoi phi (=*) : Php ni ny cho php ly tt c cc dng t


bng c tn th hai.

V d 2.17: Gi s ta c hai bng R v S c ni dung nh sau


A

----- ----------- ----------- ----aaa

aaaa

fff

f2

ggg

g4

xxx

12

gdf

ggg

12

khf

sss

45

k3h

Bng R
E

----- ----------- ----------aaa

(null)

xxx

23

26

abc

(null)12

(null)

sss

20

Bng S
Khi cu lnh:
SELECT * FROM R,S
WHERE R.A = S.E

Cho kt qu l:
A

----

----- -----

----- -----

------ --------

aaa

aaaa

aaa

xxx

12

gdf

xxx

23

26

k3h

sss

20

sss 45
Cn cu lnh:

(null)

Giao trnh thc hanh SQL


SELECT * FROM R,S
WHERE R.A *= S.E

Cho kt qu l:
A

---

---- ----

-----

----- ------

------

aaa

aaaa

aaa

(null)

fff

f2

(null) (null)

(null)

ggg

g4

(null) (null)

(null)

xxx

12

gdf

ggg

12

khf

k3h

sss 45

xxx

23

26

(null) (null)
sss

(null)

20

V cu lnh
SELECT * FROM R,S
WHERE R.A =* S.E

Cho kt qu l:
A

----

-----

-----

----- -----

------ ---------

aaa

aaaa

aaa

(null)

xxx

12

gdf

xxx

23

26

(null)(null) (null)

(null) abc

(null)(null) (null)

(null) (null)12

sss

45

k3h

sss

(null)

20

Cc gii hn ca php ni ngoi


Giao tc SQL khng cho php hai php ni ngoi lng nhau v php ni
trong lng vo trong php ni ngoi. Tuy nhin, mt bng c th tham gia trong mt
php ni trong v l bng ngoi (outer table) trong mt php ni ngoi.
Bng di y cho bit cc cch kt hp hp l v khng hp l ca php
ni trong v php ni ngoi:
Hp l

Khng hp l

T1 =* T2 *= T3

T1 *= T2 *= T3

T1 = T2 *= T3

T1 *= T2 = T3

T1 *= T2 =* T3
T3

T3
7UDQJ

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 cc
gi tr NULL c xem nh l khng bng nhau. Chng hn ta c hai bng:
A

------

---------

--------

--------

b1

Null

d1

Null

b2

d2

b3
Bng R

Bng S

Th cu lnh:
SELECT * FROM

R, S

WHERE A *= C

S cho kt qu l:
A

------

------

------

------

b1

Null

Null

Null

b2

Null

Null

b3

D2

1.10 To cc dng thng k d liu vi COMPUTE ... BY


Ta s dng mnh COMPUTE BY kt hp vi cc hm gp dng v mnh
ORDER BY sn sinh ra cc cc bo co (report) nhm thng k cc gi tr d liu

Giao trnh thc hanh SQL

theo tng nhm. Nhng gi tr thng k ny xut hin nh l nhng dng b sung
trong kt qu truy vn. Mt mnh COMPUTE BY cho php ta quan st c cc chi
tit v d liu ln cc gi tr thng k. Ta c th tnh cc gi tr thng k cho cc
nhm con (subgroups) v ta cng c th tnh ton nhiu hm gp trn cng mt
nhm.
Mnh COMPUTE BY c c php nh sau:
COMPUTE

row-aggregate(col_name)
[,...,row_aggregate(col_name)]

BY col_name [,...,col_name]

Cc hm gp c th s dng c vi COMPUTE BY bao gm SUM, AVG,


MIN, MAX v COUNT.
V d 2.18: Cu lnh di y cho bit h tn, tn n v h s lng ca nhn
vin ng thi cho bit lng trung bnh ca cc nhn vin trong mi n v
SELECT hoten,tendonvi,hsluong
FROM nhanvien,donvi
WHERE nhanvien.madonvi=donvi.madonvi
ORDER BY nhanvien.madonvi
COMPUTE AVG(hsluong) BY nhanvien.madonvi

Kt qu ca truy vn ny s nh sau:
Hoten

tendonvi

hsluong

---------------

--------------

--------------

Nguyn Th Hoa

Phng k ton

2.11
avg
===========
2.11

L Hoi Nam

Phng T chc

1.86

Hong Nam Phong

Phng T chc

3.21
avg
===========
2.535

Trn Nguyn Phong

Phng iu hnh

1.92

Nguyn Hu Tnh

Phng iu hnh

1.92
avg
===========
1.92

Nguyn Trung Kin

Phng ti v
7UDQJ

1.86

Trn Nguyn Phong


avg
===========
1.86

Khi s dng mnh COMPUTE ... BY cn tun theo cc qui tc di y:

T kha DISTINCT khng cho php s dng vi cc hm gp dng

Cc ct s dng trong mnh COMPUTE phi xut hin trong danh sch
chn.

Khng s dng SELECT INTO trong mt cu lnh SELECT c s dng


COMPUTE.

Nu s dng mnh COMPUTE ... BY th cng phi s dng mnh


ORDER BY. Cc ct lit k trong COMPUTE BY phi ging ht hay l mt
tp con ca nhng g c lit k sau ORDER BY. Chng phi c cng th
t t tri qua phi, bt u vi cng mt biu thc v khng b qua bt k
mt biu thc no.

Chng hn nu mnh ORDER BY c dng:


ORDER BY a, b, c
Th mnh COMPUTE BY c dng di y l hp l:
COMPUTE row_aggregate (column_name) BY a, b, c
COMPUTE row_aggregate (column_name) BY a, b
COMPUTE row_aggregate (column_name) BY a
V cc dng di y l sai
COMPUTE row_aggregate (column_name) BY b, c
COMPUTE row_aggregate (column_name) BY a, c
COMPUTE row_aggregate (column_name) BY c

Phi s dng mt tn ct hoc mt biu thc trong mnh ORDER BY,


vic sp xp (order) khng c thc hin da trn tiu ct.

T kho COMPUTE c th c s dng m khng c BY v khi


ORDER BY l ty chn.

1.11 Thng k d liu vi GROUP BY v HAVING


Ta c th s dng cc mnh GROUP BY v HAVING thng k d liu.
GROUP BY t chc d liu vo cc nhm, HAVING thit lp cc iu kin ln cc
nhm trong kt qu truy vn. Nhng mnh ny thng c s dng kt hp vi
nhau (HAVING c s dng khng km vi GROUP BY c th to ra nhng kt
qu nhm ln).
Cc hm gp tr v cc gi tr tm lc cho c bng hoc cho cc nhm trong
bng. Do , chng thng c s dng vi GROUP BY. Cc hm gp c th xut
hin trong mt dang sch chn hay trong mnh HAVING, nhng khng c s
dng trong mnh WHERE.
Ta c th s dng cc hm gp di y vi GROUP BY (Trong expression
l mt tn ct).

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 vin
theo tng n v:
SELECT donvi.madonvi,tendonvi, avg(hsluong)
FROM nhanvien,donvi
WHERE nhanvien.madonvi = donvi.madonvi
GROUP BY donvi.madonvi,tendonvi

Ch : Danh sch cc tn ct trong danh sch chn ca cu lnh SELECT v danh


sch cc tn ct sau GROUP BY phi nh nhau, nu khng cu lnh s khng hp l.
V d cu lnh di y l khng ng:
SELECT donvi.madonvi,tendonvi, avg(hsluong)
FROM nhanvien,donvi
WHERE nhanvien.madonvi = donvi.madonvi
GROUP BY donvi.madonvi

Mnh HAVING thit lp cc iu kin i vi mnh GROUP BY tng t


nh cch thc mnh WHERE thit lp cc iu kin cho cu lnh SELECT. Mnh
HAVING s khng c ngha nu nh khng s dng kt hp vi mnh
WHERE. C mt im khc bit gia HAVING v WHERE l trong iu kin tm
kim ca WHERE khng c c cc hm gp trong khi HAVING li cho php s
dng cc hm gp trong iu kin tm kim ca mnh. Mnh HAVING c th
tham chiu n bt k mc no trong danh sch chn v mnh HAVING c th
cha ti a 128 iu kin tm kim.
V d 2.20: Cu lnh di y cho bit h s lng trung bnh ca cc nhn vin
theo tng n v v ch hin th nhng n v c h s lng trung bnh ln hn 1.92
SELECT donvi.madonvi,tendonvi, avg(hsluong)
FROM nhanvien,donvi
WHERE nhanvien.madonvi = donvi.madonvi
GROUP BY donvi.madonvi,tendonvi
HAVING avg(hsluong)>1.92

7UX\YQFRQ VXETXHU\

7UDQJ

Trn Nguyn Phong

0W WUX\ YQ FRQ OD PW FX OQK 6(/(&7 F OQJ YDR EQ WURQJ PW FX
OQK 6(/(&7 ,16(57 83'$7( KD\ '(/(7( KRF EQ WURQJ PW WUX\ YQ FRQ
NKDF&XOQKWUX\YQFRQFRWKWKDPFKLXQFXQJPWEDQJYLWUX\YQQJRDL
KRFPWEDQJNKDF7URQJJLDRWDF64/PWWUX\YQFRQWUD Y PWFKJLD WUFR
WKFVGXQJWDLQKQJYWUPDWDLRPWELXWKFFFKRSKHSVGXQJ
&XSKDSWUX\YQFRQ
0WWUX\YQFRQFOQJ YDR EQ WURQJ PW FX OQK 6(/(&7 FR FX SKDS
QKVDX
(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])

&XOQK6(/(&7FXDWUX\YQFRQOXQQPWURQJFSGXQJRF1R NKQJ
F FKD PQK  25'(5 %< &20387( KRF )25 %52:6( 0W WUX\ YQ
FRQ FR WK F OQJ YDR EQ WURQJ PQK  :+(5( KD\ +$9,1* FXD PW FX
OQK6(/(&7,16(57 KD\ '(/(7( KRF EQ WURQJ WUX\ YQ FRQ NKDF 1X PW
WUX\YQFRQWUD Y FKPWJLD WUQR FR WK FV GXQJWDLQKQJYWUPD  R
PWELXWKFFFKRSKHSV GXQJ0W WUX\ YQ FRQ NKQJ F SKHS V GXQJ
EQWURQJPWGDQKVDFKFXDPQK25'(5%<
&DFFXOQKFKDWUX\YQFRQWKQJFRPWWURQJVFDFGDQJVDX
(1)

WHERE expression [NOT]IN (subquery)

(2)

WHERE expression comparison_operator [ANY|ALL](subquery)

(3)

WHERE [NOT]EXISTS (subquery)

9GX&XOQKVDX\KLQWKLWKQJWLQYFDFQKQYLQODPYLFQKQJ
QYFRVLQWKRDLNKQJEWXELV
SELECT *
FROM nhanvien
WHERE madonvi NOT IN ( SELECT madonvi
FROM donvi
WHERE dienthoai like '82%')

%VXQJFSQKWYD[RDGOLX
%VXQJGOLX

Giao trnh thc hanh SQL

j E VXQJ G OLX YDR WURQJ PW EDQ G OLX WD V GXQJ FX OQK ,16(57
'DQJQJLDQQKWFXDFXOQKQD\FRFXSKDSQKVDX
INSERT [INTO]

table_name

VALUES(value1, value2, ...)

7URQJGRWDEOHBQDPHODWQFXDEDQJFQWKDRWDF6OQJFDFJLDWUFFK
QKSKDLJLQJV OQJFDFFWNKLQKQJKDEDQJYD NLXG OLXFXDFDFJLD WU
QD\SKDLSKXKSYLNLXGOLXFXDFDFFWWQJQJ
9GX&XOQKGL\EVXQJWKPPWQKQYLQYDREDQJQKDQYLHQ
INSERT INTO nhanvien
VALUES('NV02003','L Th Mai','23/5/72',
NULL,'523312',1.92,'02')

7URQJWUQJKSFKQKSGOLXFKRPWVFWWURQJEDQJWDSKDLFKQK
GDQKVDFKFDFFWFQQKSGOLXQJD\VDXWQEDQJ.KLRFXOQK,16(57FRFX
SKDSQKVDX
INSERT [INTO]

table_name(col1,col2,..., colN)

VALUES(value1, value2, ...,valueN)

7URQJWUQJKSQD\FDFFWNKQJFQKSGOLXVHQKQJLDWUPFQK
QXFR KRFQKQJLD WU18//1XWDNKQJQKSG OLXFKRPWFWNKQJFR
UDQJEXF'()$8/7YD FXQJNKQJFKRSKHSFKSQKQJLD WU18//FXOQKVH
EOL
9GX
INSERT INTO nhanvien(manv,hoten,diachi)
VALUES('NV03002','Nguyn Th Hanh Dung','56 Trn Phu')

1JRDLKDLGDQJ WUQFXOQK,16(57FRQFKRSKHSWDQKSG OLXFKRPW


EDQJEQJFDFKO\G OLXW PWEDQJNKDF+D\QRLFDFKNKDFFXOQK,16(57
FRQFKRSKHSFKXQJWDVDROXGOLXWEDQJQD\VDQJEDQJNKDF
9GX *LD V WDFR EDQJOXRQJBQKDQYLHQEDRJPKDLFWKRWHQYD OXRQJ
FXOQKGL\E VXQJG OLXYD EDQJOXRQJBQKDQYLHQEQJFDFKO\G OLXW
EDQJQKQYLQ
INSERT INTO luong_nhanvien
SELECT

hoten,hsluong*210000 FROM nhanvien

&SQKWGOLX
&XOQK83'$7(FKRSKHSQJLVGXQJWKD\LGOLXDWQWDLEQWURQJ
EDQJGOLX&XOQKQD\FRFXSKDSQKVDX
7UDQJ

Trn Nguyn Phong


UPDATE
SET

updated_table_name

colname = expression
[, ..., colname = expression ]

[FROM

table_name [,..., table_name]]

[WHERE

conditions ]

9GX&XOQKGL\WQJOQJOQFKRQKQJQKQYLQODPYLF
WDLQYFRPDQYOD
UPDATE nhanvien
SET hsluong = hsluong+0.2
WHERE madonvi ='04'

0QK  )520 WURQJ FX OQK 83'$7( F V GXQJ NKL FQ FK QK FDF
LXNLQFSQKWOQTXDQQFDFEDQJNKDF
9GX*LDVWDFRKDLEDQJ0$7+$1*YD1+$7.<%$1+$1*QKVDX
0$7+$1*
0$+$1*

1+$7.<%$1+$1*
1*$<%$1

0$+$1*

7(1+$1*
'21*,$

62/821*
7+$1+7,(1

&X OQK GL \ VH FS QKW JLD WU FKR WUQJ 7+$1+7,(1 WURQJ EDQJ
1+$7.<%$1+$1*WKHRFQJWKF7+$1+7,(1 62/821*'21*,$
UPDATE nhatkybanhang
SET

thanhtien = soluong*mathang.dongia

FROM mathang
WHERE nhatkybanhang.mahang = mathang.mahang

;RDGOLX
j [RD FDFEDQJKLG OLXUDNKRLEDQJG OLXWDV GXQJFXOQK'(/(7(
FRFXSKDSQKVDX
DELETE

[FROM]

delete_table_name

[FROM table_name [,..., table_name]]


[WHERE conditions]

9 GX  &X OQK GL \ [RD NKRL EDQJ QKDQYLHQ QKQJ QKQ YLQ ODP
YLFWDLQYFRVLQWKRDLOD


DELETE FROM nhanvien

Giao trnh thc hanh SQL


FROM donvi
WHERE nhanvien.madonvi = donvi.madonvi AND
donvi.dienthoai ='848484'
Z Y

7UDQJ

Trn Nguyn Phong

Chng 3: NGN NG IU KHIN

1JQQJ LXNKLQFV GXQJWURQJ YLFFSSKDWKD\KX\ ER TX\QFXD


QJLVGXQJLYLFDFFXOQK64/KRFWUQFDFLWQJ&6'/

&XOQK*5$17
&XOQK*5$17FV GXQJQKPFSSKDWTX\QFKRQJLVX GXQJWUQ
FDFLWQJ&6'/KRFTX\QWKFWKLFDFFXOQK64/&XSKDSFXDFXOQKQD\
FRKDLGDQJQKVDX
'DQJ&SSKDWTX\QLYLFDFFXOQK
GRANT ALL | statement [,...,statementN ]
TO account [,...,accountN]

'DQJ&SSKDWTX\QLYLFDFLWQJ&6'/
GRANT ALL | permission [,...,permissionN]
ON table_name |view_name [(column1 [,...,columnN])]
|ON stored_procedure
TO account [,...,accountN]

7URQJR


$//ODWNKRDFVGXQJNKLPXQFSSKDWWWFDFDFTX\QFRWKFKR
QJLVGXQJ

6WDWHPHQWODFXOQKFFSSKDWTX\QFKRQJLVGXQJ&DFFXOQK
FRWKFSSKDWFKRQJLVGXQJEDRJP
&5($7('$7$%$6(
&5($7('()$8/7
&5($7(352&('85(
&5($7(58/(
&5($7(7$%/(
&5($7(9,(:
%$&.83'$7$%$6(
%$&.83/2*

Giao trnh thc hanh SQL

DFFRXQWODWQWDLNKRDQFXDQJLVGXQJNKLQJQKSYDRKWKQJ

3HUPLVVLRQOD PWTX\QFSSKDWFKRQJLV GXQJWUQLWQJ&6'/


YDFTXLGQKQKVDX
&DFTX\QFRWKFSSKDWWUQPWEDQJKRFNKXQJQKQ6(/(&7
,16(57'(/(7(YD83'$7(
&DF TX\Q FR WK FS SKDW WUQ FDF FW FXD EDQJ KRF NKXQJ QKQ
6(/(&7YD83'$7(
4X\QFRWKFSSKDWLYLWKXWXFOXWU(;&87(

9GX
&SSKDWTX\QWKFWKLFXOQK&5($7(7$%/(YD&5($7(9,(:FKRWDL
NKRDQFRWQODGEBXVHU
GRANT CREATE TABLE, CREATE VIEW
TO db_user

&SSKDWFKRFDFWDLNKRDQFR WQOD GEBXVHUYD GEBXVHUTX\QF[HPYD


FSQKWGOLXWUQFDFFWKRWHQGLDFKLGLHQWKRDLYDKVOXRQJFXDEDQJQKDQYLHQ
GRANT

SELECT, UPDATE

ON nhanvien(hoten,diachi,dienthoai,hsluong)
TO db_user1, db_user2

&XOQK5(92.(
&XOQK5(92.(FVGXQJKX\ERTX\QDFFSSKDWFKRQJL
V GXQJWUQFDFLWQJ&6'/ KRFFXOQK64/&XOQK5(92.(FXQJ FR
KDLGDQJQKVDX
'DQJ+X\ERTX\QLYLFXOQK
REVOKE ALL | statement [,...,statementN]
FROM account [,...,accountN]

'DQJ+X\ERTX\QLYLLWQJ&6'/
REVOKE ALL | permission [,...,permissionN]}
ON table_name | view_name [(column [,...,columnN])]
| stored_procedure
FROM

account [,...,accountN ]

9 GX  +X\ ER TX\Q [HP YD FS QKW G OLX WUQ FW KVOXRQJ FXD EDQJ
QKDQYLHQLYLWDLNKRDQFRWQODGEBXVHU
7UDQJ

Trn Nguyn Phong


REVOKE SELECT, UPDATE
ON nhanvien(hsluong)
FROM db_user1

+X\ERWWFDFDFTX\QDFSSKDWFKRWDLNKRDQFRWQODGEBXVHU
REVOKE ALL
FROM db_user

Z Y

Giao trnh thc hanh SQL

Chng 4: THU TUC LU TR VA TRIGGER


,6GXQJWKXWXFOXWU VWRUHGSURFHGXUH
Cc th tc lu tr l mt trong nhng i tng c s d liu. C th xem
chng tng t nh nhng th tc trong cc ngn ng lp trnh. Mi mt th tc lu
tr c th c cc kh nng sau:
Nhn cc tham s u vo, thc thi cc cu lnh bn trong th tc v tr v cc
gi tr.
Bn trong mi th tc c th cha cc cu lnh nhm thc hin cc thao tc
trn c s d liu (k c vic gi n cc th tc lu tr khc)
Tr v mt gi tr trng thi thng qua c th xc nh vic thc thi th tc
l thnh cng hay b li.
Vic s dng cc th tc lu tr bn trong c s d liu s mang li nhng li
ch sau:
Th tc lu tr cho php module ho cng vic, to iu kin thun li cho
vic thc hin cc thao tc trn d liu.
Th tc lu tr c phn tch, ti u v bin dch khi to ra nn vic thc thi
chng nhanh hn nhiu so vi vic s dng mt tp cc cu lnh giao tc
SQL theo nhng cch thng thng.
Th tc lu tr cho php chng ta thc hin cng mt yu cu bng mt cu
lnh n gin thay v phi s dng nhiu dng lnh SQL. iu ny s lm
gim thiu s lu thng trn mng.
Thay v cp pht quyn trc tip cho ngi s dng trn cc cu lnh SQL, ta
c th cp pht quyn cho ngi s dng thng qua cc th tc lu tr, nh
tng kh nng bo mt i vi h thng.
,To cc th tc lu tr
to mt sp, ta s dng cu lnh CREATE PROCEDURE c c php nh sau:
CREATE PROCEDURE procedure_name [;number]
[(parameter1 [,parameter2]...[parameter255])]
AS sql_statements

V d 4.1:
CREATE PROC sp_list
@bten char(20)
AS
SELECT hoten, ngaysinh, diachi
FROM nhanvien
WHERE hoten= @bten

Ch : Nu khi gi th tc, chng ta truyn tham s cho th tc di dng:


7UDQJ

Trn Nguyn Phong

@tham_s = gi_tr
Th th t cc tham s khng cn phi tun theo th t nh khi to th tc bng cu
lnh CREATE PROCEDURE. Tuy nhin, nu nh c mt tham s c truyn gi
tr theo cch trn th tt c cc tham s cn li cng phi c truyn gi tr theo cch
.
Ta c th gn mt gi tr mc nh cho tham s trong cu lnh CREATE
PROCEDURE. Gi tr ny, c th l hng bt k, s c ly lm tham s ca th tc
khi ngi s dng khng cung cp gi tr cho tham s khi gi th tc.
V d 4.2:
CREATE PROC sp_list;2 @bten char(20)=Nguyen Van A
AS
SELECT * FROM nhanvien
WHERE hoten = @bten

Vi th tc trn, nu ta gi msp_list;2 m khng c tham s th th tc s ly


tham s mc nh l Nguyn Vn A cho @bten.
Gi tr mc nh c th NULL. Trong trng hp ny, nu ngi s dng khng
cung cp tham s, SQL Server s thi hnh th tc theo cc tham s khc.
V d 4.3: Vi cu lnh
CREATE PROC sp_list;3 @bten char(20)=NULL,@bluong float
AS
SELECT * FROM nhanvien
WHERE hoten=@bten AND hsluong=@bluong

Ta th gi th tc trn nh sau:
msp_list;3 @btuoi=23

m khng b li.
Mc nh c th bao gm cc k t i din (%, _, [], [^] ) nu th tc s dng
tham s vi t kha LIKE.
V d 4.4:
CREATE PROC sp_list;4 @bten char(20) =Trn%
AS
SELECT * FROM nhanvien
WHERE hoten LIKE @bten

,Thng tin tr v t cc th tc lu tr
Cc gi tr trng thi tr v:
Cc th tc c th tr v mt gi tr nguyn c gi l mt trng thi tr v. Gi
tr ny ch ra cho bit th tc c thc hin thnh cng hay gp li v nguyn nhn
ca li (SQL Server nh ngha sn mt tp cc gi tr tr v, cc gi tr ny nm
trong khong [-99;0]; trong gi tr tr v bng 0 tc l vic thc hin th tc thnh
cng, cc gi tr cn li cho bit nguyn do khi b li).
Gi tr tr v do ngi s dng nh ngha
Ngi s dng c th nh ngha cc gi tr tr v ca mnh trong cc th tc
lu tr bng cch b sung mt tham s vo cu lnh RETURN. Tt c cc s nguyn
ngoi tr cc gi tr dnh ring cho h thng u c th c s dng.

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 2

Cc tham s tr v
Khi c hai cu lnh CREATE PROCEDURE v EXECUTE cha mc chn
OUTPUT cho tn mt tham s, th tc c th s dng mt bin tr v tr ca tham
s n ngi gi. Bng vic s dng t kho OUTPUT, bt c s thay i no n
cng vn cn gi li sau khi th tc c thc hin, v cc bin c th c s dng
trong cc cu lnh SQL b sung sau trong tp lnh hay th tc c gi. Nu t
kho OUTPUT khng c s dng, vic thay i n tham s s khng c gi li
sau khi kt thc thc hin th tc. Ngoi ra, ta cn c th dng RETURN tr v gi
tr.
Mt th tc lu tr c th s dng bt k hoc tt c kh nng sau tr v:
Mt hoc nhiu tp cc gi tr.
Mt gi tr tr v r rng (s dng cu lnh RETURN).
Mt tham s OUTPUT.
Nu chng ta ch nh OUTPUT khi thc hin mt th tc nhng tham s tng
ng khng c nh ngha vi OUTPUT khi to th tc th s b li. Tuy nhin nu
ta nh ngha OUTPUT cho mt tham s trong th tc nhng khng ch nh
OUTPUT khi thc hin th vn khng b li (gi tr tham s khi s khng c tr
v).
V d 4.6:
CREATE PROC Chia @sobichia real,@sochia real,
@kqua real OUTPUT
AS
IF (@sochia =0)
Print Division by zero
ELSE
SELECT @kqua = @sobichia / @sochia

Khi nu ta thc hin nh sau:


DECLARE @ketqua
real
EXEC Chia 100, 2, @ketqua
SELECT @ketqua

S cho kt qu l:
---------------------50.0

Cn nu thc hin
DECLARE @ketqua
real
EXEC Chia 100, 2, @ketqua
SELECT @ketqua
7UDQJ

OUT

Trn Nguyn Phong

S cho kt qu l:
---------------------(null)

I.3. Cc qui tc s dng cho sp


Sau y l mt s qui tc cn lu khi to cc th tc lu tr
Cu lnh CREATE PROCEDURE khng th kt hp vi cc cu lnh SQL
khc trong mt khi lnh n (single batch).
Bn thn nh ngha CREATE PROCEDURE c th bao gm bt k s
lng cng nh cu lnh SQL no ngoi tr nhng cu lnh sau:
CREATE VIEW

CREATE TRIGGER

CREATE DEFAULT

CREATE PROCEDURE

CREATE RULE
Cc i tng CSDL khc c th c to bn trong mt th tc lu tr. Ta
c th tham chiu mt i tng c to trong cng th tc min l n
c to trc khi tham chiu.
Bn trong mt th tc, ta khng th to mt i tng, xo n v sau to
mt i tng mi vi cng tn.
Ta c th tham chiu cc bng tm thi bn trong mt th tc.
Nu ta thc thi mt th tc m gi n th tc khc, th tc c gi c th
truy cp n mi i tng ngoi tr cc bng tm thi c to bi th tc
u tin.
Nu ta to mt bng tm thi ring (private temporary table) bn trong mt
th tc, bng tm thi ch tn ti cho nhng mc ch ca th tc ; n s
mt i khi thot ra khi th tc.
S tham s ti a ca mt th tc l 255.
S bin cc b v ton cc trong mt th tc ch b gii hn bi kh nng b
nh.
Cc th tc tm thi cc b (private) v ton cc (public), tng t nh cc
bng tm thi, c th c to vi du # v ## ng trc tn th tc. # biu
din th tc tm thi cc b cn ## biu din th tc tm thi ton cc.
I.4 Xc nh tn bn trong cc th tc
Bn trong mt th tc, tn cc i tng c s dng vi cu lnh ALTER
TABLE, CREATE TABLE, DROP TABLE, TRUNCATE TABLE, CREATE INDEX,
DROP INDEX, UPDATE STATISTICS v DBCC phi c xc nh vi tn ca
ngi s hu i tng (object owners name) nu nh nhng ngi dng (user) khc
s dng th tc. V d, ngi dng Mary, l s hu ch ca bng marytab, phi ch
nh tn ca bng ca mnh khi n c s dng vi mt trong nhng cu lnh ny
nu c ta mun nhng user khc c th thc hin th tc m trong bng c s
dng.
Qui tc ny l cn thit v tn i tng c phn tch khi cc th tc c
chy. Nu marytab khng c ch nh v user John tm cch thc hin th tc, SQL

Giao trnh thc hanh SQL

s tm bng marytab do John s hu. V d di y l mt cch dng ng, n ch ra


cho SQL Server tm bng marytab do Mary s hu:
CREATE PROC p1
AS
CREATE INDEX marytab_ind
ON mary.marytab(col1)

I.5 i tn cc th tc:
S dng th tc:
sp_rename old_name, new_name

Ta ch c th i tn nhng th tc m ta s hu. Ngi s hu CSDL c th


thay i tn ca bt k th tc no ca ngi s dng. Th tc c i tn phi nm
trong CSDL hin thi.
Ta phi xo v to li mt th tc nu ta thay i tn ca mt i tng c
tham chiu bi th tc .
c c bo co v nhng i tng c tham chiu bi mt th tc, ta s
dng th tc h thng: sp_depends.
xem ni dung ca nh ngha mt th tc, ta s dng th tc h thng:
sp_helptext.
I.6. Xo th tc:
xo mt th tc, ta s dng cu lnh:
DROP PROCEDURE

proc_name

II. S dng cc Trigger


Mt trigger l mt dng c bit ca th tc lu tr v n c thc hin t
ng khi ngi dng p dng cu lnh sa i d liu ln mt bng c ch nh.
Cc trigger thng c s dng cho vic p buc cc qui tc lm vic v ton vn d
liu. Tnh ton vn tham chiu c th c nh ngha bng cch s dng rng buc
FOREIGN KEY vi cu lnh CREATE TABLE. Nu cc rng buc tn ti trong
bng c s tc ng ca trigger, n c kim tra trc vic thc hin trigger. Nu
cc rng buc b vi phm, trigger s khng thc thi.
Cc trigger c s dng trong nhng cch sau:
Cc trigger c th thay i ng lot (cascade change) cc bng c lin h
trong mt CSDL.
Cc trigger c th khng cho php hoc roll back nhng thay i vi phm
tnh ton vn tham chiu, hy b giao tc sa i d liu.
Cc trigger c th p t cc gii hn phc tp hn nhng gii hn c nh
ngha bng rng buc CHECK. Khc vi rng buc CHECK, cc trigger c
th tham chiu n cc ct trong cc bng khc.
Cc trigger cn c th tm s khc bit gia cc trng thi ca mt bng
trc v sau khi sa i d liu v ly ra nhng tc ng da trn s khc
bit .

7UDQJ

Trn Nguyn Phong

II.1 To cc trigger
Mt trigger l mt i tng CSDL. Ta to mt trigger bng vic ch nh bng
hin hnh v cu lnh sa i d liu kch hot trigger. Sau ta xc nh cc cng
vic m trigger lm.
Mt bng c th c ti a 3 loi trigger: mt trigger cp nht (update trigger),
mt trigger chn (insert trigger) v mt trigger xa (delete trigger). Tuy nhin, mi
trigger c th thc hin nhiu hm v gi n 16 th tc. Mi trigger ch c th p
dng cho mt bng. Tuy nhin, mt trigger n c th p dng cho c 3 cng vic
(UPDATE, INSERT v DELETE).
Ta khng th to mt trigger trn mt khung nhn hay mt bng tm thi mc d
cc trigger c th tham chiu cc khung nhn hay cc bng tm thi.
Cu lnh TRUNCATE TABLE mc d ging cu lnh DELETE khi khng c
mnh WHERE nhng n khng th kch hot mt trigger.
to mi mt trigger, ta s dng cu lnh c c php nh sau:
CREATE TRIGGER trigger_name
ON table_name
FOR {INSERT, UPDATE, DELETE}
AS
sql_statements

Hoc s dng mnh IF UPDATE:


CREATE TRIGGER
trigger_name
ON table_name
FOR {INSERT, UPDATE}
AS
IF UPDATE (column_name)
[{ANDOR}UPDATE (column_name)...] sql_statements

V d 4.7: Nu chng ta mun sau khi ta cp nht d liu cho bng nhanvien,
SQL Server s hin th ni dung ca bng xem th ta to mt trigger nh sau:
CREATE TRIGGER tgr_check
ON nhanvien
FOR INSERT, UPDATE
AS
print '*** Ket qua sau khi cap nhat
SELECT * FROM nhanvien

***'

II.2 Cc gi tr null ngm nh v hin (implicit and explicit null values)


Mnh IF UPDATE(tn_ct) l ng cho mt cu lnh INSERT khi m ct
c gn mt gi tr trong danh sch chn hay trong mnh VALUES. Mt NULL
hin (explicit) hay mt mc nh gn mt gi tr cho mt ct v v th kch hot
trigger. Vi mt NULL ngm nh, nu gi tr khng c xc nh bi cu hi hoc
bi mc nh c gn, trigger trn ct khng c kch hot.
V d 4.8:
CREATE TABLE vidu(col1 int NULL,col2 int NOT NULL)
GO
CREATE TRIGGER tgr_vidu
ON vidu

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, trigger


khng c kch hot */
INSERT vidu(col2) VALUES(2)

/* Khng c mc nh trn ct col2, IF UPDATE khng ng cho c hai ct, trigger


khng c kch hot */
INSERT vidu(col1) VALUES(2)

Kt qu tng t c sn sinh vi vic s dng ch mnh


IF UPDATE(col1)

to mt trigger khng cho php vic chn cc gi tr null ngm nh, ta s


dng:
IF UPDATE(col2) OR UPDATE(col2)

Cu lnh SQL trong trigger c th sau kim tra xem col1 l NULL hay
khng.
II.3 Vic i tn v cc trigger
Nu mt bng c tham chiu bi mt trigger b i tn, ta phi xo trigger
i v to li n ph hp vic tham chiu ca n n bng.
Th tc sp_depends c chc nng lit k tt c cc trigger tham chiu n i
tng (chng hn bng hay khung nhn) hoc tt c cc bng hay khung nhn m
trigger tc ng. V d sau y lit k cc i tng c tham chiu bi trigger
tgr_check:
sp_depends

tgr_check

II.4 Hin th thng tin v cc trigger


Do cc trigger l cc i tng CSDL nn chng c lit k trong bng h
thng sysobjects. Ct type trong sysobjects xc nh cc trigger vi ch vit tt TR. S
thc thi cc trigger c lu tr trong bng sysprocedures.
Truy vn di y tm cc trigger trong mt CSDL:
SELECT * FROM sysobjects WHERE type=TR

hin th thng tin v mt trigger ta thc hin th tc:


7UDQJ

Trn Nguyn Phong


sp_help

trigger_name

Cu lnh CREATE TRIGGER cho mi trigger c lu tr trong bng h thng


syscomments. Ta c th hin th li nh ngha trigger bng cch s dng th tc
sp_helptext.
V d 4.9: thc hin sp_helptext tgr_check ta c kt qu nh sau:
text
-------------create trigger tgr_check
on nhanvien
for insert,update
as
print '***** Ket qua sau khi cap nhat *****'
select * from nhanvien

II.5 Xo trigger
Ta c th xo mt trigger bng cch xo n hoc xo bng trigger. Khi mt
bng c xa, nhng trigger no c lin quan vi n cng ng thi b xa. DROP
TRIGGER mc nh cho php i vi ngi s dng bng trigger v khng th
chuyn cho ngi khc.
Ta c th xa mt trigger bng cch s dng cu lnh DROP TRIGGER

Giao trnh thc hanh SQL

Chng 5: PHU LUC


7URQJFKQJQD\FKXQJWLJLLWKLXFXWUXFYDGOLXFXDFDFEDQJFV
GXQJWURQJFDFYGX WURQJFKQJ6DXR JLLWKLXPWV KDPWKQJV GXQJ
WURQJ64/6HUYHUJLXSFDFEDQWKDPNKDRWURQJTXDWUQKWKFKDQK
&XWUXFYDGOLXFXDEDQJ1+$19,(1YD'219,
1+$19,(1
0$19
+27(1
1*$<6,1+
',$&+,
',(17+2$,
+6/821*
0$'219,

'219,
 0$'219,
7(1'219,
',(17+2$,

%DQJ1+$19,(1
0$19

+27(1

1*$<6,1+

',$&+,

',(17+2$,

+6/821*

0$'219,

19

1JX\Q7K+RD



/'XQ







19

/+RDL1DP



7UQ3KX







19

+RDQJ1DP3KRQJ



+RDQJ'LX







19

7UQ1JX\Q3KRQJ



+D1L







19

1JX\Q+X7QK



+D1L







19

1JX\Q7UXQJ.LQ



1JX\Q+X







%DQJ'219,
0$'219,

7(1'219,

',(17+2$,



3KRQJ.WRDQ





3KRQJ7FKF





3KRQJLXKDQK





3KRQJLQJRDL





3KRQJ7DLYX



0WVKDPWKQJVGXQJWURQJ64/6HUYHU
&DFKDPWUQGOLXNLXQJD\YDJL
D+DP'$7($''
7UDQJ

Trn Nguyn Phong

&XSKDS'$7($'' GDWHSDUWQXPEHUGDWH
&KF QQJ +DP WUD Y PW JLD WU NLX 'DWH7LPH EQJ FDFK FQJ WKP PW
NKRDQJJLDWUODQXPEHUYDRQJD\GDWHFFKQK
'DWHSDUW WKDP V FK QK WKDQK SKQ VH F FQJ L YL JLD WU GDWH EDR
JP
'DWHSDUW
\HDU
TXDUWHU
PRQWK
GD\RI\HDU
GD\
ZHHN
KRXU
PLQXWH
VHFRQG
PLOOLVHFRQG

9LWWW
\\\\\\
TTT
PPP
G\\
GGG
ZNZZ
KK
PLQ
VVV
PV

E+DP'$7(',))
&XSKDS'$7(',)) GDWHSDUWVWDUWGDWHHQGGDWH
&KFQQJ+DPWUDYNKRDQJWKLJLDQJLDKDLJLDWUNLXQD\FFKQK
WX\WKXFYDRWKDPVGDWHSDUW
9GXKDP'DWHGLII \HDU



FKRNWTXDOD
F+DP'$7(3$57
&XSKDS'$7(3$57 GDWHSDUWGDWH
&KFQQJ+DPWUD Y PW V QJX\Q F WUFK UD W WKDQK SKQ F FK
QKELWKDPVSDUWGDWH WURQJJLDWUNLXQJD\FFKQK
9GX+DP'DWH3DUW \HDU

FKRNWTXDOD
G+DP*(7'$7(
&XSKDS*(7'$7(
&KFQQJ+DPWUDYQJD\KLQWDL
H+DP'$<0217+<($5
&XSKDS'$< GDWH 0217+ GDWH <($5 GDWH
&KF QQJ +DP WUD Y JLD WU QJD\ WQJ QJ WKDQJ QP  FXD JLD WU NLX
QJD\FFKQK
&DFKDPYFKXL

Giao trnh thc hanh SQL

D+DP/()7
&XSKDS/()7 VWULQJQ
&KFQQJ+DPWUFKUDWFKXLVWULQJQN\WWQKWEQWUDL
E+DP5,*+7
&XSKDS/()7 VWULQJQ
&KFQQJ+DPWUFKUDWFKXLVWULQJQN\WWQKWEQSKDL
F+DP68%675,1*
&XSKDS68%675,1* VWULQJPQ
&KFQQJ+DPWUFKUDWFKXLVWULQJQN\WWQKWN\WWKP
G+DP/75,0575,0
&XSKDS/75,0 VWULQJ 575,0 VWULQJ
&KFQQJ+DPFWERFDFNKRDQJWUQJWKDEQWUDLEQSKDLFKXLVWULQJ
H+DP/(1
&XSKDS/(1 VWULQJ
&KFQQJ+DPWUDYGDLFXDFKXLVWULQJ

7UDQJ

Trn Nguyn Phong

MUC LUC
&+ml1*1*k11*muir1+1*+p$'mu/,j8 
7$2%$u1*'nv/,k8
&DFWKXFWQKOLQTXDQQEDQJ
7DREDQJEQJWUX\YQ64/ 
6DLEDQJ
&+p08& ,1'(; 
.+81*1+o1 9,(: 
&+ml1*1*k11*mu7+$27$v&'mu/,j8
758<;8i7'nv/,k8 
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
%l681*&i31+i79$t;2$w'nv/,k8 
%VXQJGOLX 
&SQKWGOLX 
;RDGOLX 
&+ml1*1*k11*mui,j|8.+,j}1 
&i8/k1+*5$17
&i8/k1+5(92.( 
&+ml1*7+8t78&/m875mu9$s75,**(5
,6nu'81*7+8u78&/n875nv 6725('352&('85( 
I.1. To cc th tc lu tr ........................................................................................................................35
I.2. Thng tin tr v t cc th tc lu tr.................................................................................................36
I.3. Cc qui tc s dng cho sp .................................................................................................................38
I.4 Xc nh tn bn trong cc th tc .......................................................................................................38
I.5 i tn cc th tc:..............................................................................................................................39
I.6. Xo th tc: .........................................................................................................................................39
II. S DNG CC TRIGGER 
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
&+ml1*3+8/8& 
&i8758w&9$t'nv/,k8&8u$%$u1*1+$19,(19$t'219, 
0l76l+$t07+nmt1*6nu'81*7521*64/6(59(5 
&DFKDPWUQGOLXNLXQJD\YDJL 
2.2 Cac ham v chui..........................................................................................................................44

You might also like