You are on page 1of 168

SQL SERVER 2008

Tc gi: Ks Hong Anh Quang

Mc lc

Bi 1 Ngn ng T-SQL..............................................5
1. Truy vn d liu n gin vi SELECT...........................6
2. Tm hiu cc trng tnh ton.........................................12
3. Lc d liu vi mnh WHERE...................................15
4. Sp xp d liu vi ORDER BY......................................21
5. Nhm d liu vi mnh GROUP BY.........................24
6. Query con..........................................................................29
7. Cc php ni......................................................................33
7.1. To php ni vi mnh WHERE.................................33
7.2. INNER JOIN (ni kt)......................................................36
7.3. S dng b danh ca bng.................................................36
7.4. OUTER JOIN (Ngoi kt).................................................38

8. Kt hp cc query.............................................................41
9. Chn d liu......................................................................42
9.1. Chn d liu trc tip........................................................42
9.2. Chn d liu truy vn........................................................44
9.3. Sao chp d liu t bng khc..........................................44

10. Cp nht, xa d liu......................................................44


10.1. Cp nht chnh sa d liu.............................................44
10.2. Xa d liu.......................................................................45

11. Bi tp thc hnh............................................................46


Bi 2 Gii thiu v phin bn SQL Server
2008.....................................................................................48
1. H qun tr c s d liu..................................................48
2

2. Ci t SQL Server 2008..................................................49


2.1. Ci t .Net FrameWork 3.5.............................................50
2.2. Ci t bn nng cp Windows........................................53
2.3. Ci t SQL Server 2008...................................................55
2.4. Khi ng SQL server 2008..............................................60

3. Mt s thao tc c bn vi SQL Server 2008.................61


3.1. Kt ni ti Sever................................................................62
3.2. Tm hiu ca s New Query..............................................64

4. Qun l Database n gin..............................................66


4.1. To mi mt DataBase......................................................66
4.2. Ct d DataBase (Backup)................................................71
4.3. Xa DataBase (Delete).......................................................78
4.4. Phc hi DataBase (Restore)............................................80
4.5. G b DataBase (Detach)..................................................86
4.6. nh km DataBase (Attach)............................................88

Bi 3 Cc i tng v mt s x l trong
SQL Server 2008...........................................................92
1. Cu lnh SQL....................................................................92
1.1. i tng............................................................................92
1.2. Bin.....................................................................................92
1.3. Kiu d liu........................................................................94
1.4. Hm....................................................................................96
1.5. Cu lnh c cu trc........................................................109
1.6. Vit cu lnh T-SQL trn New Query ca SQL Server
2008..........................................................................................110
1.7. Bi tp thc hnh.............................................................115

2. Bng..................................................................................116
3

2.1. To bng...........................................................................116
2.2. Cp nht d liu vo bng..............................................124
2.3. Bi tp thc hnh............................................................131

3. View..................................................................................136
3.1. nh ngha........................................................................136
3.2. Thm v chnh sa View.................................................137
3.3. Bi tp thc hnh............................................................146

4. Stored Procedures (Th tc lu)...................................146


4.1. Khi nim.........................................................................146
4.2. Vit Stored Procedure.....................................................148
4.3. S dng bng tm............................................................156
4.4. Tm hiu Cursors.............................................................160
4.5. Bi tp thc hnh............................................................163

5. Trigger..............................................................................163
5.1. nh ngha........................................................................163
5.2. To mi v sa i Trigger.............................................165
5.3. Bi tp thc hnh............................................................170

Phn 1 H qun tr c s d liu SQL Server


Bi 1 Ngn ng T-SQL
Gii thiu s lc v ngn ng Transact-SQL (T-SQL)
- Structured Query Language (SQL) l ngn ng do IBM pht trin
t nm 1970, dng giao tip vi c s d liu. Cc h thng c
s d liu c cch vit v thi hnh vu lnh SQL ring nh: ANSI
SQL (SQL chun), T-SQL (SQL Server, Sybase), PL/SQL (Oracle),
Access SQL.
- Transact-SQL l ngn ng SQL m rng da trn SQL chun ca
ISO (International Organization for Standardization) v ANSI
(American National Standards Institute) c s dng trong SQL
Server khc vi P-SQL (Procedural-SQL) dng trong Oracle.
Cc lnh T-SQL c chia lm 3 nhm:
+ Data Definition Language (DDL): y l nhng lnh dng
qun l cc thuc tnh ca mt Database nh nh ngha cc hng
hoc ct ca mt table, hay v tr data file ca mt database... nh
Create, Alter, Drop.
+ Data Control Language (DCL): y l nhng lnh qun l cc
quyn truy cp ln tng object (table, view, stored procedure...) nh
Grant, Revoke, Deny.
+ Data Manipulation Language (DML): y l nhng lnh ph
bin dng x l data nh Select, Update, Insert, Delete.
Trong bi ny chng ta ch yu nghin cu nhm lnh Data
Manipulation Language (DML).
1. Truy vn d liu n gin vi SELECT
Trong thc t chng ta thng xuyn phi thc hin cc cng vic
nh lp danh sch sinh vin trong lp hay lp danh sch cc nh
cung cp hng ha cho cng ty, thc hin cc cng vic

trong h qun tr CSDL vi ngn ng T-SQL chng ta s dng cu


truy vn SELECT.
C php:
SELECT [DISTINCT] [TOP So_Ban_Ghi]
<Danh_Sach_Truong>
FROM <Ten_Bang>
Gii thch:
- Distinct: Ch nh khng trng lp thng tin gia cc bn ghi ca
kt qu truy vn tng ng vi danh sch trng hin th.
- So_Ban_Ghi: S bn ghi tr v trong kt qu truy vn
Lu : Nu danh sch kt qu khng c sp xp, kt qu
s hin th theo th t d liu c thm vo bng.
- Danh_Sach_Truong: Trng hin th trong danh sch kt qu truy
vn, danh sch trng c th l tn cc trng hoc cc biu thc
c ngn cch vi nhau bng du phy di ,. S lng ti a
cc trng, biu thc trong danh sch ny l 4096.
Lu : S dng k t * khi cn ly tt c cc trng trong
bng gc vo danh sch kt qu truy vn.
- Ten_Bang: Tn bng cn truy vn d liu
V d:
Cho cc bng c s d liu sau:
- Bng danh sch nh cung cp, khch hng (DMDT) bao gm cc
trng: Id, Ma_Dt, Ten_Dt, Dia_Chi, So_Dt, Fax, Email, Ghi_Chu.

D liu mu
Id
1
3

Ma_D
t
N001
N002

Ten_Dt
Cty TNHH ABC
Cty C phn CB thc phm min bc

N003

Cty lin doanh Vit Php

N004

Cty TNHH mt thnh vin cp nc Yn


Bi

N005

Cty C phn Lc Hng

N006

Cty XNK Chu

Dia_Chi

So_Dt

H Ni
H Ni
Hi
Phng

04 3640 0119
046 3423 3438

Yn Bi

02183 543 443

Bc
Ninh
Hi
Dng

Fax

Email

033 6534 391

0240 362 552


0320 3111 411

- Bng danh sch vt t, hng ha (DMVT) bao gm cc trng: Id, Ma_Vt, Ten_Vt, Dvt, Quy_Cach,
Ghi_Chu.
Id
1
2

Ma_Vt
TP001
TP002

Ten_Vt
Bnh trng Custas
Bnh kem xp

Dvt
Hp
Gi

Quy_Cach
Hp 20 ci
Gi 200 gram

3
4
5
6
7
8
9

VT001
VT002
VT003
TP003
TP004
VT004
VT005

Bt m loi 1
Hng liu
Bt n
Bnh kem b
Bnh Socola Vinasun
Socola nguyn liu
Sa ng th

Kg
Kg
Kg
Gi
Hp
Kg
Thng

Gi 150 gram
Hp 6 ci

- Bng chng t (CT) bao gm cc trng: Id, Ma_Ct, Nhom_Ct, So_Ct, Ngay_Ct, Ma_Dt, Ong_Ba,
Dia_Chi, Dien_Giai.
SttCt

Ma_Ct

Nhom_Ct

So_Ct

Ngay_Ct

Ma_Dt

Ong_Ba

Dia_Chi

PX

PX001

31/05/11

N001

L
Vn H Ni
Khng

PX

PX002

01/06/11

N001

o
Hnh

Th H Ni

Dien_Gi
ai
Xut
hng ha
bn i
l
Xut
hng ha
bn i
l

PN

PN001

01/06/11

N002

T
Thu Cng ty
Loan

PX

PX003

01/06/11

N004

PN

PN002

02/06/11

N005

Phan Th H Ni
Anh
T
Th H Ty
Minh

PX

PX004

05/06/11

N004

Phan
Anh

Th H Ni

Nhp vt
t phc
v sn
xut
Xut bn
hng ha
Nhp
nguyn
liu
Xut bn
hng ha

- Bng chi tit chng t (CTCT) bao gm cc trng: Id, Id_Ct, Ma_Vt, Ma_Kho, So_Luong, Don_Gia.
Stt_Dong
1
2
1
1
2
1

Stt_Ct
1
1
2
3
3
4

Ma_Vt
TP001
TP002
TP001
VT001
VT002
TP001

Ma_Kho
KTP
KTP
KTP
KVT
KVT
KTP

So_Luong
120.000
23.500
11.500
30.000
120.000
110.000

Don_Gia
120,00
45,00
35,00
120,00
15,00
75,00

2
1
2
3
1

4
5
5
5
6

TP004
VT004
VT001
VT003
TP001

KTP
KVT
KVT
KVT
KVT

34.000
75.000
31.000
120.000
13.000

44,00
30,00
32,00
56,00
78,00

10

Yu cu truy vn:
- Lp danh sch nh cung cp, khch hng bao gm cc thng tin:
Tn, a ch, S in thoi, Email.
Cu lnh SQL
SELECT Ten_Dt, Dia_Chi, So_Dt, Email
FROM DmDt
- Lp danh sch vt t hng ha bao gm ton b thng tin c trong
bng DMVT
SELECT * FROM DmVt
- Lp danh sch 5 vt t xut hin u tin trong bng DMVT
SELECT TOP
Ghi_Chu

Id,

Ma_Vt,

Ten_Vt,

Quy_Cach,

FROM DmVt
- Lp bng k chng t nhp xut bao gm cc thng tin Ngy
chng t, s chng t, Din gii, m i tng, ngi nhp xut
(hc vin t vit).
2. Tm hiu cc trng tnh ton
Cc trng tnh ton khng tn ti trong c s d liu c
chun ha, n ch c xc nh trong qu trnh x l, tnh ton. V
d trong bng DMDT (nh gii thiu phn trc) bn mun ly
danh sch nh cung cp vi tn nh cung cp km theo s in thoi
tin lin lc nh minh ha di y:
M s
N001
N002

Tn nh cung cp
a ch
Cty TNHH ABC (04 3640 0119)
H Ni
Cty C phn CB thc phm min H Ni
bc (046 3423 3438)

Trong v d ny ct Tn nh cung cp c to ra t trng


Ten_Dt v trng So_Dt trong bng DMDT.
11

Cu lnh SQL tng ng:


SELECT Ma_Dt, Ten_Dt + ( + So_Dt + ),
Dia_Chi
FROM DmDt
Hoc trong bng CTCT (nh gii thiu phn trc) bn mun ly
danh sch chng t bao gm cc trng Ma_Vt, Ma_Kho,
So_Luong, Don_Gia, Thanh_Tien.
M vt t
TP001
TP002

M kho
KTP
KTP

S lng
120.000
23.500

n gi
120,00
45,00

Thnh tin
14.400.000
1.075.500

- M hnh quan h gia cc bng trong h thng

Trong v d ny ct Thnh tin c to ra t php nhn gia hai


trng Don_Gia v So_Luong.
Cu lnh SQL tng ng:
SELECT Ma_Vt, Ma_Kho,
Don_Gia * So_Luong

So_Luong,

Don_Gia,

12

FROM DmDt
Nh vy trong hai v d trn trng Tn nh cung cp mi v
trng Thnh tin l cc trng tnh ton.
Lu :
- Tn b danh: Cu lnh SQL hai v d trn khi thc thi u cho
kt qu ng, tuy nhin hai trng tnh ton cha c tn (thng tr
v tn mc nh theo h qun tr c s d liu v d nh (no
column name)), gn tn cho hai trng ny chng ta s dng c
php <Bieu_Thuc> AS Ten_Bi_Danh.
C th vit li hai cu truy vn trn nh sau:
SELECT Ma_Dt, Ten_Dt + ( + So_Dt + ) AS
Ten_Dt_Moi,
Dia_Chi
FROM DmDt
V
SELECT Ma_Vt, Ma_Kho, So_Luong,
Don_Gia,
Thanh_Tien

Don_Gia

So_Luong

AS

FROM DmDt
Trong hai cu lnh mi tn trng Thanh_Tien v Ten_Dt_Moi
gi l tn b danh.
- Cc ton t trong biu thc trng tnh ton: C th s dng cc
ton t +, -, *, / trong biu thc ca trng tnh ton.
- Chng ta cng c th s dng cc hm x l chui, ngy thng, s
trong biu thc ca trng tnh ton.
Danh sch mt s hm thng dng
Hm
GetDate()
GetUtcDate()

Gii thch
Ly thi gian hin thi ti Client
Ly thi gian hin thi ti Server

13

Day()
Month()
Year()
ABS()
LEFT()
RIGHT()
SUBSTRING()
LEN()
LTRIM(),
RTRIM(),
ALLTRIM()
UPPER(), LOWER()

Tr v gi tr ngy ca i s
Tr v gi tr thng ca i s
Tr v gi tr nm ca i s
Tr v gi tr tuyt i ca i s
Ly cc k t bn tri ca i s
Ly cc k t bn phi i s
Ly k t bt k ca i s
Tr v di ca i s
Ct khong trng bn tri, phi v c
tri v phi ca i s
Chuyn i s thnh ch vit hoa, vit
thng

3. Lc d liu vi mnh WHERE


Trong thc t bng thng cha mt lng ln d liu v t khi
chng ta ly ton b cc bn ghi trong bng d liu . Chng ta
thng truy xut mt tp con d liu ca bng ng vi cc hot
ng c th. Vic truy vn nh vy i hi phi ch nh mt vng
iu kin tm kim hay cn gi l iu kin lc. V d ly danh sch
cc nh cung cp ti H Ni hoc ly bng k cc mt hng nhp
xut trong nm 2011,
C php:
SELECT [DISTINCT] [TOP So_Ban_Ghi]
<Danh_Sach_Truong>
FROM <Ten_Bang>
WHERE <Dieu_Kien_Loc>
Gii thch:
- Dieu_Kien_Loc: Biu thc iu kin lc d liu
Mt s ton t c bn trong biu thc iu kin lc d liu:

14

Ton t
=
<>
!=
<
<=
!<
>
>=
!>
BETWEEN
ISNULL

Gii thch
Bng
Khc
Khc
Nh hn
Nh hn hoc bng
Khng nh hn
Ln hn
Ln hn hoc bng
Khng ln hn
Nm gia hai gi tr c th
L mt gi tr NULL

V d: (S dng cc bng d liu phn trc)


- Lp danh sch khch hng, nh cung cp ti H Ni
SELECT Ma_Dt, Ten_Dt, So_Dt, Fax, Email
FROM DmDt
WHERE Dia_Chi = N'H Ni'
Kt qu
Ma_Dt
Ten_Dt
So_Dt
N001
Cty TNHH ABC
04 3640 0119
N002
Cty C phn CB thc 046 3423 3438
phm min bc

Fax

Email

- Lp bng k chng t nhp xut trong thng 06


SELECT
Ma_Ct,
Dien_Giai

Ngay_Ct,

So_Ct,

Ma_Dt,

FROM Ct
WHERE MONTH(Ngay_Ct) = 6
Kt qu

15

Ma_Ct
PX

Ngay_Ct
01/06/2011

So_Ct
PX002

Ma_Dt
N001

PN

01/06/2011

PN001

N002

PX
PN
PX

01/06/2011
02/06/2011
05/06/2011

PX003
PN002
PX004

N004
N005
N004

Dien_Giai
Xut hng ha bn
i l
Nhp vt t phc v
sn xut
Xut bn hng ha
Nhp nguyn liu
Xut bn hng ha

Tm hiu mt s ton t cao cp:


- Ton t AND v OR: S dng cc ton t ny kt hp nhiu
iu kin lc
+ Lp danh sch chng t xut hng cho cng ty Cty TNHH mt
thnh vin cp nc Yn Bi vo ngy 01/06/2011.
SELECT Ngay_Ct, So_Ct, Dien_Giai, Ong_Ba
FROM Ct
WHERE
Ma_Dt
01/06/2011

N004

AND

Ngay_Ct

Kt qu:
Ngay_Ct
01/06/2011

So_Ct
Dien_Giai
PX003 Xut bn hng ha

Ong_Ba
Phan Th Anh

Lu : Cty TNHH mt thnh vin cp nc Yn Bi c m l


N004
+ Lp bng k xut hng chi tit mt hng Bnh trng Custas
(TP001) hoc Bnh kem b (TP003).
SELECT Ma_Vt, So_Luong, Don_Gia,
So_Luong * Don_Gia AS Thanh_Tien
FROM CtCt
WHERE Ma_Vt = TP001 OR Ma_Vt = TP003

16

Kt qu:
Ma_Vt
TP001
TP002
TP001
TP001
TP001

So_Luong
120
45
35
75
78

Don_Gia
120,000
23,500
11,500
110,000
13,000

Thanh_Tien
14,400,000
1,057,500
402,500
8,250,000
1,014,000

+ Lp bng k chng t xut hng cho Cty TNHH ABC (N001)


hoc cc chng t khng phi cho cng ty ny nhng c thc
hin vo ngy 05/06/2011.
SELECT Ngay_Ct, So_Ct, Dien_Giai, Ma_Dt
FROM CT
WHERE Ma_Dt = N001
OR (Ma_Dt
05/06/2011)

<>

N001

AND

Ngay_Ct

Kt qu
Ngay_Ct
2011-05-31

So_Ct
PX001

2011-06-01

PX002

2011-06-05

PX004

Dien_Giai
Ma_Dt
Xut hng ha bn i N001
l
Xut hng ha bn i N001
l
Xut bn hng ha
N004

