You are on page 1of 166

SQL SERVER 2008 Tc gi: Ks Hong Anh Quang

Mc lc

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 4 5 6 7 Ma_D t 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 H Ni Hi Phng Yn Bi Bc Ninh Hi Dng So_Dt 04 3640 0119 046 3423 3438 033 6534 391 02183 543 443 0240 362 552 0320 3111 411 Fax Email

- 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 1 Ma_Ct PX 1 Nhom_Ct So_Ct PX001 Ngay_Ct 31/05/11 Ma_Dt N001 Ong_Ba Dia_Chi Dien_Gi ai Xut hng ha bn i l Xut hng ha bn i l

L Vn H Ni Khng

PX

PX002

01/06/11

N001

o Th H Ni Hnh

PN

PN001

01/06/11

N002

T Thu Cng ty Loan

4 5

PX PN

1 2

PX003 PN002

01/06/11 02/06/11

N004 N005

Phan Th H Ni Anh T Th H Ty Minh Phan Th H Ni Anh

PX

PX004

05/06/11

N004

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

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 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) 5 Id, Ma_Vt, Ten_Vt, Quy_Cach,

Trong v d ny ct Tn nh cung cp c to ra t trng Ten_Dt v trng So_Dt trong bng DMDT. 9

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,

10

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 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 Don_Gia * So_Luong AS

11

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:

12

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 - Lp bng k chng t nhp xut trong thng 06 SELECT Ma_Ct, Dien_Giai FROM Ct WHERE MONTH(Ngay_Ct) = 6 Kt qu Ngay_Ct, So_Ct, Ma_Dt, Fax Email

13

Ma_Ct PX PN PX PN PX

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

So_Ct PX002 PN001 PX003 PN002 PX004

Ma_Dt N001 N002 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 Kt qu: Ngay_Ct 01/06/2011 So_Ct Dien_Giai PX003 Xut bn hng ha Ong_Ba Phan Th Anh = N004 AND Ngay_Ct =

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

14

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) Kt qu Ngay_Ct 2011-05-31 2011-06-01 2011-06-05 So_Ct PX001 PX002 PX004 Dien_Giai Ma_Dt Xut hng ha bn i N001 l Xut hng ha bn i N001 l Xut bn hng ha N004 <> N001 AND Ngay_Ct =

- 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.

15

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:

16

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'

17

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]

18

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

19

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 01/06/2011 05/06/2011 02/06/2011 So_Ct PX002 PN001 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

20

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

21

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 FROM CtCt GROUP BY Ma_Kho, Ma_Vt ORDER BY Ma_Kho, So_Luong DESC Ma_Vt, SUM(So_Luong) AS

22

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

- 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 FROM CtCt SUM(So_Luong * Don_Gia) AS

23

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

24

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 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 Doanh_So 1.057.500 1.496.000

- S dng HAVING trong mnh GROUP BY v WHERE ch lc dng d liu c th khng phi l nhm d liu.

25

- 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')

26

Kt qu: ID 1 2 3 4 Ma_Vt TP001 TP002 VT001 VT002 Ten_Vt Bnh trng Custas Bnh kem xp Bt m loi 1 Hng liu Dvt Hp Gi Kg Kg Quy_Cach Hp 20 ci Gi gram NULL NULL Ghi_Chu NULL

200 NULL NULL 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

27

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

28

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 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 CtCt WHERE CtCt.Ma_Vt * =

29

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:

30

Ngay_Ct 2011-01-06 2011-01-07 2011-01-06

So_Ct PX001 PX002 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

D H

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,

31

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

So_Luon 1

PN

01/06/11

PN001

N002

VT002

PN PN PN

02/06/11 02/06/11 02/06/11

PN002 PN002 PN002

N005 N005 N005

VT004 VT001 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 FROM Ct, CtCt, DmDt * CtCt.So_Luong) AS

32

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 PX PN PX 01/06/11 02/06/11 05/06/11 Dien_Giai Xut hng ha bn i l Xut hng ha bn i l Nhp vt t phc v sn xut Xut bn hng ha 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

33

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, MAX(Dt.Ten_Dt) AS Ten_Dt, SUM(Ct0.Don_Gia Tong_Tien * Ct0.So_Luong) AS AS Ma_Ct,

MAX(Ct.Dien_Giai) AS Dien_Giai,

FROM Ct, CtCt AS Ct0, DmDt AS Dt WHERE Ct.Stt_Ct = Ct0.Stt_Ct AND Ct.Ma_Dt = Dt.Ma_Dt

34

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 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 Hi Phng NULL So_Ct_Nx 2 1 0 0 LEFT OUTER JOIN CT ON

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.

35

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

36

LEFT Ct.Stt_Ct Kt qu: Ma_Vt VT001 VT002 VT004 VT001 VT003

OUTER

JOIN

Ct

ON

Ct0.Stt_Ct

WHERE Ct.Ma_Ct = PN

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

Dvt Kg Kg Kg Kg Kg

So_Luong 120 15 30 32 56

