Professional Documents
Culture Documents
Giao Trinh SQL
Giao Trinh SQL
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
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
5. Trigger..............................................................................163
5.1. nh ngha........................................................................163
5.2. To mi v sa i Trigger.............................................165
5.3. Bi tp thc hnh............................................................170
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
N004
N005
N006
Dia_Chi
So_Dt
H Ni
H Ni
Hi
Phng
04 3640 0119
046 3423 3438
Yn Bi
Bc
Ninh
Hi
Dng
Fax
- 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)
M kho
KTP
KTP
S lng
120.000
23.500
n gi
120,00
45,00
Thnh tin
14.400.000
1.075.500
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
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
Fax
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
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
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
<>
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
17
18
Ten_Dt
So_Dt
Cty C phn CB thc phm min bc 046
3423
(N002)
3438
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)
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
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
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
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
23
Kt qu:
Ma_Dt
N001
N002
N004
N005
So_Ct_Nx
1
1
2
1
So_Luong
15
30
44
45
56
152
308
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
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
SUM(So_Luong
Don_Gia)
AS
FROM CtCt
25
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
26
Ma_Vt
TP001
Doanh_So
24.066.500
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
27
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
So_Ct_Nx
2
1
29
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
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
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
34
So_Luon
1
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
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
35
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
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
37
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
Ct.Ngay_Ct,
Ct.Dien_Giai,
Vt.Ten_Vt,
Vt.Dvt,
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
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
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
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
46
47
48
49
- Ch my tnh thc hin tin trnh, cui cng nhp chn Exit
hon tt.
50
51
52
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
58
59
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
nm:
CAST(@_Nam_Sinh
AS
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
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
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
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
Kt qu
96
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
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
98
Kt qu
07/31/1991 Tr i mt
ngy
DATEADD ( wk , 3, '2/13/1991')
99
Kt qu
Kt qu
,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
Kt qu
PRINT STR(564.123, 5, 3)
---------564.1
PRINT STR(564.123)
-------564
string_pattern,
Kt qu
101
Tn: Minh in
thoi: 0912 121 211
string_expression
- string_expression: Chui cn lp
- integer_expression: S ln lp cc k t
V d
Kt qu
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
'
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
DATEDIFF(year, @_Ngay_Sinh,
GETDATE()) >
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
109
110
111
112
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
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
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
116
117
Sau khi thit lp xong trng kha chnh s c biu tng nh hnh
di di y:
118
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
121
122
123
124
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
126
127
128
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
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
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
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
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
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
132
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
Hp
Kg
Thng
Quy_Cach
Hp 20 ci
Gi
200
gram
Gi
150
gram
Hp 6 ci
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
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
136
Kt qu:
137
138
139
140
141
142
143
144
145
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
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.
149
150
151
Xa th tc lu
xa th tc lu chng ta c th s dng mt trong hai cch sau
y:
152
153
154
[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
155
Don_Gia)
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
[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)
OUTER
JOIN
Ct
ON
WHERE ct.Nhom_Ct = 2
GROUP BY CtCt.Ma_Vt
157
158
159
FROM
DmDtCursor
INTO
@_Ma_Dt,
160
161
[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
163
164
165
166
(SELECT
Ma_Dt
FROM
SET
DELETED)
(SELECT
Ma_Dt
FROM
@_Ma_Dt_Old
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