- Ton t IN: S dng ton t ny ch nh mt dy iu kin vi


bt k gi tr no trong dy tha mn. IN s dng mt danh sch cc
gi tr c tch bi du phy di ,, tt c c t trong du
ngoc n.
V d:
Lp bng k xut hng chi tit mt hng Bnh trng Custas
(TP001) hoc Bnh kem b (TP003) s dng t kha IN.

17

SELECT Ma_Vt, So_Luong, Don_Gia,


So_Luong * Don_Gia AS Thanh_Tien
FROM CtCt
WHERE Ma_Vt IN(TP001, TP003)
- Ton t NOT: Ph nh biu thc ng ngay sau n
V d:
+ Lp bng k chng t xut hng cho Cty TNHH ABC (N001)
hoc cc chng t khng phi cho cng ty ny nhng c thc
hin vo ngy 05/06/2011 s dng t kha NOT.
SELECT Ngay_Ct, So_Ct, Dien_Giai, Ma_Dt
FROM CT
WHERE Ma_Dt = N001
OR (NOT(Ma_Dt = N001) AND Ngay_Ct =
05/06/2011)
- Ton t LIKE v cc k t i din: S dng ton t ny tm d
liu gn ng vi gi tr tm kim bng cch kt hp vi cc k t
i din. Ch c th p dng ton t LIKE v cc k t i din cho
d liu kiu chui.
+ V d v k t i din %: K t i din ny i din cho phn
cn li ca chui.
Lp danh sch cc khch hng l loi hnh doanh nghip C phn
trn a bn H Ni
SELECT RTRIM(Ten_Dt) + ' (' + RTRIM(Ma_Dt) +
')' AS Ten_Dt,
So_Dt, Email
FROM DmDt
WHERE Ten_Dt LIKE N'%C phn%' AND Dia_Chi
= N'H Ni'
Kt qu:

18

Ten_Dt
So_Dt
Cty C phn CB thc phm min bc 046
3423
(N002)
3438

Email

+ V d v k t i din _: K t i din ny tng t nh k t


% tuy nhin n ch i din cho mt k t n.
Tm nhng thnh phm vi m c phn m rng l cc s chy nh
hn 10.
SELECT Ma_Vt, Ten_Vt, Dvt, Quy_Cach
FROM DmVt
WHERE RTRIM(Ma_Vt) LIKE N'TP00_'
Kt qu:
Ma_Vt
TP001
TP002
TP003
TP004

Ten_Vt
Bnh trng Custas
Bnh kem xp
Bnh kem b
Bnh
Socola
Vinasun

Dvt
Hp
Gi
Gi
Hp

Quy_Cach
Hp 20 ci
Gi 200 gram
Gi 150 gram
Hp 6 ci

+ V d v k t i din [ ]: S dng ch nh mt tp hp cc
k t, mt k t trong tp hp phi tha mn mt k t ti mt v tr
xc nh trc (v tr ca k t i din).
Lp danh sch cc cng ty TNHH hoc C phn ng trn a
bn H Ni
SELECT RTRIM(Ten_Dt) + ' (' + RTRIM(Ma_Dt) +
')' AS Ten_Dt,
So_Dt, Email
FROM DmDt
WHERE Ten_Dt LIKE N'%[C phn, TNHH]%'
AND Dia_Chi = N'H Ni'

19

Kt qu:
Ten_Dt
So_Dt
Cty TNHH ABC (N001)
04 3640 0119
Cty C phn CB thc phm 046 3423 3438
min bc (N002)

Email

Lu : Khng th ph nhn kh nng linh hot khi tm kim vi cc


k t i din, tuy nhin vic tm kim vi chng mt nhiu thi
gian hn c so vi nhng cch tm kim gii thiu.. sau y l
mt s th thut cn ghi nh khi s dng tm kim bng cc k t
i din:
- Khng lm dng cc k t i din nu nh c th tm kim bng
cc ton t khc.
- Nu khng thc s cn thit khng nn s dng k t i din
phn u ca cc mu tm kim v y l cch tm kim chm nht.
- c bit ch n v tr ca k t i din v nu t sai v tr bn
s khng c c kt qu nh mong mun.
4. Sp xp d liu vi ORDER BY
Trong nhng v d cc phn hc kt qu truy vn cha c
sp xp, chng thng c hin th theo th t trong bng, y c
th l trt t d liu c thm vo bng ban u. Tuy nhin trt t
ny c th thay i nu nh bng thng xuyn c cp nht hoc
xa, chng ta c th s dng cu truy vn vi ORDER BY sp
xp li d liu.
C php:
SELECT [DISTINCT] [TOP So_Ban_Ghi]
<Danh_Sach_Truong>
FROM <Ten_Bang>
WHERE <Dieu_Kien_Loc>
ORDER BY <Chi_Tieu_Sap_Xep> [ASC|DESC]

20

Gii thch:
- Chi_Tieu_Sap_Xep: L danh sch tn ct hoc th t ct cn sp
xp
- ASC: Ch nh sp xp tng dn
- DESC: Ch nh sp xp gim dn
V d:
- Lp danh sch thnh phm m cng ty sn xut, kt qu c sp
xp theo th t trong bng ch ci ca tn thnh phm.
SELECT Ma_Vt, Ten_Vt, Dvt, Quy_Cach
FROM DmVt
WHERE Ma_Vt LIKE TP%
ORDER BY Ten_Vt
Kt qu:
Ma_Vt
TP003
TP002
TP004
TP001

Ten_Vt
Bnh kem b
Bnh kem xp
Bnh Socola Vinasun
Bnh trng Custas

Dvt
Gi
Gi
Hp
Hp

Quy_Cach
Gi 150 gram
Gi 200 gram
Hp 6 ci
Hp 20 ci

Xem li kt qu khi khng s dng ORDER BY


Ma_Vt
TP001
TP002
TP003
TP004

Ten_Vt
Bnh trng Custas
Bnh kem xp
Bnh kem b
Bnh Socola Vinasun

Dvt
Hp
Gi
Gi
Hp

Quy_Cach
Hp 20 ci
Gi 200 gram
Gi 150 gram
Hp 6 ci

- Lp bng k chng t nhp xut trong thng 06 nm 2011, sp xp


theo Ma_Dt v Ngay_Ct tng dn.
SELECT Ngay_Ct, So_Ct, Ma_Dt, Dien_Giai

21

FROM Ct
WHERE MONTH(Ngay_Ct) = 6 AND YEAR(Ngay_Ct)
= 2011
ORDER BY Ma_Dt, Ngay_Ct
Kt qu:
Ngay_Ct
01/06/2011
01/06/2011

So_Ct
PX002
PN001

01/06/2011
05/06/2011
02/06/2011

PX003
PX004
PN002

Ma_Dt
Dien_Giai
N001
Xut hng ha bn i l
N002
Nhp vt t phc v sn
xut
N004
Xut bn hng ha
N004
Xut bn hng ha
N005
Nhp nguyn liu

- Lp bng k chng t xut bn thnh phm, sp xp theo Ma_Vt


v So_Luong gim dn.
SELECT Ma_Vt, So_Luong, Don_Gia,
So_Luong * Don_Gia AS Thanh_Tien
FROM CtCt
WHERE Ma_Vt LIKE 'TP%'
ORDER BY Ma_Vt, So_Luong DESC
Kt qu:
Ma_Vt
TP001
TP001
TP001
TP001
TP002
TP004

So_Luong
120
78
75
35
45
44

Don_Gia
120.000
13.000
110.000
11.500
23.500
34.000

Thanh_Tien
14.400.000
1.014.000
8.250.000
402.500
1.057.500
1.496.000

22

5. Nhm d liu vi mnh GROUP BY


Vi mnh WHERE phn trc hc chng ta c th thng k
xem c bao nhiu ln vt t c m l VT001 c nhp xut vi
cu lnh nh sau:
SELECT COUNT(*) AS So_Lan_Nx
FROM CTCT
WHERE Ma_Vt = VT001
Tuy nhin thng k xem mi vt t c nhp xut bao nhiu ln
chng ta phi s dng mnh GROUP BY.
C php:
SELECT <Danh_Sach_Truong>
FROM <Ten_Bang>
WHERE <Dieu_Kien_Loc>
GROUP BY <Danh_Sach_Nhom>
HAVING <Bieu_Thuc_Dieu_Kien>
ORDER BY <Chi_Tieu_Sap_Xep>
Gii thch:
- <Danh_Sach_Nhom>: Danh sch ct, th t ct cn nhm d liu
- <Bieu_Thuc_Dieu_Kien>: Biu thc iu kin lc nhm d liu
V d:
- Thng k xem mi nh cung cp, khch hng pht sinh bao
nhiu chng t nhp xut vi cng ty trong thng 6 nm 2011.
SELECT Ma_Dt, COUNT(Ma_Dt) AS So_Ct_Nx
FROM Ct
WHERE MONTH(Ngay_Ct) = 6 AND YEAR(Ngay_Ct)
= 2011
GROUP BY Ma_Dt

23

Kt qu:
Ma_Dt
N001
N002
N004
N005

So_Ct_Nx
1
1
2
1

- Thng k tng s lng nhp xut kho ca tng mt hng, kt qu


sp xp tng dn theo s lng.
SELECT Ma_Vt, SUM(So_Luong) AS So_Luong
FROM CtCt
GROUP BY Ma_Vt
ORDER BY So_Luong
Kt qu:
Ma_Vt
VT002
VT004
TP004
TP002
VT003
VT001
TP001

So_Luong
15
30
44
45
56
152
308

- Thng k lng nhp xut hng ha theo tng kho v tng mt


hng, kt qu sp xp theo m kho v gim dn theo s lng.
SELECT
Ma_Kho,
So_Luong

Ma_Vt,

SUM(So_Luong)

AS

FROM CtCt
GROUP BY Ma_Kho, Ma_Vt
ORDER BY Ma_Kho, So_Luong DESC

24

Kt qu:
Ma_Kho
KTP
KTP
KTP
KVT
KVT
KVT
KVT
KVT

Ma_Vt
TP001
TP002
TP004
VT001
TP001
VT003
VT004
VT002

So_Luong
230
45
44
152
78
56
30
15

- Thng k doanh s bn hng theo tng mt hng, kt qu sp xp


theo Ma_Vt v gim dn theo doanh thu.
SELECT Ma_Vt,
Doanh_Thu

SUM(So_Luong

Don_Gia)

AS

FROM CtCt
WHERE Ma_Vt LIKE 'TP%'
GROUP BY Ma_Vt
ORDER BY Doanh_Thu DESC
Kt qu:
Ma_Vt
TP001
TP004
TP002

Doanh_Thu
24.066.500
1.496.000
1.057.500

- Thng k nhng mt hng c doanh s bn hng ln hn 2 triu,


kt qu sp xp danh sch theo Ma_Vt.
SELECT Ma_Vt,
Doanh_Thu

SUM(So_Luong

Don_Gia)

AS

FROM CtCt

25

WHERE Ma_Vt LIKE 'TP%'


GROUP BY Ma_Vt
HAVING SUM(So_Luong * Don_Gia) > 2000000
ORDER BY Ma_Vt
Kt qu:
Ma_Vt
TP001

Doanh_Thu
24.066.500

- Lp danh sch nhng nh cung cp, khch hng tng pht sinh
t 2 chng t nhp xut tr ln vi cng ty. Kt qu sp xp gim
dn theo s chng t pht sinh.
SELECT Ma_Dt, COUNT(Ma_Dt) AS So_Ct_Nx
FROM Ct
GROUP BY Ma_Dt
HAVING COUNT(Ma_Dt) >= 2
ORDER BY So_Ct_Nx DESC
Kt qu
Ma_Dt
N001
N004

So_Ct_Nx
2
2

- Thng k mt hng bn chy nht


SELECT TOP 1 Ma_Vt, SUM(So_Luong * Don_Gia)
AS Doanh_Thu
FROM CtCt
WHERE Ma_Vt LIKE 'TP%'
GROUP BY Ma_Vt
ORDER BY Doanh_Thu DESC
Kt qu

26

Ma_Vt
TP001

Doanh_So
24.066.500

- Thng k 2 mt hng bn chm nht


SELECT TOP 2 Ma_Vt, SUM(So_Luong * Don_Gia)
AS Doanh_Thu
FROM CtCt
WHERE Ma_Vt LIKE 'TP%'
GROUP BY Ma_Vt
ORDER BY Doanh_Thu ASC
Kt qu:
Ma_Vt
TP002
TP004

Doanh_So
1.057.500
1.496.000

Lu :
- Cc trng trong danh sch nhm sau mnh GROUP BY c th
khng xut hin trong danh sch trng sau SELECT.
- Cc trng khng xut hin trong danh sch nhm sau mnh
GROUP BY, nhng xut hin trong danh sch trng sau SELECT
th phi c ch nh bi mt hm thng k (phi l mt trng
tnh ton). Mt s hm thng k thng s dng.
Hm
AVG()
COUNT()
MAX()
MIN()
SUM()

Gii thch
Tr v gi tr trung bnh ca ct
m s dng trong ct
Tr v gi tr ln nht ca ct
Tr v gi tr nh nht ca ct
Tnh tng gi tr ca ct

- S dng HAVING trong mnh GROUP BY v WHERE ch lc


dng d liu c th khng phi l nhm d liu.

27

- Biu thc sau HAVING h tr tt c cc ton t nh biu thc sau


WHERE
- Khc bit gia HAVING v WHERE l WHERE lc d liu khi
cha nhm cn HAVING lc d liu sau khi c nhm.
- Chng ta cng c th s dng ORDER BY cng GROUP BY
sp xp nhm d liu
6. Query con
Tt c cc cu lnh truy vn (Query) m chng ta nghin cu qua
cc bi trc u l cc cu truy vn n gin (cc cu truy vn t
cc bng c s d liu ring l). T-SQL cn cho php bn to ra cc
query con (SubQuery: Cc Queries c nhng v Query khc),
hiu su v vn ny chng ta nghin cu mt v d sau y:
T bng danh mc vt t (DMVT) v bng chi tit chng t nhp
xut (CTCT) to lp cc phn trc chng ta cn lp danh sch
nhng vt t tng c nhp xut. u tin hy thc hin v d
ny bng cc Query n gin chng ta lm nh sau:
Bc 1: Ly m nhng vt t tng nhp xut trong bng CTCT
SELECT DISTINCT Ma_Vt FROM CTCT
Kt qu:
Ma_Vt
TP001
TP002
VT001
VT002
Bc 2: Ly danh sch vt t c m tng ng trong danh sch va
lc
SELECT * FROM DMVT
WHERE Ma_Vt IN('TP001', 'TP002', 'VT001',
'VT002')

28

Kt qu:
ID
1

Ma_Vt
TP001

TP002

3
4

VT001
VT002

Ten_Vt
Bnh trng
Custas
Bnh
kem
xp
Bt m loi 1
Hng liu

Dvt
Hp

Quy_Cach
Hp 20 ci

Ghi_Chu
NULL

Gi

Gi
gram
NULL
NULL

NULL
NULL

Kg
Kg

200 NULL

By gi c th vit li vi Query con bng cch kt hp hai Query


va thc hin:
SELECT * FROM DMVT
WHERE Ma_Vt IN(SELECT Ma_Vt FROM CTCT)
Kt qu cui cng cho tng t nh thc hin bc 2
Vi v d trn chng ta tm hiu cch lc d liu theo cc Query
con, v d sau y s m t cch s dng Query con lm trng tnh
ton.
Vi bng danh mc khch hng, nh cung cp (DMDT) v bng
chng t nhp xut (CT) hy xem mi khch hng, nh cung cp
nhp xut bao nhiu chng t vi cng ty. Vi Query n gin
chng ta c th vit nh sau:
SELECT Ma_Dt, COUNT(*) AS So_Ct_Nx
FROM CT
GROUP BY Ma_Dt
Kt qu
Ma_Dt
N001
N002

So_Ct_Nx
2
1

29

Tuy nhin vi cu lnh ny bn khng c c cc thng tin chi tit


v khch hng, nh cung cp . By gi hy th thc hin vi mt
Query phc tp hn.
SELECT Ma_Dt, Ten_Dt, Dia_Chi,
(
SELECT COUNT(*)
FROM CT
WHERE DmDt.Ma_Dt = Ct.Ma_Dt
) AS So_Ct_Nx
FROM DmDt
Kt qu
Ma_Dt
N001
N002

Ten_Dt
Dia_Chi
Cng ty TNHH ABC
H Ni
Cng ty C phn CB H Ni
thc phm min bc

So_Ct_Nx
2
1

Mt s v d khc
- Thng k tng s lng nhp xut kho ca tng mt hng, kt qu
hin th bao gm cc thng tin: Ma_Vt, Ten_Vt, Dvt, So_Luong v
sp xp tng dn theo s lng.
SELECT Ma_Vt, Ten_Vt, Dvt,
(
SELECT
So_Luong
DmVt.Ma_Vt

FROM

ISNULL(SUM(So_Luong),
CtCt

WHERE

0)

AS

CtCt.Ma_Vt

) AS So_Luong
FROM DmVt
ORDER BY So_Luong

30

Kt qu:
Ma_Vt
TP003
VT005
VT002
VT004
TP004
TP002
VT003
VT001
TP001

Ten_Vt
Bnh kem b
Sa ng th
Hng liu
Socola nguyn liu
Bnh Socola Vinasun
Bnh kem xp
Bt n
Bt m loi 1
Bnh trng Custas

Dvt
Gi
Thng
Kg
Kg
Hp
Gi
Kg
Kg
Hp

So_Luong
0
0
15
30
44
45
56
152
308

- Thng k doanh s bn hng theo tng mt hng, kt qu hin th


bao gm cc trng Ma_Vt, Ten_Vt, Dvt, Doanh_Thu c sp xp
theo Ma_Vt v gim dn theo doanh thu.
SELECT Ma_Vt, Ten_Vt, Dvt,
(
SELECT
ISNULL(SUM(So_Luong
Don_Gia), 0) AS Doanh_Thu
FROM

CtCt

WHERE

CtCt.Ma_Vt

*
=

DmVt.Ma_Vt
) AS Doanh_Thu
FROM DmVt
WHERE Ma_Vt LIKE TP%
ORDER BY Doanh_Thu DESC
Kt qu:
Ma_Vt
TP001
TP004