Don_Gia 30.000 120.000 75.000 31.000 120.000

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, Vt.Ten_Vt, Ct.Dien_Giai, 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

B lo

37

PN PN PN PN

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

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

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

H liu

Soc ngu liu B lo B

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 GROUP BY dt.Ma_Dt UNION SELECT '' AS Ma_Dt, N'Tng cng' AS Ten_Dt, '' AS Dia_Chi, COUNT(*) AS So_Ct_Nx LEFT OUTER JOIN CT ON

38

FROM CT Kt qu: Ma_Dt N001 N002 N003 N004 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. 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 Hi Phng NULL So_Ct_Nx 3 2 1 0 0

39

- <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)]

40

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>, ..................................... = =

41

<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

42

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 43

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.

44

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.

45

+ 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

46

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.

47

- Hp thoi tin trnh ci t xut hin

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

48

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.

49

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.

50

- 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

51

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

52

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

53

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.

54

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.

55

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.

56

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

57

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

58

Bc 2: Hp thoi Connect to Server xut hin

Trong mc Server name chn ti Server cn kt ni

59

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

60

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

61

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.

62

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.

63

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

64

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

65

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.

66

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.

67

Gi s nh chng ta chn Database va to Bc 2: Nhp phi chut vo Database ny chn Tasks/Back Up

68

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:

69

Nhp chut vo nt () chn ng dn mi

70

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.

71

Bc 5: Sau bc trn chng ta c kt qun mn hnh Backup Database nh hnh di y:

72

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

73

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

74

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

75

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

76

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

77

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.

78

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.

79

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.

80

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

81

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

82

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

83

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

84

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

Nhp Add chn ti Database cn Attach.

85

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

86

Nhp Ok thc hin Attach.

87

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. 88

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

89

@_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)) 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 nm: + CAST(@_Nam_Sinh AS

PRINT NNguyn qun: + RTRIM(@_Nguyen_Quan)

90

Bigint

Int Smallint Tinyint Bit Decimal

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

Lu tr (- 8 Bytes n

4 Bytes 2 Bytes 1 Byte

Numeric

Money Smallmoney Float Real

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

91

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

nChar nVarchar nText 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

92

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 year quarter month dayofyear day week weekday hour minute second yy, yyyy qq, q mm, m dy, y dd, d wk, ww dw hh mi, n ss, s Vit rt gn

93

- 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

94

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 year quarter month dayofyear day week weekday hour minute second Vit rt gn yy, yyyy qq, q mm, m dy, y dd, d wk, ww dw hh mi, n ss, s

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

95

DATEDIFF ( year , '1/1/1991', 12/31/2011) 20 - Cch nhau 20 nm DATEDIFF ( d , '8/12/1991', 12/01/1992) DATEDIFF ( wk , '2/13/1991', 3/4/2001) 447 - Cnh nhau 447 ngy 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 year quarter month dayofyear day week weekday hour minute second yy, yyyy qq, q mm, m dy, y dd, d wk, ww dw hh mi, n ss, s Vit rt gn

- number: Gi tr cn cng thm

96

- 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') DATEADD ( wk , 3, '2/13/1991') 07/31/1991 Tr i mt ngy 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)

97

- pattern: Chui cn tm v tr c t trong hai du % - expression: Chui gc cha chui k t cn tm v tr V d PRINT PATINDEX (N%Khng%, NL Minh Khng) PRINT PATINDEX (N%C%, NTon cao cp) 9 6 Kt qu

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 PRINT NL Minh + SPACE(1) + NKhng PRINT NTon cao cp: + SPACE(5) + 7 Kt qu L Minh Khng 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 ] ) - 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 Kt qu ,expression2 [ ,

98

PRINT CHARINDEX(NKhng, NL Minh Khng) PRINT CHARINDEX (NC, NTon cao cp, 7) d. STR: Chuyn kiu s thnh chui C php:

9 10

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 PRINT STR(564.123, 5, 3) PRINT STR(564.123) Kt qu ---------564.1 -------564

e. REPLACE: Thay th cc k t trong chui C php: REPLACE(string_expression, string_replacement) - string_pattern: Cc k t cn thay th - string_replacement: Cc k t mi thay th vo chui V d Kt qu string_pattern,

- string_expression: Chui cha cc k t cn thay th

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

99

PRINT REPLACE(N Tn: Minh 0912 121 211, - , N in thoi: 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: Chui cn lp - integer_expression: S ln lp cc k t V d

Tn: Minh in thoi: 0912 121 211

string_expression

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) - 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 start_expression,

100

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

101

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 ] ' +

102