Ten_Vt
Bnh trng Custas
Bnh Socola Vinasun

Dvt
Hp
Hp

Doanh_Thu
24.066.500
1.496.000

31

TP002
TP003

Bnh kem xp
Bnh kem b

Gi
Gi

1.057.500
0

7. Cc php ni
- Mt trong nhng tnh nng mnh m nht ca SQL l kh nng kt
cc bng nhanh chng trong cc Query. Php ni c thc hin
n gin bng cch s dng cu lnh SELECT ca SQL, vic tm
hiu k v thc hnh tt cc php ni l phn v cng quan trng
trong qu trnh hc SQL.
- m bo ton vn, trnh d tha c s d liu lun c chun
ha v vy trong qu trnh truy vn d liu thng xuyn phi ly
d liu t nhiu bng khc nhau, vi vic s dng cc php ni s
gip ngi lp trnh d dng trch rt y d liu m mnh cn
khai thc.
7.1. To php ni vi mnh WHERE
Vi mnh WHERE khi to kt ni bn phi ch nh tt c cc
bng cha d liu cn truy vn v cch chng to ra quan h vi
nhau. Chng ta tm hiu v d sau:
Lp bng k chng t gm cc thng tin: Ngay_Ct, So_Ct,
Dien_Giai, Ten_Dt, Ong_Ba, Dia_Chi.
Phn tch v d trn chng ta thy thng tin Ten_Dt c ly t
bng danh mc khch hng, nh cung cp (DMDT), cc thng tin
cn li ly t bng chng t (CT), hai bng ny lin kt vi nhau
bng trng Ma_Dt. Cu lnh truy vn nh sau:
SELECT CT.Ngay_Ct, CT.So_Ct,
CT.Dien_Giai, DMDT.Ten_Dt,
CT.Ong_Ba, CT.Dia_Chi
FROM DMDT, CT
WHERE DMDT.Ma_Dt = CT.Ma_Dt
Kt qu:

32

Ngay_Ct
2011-01-06

So_Ct
PX001

2011-01-07

PX002

2011-01-06

PN001

Dien_Giai
Xut hng ha
bn i l
Xut hng ha
bn i l
Nhp vt t
phc v sn
xut

Ten_Dt
Cng ty
TNHH ABC
Cng ty
TNHH ABC
Cng ty C
phn CB thc
phm min
bc

Ong_Ba
L Vn
Khng
o Th
Hnh
T Thu
Loan

Nh vy kt qu truy vn l phn d liu c mi quan h gia hai


bng c s d liu.

Mt s v d
- Lp bng k chng t nhp hng chi tit theo vt t gm c cc
thng tin Ma_Ct, Ngay_Ct, So_Ct, Dien_Giai, Ma_Dt, Ma_Vt,
So_Luong, Don_Gia, Thanh_Tien.
SELECT Ct.Ma_Ct, Ct.Ngay_Ct,Ct.So_Ct,
Ct.Dien_Giai, Ct.Ma_Dt,
CtCt.Ma_Vt, CtCt.So_Luong,
CtCt.Don_Gia,

33

D
H

ISNULL(CtCt.Don_Gia * CtCt.So_Luong, 0)
AS Thanh_Tien
FROM Ct, CtCt
WHERE Ct.Stt_Ct = CtCt.Stt_Ct AND Ct.Ma_Ct
= PN
ORDER BY Ct.Ngay_Ct
Kt qu:
Ma_Ct
PN

Ngay_Ct
01/06/11

So_Ct
PN001

PN

01/06/11

PN001

PN

02/06/11

PN002

PN

02/06/11

PN002

PN

02/06/11

PN002

Dien_Giai
Nhp vt t
phc v sn
xut
Nhp vt t
phc v sn
xut
Nhp
nguyn liu
Nhp
nguyn liu
Nhp
nguyn liu

Ma_Dt
N002

Ma_Vt
VT001

N002

VT002

N005

VT004

N005

VT001

N005

VT003

- Lp bng k chng t theo tng tin (chi tit theo chng t) bao
gm cc thng tin Ma_Ct, Ngay_Ct, So_Ct, Dien_Giai, Ten_Dt,
Tong_Tien.
SELECT
MAX(Ct.Ma_Ct)
MAX(Ct.Ngay_Ct) AS Ngay_Ct,

AS

Ma_Ct,

MAX(Ct.Dien_Giai) AS Dien_Giai,
MAX(DmDt.Ten_Dt) AS Ten_Dt,
SUM(CtCt.Don_Gia
Tong_Tien

CtCt.So_Luong)

AS

FROM Ct, CtCt, DmDt

34

So_Luon
1

WHERE Ct.Stt_Ct = CtCt.Stt_Ct


AND Ct.Ma_Dt = DmDt.Ma_Dt
GROUP BY CtCt.Stt_Ct
Kt qu:
Ma_Ct Ngay_Ct
PX
31/05/11
PX
01/06/11
PN
01/06/11

Dien_Giai
Xut hng ha bn i l
Xut hng ha bn i l
Nhp vt t phc v sn xut

PX

01/06/11

Xut bn hng ha

PN
PX

02/06/11
05/06/11

Nhp nguyn liu


Xut bn hng ha

Ten_Dt
Cty TNHH ABC
Cty TNHH ABC
Cty C phn CB
phm min bc
Cty TNHH mt
vin cp nc Yn B
Cty C phn Lc H
Cty TNHH mt
vin cp nc Yn B

7.2. INNER JOIN (ni kt)


Tng t nh php ni s dng mnh WHERE, chng ta c th
s dng INNER JOIN ch ra php kt ni r hn. Vit li v d
phn trn vi INNER JOIN nh sau:
SELECT CT.Ngay_Ct, CT.So_Ct,
CT.Dien_Giai, DMDT.Ten_Dt,
CT.Ong_Ba, CT.Dia_Chi
FROM DMDT INNER JOIN CT ON DMDT.Ma_Dt =
CT.Ma_Dt
Cu lnh trn tng i tng minh t kha INNER JOIN nm gia
hai bng kt ni sau FROM v biu thc kt ni nm sau t kha
ON.
7.3. S dng b danh ca bng
Tng t nh cc trng tnh ton, khi s dng php ni chng ta
cng c th to b danh cho bng, vi vic s dng b danh cu lnh

35

truy vn s ngn ngn v tng minh hn, tm hiu k hn v


ch ny hy vit li cc v d phn trc vi cu lnh SQL c s
dng b danh.
V d:
Vit li cc v d sau s dng b danh bng.
- Lp bng k chng t nhp hng chi tit theo vt t gm c cc
thng tin Ma_Ct, Ngay_Ct, So_Ct, Dien_Giai, Ma_Dt, Ma_Vt,
So_Luong, Don_Gia, Thanh_Tien
SELECT Ct.Ma_Ct, Ct.Ngay_Ct,Ct.So_Ct,
Ct.Dien_Giai, Ct.Ma_Dt,
Ct0.Ma_Vt, Ct0.So_Luong, Ct0.Don_Gia,
ISNULL(Ct0.Don_Gia * Ct0.So_Luong, 0) AS
Thanh_Tien
FROM Ct, CtCt AS Ct0
WHERE Ct.Stt_Ct = Ct0.Stt_Ct AND Ct.Ma_Ct =
PN
ORDER BY Ct.Ngay_Ct
- Lp bng k chng t theo tng tin (chi tit theo chng t) bao
gm cc thng tin Ma_Ct, Ngay_Ct, So_Ct, Dien_Giai, Ten_Dt,
Tong_Tien.
SELECT
MAX(Ct.Ma_Ct)
MAX(Ct.Ngay_Ct) AS Ngay_Ct,

AS

Ma_Ct,

MAX(Ct.Dien_Giai) AS Dien_Giai,
MAX(Dt.Ten_Dt) AS Ten_Dt,
SUM(Ct0.Don_Gia
Tong_Tien

Ct0.So_Luong)

AS

FROM Ct, CtCt AS Ct0, DmDt AS Dt


WHERE Ct.Stt_Ct = Ct0.Stt_Ct
AND Ct.Ma_Dt = Dt.Ma_Dt

36

GROUP BY Ct0.Stt_Ct
7.4. OUTER JOIN (Ngoi kt)
Vi hai cch kt ni nh trnh by trn kt qu d liu truy vn
tr v l nhng d liu c quan h vi nhau, tuy nhin trong thc t
chng ta thng xuyn cn ly c nhng d liu mt bng no
m chng cha c quan h vi cc bng cn li, khi c th s
dng OUTER JOIN. Khi s dng OUTER JOIN bt buc phi kt
hp vi mt trong hai t kha l RIGHT v LEFT. Hy cng tm
hiu v d sau y:
Hy lp danh sch khch hng, nh cung cp bao gm thng tin m,
tn, a ch v s lng chng t nhp xut (danh sch bao gm c
nhng khch hng, nh cung cp cha c giao dch).
SELECT dt.Ma_Dt, max(dt.Ten_Dt) AS Ten_Dt,
MAX(dt.Dia_Chi) AS Dia_Chi,
COUNT(ct.So_Ct) AS So_Ct_Nx
FROM DmDt as dt
dt.Ma_Dt = Ct.Ma_Dt

LEFT

OUTER

JOIN

CT

ON

GROUP BY dt.Ma_Dt
Kt qu
Ma_Dt
N001
N002
N003
N004

Ten_Dt
Cng ty TNHH ABC
Cng ty C phn CB thc
phm min bc
Cng ty lin doanh Vit
Php
Cng ty TNHH mt thnh
vin cp nc Yn Bi

Dia_Chi
H Ni
H Ni

So_Ct_Nx
2
1

Hi Phng

NULL

Nh vy ton b d liu c quan h gi hai bng v d liu ca


bng bn tri ca OUTER JOIN c hin th trong kt qu truy
vn.

37

Trng hp ngc li chng ta c th dng t kha RIGHT kt qu


truy vn s ly ton b d liu quan h gia hai bng v d liu cn
li ca bng bn phi ca OUTER JOIN.

Mt s v d
- Lp bo co tng hp nhp kho bao gm cc thng tin Ma_Vt,
Ten_Vt, Dvt, So_Luong, Don_Gia, Thanh_Tien.
SELECT Ct0.Ma_Vt, Vt.Ten_Vt, Vt.Dvt,
Ct0.So_Luong, Ct0.Don_Gia,
Ct0.So_Luong * Ct0.Don_Gia AS Thanh_Tien
FROM CtCt AS Ct0 LEFT OUTER JOIN DmVt AS Vt
ON Ct0.Ma_Vt = Vt.Ma_Vt

38

LEFT
Ct.Stt_Ct

OUTER

JOIN

Ct

ON

Ct0.Stt_Ct

WHERE Ct.Ma_Ct = PN
Kt qu:
Ma_Vt
VT001
VT002
VT004
VT001
VT003

Ten_Vt
Bt m loi 1
Hng liu
Socola nguyn
liu
Bt m loi 1
Bt n

Dvt
Kg
Kg
Kg

So_Luong
120
15
30

Don_Gia
30.000
120.000
75.000

32
56

31.000
120.000

Kg
Kg

Thanh_T
3.600
1.800
2.250

992
6.720

- Lp bng k chng t nhp hng chi tit theo vt t gm c cc


thng tin Ma_Ct, Ngay_Ct, So_Ct, Dien_Giai, Ten_Dt, Ten_Vt,
Dvt, So_Luong
SELECT Ct.Ma_Ct,
Dt.Ten_Dt,
Ct0.Ma_Vt,
Ct0.So_Luong

Ct.Ngay_Ct,

Ct.Dien_Giai,

Vt.Ten_Vt,

Vt.Dvt,

FROM CtCt AS Ct0 LEFT OUTER JOIN Ct ON


Ct0.Stt_Ct = Ct.Stt_Ct
LEFT OUTER JOIN DmDt AS Dt ON Ct.Ma_Dt =
Dt.Ma_Dt
LEFT OUTER JOIN DmVt AS Vt ON Ct0.Ma_Vt
= Vt.Ma_Vt
WHERE Ct.Ma_Ct = PN
Kt qu:
Ma_Ct
PN

Ngay_Ct
01/06/11

Dien_Giai
Nhp vt t
phc v sn

Ten_Dt
Cty C phn CB
thc phm min

Ma_Vt
VT001

39

Te

B
lo

PN

01/06/11

PN

02/06/11

PN

02/06/11

PN

02/06/11

xut
Nhp vt t
phc v sn
xut
Nhp nguyn
liu

bc
Cty C phn CB VT002
thc phm min
bc
Cty C phn Lc VT004
Hng

Nhp nguyn
liu
Nhp nguyn
liu

Cty C phn Lc VT001


Hng
Cty C phn Lc VT003
Hng

8. Kt hp cc query
Hu ht cc query SQL cha mt cu lnh SELECT n vn tr v
d liu t mt hoc nhiu bng. Tuy nhin SQL cng cho php bn
thc hin nhiu cu Query v kt qu tr v di dng mt tp hp
d liu t cc Query n.
kt hp cc Query n vi nhau chng ta dng t kha UNION
t gia mi cu lnh SELECT, cng v d phn trc chng ta
thm mt dng tng cng bit xem tng s chng t nhp xut
ca tt c khch hng nh cung cp.
Cu lnh SQL nh sau:
SELECT dt.Ma_Dt, max(dt.Ten_Dt) AS Ten_Dt,
MAX(dt.Dia_Chi) AS Dia_Chi,
COUNT(ct.So_Ct) AS So_Ct_Nx
FROM DmDt as dt
dt.Ma_Dt = Ct.Ma_Dt

LEFT

OUTER

JOIN

CT

ON

GROUP BY dt.Ma_Dt
UNION
SELECT '' AS Ma_Dt, N'Tng cng' AS Ten_Dt,
'' AS Dia_Chi, COUNT(*) AS So_Ct_Nx

40

H
liu

Soc
ngu
liu
B
lo
B

FROM CT
Kt qu:
Ma_Dt
N001
N002
N003
N004

Ten_Dt
Tng cng
Cng ty TNHH ABC
Cng ty C phn CB thc
phm min bc
Cng ty lin doanh Vit
Php
Cng ty TNHH mt thnh
vin cp nc Yn Bi

Dia_Chi
H Ni
H Ni

So_Ct_Nx
3
2
1

Hi Phng

NULL

Lu :
- Mt UNION phi c t 2 cu lnh SELECT tr ln, mi cu lnh
c tch bi t kha UNION
- Danh sch ct ca cc cu SELECT trong cng mt UNION phi
tng ng v cng kiu
- S dng UNION ALL khi mun ly tt c cc ln xut hin ca
cc gi tr tha mn
9. Chn d liu
9.1. Chn d liu trc tip
C php:
INSERT INTO <Ten_Bang> [(Danh_Sach_Truong)]
VALUE (<Danh_Sach_Gia_Tri>)
Gii thch:
- <Ten_Bang>: Tn bng cn chn d liu
- [(Danh_Sach_Truong]): Danh sch trng cn chn d liu c
lit k trong du ngoc n, danh sch trng c th b trng nu
chn d liu vo tt c cc dng.

41

- <Danh_Sach_Gia_Tri>: Danh sch gi tr tng ng vi danh


sch trng cn chn d liu
V d:
Vit cu lnh chn d liu trong danh sch sau vo bng DmVt
Ma_Vt
TP001
TP002
TP003
TP004

Ten_Vt
Bnh trng Custas
Bnh kem xp
Bnh kem b
Bnh
Socola
Vinasun

Dvt
Hp
Gi
Gi
Hp

Quy_Cach
Hp 20 ci
Gi 200 gram
Gi 150 gram
Hp 6 ci

INSERT INTO DmVt


(
Ma_Vt,
Ten_Vt,
Dvt,
Quy_Cach
)
VALUES
(
NTP001,
NBnh trng Custas,
NHp,
NHp 20 ci
)
9.2. Chn d liu truy vn
C php:
INSERT INTO <Ten_Bang> [(Danh_Sach_Truong)]

42

SELECT <Danh_Sach_Truong_Truy_Van>
FROM <Ten_Bang_Truy_Van>
...
Gii thch:
- Gi tr d liu c th c ly t mt Query, danh sch trng
trong cu Query ny phi tng ng vi cc trng cn chn d
liu.
- Cc ty chn v mnh c th s dng trong Query ly d liu
nh WHERE, GROUP BY.
9.3. Sao chp d liu t bng khc
C php:
SELECT * INTO <Ten_Bang_Can_Chen_DL>
FROM <Ten_Bang_Chua_DL>
Gii thch:
- <Ten_Bang_Can_Chen_DL>: Bng cn chn d liu
- <Ten_Bang_Chua_DL>: Bng cha d liu cn chn
- Bt k cc ty chn v mnh SELECT c th s dng bao gm
WHERE v GROUP BY.
10. Cp nht, xa d liu
10.1. Cp nht chnh sa d liu
C php:
UPDATE <Ten_Bang>
SET <Truong_Cap_Nhat1>
<Gia_Tri_Cap_Nhat1>,

<Truong_Cap_Nhat2>
<Gia_Tri_Cap_Nhat2>,

.....................................

43

<Truong_Cap_NhatN> = <Gia_Tri_Cap_NhatN>
WHERE <Dieu_Kien_Cap_Nhat>
Gii thch:
- <Ten_Bang>: Tn bng cn cp nht d liu
- <Truong_Cap_Nhat>: Tn trng cn cp nht d liu
- <Gia_Tri_Cap_Nhat>: Gi tr mi cn cp nht v trng tng
ng
- <Dieu_Kien_Cap_Nhat>: Biu thc iu kin cp nht d liu
V d:
- Sa li tn cho vt t c Bnh trng Custas thnh Bnh trng
Custas loi 1 trong bng DmVt.
UPDATE DmVt
SET Ten_Vt = NBnh trng Custas loi 1
WHERE Id = 1
- Sa li m Cng ty TNHH ABC t N001 thnh N009
- Do m s ca Cng ty TNHH ABC b thay i phn trc hy
tm v thay i tt c thng tin ny cc bng tng ng.
10.2. Xa d liu
C php:
DELETE FROM <Ten_Bang>
WHERE <Dieu_Kien_Xoa>
Gii thch:
- <Ten_Bang>: Tn bng cn xa d liu
- <Dieu_Kien_Xoa>: Biu thc iu kin xa d liu
V d:
- Do sai st nhn vin kho nhp nhm vt t c m VT002 hy
xa vt t ny khi DmVt

44

DELETE FROM DmVt WHERE Ma_Vt = VT002


- Do vt t c m VT002 khng tn ti hy tm v xa pht sinh
ca vt t ny trong cc bng tng ng m bo ton vn d
liu.
Lu khi thc thi cu lnh UPDATE hoc DELETE
- Nu mt cu lnh cp nht hoc xa d liu khng c mnh
WHERE n s p dng cho tt c d liu trong bng.
- Trc khi thc hin hai cu lnh trn hy s dng mnh
WHERE trong mt lnh SELECT chc chn d liu cn cp nht
hay xa l chnh xc.
- Khng nn cp nht hoc xa cc d liu c quan h vi cc bng
khc trong cng mt c s d liu.
11. Bi tp thc hnh
- Lp danh sch nhng mt hng cha c bn trong thng 06 nm
2011 bao gm cc thng tin Ma_Vt, Ten_Vt, Dvt.
- Lp danh sch nhng mt hng bn chy nht trong thng 06 nm
2011 bao gm cc thng tin Ma_Vt, Ten_Vt, Dvt, So_Luong, kt
qu sp xp gim dn theo s lng.
- Lp bng k chng t nhp kho thng 06 nm 2011 bao gm cc
thng tin Ma_Ct, Ngay_Ct, So_Ct, Dien_Giai, Tong_Tien, Ten_Dt.
- Lp danh sch 02 khch hng mua nhiu nht trong thng 06 nm
2011 (tnh theo doanh s) bao gm cc thng tin Ma_Dt, Ten_Dt,
Dia_Chi, So_Dt, Doanh_So.
- Lp danh sch nhng khch hng mua hng c tng tr gi ln hn
5 triu trong thng 06 nm 2011 lm cn c tnh chit khu, danh
sch ny gim dn theo doanh s bn hng. Kt qu hin th bao
gm cc trng Ma_Dt, Ten_Dt, Dia_Chi, Doanh_So
- Thng k 2 loi vt t nhp nhiu nht trong thng 06 bao gm
cc thng tin Ma_Vt, Ten_Vt, Dvt, Tien_Nhap.
- Lp danh sch nhng mt hng bn trong thng 05 nm 2011
nhng li cha c bn trong thng 06 nm 2011, kt qu bao gm
45

cc thng tin Ma_Vt, Ten_Vt, Dvt, So_Luong_T5, Don_Gia_T5,


Thanh_Tien_T5.
- Lp bo co tng hp nhp kho theo quy cch sau y: Ma_Vt,
Ten_Vt, Dvt, So_Luong_T5, So_Luong_T6.
- Lp bo co nhp xut vt t n gin theo mu sau: Ma_Vt,
Ten_Vt, Dvt, So_Luong_Nhap, So_Luong_Xuat.
- Thng k vt t nhp theo kho vi cc thng tin sau: Ten_Kho,
Ten_Vt, So_Luong, Don_Gia, Thanh_Tien.

46

Bi 2 Gii thiu v phin bn SQL Server 2008


1. H qun tr c s d liu
Gii thiu chung v h qun tr c s d liu
H qun tr c s d liu (ting Anh: Database Management System
- DBMS), l phn mm hay h thng c thit k qun tr mt
c s d liu. C th, cc chng trnh thuc loi ny h tr kh
nng lu tr, sa cha, xa v tm kim thng tin trong mt c s
d liu (CSDL). C rt nhiu loi h qun tr CSDL khc nhau: t
phn mm nh chy trn my tnh c nhn cho n nhng h qun
tr phc tp chy trn mt hoc nhiu siu my tnh.
Tuy nhin, a s h qun tr CSDL trn th trng u c mt c
im chung l s dng ngn ng truy vn theo cu trc m ting
Anh gi l Structured Query Language (SQL). Cc h qun tr
CSDL ph bin c nhiu ngi bit n l MySQL, Oracle,
PostgreSQL, SQL Server, DB2, Infomix, v.v. Phn ln cc h qun
tr CSDL k trn hot ng tt trn nhiu h iu hnh khc nhau
nh Linux, Unix v MacOS ngoi tr SQL Server ca Microsoft ch
chy trn h iu hnh Windows.
- u im ca HQTCSDL:
+ Qun l c d liu d tha.
+ m bo tnh nht qun cho d liu.
+ To kh nng chia s d liu nhiu hn.
+ Ci tin tnh ton vn cho s liu.
- Nhc im:
+ HQTCSDL tt th kh phc tp.
+ HQTCSDL tt thng rt ln chim nhiu dung lng b nh.
+ Gi c khc nhau ty theo mi trng v chc nng.

47

+ HQTCSDL c vit tng qut cho nhiu ngi dng th thng


chm.
Gii thiu v phin bn SQL Server 2008
Microsoft SQl server l mt h qun tr c s d liu quan h
(relational database management system RDBMS) do Microsoft
pht trin.
SQL Server l mt h qun tr c s d liu quan h mng my tnh
hot ng theo m hnh khch ch cho php ng thi cng lc c
nhiu ngi dng truy xut n d liu, qun l vic truy nhp hp
l v cc quyn hn ca tng ngi dng trn mng.
Ngn ng truy vn quan trng ca Microsoft SQL server l
Transact-SQL
Ln lt cc phin bn ca Microsoft SQL Server ra i sau s
kin ny, t 4.2 sau c nng cp thnh 4.21, 6.0, 6.5, 7.0 v
hin gi l Microsoft SQL Server 2000, 2005 v mi nht l
Microsoft SQL Server 2008.
- SQL Server 2005: SQL Server 2005, c pht hnh vo thng 11
nm 2005, l phin bn tip theo ca SQL Server 2000. S dng
trn nn Net Framework 2.0
- SQL Server 2008: y l phin bn mi nht ca SQl Server.
Ngy 27/02/2008, S dng trn nn Net Framework 3.0.
2. Ci t SQL Server 2008
i vi cc my tnh cha c ci t .Net FrameWork phin bn
3.5 tr ln trc khi ci SQL Server 2008 h thng yu cu ci
t .Net FrameWork 3.5 v bn nng cp Windows. Trng hp ny
thng xy ta vi cc my s dng Windows XP hoc Windows
Server t bn 2003 tr xung.
2.1. Ci t .Net FrameWork 3.5
- Chy File ci t .Net FrameWork 3.5 nu c hoc ti v t ng
dn: http://go.microsoft.com/fwlink/?LinkId=159615. Mt cch n

48

gin hn bn hy nhp p chn File ci t SQL 2008 my tnh s


t ng kim tra v thng bo nh hp thoi di y:

Nhp chn cc ng Link tng ng ti File v my tnh


- Ch trong giy lt hp thoi ci t .Net FrameWork 3.5 xut hin
nh hnh di y:

Tch chn mc I have read and ACCEPT terms sau nhp nt


Install.

49

- Hp thoi tin trnh ci t xut hin

- Ch my tnh thc hin tin trnh, cui cng nhp chn Exit
hon tt.

50

2.2. Ci t bn nng cp Windows


- Tng t nh ci t .Net FrameWork 3.5, thc hin ci bn nng
cp cho Windows bng cch nhp chn File ci t ny sau khi
ti v my tnh. Hp thoi ci t xut hin nhp Next chuyn
sang bc tip theo.

51

Trong hp thoi thng bo cc iu khon cam kt bn quyn vi


nh cung cp nhp chn I Agree sau nhp Next tin hnh
ci t.

52

- Sau khi ci t xong my tnh s xut hin thng bo yu cu khi


ng li my tnh, hy nhp Finish hon tt.

2.3. Ci t SQL Server 2008


Sau khi my tnh c cp nht y hy tin hnh ci t
SQL Server 2008 theo cc bc di y:
Bc 1: Nhp p chut
vo File setup.exe trong
th mc cha b ci t.
Hp thoi SQL Server
Installation Center xut
hin, nhp chn New
installation or add features
to

53

Bc 1: Nhp p chut
vo File setup.exe trong
th mc cha b ci t.
Hp thoi SQL Server
Installation Center xut
hin, nhp chn New
installation or add features
to

Ch giy lt cho cc x l
h thng

Bc 2: Trong mn hnh
Setup Support Files nhp
Istall bt u ci t

54

Bc 3: Trong ca s
Installation Type:
Ty
chn
New
installation or add shared
features: Ci t SQL trn
Instance Name mi (SQL
c th cha nhiu Instance
Name khc nhau trn cng
mt h thng).
- Ty chn Add features to
an exiting instance of SQL
Server: Ci t SQL
trn Instance Name tn
ti.
Nhp Next chuyn sang
bc tip theo

Bc 4: Tch chn I
accept the license terms

55

Bc 5: Tch chn tt c
cc mc trong phn
Features:

Bc 6: Trong hp thoi
Instance Configuration:
- Default instance: Ci
trn Instance Name mc
nh.
- Named instance: Ch
nh tn Install Name mi.
- Instance ID: Id ca
Instance Name ( mc
nh)
- Instance root derectory:
Th mc vt l ci t
Instance Name ( mc
nh)
Thng thng nn chn
mc Named instance v
t tn cho Instance Name
mi nh hnh nh trn.
Nhp Next chuyn sang
bc tip theo.

56

Bc 7: Trong ca s khai
bo ti khon cho cc dch
v chng ta mc inh
v nhp Next chuyn
sang bc tip theo.

Bc 8: Ca s Database
Engine Configuration:
- Windows authentication
mode: Truy cp Database
vi
ti
khon
ca
Windows.
- Mixed Mode: Truy cp
Database vi ti khon sa
ca SQL, vi ty chn ny
bn phi t ti Password
cho ti khon sa mc
Enter
password
v
confirm password.
Thng thng chng ta
tch chn mc Windows
authentication Mode, sau
nhp Next chuyn
bc tip theo.

57

Bc 9: Nhp Next
my tnh bt u ci t

Bc 10: Ch my tnh
ci t trong giy lt, cui
cng nhp Close hon
tt

2.4. Khi ng SQL server 2008


- T thanh Start nhp chn All Program/ Microsoft SQL Server
2008 R2/ SQL Server Management Studio.
- Trong mc Server Name nhp y tn my tnh v Install Name
va ci t.

58

Trong hnh nh trn chng ta thy tn my tnh c ngn cch vi


tn Istance Name bng k t \.
- Tip theo nhp Connect truy cp vo SQL Server 2008, kt qu
nh hnh di y:

3. Mt s thao tc c bn vi SQL Server 2008

59

Tm hiu giao din v cc thnh phn c bn

3.1. Kt ni ti Sever
kt ni ti Server chng ta thc hin cc bc sau:
Bc 1: Chn Connect/Database Engine trong ca s Object
Explorer

60

Bc 2: Hp thoi Connect to Server xut hin

Trong mc Server name chn ti Server cn kt ni

61

Bc 3: Nhp Connect thc hin kt ni.


3.2. Tm hiu ca s New Query
Ca s New Query dng vit v thc thi cc cu lnh SQL giao
tc vi cc thnh phn ca Server. Di y l cc bc n gin
vit v thc thi mt cu lnh SQL n gin s dng ca s New
Query.
Bc 1: Nhp chn biu tng New Query trn thanh cng c

Mt mn hnh son tho xut hin chnh gia ca s giao din

Bc 2: Chn Database cn giao tc trong hp chn Available


Database

62

Bc 3: Vit cu lnh SQL trong mn hnh son tho New Query


Bc 4: Nhn F5 hoc nhp chn biu tng Execute thc thi
cu lnh

Kt qu cu lnh SQL hin th trn mn hnh son tho New Query

63

4. Qun l Database n gin


4.1. To mi mt DataBase
Bc 1: ng nhp SQL Server 2008
Bc 2: Trong ca s Object Explorer nhp phi chut vo mc
DataBase chn New DataBase.

64

Bc 3: Hp thoi to DataBase mi xut hin nh hnh di y:

Trong Tab General


- DataBase Name: Nhp vo tn DataBase cn to
- Database file: Ti ct Path nhp vo ng dn cha File
DataBase (bao gm c ng dn cho File Log).
Nh v d trn chng ta ang to mt DataBase mi c tn QLHTK
v c lu tr ti D: ca my tnh.
Bc 4: Cui cng nhp Ok hon tt, nh vy trong danh sch
Database ca s Object Explorer xut hin mt DataBase mi
c tn l QLHTK.

65

Lu : Sau khi thc hin xong cc bc trn m vn khng thy


Database mi xut hin trong danh sch, hy nhp phi chut vo
mc Database trong ca s Object Explorer chn Refresh.

Sau khi to c DataBase mi c th thc hnh nhng v d


n gin vi SQL Server 2008 chng ta c th to mt bng n
gin bng cc bc nh sau:
Bc 1: Trong ca s Object Explorer chn ti mc Table trong c
s d liu va to, nhp phi chut chn New Table

66

Bc 2: Hp thoi to bng xut hin nh hnh di y:

67

phn pha trn khai bo danh sch ct gm cc thng tin sau:


- Column Name: Tn ct (trng)
- Data Type: Kiu d liu
- Allow Nulls: Tch chn nu cho php trng nhn gi tr NULL,
ngc li khng tch chn nu khng cho php trng nhn gi tr
NULL.
phn pha di Column Properties cho php khai bo cc thuc
tnh cho tng ct (trng) phn ny s c trnh by chi tit trong
cc bi tip theo.
Nhp vo dng di cng trn phn khai bo danh sch ct thm
mt ct mi
Bc 3: Sau khi nhp y cc ct (trng) cho bng, hy vo
File\Save lu li bng, hp thoi Choose Name xut hin, nhp
tn cho bng cn thm mi sau nhp Ok hon tt.

68

Bc 4: Th tm xem bng va to ang u? Trong ca s


Object Explorer chn ti DataBase va to m rng mc Table
trong phn ny s cha bng m chng ta va to.

4.2. Ct d DataBase (Backup)


Khi cn ct tr DataBase chng ta s dng chc nng Backup
nm d liu v ct tr dng File vt l. Cc bc thc hin nh
sau:
Bc 1: Chn DataBase cn ct tr trong ca s Object Explorer.

69

Gi s nh chng ta chn Database va to


Bc 2: Nhp phi chut vo Database ny chn Tasks/Back Up

70

Bc 3: Ca s Back up.. Database xut hin nh hnh di y:

Trong Tab General, ti mc Destination thng thng SQL Server


2008 chn sn th mc lu File Backup ti C:\ ca my tnh, tuy
nhin chng ta nn lu ti mt ng dn no an ton hn bng
cch nhp chn Remove, sau nhp nt Add.
Bc 4: Hp thoi Select Backup Destination xut hin nh hnh
di y:

71

Nhp chut vo nt () chn ng dn mi

72

Nh hnh nh trn chng ta lu File Backup ti a D:\ ca my


tnh, bn ng qun t tn cho File Backup trong mc File name
vi phn m rng l .bak, nh v d trn File Backup s c lu
ti D:\ v c tn l QLHTK.bak. Nhp Ok chn ng dn v
xc nhn tn File Backup, tip tc nhp Ok mn hnh Select
Backup Destination vi ng dn mi.

73

Bc 5: Sau bc trn chng ta c kt qun mn hnh Backup


Database nh hnh di y:

74

Bn tip tc chn ti Tab Options trong mc Select a page

Trn Tab ny nhp chn mc Overwrite all existing backup set


ghi ln d liu c tn ti nu c. Cui cng nhp Ok my
tnh thc hin Backup, ch trong giy lt chng trnh s thng bo
hon tt thao tc nh hnh di y:

Bc 6: By gi hy kim tra li bng cch truy cp vo D:\ ca


my tnh

75

Kt qu chng ta s thy xut hin File Backup mi nh hnh nh


trn.
4.3. Xa DataBase (Delete)
Xa vnh vin Database khi h qun tr c s d liu Sql Server
2008 v my tnh, cc bc thc hin nh sau:
Bc 1: Chn Database cn xa trong Object Explorer.
Bc 2: Nhp phi chut vo Database ny chn Delete

76

Bc 3: Hp thoi Delete Object xut hin nhp Ok thc hin


xa.

77

4.4. Phc hi DataBase (Restore)


Phc hi Database Backup, ch thc hin c khi chng ta c File
Backup v Database , cch thc hin nh sau:
Bc 1: Nhp phi chut vo mc Database trong Object Explorer
chn Restore DataBase

78

Bc 2: Hp thoi Restore Database xut hin nh hnh di y:

Chng ta c th chn Database phc hi d liu t File Backup


hoc phc hi d liu Backup thnh mt File mi, di y chng

79

ta s thc hin theo trng hp th 2. Nh vy ti Tab General


trong mc To Database hy nhp trc tip vo tn Database mi cn
to t File backup v d nh hnh nh trn chng ta s to ra mt
Database mi c tn QLHTK.
Bc 3: Cng ti Tab General chn From device sau nhp chn
nt () hp thoi Specify backup xut hin nh hnh di y:

Nhp Add tm ti File Backup cn Restore.

80

Gi s chng ta tm thy File cn Restore c tn l QLHTK.bak


c lu ti D:\, nhp chn File ny v nhp Ok.

81

Tr li vi ca s Specify Backup bn tip tc nhp Ok xc nhn


ng dn va chn.
Bc 4: Khi mn hnh Restore Database s xut hin vi nhng
thng tin v Database backup, bn hy tch chn vo ct Restore
trong mc Select the backup set to restore.

82

Bc 5: Tch chn Tab Options trong mc Select a page

83

Trong mc Restore the Database file as ct Restore As hy chn


ti ng dn cn lu File Database khi Restore, y l ng dn
y bao gm c tn File v phn m rng. Thng thng dng
th nht tn File c phn m rng l .mdf, dng th 2 lu File Log
c phn m rng l .ldf.
Bc 6: Cui cng nhp Ok thc hin Restore. Chng ta c th
kim tra vic thc thi chc nng nh phn thm mi mt Database.
4.5. G b DataBase (Detach)
Khc vi vic xa Database, Detach ch g b Database khi s
qun l ca h qun tr c s d liu SQL Server 2008 hin thi.
Cc bc thc hin nh sau:
Bc 1: Chn Database cn Detach trong ca s Object Explorer
Bc 2: Nhp phi chut chn Task/Detach

84

Bc 3: Hp thoi Detach Database xut hin nhp Ok thc hin