[ 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 H Ni Hi Phng Hi Dng 1 3 2 % Chit khu

103

Lng Sn Khc C php 1:

6 0

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 3 2 6 WHEN Dia_Chi LIKE N'%Hi phng%' THEN WHEN Dia_Chi LIKE N'%Hi dng%' THEN WHEN Dia_Chi LIKE N'%Lng Sn%' THEN ELSE 0 END AS Chiet_Khau FROM DMDT Bng mt trong hai cch kt qu cho ra ging nhau

104

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'

105

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 106

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

107

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

108

Bc 3: T menu File chn Open/File

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

109

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.

110

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

111

+ 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

112

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 ( <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 <Ten_Khoa> PRIMARY KEY

113

- 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 1 2 3 4 5 6 7 8 Trng Id Ma_Dt Ten_Dt Dia_Chi 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.

114

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

115

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:

116

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

117

- 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.

118

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.

119

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.

120

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.

121

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

122

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.

123

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.

124

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:

125

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'

126

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 1 2 3 4 5 6 7 8 Trng Id Ma_Dt Ten_Dt Dia_Chi 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

127

2 3 4 5 6

Ma_Vt Ten_Vt Dvt Quy_Cach Ghi_Chu

Nchar(16) 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 Stt 1 2 3 4 Trng Id Ma_Kho Ten_Kho Ghi_Chu Kiu & rng Int Nchar(16) Nvarchar(96) Ntext 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 1 2 3 4 5 Trng Id 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

128

Ghi_Chu

Ntext

Thng tin ghi ch

Bng chng t Tn bng: CT Kha chnh: Stt_Ct Stt 1 2 3 4 5 6 7 8 9 10 Trng Stt_Ct Ma_Ct Nhom_Ct So_Ct Ngay_Ct Ma_Dt Ong_Ba Dia_Chi Dien_Giai Dia_Diem Kiu & rng Char(10) Char(3) Tinyint Char(10) DateTime Char(16) Nvarchar(32) Nvarchar(96) Nvarchar(128) Nvarchar(96) 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 1 2 3 Trng Stt_Ct Stt_Dong Ma_Vt Kiu & rng Char(10) Char(3) Nchar(16) 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

129

4 5 6

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 1 3 4 Ma_Dt N001 N002 N003 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 H Ni Hi Phng Yn Bi Bc Ninh Hi Dng So_Dt 04 3640 0119 046 3423 3438 033 6534 391 02183 543 443 0240 362 552 0320 3111 411 Fax Email

N004

6 7

N005 N006

Bng danh mc vt t, hng ha (DMVT)

130

Id 1 2 3 4 5 6 7 8 9

Ma_Vt TP001 TP002 VT001 VT002 VT003 TP003 TP004 VT004 VT005

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

Dvt Hp Gi Kg Kg Kg Gi Hp Kg Thng

Quy_Cach Hp 20 ci Gi 200 gram

Gi 150 gram Hp 6 ci

Bng chng t (CT) Stt Ct 1 2 3 4 5 6 Ma_C t PX PX PN PX PN PX Nhom _Ct 1 1 2 1 2 1 So_Ct PX001 PX002 PN001 PX003 PN002 PX004 Ngay_C t 31/05/11 01/06/11 01/06/11 01/06/11 02/06/11 05/06/11 Ma_D t N001 N001 N002 N004 N005 N004 Ong_Ba

Di

L Vn H Khng o Th Hnh H T Thu Loan Phan Th Anh T Th Minh Phan Th Anh

H H H

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

131

1 2 1 2 1 2 3 1 3. View

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

132

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

133

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.

134

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.

135

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.

136

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.

137

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

138

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

139

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

140

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.

141

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.

142

- 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

143

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

144

<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

145

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:

146

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

147

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:

148

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:

149

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

150

xa th tc lu chng ta c th s dng mt trong hai cch sau y: 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

151

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

152

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] 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 NVARCHAR(64), 2), Don_Gia [dbo].

NUMERIC(18,

Thanh_Tien NUMERIC(18, 0)) -- Chn d liu vo bng tm ly t CT v CTCT INSERT INTO #BaoCao

153

SELECT CtCt.Ma_Vt, N'', N'', SUM(So_Luong) AS So_Luong, SUM(So_Luong * SUM(So_Luong) AS Don_Gia, FROM CtCt LEFT CtCt.Stt_Ct = Ct.Stt_Ct OUTER Don_Gia) /

SUM(So_Luong * Don_Gia) AS ThanhTien 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

154

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] 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, INTO #BaoCao FROM CtCt LEFT CtCt.Stt_Ct = Ct.Stt_Ct GROUP BY CtCt.Ma_Vt OUTER JOIN Ct ON Don_Gia) / [dbo].

SUM(So_Luong * Don_Gia) AS ThanhTien

WHERE ct.Nhom_Ct = 2

155

-- 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:

156

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:

157

- 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

158

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: -=============================================

159

-- 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); 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. [Id] IN SET [ModifiedAt] [Id] = FROM

(SELECT

160

- 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

161

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:

162

- 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

163

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.

164

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) SET DELETED) @_Ma_Dt_Old = = (SELECT (SELECT Ma_Dt Ma_Dt FROM FROM

UPDATE CT SET Ma_Dt = @_Ma_Dt_New WHERE Ma_Dt = @_Ma_Dt_Old END END

165

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.

166

You might also like