Detach

85

4.6. nh km DataBase (Attach)


Gn Database c Detach vo h qun tr c s d liu
(HQTCSDL) SQL Server 2008, nh vy Attach ch thc hin vi
nhng Database c Detach trc cc bc thc hin nh
sau:
Bc 1: Nhp phi chut vo mc Database trong ca s Object
Explorer chn Attach

86

Bc 2: Hp thoi Attach Database xut hin nh hnh di y:

Nhp Add chn ti Database cn Attach.

87

Bc 3: Sau bc 2 hp thoi chn Database xut hin

Nh hnh nh trn chng ta chn ti Database QLHTK.mdf lu ti


D: ca my tnh v va c Detach t phn trc. Nhp Ok
xc nhn chn Database.
Bc 4: By gi tr li vi ca s Attach Database

88

Nhp Ok thc hin Attach.

89

Bi 3 Cc i tng v mt s x l trong SQL


Server 2008
Thi lng: 04 bui
Ni dung c bn:
1. Cu lnh SQL
1.1. i tng
SQL Server c thit k theo kiu hng i tng v vy chng
ta c th d dng can thip ti chng bng cu lnh T-SQL thng
qua tn i tng. Tn i tng y c th l tn bng, tn view,
tn Trigger, tn th tc lu (Store Procedure),
Thng thng chng ta c th truy vn trc tip bng tn ca i
tng v d:
USE QLHTK
SELECT * FROM DMDT
Nh v d trn QLHTK l tn Database v DMDT l tn bng.
Trong mt s trng hp c bit, khi tn i tng trng vi t
kha hoc cha du khong trng th tn i tng phi t trong
du ngoc vung.
SELECT Id, [Date], Code, Name FROM tblStaff
SELECT * FROM [INDEX]
1.2. Bin
- T-SQL cng ging nh cc ngn ng lp trnh khc ngha l cn
phi khai bo bin v kiu d liu cho bin trc khi s dng
- Tn bin bt u bng k t @ (V d: @_Ngay_Ct, @_Ma_Vt)
- C php khai bo bin:
DECLARE @<Ten_Bien> <Kieu_Du_Lieu>
+ Tn bin: Tn bin l tp hp cc k t chui v s, tn bin
khng bao gm khong trng v k t c bit.
90

+ Kiu d liu: L mt trong cc kiu chun ca SQL hoc kiu d


liu do ngi dng t nh ngha.
- Gn gi tr cho bin:
SET @<Ten_Bien> = <Gia_Tri>
Hoc
SELECT @<Ten_Bien> = <Gia_Tri>
- V d:
DECLARE @_Ho_Ten NVARCHAR(32)
DECLARE @_Nam_Sinh INT
DECLARE @_Nguyen_Quan NVARCHAR(64)
SET @_Ho_Ten = NNguyn Vn A
SET @_Nam_Sinh = 1989
SET @_Nguyen_Quan = NHi Dng
/*In ra bien @_Ho_Ten s dng hm RTRIM()
ct khong trng bn phi gi tr ca bin*/
PRINT NTn ti l: + RTRIM(@_Ho_Ten)
/*In ra bien @_Nam_Sinh s dng hm CAST()
chuyn i kiu INT thnh kiu CHAR()*/
PRINT NSinh
CHAR(4))

nm:

CAST(@_Nam_Sinh

AS

PRINT NNguyn qun: + RTRIM(@_Nguyen_Quan)


Chng ta c th vit li v d trn s dng t kha SELECT gn
gi tr cho bin:
DECLARE @_Ho_Ten NVARCHAR(32)
DECLARE @_Nam_Sinh INT
DECLARE @_Nguyen_Quan NVARCHAR(64)
SELECT @_Ho_Ten = NNguyn Vn A,

91

@_Nam_Sinh = 1989,
@_Nguyen_Quan = NHi Dng
/*In ra bien @_Ho_Ten s dng hm RTRIM()
ct khong trng bn phi gi tr ca bin*/
PRINT NTn ti l: + RTRIM(@_Ho_Ten)
/*In ra bien @_Nam_Sinh s dng hm CAST()
chuyn i kiu INT thnh kiu CHAR()*/
PRINT NSinh
CHAR(4))

nm:

CAST(@_Nam_Sinh

AS

PRINT NNguyn qun: + RTRIM(@_Nguyen_Quan)


Bi tp thc hnh:
- To bin lu tr cc thng tin v th sinh vin bao gm: H
m, Tn, M sinh vin, Kha hc, Khoa, lp
- In ra cc bin ra mn hnh theo quy chun di y:
+ H tn:..
+ M sinh vin:.
+ Lp: Khoa:.
+ Kha hc: ..
1.3. Kiu d liu
Trong SQL Server, mi ct, bin a phng, th hin v tham s c
mt kiu d liu lin quan. Mt kiu d liu l mt thuc tnh ch
nh kiu d liu m cc i tng c th gi: s nguyn, k t, tin
t, ngy thng v thi gian, cc chui nh phn, v nh vy SQL
Server cung cp mt b cc h thng kiu d liu xc nh tt c
cc loi d liu c th c s dng vi SQL Server. Ngoi ra bn
cng c th t nh ngha kiu d liu cho ring mnh (Hc vin t
nghin cu)
Kiu s
Kiu d liu

Gii hn m t

Byte

92

Bigint

Int
Smallint
Tinyint
Bit
Decimal

Numeric

Money
Smallmoney
Float
Real

Lu tr
(- 8 Bytes
n

T
-2^63
9,223,372,036,854,775,808)
2^63-1
(9,223,372,036,854,775,807)
T -2^31 (-2,147,483,648) n
2^31-1 (2,147,483,647)
T -2^15 (-32,768) n 2^15-1
(32,767)
T 0 n 255
Nhn gi tr 0 (False), 1 (True)
hoc NULL
T - 10^38 +1 n 10^38 - 1

4 Bytes
2 Bytes
1 Byte

Ph thuc v
m t, t 5 n
17 Bytes
T - 10^38 +1 n 10^38 - 1
Ph thuc v
m t, t 5 n
17 Bytes
T
-922,337,203,685,477.5808 8 bytes
n 922,337,203,685,477.5807
- 214,748.3648 to 214,748.3647
4 bytes
T - 1.79E+308 n -2.23E-308, 0 Ph thuc vo
v t 2.23E-308 n 1.79E+308
m t
T - 3.40E + 38 n -1.18E - 38, 0 4 Bytes
v t 1.18E - 38 n 3.40E + 38

Kiu ngy thng


Kiu d liu
Date
Time

Byte
Lu tr
T 01/01/0001 n 31/12/9999
3 Bytes
T
00:00:00.0000000
n 5 Bytes
23:59:59.9999999
Gii hn m t

93

Datetime
SmallDatetime

Ngy t 1/1/1753 n 31/12/9999 8 Bytes


Gi t 00:00:00 n 23:59:59.997
Ngy
t
01/01/1900
n 4 Byte
06/06/2079
Gi t 00:00:00 n 23:59:59

Kiu k t
Kiu d liu
Char
Varchar
Text

nChar
nVarchar
nText

Byte
Lu tr
C php: char(n), n t 0 n n Bytes
8.000
C php: varchar(n), n t 0 n n Bytes + 2
8.000
Bytes
Lu tr ti a 2,147,483,647 K Ti
a
t
2,147,483,64
7 bytes
C php: nchar(n), n t 0 n 2*n Byte
4.000
C php: nvarchar(n), n t 0 n 2*n Bytes +
4.000
2 Bytes
Lu tr ti a 1,073,741,823 k
t
Gii hn m t

1.4. Hm
Hm thng k
Cc hm ny s dng thng k cc gi tr trong cu lnh
SELECT vi mnh GROUP BY
AVG
COUNT
MIN
MAX
SUM

Ly gi tr trung bnh
m bn ghi
Ly gi tr nh nht
Ly gi tr ln nht
Tnh tng

94

Hm x l ngy thng
a. GETDATE: Tr li gi h thng ca my trm hin thi
C php:
GETDATE()
b. GETUTCDATE: Tr v gi h thng ca Server
C php:
GETUTCDATE()
c. DATENAME: Tr v chui tham s thi gian
C php:
DATENAME ( datepart , date )
Trong :
- datepart c ch nh theo bng di y
datepart

Vit rt gn

year

yy, yyyy

quarter

qq, q

month

mm, m

dayofyear

dy, y

day

dd, d

week

wk, ww

weekday

dw

hour

hh

minute

mi, n

second

ss, s

95

- date: Gi tr ngy thng cn ly tham s


V d:
V d

Kt qu

DATENAME ( year , '1/1/1991') 1991 Nm ca tham s ngy


thng
DATENAME ( dy , '8/12/1991')

244 Ngy th 244 trong nm

DATENAME ( wk , '2/13/1991') 7 Tun th 7 ca nm


Lu : Nu khng c ch nh trc SQL hiu chui ngy thng bt
u bng thng sau l ngy v cui cng l nm.
d. DATEPART: Tng tu hm DATENAME nhng gi tr tr v
kiu Integer
e. DAY: Tr v gi tr ngy ca tham s ngy thng
C php:
DAY(date)
Trong : date l tham s ngy thng
V v: DAY(1/12/2003) s cho gi tr l 12
f. MONTH: Tr v gi tr thng ca tham s ngy thng
C php:
MONTH(date)
Trong : date l tham s ngy thng
V v: MONTH(1/12/2003) s cho gi tr l 1
g. YEAR: Tr v gi tr nm ca tham s ngy thng
C php:
YEAR(date)
Trong : date l tham s ngy thng

96

V v: YEAR(1/12/2003) s cho gi tr l 2003


h. DATEDIFF: Tr v khong cch v nm, thng, ngy gi,
tham s ngy bt u v ngy kt thc
C php:
DATEDIFF ( datepart , startdate , enddate )
Trong :
- datepart: Theo bng di y:
datepart

Vit rt gn

year

yy, yyyy

quarter

qq, q

month

mm, m

dayofyear

dy, y

day

dd, d

week

wk, ww

weekday

dw

hour

hh

minute

mi, n

second

ss, s

- startdate: Ngy bt u
- enddate: Ngy kt thc
V d:
V d

Kt qu

97

DATEDIFF ( year , '1/1/1991', 12/31/2011) 20 - Cch nhau 20


nm
DATEDIFF ( d , '8/12/1991', 12/01/1992)

447 - Cnh nhau 447


ngy

DATEDIFF ( wk , '2/13/1991', 3/4/2001)

525 Cch nhau


525 tun

i. DATEADD: Cng thm gi tr cho tham s ngy thng


C php:
DATEADD (datepart , number , date )
Trong :
- datepart: Theo bng di y:
datepart

Vit rt gn

year

yy, yyyy

quarter

qq, q

month

mm, m

dayofyear

dy, y

day

dd, d

week

wk, ww

weekday

dw

hour

hh

minute

mi, n

second

ss, s

- number: Gi tr cn cng thm

98

- date: Tham s ngy thng cn cng thm gi tr


V d:
V d

Kt qu

DATEADD ( year , 1, 12/31/2011) 12/31/2012 Cng thm 1


nm
DATEADD( d , -1, '8/1/1991')

07/31/1991 Tr i mt
ngy

DATEADD ( wk , 3, '2/13/1991')

3/6/1991 Cng thm 3


tun

j. SET DATEFORMAT: t th t ngy thng nm trong gi tr


bin ngy thng
C php:
SET DATEFORMAT format
- format: nh dng ngy thng v d dmy hay mdy
V d: SET DATEFORMAT dmy
Lu : Nu khng c ch nh bng hm ny SQL s hiu nh
dng ngy thng theo kiu MDY.
- ISDATE: Kim tra mt gi tr xem c phi kiu ngy thng hay
khng, kt qu tr v True nu ng v False nu sai
C php:
ISDATE ( expression )
- expression: Gi tr, biu thc cn kim tra
Hm x l chui
a. PATINDEX: Tm v tr u tin ca mt chui k t trong chui
gc
C php:
PATINDEX ('%pattern%' , expression)

99

- pattern: Chui cn tm v tr c t trong hai du %


- expression: Chui gc cha chui k t cn tm v tr
V d

Kt qu

PRINT PATINDEX (N%Khng%, NL Minh


Khng)

PRINT PATINDEX (N%C%, NTon cao cp)

b. SPACE: Tr v mt chui khong trng tng ng vi i s


C php:
SPACE ( integer_expression )
- integer_expression: S k t trng
V d

Kt qu

PRINT NL Minh + SPACE(1) + NKhng L Minh Khng


PRINT NTon cao cp: + SPACE(5) + 7

Ton cao cp: 7

c. CHARINDEX: Tm v tr u tin ca mt chui k t trong


chui gc
C php:
CHARINDEX ( expression1
start_location ] )

,expression2

- expression1: Chui cn tm v tr
- expression2: Chui gc cha chui k t cn tm v tr
- start_location: V tr bt u tm (nu khng c tham s ny hm
t hiu tm t k t u tin)
V d
PRINT CHARINDEX(NKhng, NL Minh

Kt qu
9

100

Khng)
PRINT CHARINDEX (NC, NTon cao cp, 7)

10

d. STR: Chuyn kiu s thnh chui


C php:
STR ( float_expression [ , length [ , decimal
] ] )
- float_expression: Biu thc s cn chuyn thnh chui
- length: di ca chui mi
- decimal: S k t trng c a vo bn tri ca chui
V d

Kt qu

PRINT STR(564.123, 5, 3)

---------564.1

PRINT STR(564.123)

-------564

e. REPLACE: Thay th cc k t trong chui


C php:
REPLACE(string_expression,
string_replacement)

string_pattern,

- string_expression: Chui cha cc k t cn thay th


- string_pattern: Cc k t cn thay th
- string_replacement: Cc k t mi thay th vo chui
V d

Kt qu

PRINT REPLACE(NCty C phn ABC, Cng ty C phn ABC


NCty, NCng ty)

101

PRINT REPLACE(N Tn: Minh 0912


121 211, - , N in thoi:

Tn: Minh in
thoi: 0912 121 211

f. LEFT: Ct mt s k t bn tri ca chui


C php:
LEFT(str, number)
- str: Chui cn ct k t
- number: S k t cn ct
g. REPLICATE: Lp li cc k t cho trc
C php:
REPLICATE
(
,integer_expression )

string_expression

- string_expression: Chui cn lp
- integer_expression: S ln lp cc k t
V d

Kt qu

PRINT N'Bnh: 10 ' + REPLICATE ('0', 3) Bnh: 10 000(ng)


+ N'(ng)'
h. SUBSTRING: Ct mt phn ca chui
C php:
SUBSTRING(value_expressio,
length_expression)

start_expression,

- value_expressio: Chui gc cn ct k t
- start_expression: V tr bt u ct
- length_expression: S k t cn ct
V d
PRINT SUBSTRING(NLp hc SQL 2008, 8, 9)

Kt qu
SQL 2008

102

i. LEN: Tr v di ca chui
C php:
LEN(str)
- str: Chui cn kim tra di
j. LOWER: Chuyn thnh chui ch thng
C php:
LOWER(str)
- str: Chui cn chuyn thnh ch thng
k. RIGHT: Ct cc k t bn phi ca chui
C php:
RIGHT(str, number)
- str: Chui cn ct k t
- number: S k t cn ct
l. UPPER: Chuyn thnh chui ch hoa
C php:
UPPER(str)
- str: Chui cn i thnh ch hoa
m. LTRIM: Ct cc khong trng bn tri ca chui
C php:
LTRIM(str)
- str: Chui cn ct khong trng
n. RTRIM: Ct cc khong trng bn phi ca chui
C php:
RTRIM(str)
- str: Chui cn ct khong trng
Mt s hm khc

103

a. CAST: Chuyn i dng d liu


C php:
CAST ( expression AS data_type)
- expression: Gi tr chuyn i
- data_type: Kiu d liu chuyn i
V d:
DECLARE @_Ngay_Sinh SMALLDATETIME
SET @_Ngay_Sinh = '3/25/1989'
PRINT
N'Ban
sinh
nm:
CAST(YEAR(@_Ngay_Sinh) AS CHAR(4))

'

b. ISNULL: Kim tra gi tr NULL


C php:
ISNULL(expression, value)
- expression: Gi tr cn kim tra
- value: Gi tr tr v nu gi tr kim tra thc s NULL
c. ISNUMERIC: Kim tra d liu kiu s, nu ng hm tr v gi
tr 1 ngc li tr v gi tr 0
C php:
ISNUMERIC(expression)
- expression: i s cn kim tra
d. CASE: Kim tra gi tr theo nhiu nhnh
C php 1:
CASE <Gia_Tri_Can_Kiem_Tra>
WHEN <Mien_Gia_Tri1> THEN <Ket_Qua1>
[WHEN <Mien_Gia_Tri2> THEN <Ket_Qua2>]
[ ...n ]

104

[
ELSE <Ket_Qua_n+1>
]
END
- Gia_Tri_Can_Kiem_Tra: Thng thng l bin cn kim tra gi tr
- Mien_Gia_Tri: Min gi tr cn kim tra
- Ket_Qua: Gi tr tr v tng ng vi min gi tr
C php 2:
CASE
WHEN <Bieu_Thuc_Dk1> THEN <Ket_Qua1>
[WHEN <Bieu_Thuc_Dk2> THEN <Ket_Qua2>]
[ ...n ]
[
ELSE Ket_Qua_N+1
]
END
- Bieu_Thuc_Dk: Biu thc min gi tr cn kim tra
- Ket_Qua: Kt qu tr v tng ng vi min gi tr
V d: Lp bng chit khu cho tng khch hng theo tnh thnh vi
iu kin sau y:
Tnh

% Chit khu

H Ni

Hi Phng

Hi Dng

Lng Sn

105

Khc

C php 1:
SELECT Ma_Dt, Ten_Dt, Dia_Chi,
CASE Dia_Chi
WHEN N'H Ni' THEN 1
WHEN N'Hi phng' THEN 3
WHEN N'Hi dng' THEN 2
WHEN N'Lng Sn' THEN 6
ELSE 0 END
AS Chiet_Khau
FROM DMDT
C php 2:
SELECT Ma_Dt, Ten_Dt, Dia_Chi,
CASE
WHEN Dia_Chi LIKE N'%H Ni%' THEN 1
WHEN Dia_Chi LIKE N'%Hi phng%' THEN
3
WHEN Dia_Chi LIKE N'%Hi dng%' THEN
2
WHEN Dia_Chi LIKE N'%Lng Sn%' THEN
6
ELSE 0 END
AS Chiet_Khau
FROM DMDT
Bng mt trong hai cch kt qu cho ra ging nhau

106

1.5. Cu lnh c cu trc


Cu iu kin IF
C php:
IF <Bieu_Thuc_Dieu_Kien>
BEGIN
<Cau_lenh_Sql>
END
[ ELSE BEGIN
<Cau_lenh_Sql>
END]
Trong :
- Bieu_Thuc_Dieu_Kien: Biu thc iu kin
- Cau_lenh_Sql: Cu lnh SQL
V d:
DECLARE @_Ngay_Sinh SmallDatetime
SET @_Ngay_Sinh = '6/15/1988'
IF
16

DATEDIFF(year, @_Ngay_Sinh,

GETDATE()) >

PRINT N'Bn n tui v thnh nin'


ELSE
PRINT N'Bn cha n tui v thnh nin'

107

Vng lp While
C php:
WHILE <Bieu_Thuc_Dieu_Kien>
BEGIN
<Cau_Lenh_Sql>
[ BREAK ]
[ CONTINUE ]
END
Trong :
- Bieu_Thuc_Dieu_Kien: Biu thc iu kin lp
- Cau_Lenh_Sql: Cu lnh Sql thc thi trong vng lp
- BREAK: T kha ch nh thot khi vng lp d iu kin lp
vn ang tha mn
- CONTINUE: T kha ch nh tip tc vng lp khi iu kin lp
ang tha mn
V d:
DECLARE @_i INT
SET @_i = 1
WHILE @_i<10
BEGIN
PRINT @_i
SET @_i = @_i + 1
END
1.6. Vit cu lnh T-SQL trn New Query ca SQL Server 2008
Lu li ni dng Query
phn trc chng ta c trnh by v cch s dng cng c
New Query tuy nhin sau khi vit cc cu lnh T-SQL chng ta c
108

th lu chng li thnh cc File vt l v s dng cho cc ln tip


theo, cch thc hin nh sau:
Bc 1: M ca s New Query (Nhp chn biu tng New Query
trnh thanh cng c).
Bc 2: Son tho ni dung cho Query

Bc 3: Nhp biu tng Save lu li Query

109

Nh vy chng ta lu li mt Query ng dn D:\ vi tn l


HocSql.sql
Khi mun s dng li bn c th thc hin theo cc bc sau y:
Bc 1: Khi ng SQL Server 2008
Bc 2: Connect n Server cn s dng

110

Bc 3: T menu File chn Open/File

Bc 4: Tm n ng dn lc trc lu File Sql

111

Chn File nhp Open m File v s dng li.


Thc thi mt nhm cu lnh trn ca s New Query
phn trc chng ta s dng phm F5 hoc nhp chn nt
Execute thc thi cu lnh trn ca s New Query, khi ton b
cc cu lnh c vit trong mn hnh son tho s c thc thi,
tuy nhin bn c th ch thc hin mt nhm cc cu lnh trong
mn hnh ny bng cch bi en nhm cu lnh ri nhn phm
F5 hoc nhp nt Excute.

112

1.7. Bi tp thc hnh


1. Vit Query tnh lng vi bin lu cc thng tin di y:
+ H tn: Nguyn Vn A
+ Lng c bn: 2.000.000
+ Ngy cng thc t: 28
+ Tm ng: 300.000
+ Thc lnh: .
- Tnh thc lnh cho nhn vin trn theo cng thc:
Thc lnh = (Lng c bn / 30 * ngy cng thc t) - Tm ng.
- In ton b thng tin v bng lng ra mn hnh theo trnh by nh
trn
- Lu Query ny li vi tn l Tinh_Luong.sql ti D: ca my
tnh.
2. Vit Query tnh im trung bnh vi bin lu cc thng tin di
y:
+ Tn sinh vin: Nguyn Vn A

113

+ im mn xc xut: 8
+ n v hc trnh mn xc xut: 4
+ im mn ting Anh: 6
+ n v hc trnh mn ting Anh: 3
+ im mn nguyn l k ton: 8
+ n v hc trnh mn nguyn l k ton: 5
+ im trung bnh:
- Tnh im trung bnh cc mn hc
- In ton b thng tin bng im theo trnh by nh trn
- Lu li Query vi tn Tinh_Diem.sql ti D: ca my tnh
3. Hy vit Query nhp vo tn v ngy thng nm sinh ca mt bn
sinh vin, t in ra xem bn sinh vo ngy no, thng no, nm
no v vo ngy th my trong tun.
4. Nhp vo mt ngy bt k hy tnh ton v in ra ngy cui thng
.
5. Nhp vo mt ngy bt k kim tra nu ngy l ch nht th in
ra thng bo Hm nay l ch nht bn c ngh ngc li in ra
thng bo Hm nay vn l ngy lm vic
6. Thc hin bi ton chun xu theo mt s yu cu sau:
- Khng c c hai du khong trng lin nhau
- Sau du chm, du phy phi c du khong trng
- Trc du chm, du phy khng c du khong trng
- Sau du chm phi vit hoa
- u xu, cui xu khng c c du khong trng
7. Nhp vo s u v s cui, in ra xem c bao nhiu s chn
2. Bng
2.1. To bng

114

bi trc chng ta thc hnh cch to bng bng cng c trn


SQL Server 2008, tuy nhin bn hon ton c th to bng bng cu
lnh SQL theo c php di y:
CREATE TABLE <Ten_Bang>
(
NULL]

<Ten_Truong1> <Kieu_Du_Lieu> [NOT NULL |


[DEFAULT (<Gia_Tri_Mac_Dinh>)],
<Ten_Truong2> <Kieu_Du_Lieu> [NOT NULL |

NULL]
[DEFAULT (<Gia_Tri_Mac_Dinh>)],
...
<Ten_Truong_n> <Kieu_Du_Lieu> [NOT NULL
| NULL]
[DEFAULT (<Gia_Tri_Mac_Dinh>)],
[CONSTRAINT
CLUSTERED

<Ten_Khoa>

PRIMARY

KEY

(
<Truong_Khoa> [ASC | DESC]
)]
)
Gii thch:
- Ten_Bang: Tn bng cn to
- Ten_Truong: Tn trng cn to cho bng
- Kieu_Du_Lieu: Kiu d liu ca trng
- Gia_Tri_Mac_Dinh: Gn gi tr ngm nh cho trng nu c
- Ten_Khoa: Tn kha chnh ca bng thng thng t l
PK_<Ten_Bang>, v d PK_DMDT

115

- Truong_Khoa: Tn trng kha chnh ca bng


V d: To bng danh mc i tng vi cc thng tin nh sau:
Tn bng: DMDT
Kha chnh: Ma_Dt
Stt

Trng

Id

2
3

Ma_Dt
Ten_Dt

Dia_Chi

5
6
7

So_Dt
Fax
Email

Ghi_Chu

Kiu &
rng
Int
Nchar(16)
Nvarchar(96
)
Nvarchar(64
)
char(20)
char(20)
Nvarchar(64
)
Ntext

Din gii
Trng tng t ng, xc nh
bn ghi duy nht
Trng kha, lu m i tng
Tn i tng
a ch
S in thoi
S Fax
Th in t
Thng tin ghi ch

Chng ta s thc hin to bng bng hai cch:


Cch 1: S dng cng c trn giao din SQL Server 2008, cc bc
thc hin nh sau:
Bc 1: Khi ng SQL Sever 2008
Bc 2: Connect ti Server cha DataBase
Bc 3: Chn DataBase cn to bng trong ca s Object Explorer.

116

Tm ti mc Tables nhp phi chut chn New Table

Bc 4: Trong ca s New Table nhp vo danh sch trng v cc


thit lp nh u bi

117

Bc 5: Tip theo nhp phi chut chn vo ct nh du tng


ng vi dng Ma_Dt chn Set Primary Key thit lp trng
kha.

Sau khi thit lp xong trng kha chnh s c biu tng nh hnh
di di y:

118

Bc 6: Cui cng nhp nt Save trn thanh cng c lu li bng


vi tn l DMDT.
Nh vy khi chng ta tr li mc Tables trong Database hin thi s
thy xut hin bng mi va thm.

- chnh sa li bng nhp phi chut chn Design

119

- m d liu trong bng nhp phi chut chn Select Top 1000
Rows
Cch 2: S dng cu lnh T-SQL, cc bc thc hin nh sau:
Bc 1: Khi ng Sql Server 2008
Bc 2: Chn ti Database cn to bng sau nhp chut vo biu
tng New Query trn thanh cng c.

120

Bc 3: Ca s New Query xut hin hy nhp vo ni dung cu


lnh to bng di y:
USE [QLHTK]
CREATE TABLE [dbo].[DMDT](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Ma_Dt] [nchar](16) NOT NULL,
[Ten_Dt] [nvarchar](64) NOT NULL,
[Dia_Chi] [nvarchar](50) NOT NULL,
[Ghi_Chu] [text] NOT NULL,
CONSTRAINT [PK_DMDT] PRIMARY KEY CLUSTERED
(
[Ma_Dt] ASC
)
)
Sau khi nhp xong nhn phm F5 hoc nhn nt Execute trn thanh
cng c thc thi cu lnh.

121

Bc 4: By gi hy vo mc Tables ca Database nhp phi chut


chn Refresh, mt bng mi s xut hin vi tn l DMDT.
2.2. Cp nht d liu vo bng
Vic cp nht d liu vo bng l mt cng vic thng xuyn v
v cng quan trng v mt bng ch c ngha qun l khi n cha
d liu. Cng vic cp nht bao gm thm, sa, xa d liu, tng
t nh to bng khi cp nht d liu vo bng trong SQL Server
2008 chng ta cng c th s dng 2 cch mt l thng qua cc
cng c trn giao din, hai l s cc cu lnh T-SQL.
Thm mi mt dng d liu
thm d liu vo bng chng ta c hai cch sau y:
Cch 1: S dng cng c giao din SQL Server 2008, vi bng
DMDT va to phn trn chng ta thc hin thm d liu theo cc
bc sau y:
Bc 1: Khi ng SQL Server 2008
Bc 2: Chn ti Database QLHTK, trong phn Tables nhp phi
chut vo bng DMDT chn Edit Top 200 Rows.

122

Bc 3: Ca s danh sch d liu xut hin

Hy nhp d liu vo dng cui cng, sau khi in d liu y


cho cc trng hy nhp chut xung dng di xc nhn.

123

Bc 4: Nh vy chng ta nhp d liu cho dng u tin ca


bng va to, hy thc hin tng t vi cc dng (bn ghi) tip
theo
Cch 2: S dng cu lnh T-SQL, cc bc thc hin nh sau:
Bc 1: Khi ng SQL Server 2008
Bc 2: Chn ti Database cha bng cn thm d liu
Bc 3: M ca s New Query v nhp vo ni dung sau:
INSERT INTO [DMDT]
([Ma_Dt]
,[Ten_Dt]
,[Dia_Chi]
,[Ghi_Chu])
VALUES
(N'DT002'
,N'Cng ty C phn ANJ'
,N'Hi phng'
,N'')
Nhn F5 hoc nhp chut nt Execute trn thanh cng c thc
hin cu lnh

124

Bc 4: Hy m bng DMDT chng ta s thy mt bn ghi mi


c thm vi ni dng nh cu lnh va thc hin.

Sa d liu
Cng vi bng d liu trn chng ta tin hnh sa i a ch ca
cng ty C phn ANJ t Hi phng thnh Hi Dng. Bn c
th thc hin theo mt trong hai cch sau y:
Cch 1: S dng cng c giao din SQL Server 2008, cc bc
thc hin nh sau:
Bc 1: Khi ng SQL Server 2008
Bc 2: M bng dng chnh sa bn ghi bng cch chn ti
Database QLHTK, trong phn Tables nhp phi chut vo bng
DMDT chn Edit Top 200 Rows.

125

Bc 3: Bn nhp chut vo ct a ch ca dng tng ng vi


cng ty c phn ANJ

Bc 4: By gi hy sa gi tr ny thnh Hi dng sau nhp


chut sang dng khc xc nhn sa i, kt qu s c nh
hnh di y.

126

Cch 2: S dng cu lnh T-SQL, cc bc thc hin nh sau:


Bc 1: Khi ng SQL Server 2008
Bc 2: Chn ti Database cha bng cn sa d liu
Bc 3: M ca s New Query v nhp vo ni dung sau:
UPDATE [DMDT]
SET [Dia_Chi] = N'Hi dng'
WHERE Ma_Dt = 'DT002'
Nhn F5 hoc nhp chut nt Execute trn thanh cng c thc
hin cu lnh
Bc 4: Hy m bng DMDT chng ta s thy kt qu c thc
hin tng t nh cch 1
Lu :
- Trong trng hp ny Cng ty C phn ANJ c m l DT002 v
y l trng kha xc nh bn ghi duy nht v vy chng ta s
dng lm iu kin sa i bn ghi.
- Bn cng c th p dng sa i cho nhiu trng cng mt lc
bng cu lnh T-SQL
Xa d liu
Gi s chng ta cn xa Cng ty C phn ANJ trong bng
DMDT, bn c th thc hin theo mt trong hai cch sau y:

127

Cch 1: S dng cng c giao din SQL Server 2008, cc bc


thc hin nh sau:
Bc 1: Khi ng SQL Server 2008
Bc 2: M bng cn xa d liu
Bc 3: Nhp phi chut vo ct nh du ca bn ghi cn xa
chn Delete.

Hp thoi xc nhn xut hin chn Yes thc hin xa

Cch 2: S dng cu lnh T-SQL, cc bc thc hin nh sau:


Bc 1: Khi ng SQL Server 2008
Bc 2: Chn ti Database cn thao tc, sau m ca s New
Query v nhp vo ni dung sau:
DELETE [DMDT] WHERE Ma_Dt = 'DT002'

128

Bc 3: Nhn F5 hoc nhp chut chn nt Excute trn thanh cng


c thc hin xa d liu
2.3. Bi tp thc hnh
1. To cc bng di y bng cng c trn giao din hoc bng cu
lnh SQL
Bng danh mc i tng (Lu khch hng hoc nh cung cp)
Tn bng: DMDT
Kha chnh: Ma_Dt
Stt

Trng

Id

2
3

Ma_Dt
Ten_Dt

Dia_Chi

5
6
7

So_Dt
Fax
Email

Ghi_Chu

Kiu &
rng
Int
Nchar(16)
Nvarchar(96
)
Nvarchar(64
)
char(20)
char(20)
Nvarchar(64
)
Ntext

Din gii
Trng tng t ng, xc nh
bn ghi duy nht
Trng kha, lu m i tng
Tn i tng
a ch
S in thoi
S Fax
Th in t
Thng tin ghi ch

Bng danh mc vt t
Tn bng: DMVT
Kha chnh: Ma_Vt
Stt
1

Trng
Id

Kiu &
rng
Int

Din gii
Trng tng t ng, xc
nh bn ghi duy nht

129

Ma_Vt

Nchar(16)

3
4
5
6

Ten_Vt
Dvt
Quy_Cach
Ghi_Chu

Nvarchar(96)
Nvarchar(10)
Nvarchar(96)
Ntext

Trng kha, lu m vt t,
hng ha
Tn vt t hng ha
n v tnh
Quy cch sn phm
Thng tin ghi ch

Bng danh mc kho


Tn bng: DMKHO
Kha chnh: Ma_Kho

Id

Kiu &
rng
Int

2
3
4

Ma_Kho
Ten_Kho
Ghi_Chu

Nchar(16)
Nvarchar(96)
Ntext

Stt

Trng

Din gii
Trng tng t ng, xc
nh bn ghi duy nht
Trng kha, lu m kho
Tn kho hng
Thng tin ghi ch

Bng tn kho u k
Tn bng: TONDK
Kha chnh: Id
Stt

Trng

Id

2
3
4

Ma_Kho
Ma_Vt
So_Luong

Don_Gia

Kiu &
rng
Int
Nchar(16)
Nchar(16)
Numeric(15,
3)
Numeric(18,
0)

Din gii
Trng tng t ng, xc
nh bn ghi duy nht
M kho tn
M vt t hng ha tn kho
S lng tn
Gi tn kho

130

Ghi_Chu

Ntext

Thng tin ghi ch

Bng chng t
Tn bng: CT
Kha chnh: Stt_Ct

Stt_Ct

Kiu &
rng
Char(10)

2
3

Ma_Ct
Nhom_Ct

Char(3)
Tinyint

4
5
6

So_Ct
Ngay_Ct
Ma_Dt

Char(10)
DateTime
Char(16)

7
8
9
10

Ong_Ba
Dia_Chi
Dien_Giai
Dia_Diem

Nvarchar(32)
Nvarchar(96)
Nvarchar(128)
Nvarchar(96)

Stt

Trng

Din gii
L trng kha chnh lu s
th t chng t
M chng t (PX, PN)
Nhm chng t (1: Nhp, 2:
Xut)
S chng t
Ngy chng t
M khch hng hoc nh
cung cp
Ngi thc hin chng t
a ch
Din gii chng t
a im nhp, xut hng

Bng chng t chi tit


Tn bng: CTCT
Kha chnh: Stt_Ct, Stt_Dong

Stt_Ct

Kiu &
rng
Char(10)

Stt_Dong

Char(3)

Ma_Vt

Nchar(16)

Stt

Trng

Din gii
L trng kha chnh lu s
th t chng t
S th t tng dng chi tit
chng t
M vt t hng ha

131

So_Luong

Don_Gia

Ma_Kho

Numeric(15,
3)
Numeric(18,
0)
Numeric(18,
0)

S lng vt t hng ha
nhp, xut
n gi
M kho nhp, xut vt t
hng ha

2. Thm cc d liu mu di y vo bng tng ng


Bng tn kho u k (TONDK)
Id
1
2
3

Ma_Vt
TP001
VT004
VT003

Ma_Kho
KTP
KVT
KVT

So_Luong
10
20
4

Don_Gia
125.000
75.000
110.000

Ghi_Chu

Bng danh mc i tng (DMDT)


Id

Ma_Dt

N001

N002

N003

N004

N005

N006

Ten_Dt
Cty TNHH
ABC
Cty C phn
CB thc phm
min bc
Cty lin doanh
Vit Php
Cty TNHH
mt thnh vin
cp nc Yn
Bi
Cty C phn
Lc Hng
Cty XNK
Chu

Dia_Chi
H Ni

So_Dt
04 3640
0119

H Ni

046 3423
3438

Hi
Phng

033 6534
391

Yn Bi

02183
543 443

Bc
Ninh
Hi
Dng

0240 362
552
0320 3111
411

Fax

Bng danh mc vt t, hng ha (DMVT)

132

Email

Id
1
2

Ma_Vt
TP001
TP002

Ten_Vt
Bnh trng Custas
Bnh kem xp

Dvt
Hp
Gi

3
4
5
6

VT001
VT002
VT003
TP003

Bt m loi 1
Hng liu
Bt n
Bnh kem b

Kg
Kg
Kg
Gi

7
8
9

TP004
VT004
VT005

Bnh Socola Vinasun


Socola nguyn liu
Sa ng th

Hp
Kg
Thng

Quy_Cach
Hp 20 ci
Gi
200
gram

Gi
150
gram
Hp 6 ci

Bng chng t (CT)


Stt
Ct
1

Ma_C
t
PX

Nhom
_Ct
1

PX001

Ngay_C
t
31/05/11

Ma_D
t
N001

PX002

01/06/11

N001

L
Vn H
Khng
o Th Hnh H

PX

PN

PN001

01/06/11

N002

T Thu Loan

4
5
6

PX
PN
PX

1
2
1

PX003
PN002
PX004

01/06/11
02/06/11
05/06/11

N004
N005
N004

Phan Th Anh
T Th Minh
Phan Th Anh

H
H
H

So_Ct

Ong_Ba

Di

Bng chi tit chng t (CTCT)


Stt_Dong Stt_Ct
Ma_Vt
1
1
TP001
2
1
TP002
1
2
TP001

Ma_Kho
KTP
KTP
KTP

So_Luong
120.000
23.500
11.500

Don_Gia
120,00
45,00
35,00

133

1
2
1
2
1
2
3
1

3
3
4
4
5
5
5
6

VT001
VT002
TP001
TP004
VT004
VT001
VT003
TP001

KVT
KVT
KTP
KTP
KVT
KVT
KVT
KVT

30.000
120.000
110.000
34.000
75.000
31.000
120.000
13.000

120,00
15,00
75,00
44,00
30,00
32,00
56,00
78,00

3. View
3.1. nh ngha
nh ngha mt cch n gin th view trong SQL Server tng t
nh Query trong Access database. View c th c xem nh mt
table o m d liu ca n c chn t mt query. Trong qu trnh
s dng view khng khc so vi table v c th t v tr ca table
trong cc cu lnh SQL. c im ca View l ta c th lin kt d
liu t nhiu table v tr v mt tp hp bn ghi n. Ngoi ra ta c
th "xo nu" d liu trc khi tr v cho ngi dng bng cch
dng mt s logic checking nh (if, case...).
V d:
CREATE VIEW [dbo].[TonDkView]
AS
SELECT TonDk.Id,
TonDk.Ma_Kho,
TonDk.So_Luong,
TonDk.Ma_Vt,
TonDk.Don_Gia,
TonDk.Ghi_Chu,
DMVT.Ten_Vt,

134

DMKHO.Ten_Kho
FROM DMKHO INNER JOIN
TonDk ON DMKHO.Ma_Kho = TonDk.Ma_Kho INNER
JOIN
DMVT ON TonDk.Ma_Vt = DMVT.Ma_Vt
Ni chung cu lnh SQL trong View c th t rt n gin nh
select ton b data t mt table cho n rt phc tp vi nhiu tnh
nng ca T-SQL.
View thng c s dng vo mt s cng vic sau:
- Tp trung vo mt s data nht nh: ta thng dng view
select mt s d liu m ngi dng quan tm hay chu trch nhim
v loi b nhng d liu khng cn thit.
- n gin ha vic x l d liu: i khi ta c nhng query rt
phc tp v s dng thng xuyn ta c th chuyn n thnh View
v i x n nh mt table, nh vy s lm cho vic x l d liu
d dng hn.
- Customize data: Ta c th dng view lm cho ngi dng thy
d liu t nhng gc khc nhau mc d h ang dng mt ngun
d liu ging nhau.
- Export v Import data: i khi ta mun export data t SQL Server
sang cc ng dng khc nh Excel chng hn ta c th dng view
join nhiu bng sau export d liu t View.
Khi s dng view ta c th select,insert, update, delete data bnh
thng nh vi mt table.
3.2. Thm v chnh sa View
Gi s chng ta cn to View tn kho u k (TonDkView) bao
gm cc thng tin Ma_Vt, Ten_Vt, Ma_Kho, Ten_Kho, So_Luong,
Don_Gia, Thanh_Tien, Ghi_Chu.
S dng cng c trn giao din SQL Server 2008
Bc 1: Khi ng SQL Server 2008

135

Bc 2: Chn ti Database cn to View trong ca s Object


Explorer
Bc 3: Nhp phi chut vo mc View chn New View

Bc 4: Hp thoi Add Table xut hin, chn nhng bng cu thnh


nn View, trong trng hp ny chng ta s dng 3 bng l DMVT,
DMKHO v TONDK, sau khi chn xong cc bn nhp nt Add
ln lt thm cc bng ny vo View.

136

Kt qu:

Bc 5: Chn cc trng cn ly vo View t cc bng, u tin


hy tch chn cc trng Id,, Ma_Kho, Ma_Vt, So_Luong,
Don_Gia, Ghi_Chu trong bng TonDk.

137

To lin kt cho bng TonDk vi hai bng cn li bng cch ln


lt ko th trng Ma_Vt trong bng DmVt vo trng Ma_Vt
trong bng TonDk v trng Ma_Kho t bng DmKho vo trng
Ma_Kho trong bng TonDk. Kt qu s c nh hnh di y:

Tip tc tch chn trng Ten_Kho trong DmKho v trng Ten_Vt


trong DmVt ly vo View.

138

Chng ta vn cn thiu trng Thanh_Tien c tnh ton t trng


Don_Gia v So_Luong trong bn TonDk. Hy di chuyn xung
dng cui cng ca danh sch pha di v thm mt dng mi vi
ni dung nh sau: ct Column nhp vo ni dung
dbo.TonDk.So_Luong * dbo.TonDk.Don_Gia, ct Alias nhp
vo ni dung Thanh_Tien.

Nh vy l chng ta va thm mt trng tnh ton vi tn b


danh l Thanh_Tien vo View, cng vic dng nh kt thc hy
ro qua cu lnh SQL pha di:

Chng ta s thy bn cht ca View chnh l mt cu lnh SELECT


c kt ni t 3 bng bng INNER JOIN.

139

Bc 6: Nh vy l hon tt bn nhp t hp phm Ctrl + S


lu li View vi tn l TonDkView.

By gi trong mc Views ti ca s Object Explorer bn s thy c


mt View mi m chng ta va thm

Bn c th s dng n nh mt bng d liu thng thng

140

Trong trng hp cn chnh sa bn hy nhp phi chut vo View


cn sa trong ca s Object Explorer chn Design.

Nu mun xa View bn nhp phi chut vo View cn xa trong


ca s Object Explorer chn Delete.
S dng cu lnh T-SQL v thc thi trn New Query
Ngoi cch s dng cng c trn SQL Server 2008 bn cng c th
to View bng ca s New Query vi cu lnh T-SQL, cng vi v
d trn chng ta s thc hin li theo cch ny nh.
Bc 1: Khi ng SQL Server 2008
Bc 2: Chn ti Database cn thm View
Bc 3: Nhp chn biu tng New Query trn thanh cng c

141

Bc 4: Trong mn hnh son tho cu lnh T-SQL xut hin hy


nhp vo ni dung sau y:
(Thc cht ni dng Query ny l p n cho cu hi Hy ly ra
ton b danh sch vt t tn u k vi cc thng tin ln lt l Id,
Ma_Vt, Ten_Vt, Ma_Kho, Ten_Kho, So_Luong, Don_Gia,
Thanh_Tien)
CREATE VIEW [dbo].[TonDkView]
AS
SELECT TonDk.Id,
TonDk.Ma_Kho,
TonDk.So_Luong,
TonDk.Ma_Vt,
TonDk.Don_Gia,
TonDk.Ghi_Chu,
DMVT.Ten_Vt,
DMKHO.Ten_Kho
FROM DMKHO INNER JOIN
TonDk ON DMKHO.Ma_Kho = TonDk.Ma_Kho INNER
JOIN
DMVT ON TonDk.Ma_Vt = DMVT.Ma_Vt
Trong ni dung trn chng ta thy t kho CREATE VIEW dng
to mt VIEW mi, [dbo].[TonDkView] l tn ca View, phn ni
dung sau t kha AS l cu lnh T-SQL tr li cho cu hi nh
trnh by trn.
Bc 5: Nhp chut chn nt Execute trn thanh cng c hoc nhn
phm F5 thc thi cu lnh
Kt qu cui cng cho tng t nh cch th nht, trong trng hp
mun chnh sa View bng cu lnh T-SQL bn ch cn nhp phi

142

chut vo View cn chnh sa chn Script View as/ALTER To/New


Query Editor Window.

Mt ca s Query xut hin nh hnh di y:

Nh quan st chng ta thy ni dung Query ch thay i t kha


CREATE VIEW nay i thnh ALTER VIEW, bn c th tin hnh
sa i ni dung cho View sau nhn phm F5 thc thi cu
lnh thay i.

143

3.3. Bi tp thc hnh


- To View th kho (TheKhoView) vi cc thng tin sau y:
Ma_Ct, Nh_Ct, So_Ct, Ngay_Ct, Ma_Vt, Ten_Vt, Ma_Kho,
Ten_Kho, So_Luong, Don_Gia, Thanh_Tien ly d liu t bng CT,
CTCT v cc bng danh mc lin quan.
- To View nht k chung (NhatKyChungView) vi cc thng tin
sau y: Ma_Ct, Nh_Ct, So_Ct, Ngay_Ct, Ong_Ba, Dia_Chi,
Dien_Giai, Ma_Dt, Ten_Dt, Ma_Vt, Ten_Ct, So_Luong, Don_Gia,
Thanh_Tien, Ma_Kho, Ten_Kho. D liu ly t bng CT, CTCT v
cc bng danh mc lin quan.
4. Stored Procedures (Th tc lu)
4.1. Khi nim
Trong nhng bi hc trc y khi dng New Query chng ta c
th t tn v save cc nhm cu lnh SQL vo mt file di dng
script c th s dng tr li sau ny. Tuy nhin thay v save vo
text file ta c th save vo trong SQL Server di dng Stored
Procedure. Stored Procedure l mt nhm cu lnh Transact-SQL
c compiled (bin dch) v cha trong SQL Server di mt tn
no v c x l nh mt n v (ch khng phi nhiu cu
SQL ring l).
u im Ca Stored Procedure
- Performance : Khi thc thi mt cu lnh SQL th SQL Server
phi kim tra permission xem user gi cu lnh c c php
thc hin cu lnh hay khng ng thi kim tra c php ri mi
to ra mt execute plan v thc thi. Nu c nhiu cu lnh nh vy
gi qua network c th lm gim i tc lm vic ca server. SQL
Server s lm vic hiu qu hn nu dng Stored procedure v
ngi gi ch gi mt cu lnh n v SQL Server ch kim tra mt
ln sau to ra mt execute plan v thc thi. Nu Stored
procedure c gi nhiu ln th execute plan c th c s dng
li nn s lm vic nhanh hn. Ngoi ra c php ca cc cu lnh
SQL c SQL Sever kim tra trc khi save nn n khng cn
kim li khi thc thi.

144

- Programming Framework: Mt khi stored procedure c to ra


n c th c s dng li. iu ny s lm cho vic bo tr
(maintainability) d dng hn. V d nu c mt s thay i no
v mt logic th ta ch vic thay i code bn trong Stored procedure
m thi. Nhng ng dng dng Stored procedure ny c th s
khng cn phi thay i m vn tng thch vi quy tc, rng buc
mi. Cng ging nh cc ngn ng lp trnh khc stored procedure
cho php ta a vo cc tham s v tr v cc tham s u ra ng
thi n cng c kh nng gi cc Stored procedure khc.
- Security: Gi s chng ta mun gii hn vic truy xut d liu
trc tip ca mt user no vo mt s tables, ta c th vit mt
stored procedure truy xut d liu v ch cho php user c
s dng stored procedure vit sn m thi ch khng th "ng"
n cc bng mt cch trc tip. Ngoi ra stored procedure c
th c m ha tng cng tnh bo mt.
Cc Loi Stored Procedure
Stored procedure c th c chia thnh 5 nhm nh sau:
- System Stored Prcedure: L nhng stored procedure cha trong
Master database v thng bt u bng tip u ng sp_ . Cc
stored procedure ny thuc loi built-in v ch yu dng trong vic
qun l database (administration) v security. V d bn c th kim
tra tt c cc processes ang c s dng bi user
DomainName\Administrators
bn
c
th
dng sp_who
@loginame='DomainName\Administrators' . C hng trm system
stored procedure trong SQL Server.
- Local Stored Procedure: y l loi thng dng nht. Chng
c cha trong user database v thng c vit thc hin
mt cng vic no . Thng thng ngi ta ni n stored
procedure l ni n loi ny. Chng ta s bn v cch to stored
prcedure loi ny trong phn k tip.
- Temporary Stored Procedure: L nhng stored procedure tng
t nh local stored procedure nhng ch tn ti cho n khi
connection to ra chng b ng li hoc SQL Server shutdown.
Cc stored procedure ny c to ra trn TempDB ca SQL Server

145

nn chng s b delete khi connection to ra chng b ct t hay


khi SQL Server down. Temporary stored procedure c chia lm 3
loi : local (bt u bng #), global (bt u bng ##) v stored
procedure c to ra trc tip trn TempDB. Loi local ch c
s dng bi connection to ra chng v b xa khi disconnect,
cn loi global c th c s dng bi bt k connection no.
Permission cho loi global l dnh cho mi ngi (public) v khng
th thay i. Loi stored procedure c to trc tip trn TempDB
khc vi 2 loi trn ch ta c th set permission, chng tn ti k
c sau khi connection to ra chng b ct t v ch bin mt khi
SQL Server shut down.
- Extended Stored Procedure: y l mt loi stored procedure s
dng mt chng trnh ngoi vi (external program) vn c
compiled thnh mt DLL m rng chc nng hot ng ca SQL
Server. Loi ny thng bt u bng tip u ng xp_ .V
d, xp_sendmail dng gi mail cho mt ngi no
hay xp_cmdshelldng chy mt DOS command... V d
xp_cmdshell 'dir c:\' . Nhiu loi extend stored procedure c xem
nh system stored procedure v ngc li.
- Remote Stored Procedure: Nhng stored procedure gi stored
procedure server khc.
4.2. Vit Stored Procedure
Tn v nhng thng tin v Stored Procedure khi c to ra s cha
trong SysObjects table cn phn text ca n cha trong
SysComments table. V Stored Procedure cng c xem nh mt
object nn ta cng c th dng cc lnh nh CREATE, ALTER,
DROP to mi, thay i hay xa b mt stored procedure.
C php:
CREATE PROCEDURE <Ten_Thu_Tuc>
<Danh_Sach_Tham_So>
AS
BEGIN

146

<Noi_Dung_Thu_Tuc>
END
Trong :
- <Ten_Thu_Tuc>: Tn th tc lu thng thng bt u bng tip
u ng usp_
- <Danh_Sach_Tham_So>: Danh sch cc tham s truyn vo th
tc lu
- <Noi_Dung_Thu_Tuc>: L tp hp cc cu lnh T-SQL cn thc
hin trong th tc
V d: Vit th tc lu c tn DmDtGetData, vi tham s truyn vo
l ID, trong trng hp ID bng NULL ly ton b danh sch i
tng, ngc li nu ID c truyn vo gi tr th ly ra i tng c
ID tng ng. Cc bc thc hin nh sau:
Bc 1: Khi ng SQL Server 2008
Bc 2: Chn ti Database cn thm th tc lu
Bc 3: M mt ca s New Query mi, sau nhp vo ni dung
sau y:
CREATE PROCEDURE [dbo].[DmDtGetData]
@_Id INT = NULL
AS
BEGIN
SET NOCOUNT ON;
IF @_Id IS NULL
SELECT * FROM DmDt
ELSE
SELECT * FROM DmDt
WHERE Id = @_Id
END

147

Trong ni dung trn chng ta thy:


- Sau t kha CREATE PROCEDURE l tn th tc DmDtGetData
- Tip theo @_Id l tham s truyn vo c kiu l INT v gi tr
ngm nh l NULL
- Trong phn BEGIN END l ni dung th tc, cu lnh SET
NOCOUNT ON c s dng khi khng mun m cc kt qu m
cu lnh T-SQL thc thi.
Bc 4: Nhn phm F5 hoc nhp chn nt Execute to th tc.
Sau bc ny mt th tc lu mi s c to chng ta c th tm
thy trong ca s Object Explorer nh hnh di y:

148

Chnh sa mt th tc tn ti
thc hin hy tm ti th tc cn sa trong ca s Objects
Explorer nhp phi chut v chn Modify.

Mt ca s Query xut hin, chng ta s thy pha trc tn th tc


lu t kha CREATE PROCEDURE c i thnh ALTRE
PROCEDURE. Nh vy bn c th thc hin sa i ni dung sau
hon tt nhn phm F5 Execute li ni dung thay i cho th
tc.
Gi (thc thi) mt th tc lu

149

Vic quan trng nht ca qu trnh tm hiu th tc lu l chng ta


phi bit cch s dng chng, bn c th gi mt th tc lu v xem
kt qu bng mt trong hai cch sau y:
Cch 1: S dng cng c trn SQL Server 2008, u tin bn hy
tm ti th tc lu cn gi trong ca s Object Explorer, nhp phi
chut v chn Execute Stored Procedure

Hp thoi Execute Procedure xut hin nh hnh di y:

150

Hy nhp vo gi tr cho cc tham s ct Value (nu trng


chng trnh s ly theo gi tr mc nh) sau nhp nt OK.
Chng ta s thy kt qu tr v nh hnh di y:

151

Trong trng hp ny chng ta khng in gi tr cho tham s @_Id


v vy kt qu s ly ton b danh sch trong danh mc i tng.
Cch 2: Thc thi th tc bng cu lnh T-SQL, bn m mt ca s
Query mi v nhp vo ni dung sau:
USE [QLHTK]
EXECUTE [dbo].[DmDtGetData] @_Id = 1
Trong ni dung trn cu lnh USE [QLHTK] s dng chn ti
Database QLHTK, sau t kha EXECUTE l tn th tc cn thc
hin, tip n l gn gi tr cho tham s, c th chng ta gn cho
tham s @_ID gi tr l 1. Kt qu s cho nh hnh di y:

Xa th tc lu
xa th tc lu chng ta c th s dng mt trong hai cch sau
y:

152

Cch 1: Nhp phi chut vo th tc lu cn xa chn Delete.

Hp thoi Delete Objects xut hin nhp Ok thc hin xa th


tc lu

153

Cch 2: M ca s New Query mi, nhp vo ni dung sau:


DROP PROCEDURE [dbo].[DmDtGetData]
Nhn F5 thc hin xa th tc lu
4.3. S dng bng tm
i vi mt th tc lu phc tp, kt qu cui cng ch c th c
c qua nhiu bc tnh ton th vic s dng mt cu lnh T-SQL
cho tt c cc cng vic l v cng phc tp. Tuy nhin nu
chng ta s dng cc bng chung gian (bng tm) lu kt qu
ca tng bc tnh ton sau kt hp chng li vi nhau th mi
chuyn s tr nn ht sc d dng. V d chng ta cn vit bo co
nhp xut tn vt t, vi nhng g hc cn hn ch cc phn
trc chng ta s ngh ngay n vic s dng UNION kt hp
nhiu cu lnh SELECT, u tin l tn u, tip theo l nhp, xut,
ri tnh ton ra lng tn kho. Tuy nhin vi cch ny s liu v

154

mt vt t s nm t nht 4 dng khc nhau v nh vy tt nhin


khng phi l p n ca u bi. By gi hy cng suy ngha theo
mt hng khc gi s chng ta to ra mt bng tm c y cc
ct m, tn vt t, tn u, xut, nhp v tn cui. Bc th nht
chng ta INSERT vo danh sch vt t, tip theo l s d u tng
ng vi tng vt t trong bng tm va to. Lm tng t vi cc
gi tr nhp xut v tn chng ta s c c kt qu nh yu cu
ca u bi a ra. Sau y l mt v d v cch s dng bng tm:
Vit bo co tng hp nhp kho bao gm cc thng tin sau: Ma_Vt,
Ten_Vt, Dvt, So_Luong, Don_Gia, Thanh_Tien (t tn cho th tc
lu l usp_Tong_Hop_Nhap_Kho)
Bn hy m mt ca s New Query mi v thm vo ni dung cu
lnh nh sau:
CREATE
PROCEDURE
[usp_Tong_Hop_Nhap_Kho]

[dbo].

AS
BEGIN
SET NOCOUNT ON;
-- To bng tm tn bng tm bt u bng
du #
CREATE TABLE #BaoCao
(Ma_Vt NCHAR(16),
Dvt NVARCHAR(8),
So_Luong
NUMERIC(18, 2),

Ten_Vt

NUMERIC(18,

NVARCHAR(64),
2),

Don_Gia

Thanh_Tien NUMERIC(18, 0))


-- Chn d liu vo bng tm ly t CT v
CTCT
INSERT INTO #BaoCao

155

SELECT CtCt.Ma_Vt, N'', N'',


SUM(So_Luong) AS So_Luong,
SUM(So_Luong
*
SUM(So_Luong) AS Don_Gia,

Don_Gia)

SUM(So_Luong * Don_Gia) AS ThanhTien


FROM CtCt LEFT
CtCt.Stt_Ct = Ct.Stt_Ct

OUTER

JOIN

Ct

ON

WHERE ct.Nhom_Ct = 2
GROUP BY CtCt.Ma_Vt
-- Cp nht tn v n v tnh cho vt t
hng ha
UPDATE #BaoCao SET Ten_Vt = vt.Ten_Vt, Dvt
= vt.Dvt
FROM #BaoCao AS bc LEFT OUTER JOIN DmVt
AS vt
ON bc.Ma_Vt = vt.Ma_Vt
-- Ly d liu t bng tm
SELECT * FROM #BaoCao
-- Xa bng tm
DROP TABLE #BaoCao
END
Nh vy qua v d trn chng ta thy t cch to bng ti vic s
dng cc cu lnh SELECT, INSERT, UPDATE, cho bng tm
tng t nh bng thng. Trong mt th tc lu bn c th to
nhiu bng tm s dng vo nhiu mc ch khc nhau, nhng

156

lu khi khng s dng na chng ta nn xa bng tm bng cu


lnh DROP TABLE.
Cng vi v d trn di y l mt cch vit khc m t v cch
to v s dng bng tm.
CREATE
PROCEDURE
[usp_Tong_Hop_Nhap_Kho]

[dbo].

AS
BEGIN
SET NOCOUNT ON;
-- cch th nht chng ta phi to ra
bng tm
-- sau chn d liu vo bng mt cu
lnh INSERT
-- Tuy nhin vi cch ny bng tm c to
ra ngay t
-- cu lnh SELECT kt qu bng mnh
INTO #BaoCao
SELECT CtCt.Ma_Vt,
CAST(N'' AS NVARCHAR(64)) AS Ten_Vt,
CAST(N'' AS NVARCHAR(8)) AS Dvt,
SUM(So_Luong) AS So_Luong,
SUM(So_Luong
*
SUM(So_Luong) AS Don_Gia,

Don_Gia)

SUM(So_Luong * Don_Gia) AS ThanhTien


INTO #BaoCao
FROM
CtCt
LEFT
CtCt.Stt_Ct = Ct.Stt_Ct

OUTER

JOIN

Ct

ON

WHERE ct.Nhom_Ct = 2
GROUP BY CtCt.Ma_Vt

157

-- Cc bc tip theo sau khi to bng


tm
-- tng t nh phn trc
UPDATE #BaoCao SET Ten_Vt = vt.Ten_Vt, Dvt
= vt.Dvt
FROM #BaoCao AS bc LEFT OUTER JOIN DmVt
AS vt
ON bc.Ma_Vt = vt.Ma_Vt
SELECT * FROM #BaoCao
DROP TABLE #BaoCao
END
Lu : Vi cch ny chng ta thy bng tm c to bng mnh
INTO t sau danh sch trng v trc t kha FROM. Ngay sau
INTO l tn bng tm v c bt u bng du #.
4.4. Tm hiu Cursors
Nu gii thch mt cch ngn gn th cursor tng t nh recordset
hay dataset trong cc ngn ng lp trnh. Ngha l chng ta select
mt s data vo b nh sau c th ln lt lm vic vi tng bn
ghi bng cch di chuyn ln lt qua tng bn ghi (Move Next...).
C 3 loi cursors l Transact- SQL Cursors, API Cursors v Client
Cursors. Trong Transact-SQL v API thuc loi Server Cursors
ngha l cursors c load ln v lm vic bn pha server. Trong
khun kh bi hc ny ta ch nghin cu Transact-SQL cursors.
Transact-SQL cursors c to ra trn server bng cc cu lnh
Transact-SQL v ch yu c dng trong stored procedures v
triggers. Trc ht hy xem qua mt v d v cursor:

158

Vit th tc s dng Cursor in ra ln lt danh sch khch hng,


nh cung cp trong danh mc i tng (th tc t tn l
usp_DmDtPrint).
CREATE PROCEDURE [dbo].[usp_DmDtPrint]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @_Ma_Dt NVARCHAR(40),
@_Ten_Dt NVARCHAR(20)
DECLARE DmDtCursor CURSOR FOR
SELECT Ma_Dt, Ten_Dt FROM DmDt
OPEN DmDtCursor
FETCH NEXT FROM DmDtCursor INTO @_Ma_Dt,
@_Ten_Dt
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT N'i tng: ' + RTRIM(@_Ma_Dt) +
' - ' + LTRIM(@_Ten_Dt)
FETCH NEXT FROM DmDtCursor INTO @_Ma_Dt,
@_Ten_Dt
END
CLOSE DmDtCursor
DEALLOCATE DmDtCursor
END
Trong v d trn ta s select Ma_Dt v Ten_Dt t bng DmDt ca
Database QLHTK v np vo DmDtCursor sau ln lt in tn
ca cc i tng ra mn hnh. lm vic vi mt cursor ta cn
theo cc bc sau:

159

- Dng cu lnh DECLARE CURSOR khai bo mt cursor. Khi


khai bo ta cng phi cho bit cu lnh SELECTs c thc hin
ly d liu.
DECLARE DmDtCursor CURSOR FOR
SELECT Ma_Dt, Ten_Dt FROM DmDt
- Dng cu lnh OPEN a d liu ln b nh o (memory). y
chnh l lc thc hin cu lnh SELECT vn c khai bo trn.
OPEN DmDtCursor
- Dng cu lnh FETCH ly tng hng data t record set. C th
l ta phi gi cu lnh FETCH nhiu ln. FETCH tng t nh lnh
Move trong ADO recordset ch n c th di chuyn ti lui bng
cu lnh FETCH FIRST, FETCH NEXT, FETCH PRIOR, FETCH
LAST, FETCH ABSOLUTE n, FETCH RELATIVE n nhng khc
ch l n ly data b vo trong variable (FETCH...FROM...INTO
variable_name). Thng thng ta FETCH data trc sau loop
cho ti record cui ca Cursor bng vng lp WHILE bng cch
kim tra global variable @@FETCH_STATUS (=0 ngha l thnh
cng).
FETCH NEXT
@_Ten_Dt

FROM

DmDtCursor

INTO

@_Ma_Dt,

- Khi ta di chuyn ti tng bn ghi ta c th UPDATE hay DELETE


ty theo nhu cu (trong th d ny ch dng lnh PRINT)
PRINT N'i tng: ' + RTRIM(@_Ma_Dt) + ' - '
+ LTRIM(@_Ten_Dt)
- Dng cu lnh CLOSE ng cursor. Mt s ti nguyn
(memory resource) s c gii phng nhng cursor vn cn c
khai bo v c th OPEN tr li.
CLOSE DmDtCursor
- Dng cu lnh DEALLOCATE phng thch hon ton cc ti
nguyn dnh cho cursor (k c tn ca cursor).
DEALLOCATE DmDtCursor

160

Lu : Trong v d trn trc khi dng Cursor chng ta phi khai


bo trc hai bin @_Ma_Dt v @_Ten_Dt cha cc gi tr ly
c t cursor.
4.5. Bi tp thc hnh
- Vit bo co bng k chng t bao gm cc thng tin: M Ct, S
Ct, Ngy Ct, Din gii, M t, M Vt, Tn Vt, vt, S lng, n
gi, Thnh Tin.
- Vit bo co tng hp nhp kho bao gm cc thng tin: M vt t,
Tn Vt, vt, S lng, n gi, Thnh tin (nhm theo tng vt
t).
- Vit bo co tng hp xut kho bao gm cc thng tin: M vt t,
Tn Vt, vt, S lng, n gi, Thnh tin (nhm theo tng vt
t).
- Vit bo co s chi tit vt t bao gm cc thng tin: M Ct, S
Ct, Ngy Ct, Din gii, M Vt, Tn Vt, vt, Sl Nhp, Tin nhp, Sl
xut, Tin xut, Sl tn, gi tr tn (lit k chi tit cc ln nhp xut).
- Vit bo co tng hp nhp xut tn bao gm cc thng tin:
M vt t, Tn vt t, vt, Tn u, d u, Sl Nhp, Tin nhp, Sl
Xut, Tin Xut, Tn cui, D cui (Nhm theo tng vt t).
5. Trigger
5.1. nh ngha
Trigger l mt loi Stored Procedure c bit c thc thi mt
cch t ng khi c mt s kin thay i d liu xy ra nh Update,
Insert hay Delete trong mt bng hoc View no . Trigger c
dng m bo ton vn d liu hay thc hin cc cc cng vic
no .
V d: To thm trng ModifiedAt trong bng DmDt dng lu
thng tin v thi gian cp nht cc bn ghi trong bng ny. Cng
vic cp nht c thc hin t ng bng Trigger c ni dung nh
sau:
-=============================================

161

-- Author: Hoang Anh Quang


-- Create date: 27/07/2011
-- Description: Ghi lai thoi gian cap nhat
ban nghi
-=============================================
CREATE TRIGGER [dbo].[DmDtTriggerLog]
ON [dbo].[DmDt]
AFTER INSERT, UPDATE
AS
BEGIN
UPDATE
[DmDt]
GETUTCDATE()
WHERE
inserted);

[Id]

SET
IN

[ModifiedAt]

(SELECT

[Id]

=
FROM

END
Gii thch: Trong v d trn:
+ DmDtTriggerLog: L tn Trigger
+ [dbo].[DmDt]: Tn bng cha Trigger
+ INSERT, UPDATE: Trigger c p dng trong s kin thm mi
v chnh sa
+ Sau phn BEGIN l ni dung thc thi Trigger
- Ta nn s dng trigger khi m cc bin php bo m ton vn d
liu khng th thc hin thng qua ng dng.
- Mt Trigger c th lm nhiu cng vic khc nhau v c th c
kch hot bi nhiu hn mt bin c. V d ta c th vit mt
Trigger c kch hot bi bt k bin c no nh Update, Insert
hay Delete v bn trong trigger ta s vit code gii quyt cho
tng trng hp.

162

- Trigger khng th c to ra trn System table.


- Trigger ch c th c kch hot mt cch t ng bi mt trong
cc bin c Insert, Update, Delete m khng th chy th cng
(manually) c.
- C th p dng trigger cho View.
- Khi mt Trigger c kch hot th d liu mi va c insert
hay mi va c thay i s c cha trong Inserted table cn
data mi va c delete c cha trong Deleted table. y l 2
bng tm ch cha trn b nh o (memory) v ch c gi tr bn
trong Trigger m thi (ngha l ch nhn thy v c query trong
Trigger m thi). Ta c th dng thng tin trong 2 bng ny so
snh d liu c v mi hoc kim tra xem d liu mi va thay i
c hp l khng.
- C 2 loi Triggers: INSTEAD OF v AFTER. Loi INSTEAD OF
s thc hin cc dng lnh SQL bn trong Trigger trc khi thay i
d liu. Ngc li loi AFTER s thc hin cc cu lnh bn trong
trigger sau khi thc hin thay i d liu.
5.2. To mi v sa i Trigger
Cng vi v d phn trc chng ta thc hin to Trigger ny trong
Database QLHTK, cc bc thc hin nh sau:
Bc 1: Khi ng SQL Server 2008
Bc 2: Tm ti bng cn to Trigger trong Database, nhp phi
chut vo mc Trigger chn New Trigger

163

Bc 3: Mt mn hnh New Query mi xut hin, xa i nhng


comment v cu lnh tha chng ta s c ni dng Trigger m
chng trnh to sn nh hnh di y:

164

- Sau t kha CREATE TRIGGER chng ta thay bng tn ca


Trigger: [dbo].[DmDtTriggerLog]
- Sau t kha ON chng ta thay bng tn bng cha Trigger: [dbo].
[DmDt]
- Sau t kha AFTER chng ta thay bng cc bin c sy ra khi
thc hin Trigger l INSERT, UPDATE
- Cui cng trong vng BEGIN END l ni dng cu lnh T-SQL
c thc thi khi Trigger hot ng.
Kt qu cui cng nh hnh di y:

Bc 4: Hy nhn phm F5 hoc nhp chn nt Execute trn thanh


cng c thc thi Trigger.
By gi hy xem hot ng ca Trigger m chng ta va to, hy
m d liu ca bng DmDt sau chnh sa thng tin ca mt bn

165

ghi bn s thy chng trnh t ng cp nht thi gian chnh sa


vo ct ModifiedAt, iu tng t cng sy ra khi bn thm mt
bn ghi mi vo bng ny.
Khi c nhu cu sa li ni dung Trigger va to hy nhp phi
chut vo Trigger trong ca s Object Explorer chn Modified.

Mt ca s New Query xut hin hy thay t kha CREATE


TRIGGER bng ALTER TRIGGER sau thc hin nhng thay
i cn thit v thc thi li Trigger (nhn phm F5 hoc nhp chn
nt Execute trn thanh cng c).
Lu : i Khi ta ch mun trigger thc s hot ng khi mt hay
vi column no c Update ch khng phi bt k column no.

166

Khi ta c th dng hm Update(Column_Name) kim tra xem


column no c b update hay khng.
V d: Trong bng DmDt trng Ma_Dt l trng kha xc nh
bn ghi duy nht, d liu ca trng ny cng xut hin trong bng
CT, nh vy ton vn d liu khi ngi dng sa m trong bng
DMDT cng ng thi phi sa Ma_Dt tng ng trong bng CT.
Cng vic ny c th lm th cng nhng nh th s rt kh thc
hin vi nhng Database nhiu d liu. Chng ta c th vit mt
Trigger thc hin cng vic ny mt cch t ng. Ni dung nh
sau:
CREATE TRIGGER [dbo].[DmDtTriggerUpdateMa_Dt]
ON [dbo].[DMDT]
AFTER UPDATE
AS
BEGIN
IF UPDATE(Ma_Dt)
BEGIN
DECLARE @_Ma_Dt_Old NCHAR(16),
@_Ma_Dt_New NCHAR(16)
SET @_Ma_Dt_New
INSERTED)

(SELECT

Ma_Dt

FROM

SET
DELETED)

(SELECT

Ma_Dt

FROM

@_Ma_Dt_Old

UPDATE CT SET Ma_Dt = @_Ma_Dt_New


WHERE Ma_Dt = @_Ma_Dt_Old
END
END

167

thy c kt qu bn hy th sa mt m i tng bt k
trong bng DMDT s thy s thay i tng ng trong bng CT.
5.3. Bi tp thc hnh
- Hy thm trng ModifiedAt vo tt c cc bng trong Database
QLHTK sau vit Trigger lu li thi gian cp nht vo trng
ny.
- Hy vit Trigger i m cho tt c cc danh mc.

168

You might also like