You are on page 1of 46

I HC THI NGUYN TRNG I HC K THUT CNG NGHIP

TI LIU THC HNH H QUN TR C S D LIU

Thi Nguyn, nm 2011

THS. NGUYN TUN ANH

TI LIU THC HNH


HC PHN: H QUN TR C S D LIU M S HC PHN: S TN CH: 3

Trng B mn (K v ghi r h tn)

Trng khoa (K v ghi r h tn)

Ts. Nguyn Duy Cng

MC LC
BI 1. NGN NG NH NGHA D LIU.......................................................................4 1.1. To bng d liu............................................................................................................4 1.1.1. Cc thuc tnh lin quan n bng..........................................................................4 1.1.2. To bng bng truy vn SQL..................................................................................5 1.1.3. Sa i bng.........................................................................................................10 1.2. Ch mc (Index)...........................................................................................................10 1.3. Khung nhn (view).......................................................................................................11 BI 2. NGN NG THAO TC D LIU........................................................................13 2.1. Truy xut d liu.........................................................................................................13 2.1.1. Xc nh bng bng mnh FROM...................................................................13 2.1.2. Mnh WHERE.................................................................................................14 2.1.3. Danh sch chn trong danh sch SELECT ..........................................................16 2.1.4. Tnh ton cc gi tr trong cu lnh SELECT ......................................................18 2.1.5. T kha DISTINCT..............................................................................................18 2.1.6. To bng mi bng cu lnh SELECT INTO..................................................18 2.1.7. Sp xp kt qu truy vn bng ORDER BY.........................................................18 2.1.8. Php hp v ton t UNION................................................................................19 2.1.9. Php ni................................................................................................................21 2.1.10. To cc dng thng k d liu vi COMPUTE BY......................................23 2.1.11. Thng k d liu vi GROUP BY v HAVING................................................25 2.1.12. Truy cn con.......................................................................................................26 2.2. B sung, cp nht v xa d liu................................................................................27 2.2.1. B sung d liu.....................................................................................................27 2.2.2. Cc nht d liu....................................................................................................28 2.2.3. Xa d liu............................................................................................................29 BI 3. BO MT TRONG SQL...........................................................................................30 3.1. Cu lnh GRAN...........................................................................................................30 3.2. Cu lnh REVOKE.....................................................................................................31 BI 4. TH TC LU TR V TRIGGER......................................................................33 4.1. S dng th tc lu tr (store procedure)................................................................33 4.1.1. To cc th tc lu tr..........................................................................................33 4.1.2. Thng tin tr v t cc th tc lu tr..................................................................35 4.1.3. Cc quy tc s dng cho Store Procedure ...........................................................36 4.1.4. Xc nh tn bn trong cc th tc.......................................................................38 4.1.5. i tn cc th tc:...............................................................................................39 4.1.6. Xo th tc:...........................................................................................................39 4.2. S dng cc Trigger....................................................................................................39 4.2.1. To cc trigger......................................................................................................40 4.2.2. Cc gi tr null ngm nh v hin........................................................................41 4.2.3. Vic i tn v cc trigger....................................................................................42 4.2.4. Hin th thng tin v cc trigger...........................................................................42 4.2.5. Xo trigger............................................................................................................42 PH LC................................................................................................................................44 4.3. Cu trc v d liu bng NhanVien v bng DonVi................................................44 4.4. Mt s hm thng s dng trong SQL Server.......................................................45 4.4.1. Cc hm trn d liu kiu ngy gi......................................................................45 4.4.2. Cc hm v chui..................................................................................................46

BI 1.

NGN NG NH NGHA D LIU


S TIT: 01 TIT

Mc tiu: Ngn ng nh ngha d liu bao gm cc cu lnh cho php ngi s dng nh ngha CSDL v cc i tng trong CSDL nh cc bng, cc khung nhn, ch mc, 1.1. To bng d liu D liu bn trong mt CSDL c t chc lu tr trong cc bng. Bn trong cc bng, d liu c t chc di dng cc dng v cc ct. Mi mt dng biu din mt bng ghi duy nht v mi mt ct biu din mt trng. 1.1.1. Cc thuc tnh lin quan n bng Khi to v lm vic vi cc bng d liu, ta cn phi n cc thuc tnh khc trn bng nh: kiu d liu, cc rng buc, cc kha, cc quy tc,.. Cc thuc tnh ny c s dng nhm to ra cc rng buc ton vn trn cc ct (trng), trn bng cng nh to ra cc ton vn tham chiu gia cc bng d liu trong CSDL a) Kiu d liu Mi mt ct (trng) ca mt bng u phi thuc vo mt kiu d liu nht nh c nh ngha t trc. Mi kiu d liu quy nh cc gi tr d liu c php i vi ct . Cc h qun tr CSDL thng cung cp cc kiu d liu chun, ngoi ra cn c th cho php ngi s dng nh ngha cc kiu d liu khc da trn cc kiu d liu c. Di y l mt s kiu d liu thng s dng trong SQL: Binary Bit Char Datetime Decimal Float Image b) Cc rng buc (Constraints) Trn cc bng d liu, cc rng buc c s dng nhm cc mc ch sau: Quy nh cc gi tr d liu hay khun dng d liu c cho php chp nhn trn cc ct ca bng (rng buc Check) Int Money Nchar Ntext Nvarchar Real Smalldatetime Smallint Smallmoney Text Tinyint Varbinary Varchar

Quy nh gi tr mc nh cho cc ct (rng buc Default) To nn tnh ton vn thc th trong mt bng d liu v ton vn tham chiu cc bng d liu trong CSDL (rng buc Primary key, Unique, foreign key).

Chng ta s tm hiu chi tit hn v cc rng buc ny phn trnh by v cu lnh CREATE TABLE. 1.1.2. To bng bng truy vn SQL To cc bng l mt khau quan tng trong qu tnh thit k v ci t cc CSDL. Bn trong cc CSDL, mi bng thng c s dng nhm biu din thng tin v cc i trng trong th gii thc v/hoc biu din mi quan h gia cc i tng. c th t chc tt mt bng d liu, bn t nht cn phi xc nh c cc yu cu sau: Bng c s dng nhm mc nh g v c vai tr nh th no bn trong CSDL? Bng s bao gm nhng mt no v kiu d liu cho cc ct l g? Nhng ct no cho php chp nhn gi tr NULL. C s dng cc rng buc, cc mc nh hay khng v nu c th s dng u v nh th no? Nhng ct no s ng vai tr l kha chnh, kha ngoi, kha duy nht? Nhng dng ch mc no l cn thit v cn u a) To bng d liu: to mt bng d liu tng CSDL, bn s dng cu lnh CREATE TABLE c c php nh sau: CREATE TABLE table_name ( {colname_1 col_1_properties [constraints_1 ] [,{colname_2 col_2_properties [constraints_2 ]] ... [,{colname_N col_N_properties [constraints_N ]] [table_constraints] ) Trong : table name Tn bng cn to, tn bng phi duy nht trong mi CSDL v phi tun theo cc quy tc v nh danh.

colname_i

Tn ca ct th i trong bng. Cc ct trong mi bng phi c tn khc nhau v phi tun theo cc quy tc v nh danh. Mi mt bng phi c t nht mt ct. Cc thuc tnh ca ct th i quy nh kiu d liu ca ct v ch nh ct c cho php chp nhn gi tr NULL hay khng Cc rng buc (nu c) trn ct th i nh cc rng buc v kha, cc mc nh, cc quy nh v khun dng d liu. Cc rng buc trn bng d liu

col_i_properties

constraints_i
table_constraint

V d 1.1: Cu lnh di u thc hin vic tao bng NhanVien bao gm cc ct: MaNV, HoTen, NgaySinh, DiaChi, DienThoai: CREATE TABLE nhanvien ( manv char(10) NOT NULL, hoten char(30) NOT NULL, ngaysinh datetime NULL, diachi char(50) NULL, dienthoai char(6) NULL ) b) S dng cc rng buc trong bng d liu Rng buc Check: Rng buc Check c s dng ch nh cc gi tr hay khun dng d liu c th c chp nhn i vi mt ct. Trn mt ct c th c nhiu rng buc Check. khai bo mt rng buc Check i vi mt ct no , ta s dng c php nh sau: [CONSTRAINT constraint_name] CHECK (expression) Trong expression, l mt biu thc logic quy nh gi tr hay khun dng ca d liu c cho php. Khi , ch nhng gi tr d liu no lm cho expression nhn gi tr ng mi c chp nhn. V d 1.2: quy nh in thoi ca nhn vin phi c dng ###### (chng hn 826767), cu lnh v d c vit nh sau: CREATE TABLE nhanvien ( manv char(10) NOT NULL, hoten char(30) NOT NULL,

ngaysinh datetime NULL, diachi char(50) NULL, dienthoai char(6) NULL constraint check_dienthoai check (dienthoai LIKE '[0-9][0-9][0-9][0-9][0-9] [09]') ) Rng buc Default

Rng buc Default c s dng quy ddihj gi tr mc nh cho mt ct. Gi tr ny s t ng c gn cho ct ny khi ngi s dng b dung mt bng ghi m khng ch nh gi tr cho ct. Trn mi c ch c th c nhiu nht mt rng buc Default (tc l ch c th c ti a mt gi tr mc nh). khai bo mt gi tr mc nh cho mt ct, ta ch nh mt rng buc Default cho ct bng cch s dng c php sau: [CONSTRAINT constraint_name] DEFAULT {const_expression | nonarguments_function | NULL} V d 1.3: Cu lnh di y ch nh gi tr mc nh l khng bit cho ct DiaChi trong bng NhanVien v d 1.1. CREATE TABLE nhanvien ( manv char(10) NOT NULL, hoten char(30) NOT NULL, ngaysinh datetime NULL, diachi char(50) default 'Khng bit', dienthoai char(6) NULL ) Rng buc Primary Key

Rng buc Primary key c s dng nh ngha kha chnh ca bng. Mt rng buc Primary key m bo rng khng c cc gi t trng lp c a vo trn cc ct. Hay ni cch khc, gi tr ca kho chnh s gip cho ta xc nh c duy nht mt dng (bng ghi) trong bng d liu. Mi mt bng ch c th c duy nht mt kh chnh v bn thn kha chnh khng chp nhn gi tr NULL. Rng buc Primary key l c s cho vic m bo tnh ton vn thc th cng nh ton vn tham chiu. khai bo mt rng buc Primary key, bn s dng c php sau: [CONSTRAINT constraint_name ]

PRIMARY KEY [CLUSTERED|NONCLUSTERED] [( colname [,colname2 [...,colname16]])] Nu kha chnh ca mt bng ch l mt ct, khi bn khng cn thit phi nh danh sch cc ct (s dng rng buc mc ct). Trong trng hp kh chnh l mt tp hp t hai ct tr ln, bn phi ch nh sanh sch cc ct (s dng rng buc mc bng). V d 1.4: to bng NhanVien vi kha chnh l MaNV. CREATE TABLE nhanvien ( manv char(10) primary key, hoten char(30) NOT NULL, ngaysinh datetime NULL, diachi char(50) NULL, dienthoai char(6) NULL ) Cu lnh trn c th vit nh sau: CREATE TABLE nhanvien ( manv char(10) NOT NULL, hoten char(30) NOT NULL, ngaysinh datetime NULL, diachi char(50) NULL, dienthoai char(6) NULL constraint pk_nv primary key(manv) ) Rng buc Unique

Thay v s dng kha chnh, bn c th s dng rng buc Unique m bo tnh ton vn thc th. S dng rng buc Unique trn mt (hay nhiu) ct bt buc cc gi tr d liu trn mt (hay nhiu) ct ny khng c trng lp nhau. khai bo mt rng buc Unique, bn s dng c php lnh sau y: [CONSTRAINT constraint_name] UNIQUE [CLUSTERED | NONCLUSTERED] [colname1 [,colname2 [...,colname16]])] Rng buc Foreugn Key

Cc bng bn trong mt CSDL thng c mi quan h vi nhau. Cc mi quan h ny c xc nh da trn tnh bng nhau gia mt hay nhiu trng ca bng ny

vi mt hay nhiu trng ca bng khc. Nu mt (hay nhiu) ct no ca mt bng c gi t c xc nh t mt (hay nhiu) trng kha ca bng khc th cc ct c gi l c rng buc kha ngoi. Cc rng buc Foreign Key c s dng kt hp vi cc rng buc Primary Key v Unikey nhm m bo tnh ton vn tham chiu gia cc bng c ch nh. khai bo kha ngoi, bn s dng c php lnh nh sau: [CONSTRAINT constraint_name ] [FOREIGN KEY (colname [,colname2 [...,colname16]])] REFERENCES reference_TABLE [(ref_colname [,ref_colname2 [...,ref_colname 16]])] V d 1.5: To hai bng NhanVien(MaNV, Hoten, NgaySinh, DiaChi, DienThoai, MaDV) v DonVi(MaDV, TenDV) theo s di y:

Hnh 1.1 CREATE TABLE donvi ( madv char(2) primary key, tendv char(20) NOT NULL ) CREATE TABLE nhanvien ( manv char(10) primary key, hoten char(20) NOT NULL, ngaysinh datetime NULL, diachi char(50) default 'khong biet', dienthoai char(6) check(dienthoai LIKE '[0-9][0-9][0-9][0-9][0-9][09]'), madv char(2) foreign key(madv) references donvi(madv)

) 1.1.3. Sa i bng Sau khi to bng, bn c th tin hnh sa i cu trc hay thuc tnh ca bng nh b sng ct, b sung kha, thay i cc rng buc, c th sa i bng, bn s dng cu lnh Alter c c php nh sau: ALTER TABLE TABLE_name [ADD {col_name column_properties [column_constraints] |[[,]TABLE_constraint ] } [,{next_col_name|next_TABLE_constraint}]...] |[DROP [CONSTRAINT] constraint_name1 [, constraint_name2]...] V d 1.6: To mt rng buc cho bng DonVi trn ct MaDV quy nh m n v phi c dng hai ch s (v d 01, 02,) ALTER TABLE donvi ADD CONSTRAINT check_madv CHECK (madv LIKE [0-9][0-9]) 1.2. Ch mc (Index) Cc ch mc c s dng nhm h t vic truy cp n cc dng d liu c nhanh chng trn cc gi t ca mt hay nhiu ct. Ch mc c chia ra lm hai loi: ch mc t nhm (clustered index) v ch mc khng t nhm (nonclustered index). Mt ch mc t nhm l mt ch mc m trong th t logic ca cc kha tng t nh th t vt l ca cc dng tng ng tn ti trong bng. Mt bng ch c th c ti a mt ch t nhm. Mt ch mc khng t nhm l mt ch mc m trong th t logic ca cc kha khng nh th t vt l ca cc dng trong bng. Cc ch mc t nhm h tr vic truy cp n cc dng d liu nhanh hn nhiu so vi cc ch mc khng t nhm.

Khi ta khai bo mt kha chnh hay kha Unique trn mt hay nhiu ct no ca bng, h qun t CSDL s t ng to ch mc trn cc ct . Bn c th to thm cc ch mc khc bng cch s dng cu lnh c c php nh sau: CREATE [CLUSTERED | NONCLUSTERED] INDEX index_name ON TABLE_name(column_name [, column_name]...)

10

V d 1.7: Cu lnh di y s to mt ch mc khng t nhm trn ct MaDV ca bng NhanVien


CREATE NONCLUSTERED INDEX idx_nhanvien_madv ON nhanvien(madv)

1.3. Khung nhn (view) Mt khung nhn c th coi nh l mt bng o c ni dung c xc nh t mt truy vn. Mt truy vn l mt tp cc ch dn nhm truy xut v hin th d liu t cc bng trong CSDL. Cc truy vn c thc hin bng cch s dng cu lnh SELECT. Mt khung nhn ging nh mt bng vi mt tp cc tn ct v cc dng d liu. Tuy nhin, khung nhn khng tn ti nh l mt cu trc lu tr d liu trong CSDL. D liu bn trong khung nhn thc cht l d liu c xc nh t mt hay nhiu bng c s v do ph thuc vo cc bng c s. Cc khung nhn thng c s dng bn tng CSDL nhm cc mc ch sau: S dng khung nn tp trung trn d liu c xc nh. S dng khung nn n gin ha theo tc d liu. S dng khung nhn ty bin d liu. S dng khung nhn xut d liu. to khung nhn, bn s dng cu lnh c c php nh sau: CREATE VIEW view_name[(column_name [, column_name]...)] AS Select_STATEMENT Trong Select_STATEMENT l mt cu lnh SELECT dng truy xut d liu t mt hay nhiu bng. Khi to khung nhn cn lu mt s im sau: Tn khung nhn phi tun theo cc quy tc v nh danh phi duy nht i vi mi ngi s dng. Khng th rng buc cc mc nh, cc quy tc cho khung nhn. Khng th xy dng ch mc cho khung nhn. Trong cu lnh CREATE view khng cn thit phi ch nh tn ct. Tn ca cc ct cng nh kiu d liu ca chng s tng ng vi cc ct trong danh sch chn ca cu lnh SELECT.

11

Bn phi xc nh nh tn ct trong cu lnh CREATE view trong cc trng hp sau: o Mi ct ca khung nhn c pht sinh t mt biu thc s hc, mt hm ci sn hay mt hng. o Hai hay nhiu ct ca khung nhn c trng tn. o Bn mun thay i tn ct trong khung nhn khc vi tn ct ca bng c s. V d 1.8: Cu lnh di y s b li do tn ca ct th 3 khng xc nh c:

CREATE VIEW thongtin_nv AS SELECT manv,hoten,datediff(year,ngaysinh,getdate()),tendv FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv cu lnh trn c th thc hin c, bn phi t tn cho cc ct ca khung nhn nh sau: CREATE VIEW thongtin_nv(manv,hoten,tuoi,donvi) AS SELECT manv,hoten,datediff(year,ngaysinh,getdate()),tendv FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv

12

BI 2.

NGN NG THAO TC D LIU


S TIT: 01 TIT

Mc tiu: Ngn ng thao tc d liu cung cp cho ngi s dng kh nng tin hnh cc thao tc truy xut, b dng, cp nht v xa d liu. Ngn ng thao tc d liu bao gm cc cu lnh SELECT, INSERT, UPDATE v DETETE. 2.1. Truy xut d liu truy xut d liu t cc dng v cc ct ca mt hay nhiu bng, khung nhn, ta s dng cu lnh SELECT. Cu lnh ny c th dng thc hin php chn (tc l truy xut mt tp con cc dng trong mt hay nhiu bng), php chiu (tc l truy xut mt tp con cc ct trong mt hay nhiu bng) v php ni (tc l lin kt cc dng trong hai hay nhiu bng truy xut d liu). C php chung ca cu lnh SELECT c dng nh sau: SELECT [ ALL | DISTINCT ] SELECT_list [ INTO [ newTABLE_name ]] FROM { TABLE_name | view_name } ................ [,{TABLE_name | view_name }] [WHERE clause ] [GROUP BY clause ] [HAVING BY clause ] [ORDER BY clause ] [COMPUTE clause ] Ch : Cc thnh phn trong mt cu lnh SELECT phi c s dng theo th t c nu trn. 2.1.1. Xc nh bng bng mnh FROM Mnh FROM trong cu lnh SELECT c s dng nhm ch nh cc bng v khung nhn cn truy xut d liu. Sau mnh FROM l danh sch tn cc bng v khung nhn tham gia vo truy vn (tn ca cc bng v khung nhn c phn cch bi du phy). SELECT SELECT_list FROM {TABLE_name | view_name list}

13

n gin ha cu hi, ta c th s dng cc b danh (alias) cho cc bng hay khung nhn. B danh c gn trong mnh FROM bng cch ch nh b danh sau tn bng. V d cu lnh sau gn b danh n1 cho bng NhanVien. SELECT ten, diachi FROM nhanvien n1 2.1.2. Mnh WHERE Mnh WHERE trong cu lnh SELECT xc nh cc iu kin i vi vic truy xut d liu. Sau mnh WHERE l mt biu thc logic v ch nhng dng d liu no tha mn biu thc sau WHERE mi c hin th trong kt qu truy vn. Trong mnh WHERE thng s dng: Cc ton t so snh Gii hn (BETWEEN v NOT BETWEEN) Danh sch (IN, NOT IN) Khun dng (LIKE v NOT LIKE) Cc gi tr cha bit (is NULL v is NOT NULL) Kt hp vi cc iu kin (AND, OR) Cc ton t so snh: Ton t = > < >= <= <> !> !< ngha Bng Ln hn Nh hn Ln hn hoc bng Nh hn hoc bng Khc Khng ln hn Khng nh hn

V d 2.1: Truy vn sau y cho bit tn, a ch v in thoi ca nhng nhn vin c h s lng ln hn 2.34: SELECT ten, diachi, dienthoai FROM nhanvien WHERE hsluong>2.34 Gii hn (BETWEEN v NOT BETWEEN) T kha BETWEEN v NOT BETWEEN c s dng nhm ch nh khong gi tr tm kim i vi cu lnh SELECT. Cu lnh di y cho bit tn v a ch ca nhng nhn vin c h s lng nm trong khong 2.34 n 3.0.

14

SELECT ten, tuoi, diachi FROM nhanvien WHERE hsluong BETWEEN 2.34 AND 3.0 Danh sch (IN v NOT IN) T kha IN c s dng khi ta cn ch nh iu kin tm kim d liu cho cu lnh SELECT l mt danh sch cc gi tr. Sau IN (hoc NOT IN) c th l mt danh sch cc gi tr hoc l mt cu lnh SELECT khc. V d 2.2: hin th thng tin v cc nhn vin c h s lng 2.34, 2.67 hoc 3.0, thay v s dng cu lnh: SELECT * FROM nhanvien WHERE hsluong=2.34 OR hsluong=2.67 OR hsluong=3.0 Ta s dng cu lnh sau: SELECT * FROM nhanvien WHERE hsluong IN (2.34, 2.67, 3.0) Cc k t i din v mnh LIKE T kha LIKE (NOT LIKE) s dng trong cu lnh SELECT nhm m t khun dng ca d liu cn tm kim. Chng thng c kt hp vi cc k t i din sau y: K t i din % [] ngha Chui k t bt k gm khng hoc nhiu k t K t n bt k K t n bt k trong gii hn c ch nh (v d [a-f]) hay mt tp(v d [^abcdef]) K t n bt k khng nm trong gii hn c ch nh (v d [^a-f]) hay mt tp hp (v d [^abcdef])

[^]

V d 2.3: Cu lnh di y hin th thng tin v cc nhn vin c tn l Nam SELECT * FROM nhanvien WHERE hoten LIKE '% Nam' IS NULL v NOT IS NULL Gi t NULL c th c nhp vo mt ct cho php chp nhn gi t NULL theo mt trong ba cch sau:

15

Nu khng c d liu c a vo v khng c mc nh co ct hay kiu d liu trn ct . Ngi s dng trc tip a gi tr NULL vo cho ct . Mt ct c kiu d liu l kiu s s cha gi tr NULL nu gi tr c ch nh gy trn s. Trong mnh WHERE, ta s dng IS NULL hoc IS NOT NULL nh sau: WHERE col_name IS [NOT] NULL Cc ton t logic

Cc ton t logic s dng trong mnh WHERE bao gm AND, OR, NOT. AND v OR c s dng kt hp nhiu iu kin trong WHERE. 2.1.3. Danh sch chn trong danh sch SELECT Chn tt c cc ct trong bng: Khi mun truy xut tt c cc ct trong bng, ta s dng cu lnh SELECT c c php sau: SELECT * FROM TABLE_name
Khi s dng cu lnh ny, cc ct trong kt qu s c hin th theo th t m chng c to ra trong cu lnh CREATE TABLE.

Chn cc ct c ch nh: chn ra mt s ct no trong bng, ta s dng cu lnh SELECT c c php sau: SELECT tn_ct [,...,tn_ct_n] FROM tn_bng | khung_nhn Cc tn ct trong cu lnh phi c phn cch nhau bng du phy. Ch : Trong cu lnh SELECT, th t cu cc ct c nu ra trong cu lnh s xc nh th t ca cc ct c hin th ra trong kt qu. i tn cc ct trong cc kt qu: Khi kt qu c hin th, tiu ca cc ct mc nh s l tn ca cc ct khi n c to ra trong cu lnh CREATE TABLE. Tuy nhin, cc tiu tr nn thn thin hn, ta c th i tn cc tiu ca cc ct. lm c vic ny, ta c th s dng mt trong hai cch vit: tiu__ct = tn_ct

16

hoc tn_ct tiu__ct V d 2.4: Hai cu lnh sau s t tiu H v tn cho l hoten v a ch cho ct DiaChi khi kt qu c hin th cho ngi s dng: SELECT 'H v tn'=hoten, 'a ch '= diachi FROM nhanvien Hoc: SELECT hoten 'H v tn', diachi 'ia ch ' FROM nhanvien S dng cu trc CASE thay i d liu trong kt qu Trong cu lnh SELECT, ta c th s dng cu trc CASE thay i cch hin th kt qu ra mn hnh. V d 2.5: Cu lnh sau cho bit h tn, h s lng v xp loi lng ca nhn vin theo h s lng: SELECT 'H v tn' = ten, 'H s lng' = hsluong, 'Xp loi lng' = CASE WHEN lsluong=NULL THEN 'Khng xc nh' WHEN hsluong<=2.34 THEN 'Lng thp' WHEN hsluong<=2.67 THEN 'Lng TB' WHEN hsluong<=3.0 THEN 'Lng cao' ELSE 'Lng rt cao' END FROM Nhanvien Cc chui k t trong kt qu Ta c th thm cc chui k t vo bn trong truy vn nhm thay i cch thc trnh by d liu. V d 2.6: Cu lnh sau s thm chui k t H s lng l vo trc kt qu ct mc lng tng dng trong kt qu: SELECT 'H v tn' = hoten, 'H s lng l: ', 'H s lng' = hsluong FROM nhanvien

17

2.1.4. Tnh ton cc gi tr trong cu lnh SELECT Danh sch chn trong cu lnh SELECT c th c cc biu thc s hc. Khi kt qu ca biu thc s l mt ct trong kt qu truy vn: V d 2.7: Cu lnh sau cho bit h tn v lng ca cc nhn vin SELECT 'H v tn'=ten, 'Lng'=hsluong*210000 FROM nhanvien 2.1.5. T kha DISTINCT T kho DISTINCT c s dng trong cu lnh SELECT nhm loi b ra khi kt qu truy vn nhng dng d liu c gi tr ging nhau: V d 2.8: Hy so snh kt qu sau khi thc hin ln lt tng cu lnh SELECT sau: SELECT hsluong FROM nhanvien go SELECT DISTINCT hsluong FROM nhanvien 2.1.6. To bng mi bng cu lnh SELECT INTO Cu lnh SELECT ... INTO c tc dng to mt bng mi c cu trc v d liu c xc nh t kt qu ca truy vn. Bng mi c to ra s c s ct bng s ct c ch nh trong danh sch chn v s dng s l s dng kt qu ca truy vn V d 2.9: Cu lnh di y to mi mt bng c tn l NHANVIEN_LUU bao gm h tn v a ch ca nhng nhn vin c h s lng ln hn 2.34: SELECT hoten, diachi INTO nhanvien_luu FROM nhanvien WHERE hsluong>2.34 2.1.7. Sp xp kt qu truy vn bng ORDER BY Mnh ORDER BY c s dng nhm sp xp kt qu truy vn theo mt hay nhiu ct (ti a l 16 ct). Vic sp xp c th theo th t tng tng (ASC) hoc gim (DESC). Nu khng ch nh r th mc nh l tng. V d 2.10: Cu lnh sau s sp xp cc nhn vin theo th t gim dn ca h s lng v nu h s lng bng nhau th sp xp theo th t tng dn ca ngy sinh: SELECT hoten,ngaysinh,hsluong FROM nhanvien ORDER BY hsluong DESC, ngaysinh

18

Ta c th s dng cc s thay v s dng tn ct sau mnh ORDER BY. V d 2.11: cu lnh di y sp xp cc nhn vin theo th t tng dn ca ngy sinh: SELECT hoten,ngaysinh,hsluong FROM nhanvien ORDER BY 3 2.1.8. Php hp v ton t UNION Ton t UNION cho php ta hp cc kt qu ca hai hay nhiu truy vn thnh mt tp kt qu duy nht. C php ca php hp nh sau: Query_1 [UNION [ALL] Query_2 ] ... [UNION [ALL] Query_N ] [ORDER BY clause] [COMPUTE clause] Trong : Query_1 c dng: SELECT select_list [INTO clause] [FROM clause] [WHERE clause] [GROUP BY clause] [HAVING clause] v Query_i (i=2,..,N) c dng: SELECT select_list [FROM clause] [WHERE clause] [GROUP BY clause] [HAVING clause] V d 2.12: Gi s ta c hai bng nh sau:

19

Th php hp: SELECT A,B FROM R UNION SELECT * FROM S C kt qu nh sau:

Theo mc nh, php ton UNION s loi b nhng dng ging nhau trong kt qu. Nu ta s dng ty chn ALL th cc dng ging nhau s khng b loi b. Ta c th s dng cc du ngoc xc nh th t tnh ton trong php hp. a) Cc nguyn tc khi xy dng cu lnh UNION Khi xy dng cc cu lnh UNION, ta cn ch cc nguyn tc sau: Tt c cc danh sch chn trong cu lnh UNION phi c cng s biu thc (cc tn ct, cc biu thc s hc, cc hm gp,...) Cc ct tng ng trong tt c cc bng, hoc tp con bt k cc ct c s dng trong bn thn mi truy vn phi cng kiu d liu. Cc ct tng ng trong bn thn tng truy vn ca mt cu lnh UNION phi xut hin theo th t nh nhau. Nguyn nhn l do php hp so snh cc ct tng ct mt theo th t c cho trong mi truy vn. Khi cc kiu d liu khc nhau c kt hp vi nhau trong cu lnh UNION, chng s c chuyn sang kiu d liu cao hn (nu c th c).

20

Tiu ct trong kt qu ca php hp s l tiu ct c ch nh trong truy vn u tin. b) S dng UNION vi cc giao tc SQL khc Cc nguyn tc sau phi c tun theo khi s dng php hp vi cc cu lnh giao tc SQL khc: Truy vn u tin trong cu lnh UNION c th c INTO to mt bng t kt qu cui cng. Mnh ORDER BY v COMPUTE dng xc nh th t kt qu cui cng hoc tnh ton cc gi tr tm tt ch c cho php s dng cui ca cu lnh UNION. Chng khng c php s dng trong bt k bn thn truy vn no trong php hp. Mnh GROUP BY v HAVING ch c th c s dng trong bn thn tng truy vn. Chng khng th c s dng tc ng ln kt qu cui cng. Php ton UNION cng c th c s dng bn trong mt cu lnh INSERT. Php ton UNION khng th s dng trong cu lnh CREATE VIEW.

2.1.9. Php ni Php ni c s dng truy xut d liu t hai hay nhiu bng hoc khung nhn trong cng CSDL hoc trong cc CSDL khc nhau bi cng mt php x l. a) Php ton ni Mt cu lnh ni (join statament) thc hin cc cng vic sau y: Xc nh mt ct t mi bng. So snh cc gi tr trong nhng ct ny theo tng dng. Kt hp cc dng c nhng gi tr tho mn iu kin thnh nhng dng mi.

V d 2.13: Cu lnh di y cho bit h tn, a ch ca cc nhn vin v tn n v m mi nhn vin thc thuc: SELECT hoten, diachi, tendonvi FROM nhanvien, donvi WHERE nhanvien.madonvi = donvi.madonvi
Danh sch chn trong php ni

21

Ging nhc c cu lnh chn (selection statment), mt cu lnh ni bt u vi t kha SELECT. Cc ct c ch nh tn sau t kho SELECT l cc ct c da ra trong kt qu truy vn. Trong danh sch chn ca php ni, ta c th ch nh mt s ct bng cch ch nh tn ca ct hoc tt c cc ct ca nhng bng tham gia vo php ni bng cch s dng du sao (*). Danh sch chn khng nht thit phi bao gm cc ct ca nhng bng tham gia php ni.
Mnh FROM trong php ni

Mnh FROM ca cu lnh ni xc dnh cc bng (hay khung nhn) tham gia vo php ni. Nu ta s dng du * trong danh sch chn th th t ca cc bng lit k trong FROM s nh hng n kt qu c hin th.
Mnh WHERE trong php ni

Mnh WHERE xc nh iu kin ni gia cc bng v cc khung nhn c ch nh. N xc nh tn ca ct c s dng ni v php ton ni c s dng. b) Cc loi php ni
Php ni bng v php ni t nhin

Mt php ni bng (equijoin) l mt php ni trong gi tr ca cc ct c s dng ni c so snh vi nhau da trn tiu chun bng v tt c cc ct trong cc bng tham gia ni u c a ra trong kt qu. V d 2.14: SELECT * FROM nhanvien, donvi WHERE nhanvien.madonvi = donvi.madonvi Trong kt qu ca cu lnh trn, ct madonvi v tendonvi xut hin hai ln trong kt qu php ni v nh vy l khng cn thit. loi b iu ny, ta c th s dng php ni t nhin (natural join) bng cch loi b i cc ct trng tn vi nhau.
Php ni vi cc iu kin b sung

Trong mnh WHERE ca cu lnh ni, ta c th b sung cc iu kin tm kim khc. V d 2.15: SELECT hoten, diachi, tendonvi FROM nhanvien, donvi WHERE nhanvien.madonvi = donvi.madonvi AND Nhanvien.hsluong>=2.11 Php t ni v cc b danh

22

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

2.1.10. To cc dng thng k d liu vi COMPUTE BY Ta s dng mnh COMPUTE BY kt hp vi cc hm gp dng v mnh ORDER BY sn sinh ra cc cc bo co (report) nhm thng k cc gi tr d liu theo tng nhm. Nhng gi tr thng k ny xut hin nhl nhng dng b sung trong kt qu truy vn. Mt mnh COMPUTE BY cho php ta quan st c cc chi tit v d liu ln cc gi tr thng k. Ta c th tnh cc gi tr thng k cho cc nhm con (subgroups) v ta cng c th tnh ton nhiu hm gp trn cng mt nhm. Mnh COMPUTE BY c c php nhsau: COMPUTE row-aggregate(col_name) [,...,row_aggregate(col_name)] BY col_name [,...,col_name]

23

Cc hm gp c th s dng c vi COMPUTE BY bao gm SUM, AVG, MIN, MAX v COUNT. V d 2.18: Cu lnh di y cho bit h tn, tn n v h s lng ca nhn vin ng thi cho bit lng trung bnh ca cc nhn vin trong mi n v SELECT hoten,tendonvi,hsluong FROM nhanvien,donvi WHERE nhanvien.madonvi=donvi.madonvi ORDER BY nhanvien.madonvi COMPUTE AVG(hsluong) BY nhanvien.madonvi Khi s dng mnh COMPUTE ... BY cn tun theo cc qui tc di y: T kha DISTINCT khng cho php s dng vi cc hm gp dng Cc ct s dng trong mnh COMPUTE phi xut hin trong danh sch chn. Khng s dng SELECT INTO trong mt cu lnh SELECT c s dng COMPUTE. Nu s dng mnh COMPUTE ... BY th cng phi s dng mnh ORDER BY. Cc ct lit k trong COMPUTE BY phi ging ht hay l mt tp con ca nhng g c lit k sau ORDER BY. Chng phi c cng th t t tri qua phi, bt u vi cng mt biu thc v khng b qua bt k mt biu thc no. Chng hn nu mnh ORDER BY c dng: ORDER BY a, b, c Th mnh COMPUTE BY c dng di y l hp l: COMPUTE row_aggregate (column_name) BY a, b, c COMPUTE row_aggregate (column_name) BY a, b COMPUTE row_aggregate (column_name) BY a V cc dng di y l sai COMPUTE row_aggregate (column_name) BY b, c COMPUTE row_aggregate (column_name) BY a, c COMPUTE row_aggregate (column_name) BY c Phi s dng mt tn ct hoc mt biu thc trong mnh ORDER BY, vic sp xp (order) khng c thc hin da trn tiu ct. T kho COMPUTE c th c s dng m khng c BY v khi ORDER BY l ty chn.

24

2.1.11. Thng k d liu vi GROUP BY v HAVING Ta c th s dng cc mnh GROUP BY v HAVING thng k d liu. GROUP BY t chc d liu vo cc nhm, HAVING thit lp cc iu kin ln cc nhm trong kt qu truy vn. Nhng mnh ny thng c s dng kt hp vi nhau (HAVING c s dng khng km vi GROUP BY c th to ra nhng kt qu nhm ln). Cc hm gp tr v cc gi tr tm lc cho c bng hoc cho cc nhm trong bng. Do , chng thng c s dng vi GROUP BY. Cc hm gp c th xut hin trong mt dang sch chn hay trong mnh HAVING, nhng khng c s dng trong mnh WHERE. Ta c th s dng cc hm gp di y vi GROUP BY (Trong expression l mt tn ct). Hm gp SUM([ALL | DISTINCT] expression) AVG([ALL | DISTINCT] expression) COUNT([ALL | DISTINCT] expression) COUNT(*) MAX(expression) MIN(expression) Chc nng Tnh tng cc gi tr Tnh tng bnh ca cc gi tr S cc gi tr trong biu thc S cc dng c chn Tnh gi tr ln nht Tnh gi tr nh nht

Trong , SUM v AVG ch lm vic vi nhng gi tr kiu s. SUM, AVG, COUNT, MAX v MIN b qua cc gi tr null cn COUNT(*) th khng. V d 2.19: Cu lnh di y cho bit h s lng trung bnh ca cc nhn vin theo tng n v: SELECT donvi.madonvi,tendonvi, avg(hsluong) FROM nhanvien,donvi WHERE nhanvien.madonvi = donvi.madonvi GROUP BY donvi.madonvi,tendonvi Ch : Danh sch cc tn ct trong danh sch chn ca cu lnh SELECT v danh sch cc tn ct sau GROUP BY phi nh nhau, nu khng cu lnh s khng hp l. V d cu lnh di y l khng ng: SELECT donvi.madonvi,tendonvi, avg(hsluong) FROM nhanvien,donvi WHERE nhanvien.madonvi = donvi.madonvi GROUP BY donvi.madonvi

25

Mnh HAVING thit lp cc iu kin i vi mnh GROUP BY tng t nh cch thc mnh WHERE thit lp cc iu kin cho cu lnh SELECT. Mnh HAVING s khng c ngha nu nh khng s dng kt hp vi mnh WHERE. C mt im khc bit gia HAVING v WHERE l trong iu kin tm kim ca WHERE khng c c cc hm gp trong khi HAVING li cho php s dng cc hm gp trong iu kin tm kim ca mnh. Mnh HAVING c th tham chiu n bt k mc no trong danh sch chn v mnh HAVING c th cha ti a 128 iu kin tm kim. V d 2.20: Cu lnh di y cho bit h s l ng trung bnh ca cc nhn vin theo tng n v v ch hin th nhng n v c h s lng trung bnh ln hn 2.34 SELECT donvi.madonvi,tendonvi, avg(hsluong) FROM nhanvien,donvi WHERE nhanvien.madonvi = donvi.madonvi GROUP BY donvi.madonvi,tendonvi HAVING avg(hsluong)>2.34 2.1.12. Truy cn con Mt truy vn con l mt cu lnh select c lng vo bn trong mt cu lnh select, insert, update hay delete hoc bn trong mt truy vn con khc. Cu lnh truy vn con c th tham chiu n cng mt bng vi truy vn ngoi hoc mt bng khc. Trong giao tc SQL, mt truy vn con tr v mt ch gi tr c th c s dng ti nhng v tr m ti mt biu thc c cho php s dng. C php truy vn con Mt truy vn con c lng vo bn trong mt cu lnh select c c php nh sau: (SELECT [ALL|DISTINCT] subquery_select_list [FROM {TABLE_name|view_name} [optimizer_hints] [[,TABLE_name2|view_bame2} [optimizer_hints] [...,TABLE_name16|view_name16}[optimizer_hints]]] [WHERE clause] [GROUP BY clause] [HAVING clause]) Cu lnh select ca ty vn con lun nm trong u ngoc. N khng c cha mnh ORDER BY, compute hoc for browse. Mt truy vn con c th c lng vo bn trong mnh WHERE hay having ca mt cu lnh SELECT, INSERT hay DELETE, hoc bn trong truy vn con khc. Nu mt truy vn con tr v ch mt gi tr, n c th c s dng ti nhng v tr m mt biu thc c cho php s

26

dng. Mt truy vn con khng c php s dng bn trong mt danh sch ca mnh ORDER BY. Cc cu lnh cha truy vn con thng c mt tng s cc dng sau: (1) WHERE expression [NOT]IN (subquery) (2) WHERE expression comparison_operator [ANY|ALL](subquery) (3) WHERE [NOT]EXISTS (subquery) V d 2.21: Cu lnh sau y hin th thng tin v cc nhn vin lm vic nhng n v c s in thoi khng bt u bi s 82. SELECT * FROM nhanvien WHERE madonvi NOT IN ( SELECT madonvi FROM donvi WHERE dienthoai like '82%') 2.2. B sung, cp nht v xa d liu 2.2.1. B sung d liu

b sung d liu vo trong mt bn d liu, ta s dng cu lnh Insert. Dng n gin nht ca cu lnh ny c c php sau:
INSERT [INTO] TABLE_name VALUES(value1, value2, ...)

Trong TABLE_name l tn ca bng cn thao tc. S lng cc gi tr c ch nh phi ging s lng cc ct khi nh ngha bng v kiu d liu ca cc gi tr ny phi ph hp vi kiu d liu ca cc ct tng ng. V d 2.22: Cu lnh di y b sung thm mt nhn vin vo bng nhanvien. INSERT INTO nhanvien VALUES('NV02003','L Th Mai','23/5/72', NULL,'523312',1.92,'02') Trong trng hp ch nhp d liu cho mt s ct trong bng, ta phi ch nh danh sch cc ct cn nhp d liu ngy sau tn bng. Khi cu lnh Insert c c php nh sau: INSERT [INTO] TABLE_name(col1,col2,..., colN) VALUES(value1, value2, ...,valueN)

27

Trong trng hp ny, cc ct khng c nhp d liu s nhn gi tr mc nh (nu c) hoc nhn gi tr NULL. Nu ta khng nhp d liu cho mt ct khng c rng buc Default v cng khng cho php chp nhn gi t NULL, cu lnh s b li. V d 2.23: INSERT INTO nhanvien(manv,hoten,diachi) VALUES('NV03002',Nguyn Vn B','56 Trn Ph)
Ngoi hau dng trn, cu lnh Insert cn cho php ta nhp d liu cho mt bng bng cch ly d liu t mt bng khc. Hay ni cch khc, cu lnh Insert cn cho php chng ta sao lu d liu t bng ny sang bng khc. V d 2.24: Gi s ta c bng luong_nhanvien bao gm hai ct hoten v luong, cu lnh di y b sung d liu v bng luong_nhanvien bng cch ly d liu t bng nhn vin:

INSERT INTO luong_nhanvien SELECT hoten,hsluong*210000 FROM nhanvien 2.2.2. Cc nht d liu Cu lnh update cho php ngi s dng thay i d liu tn ti bn trong bng d liu. Cu lnh ny c c php nh sau: UPDATE updated_TABLE_name SET colname = expression [, ..., colname = expression ] [FROM TABLE_name [,..., TABLE_name]] [WHERE conditions ] V du 2.25: Cu lnh di y tng lng 0.2 cho nhng nhn vin lm vic ti n v c m n v l 04 UPDATE nhanvien SET hsluong = hsluong+0.2 WHERE madonvi ='04' Mnh form trong cu lnh update c s dng khi cn ch nh cc iu kin cp nht lin quan n cc bng. V du: gi s ta c hai bng MatHang v NhatKyBanHang nh sau:

28

Cu lnh di u s cp nht gi tr cho trng ThanhTien trong bng NhatKyBanHang theo cng thc ThanhTien = SoLuong x DonGia UPDATE nhatkybanhang SET thanhtien = soluong*mathang.dongia FROM mathang WHERE nhatkybanhang.mahang = mathang.mahang 2.2.3. Xa d liu xa cc bn ghi d liu ra khi bng d liu, ta s dng cu lnh Delete c c php nh sau: DELETE [FROM] delete_TABLE_name [FROM TABLE_name [,..., TABLE_name]] [WHERE conditions] V d 2.26: Cu lnh di y xa khi bng nhanvien nhng nhn vin lm vic ti n v c s in thoi l 848484 DELETE FROM nhanvien FROM donvi WHERE nhanvien.madonvi = donvi.madonvi AND donvi.dienthoai ='848484'

29

BI 3.

BO MT TRONG SQL
S TIT: 01 TIT

Mc tiu: S dng hai cu lnh GRANT v REVOKE trong vic cp pht v hy b quyn ca ngi s dng. 3.1. Cu lnh GRAN Cu lnh GRAN c s dng nhm cp pht qun cho ngi s dng trn cc i tng CSDL hoc qun thc thi cc cu lnh SQL. C php ca cu lnh ny c hai dng nh sau: Dng 1: Cp pht qun i vi cc cu lnh GRANT ALL | STATEMENT [,...,STATEMENTN ] TO account [,...,accountN] Dng 2: Cp pht quyn i vi cc CSDL GRANT ALL | permission [,...,permissionN] ON TABLE_name |view_name [(column1 [,...,columnN])] |ON stored_procedure TO account [,...,accountN] Trong : ALL: l t kha c s dng khi mun cp pht tt c cc qun c th cho ngi s dng. Statement: l cu lnh c s cp pht quyn cho ngi s dng. Cc cu lnh c th cp pht cho ngi s dng gm: o CREATE Database o CREATE Default o CREATE Procedure o CREATE Rule o CREATE TABLE o CREATE View o Backup Database o Backup Log

30

Account: l tn ti khon ca ngi s dng khi ng nhp vo h thng. Permission: l mt quyn cp pht cho ngi s dng trn i vi CSDL v c quy dnh nh sau: o Cc quyn c th cp pht trn mt bng hoc khung nhn: SELECT, INSERT, DELETE, v UPDATE. o Cc quyn c th cp pht trn cc ct ca bng hoc khung nhn: SELECT v UPDATE. o Quyn c th cp pht i vi th tc lu tr: EXECUTE.

V d 3.1: Cp pht quyn thc thi cu lnh CREATE TABLE v CREATE view cho ti khon c tn l db_user: Gran CREATE TABLE, CREATE view To db_user Cp pht cho cc ti khon c tn l db_user1 v db_user2 quyn c xem v cp nht d liu trn cc ct hoten, diachi, dienthoai v hsluong ca bng nhanvien: Gran select, update On nhanvien(hoten, diachi, dienthoai, hsluong) To db_user1, db_user2 3.2. Cu lnh REVOKE Cu lnh Revoke c s dng hy b quyn c cp pht cho ngi s dng trn cc i tng CSDL hoc cu lnh SQL. Cu lnh Revoke cng c hai dng nh sau: Dng 1: Hy b quyn i vi cu lnh REVOKE ALL | STATEMENT [,...,STATEMENTN] FROM account [,...,accountN] Dng 2: Hy b qun i vi i tng CSDL REVOKE ALL | permission [,...,permissionN]} ON TABLE_name | view_name [(column [,...,columnN])] | stored_procedure FROM account [,...,accountN ] V d 3.2: Hy b quyn xem v cp nht d liu trn ct hsluong ca bng NhanVien i vi ti khon c tn l db_user1. REVOKE SELECT, UPDATE ON NhanVien(hsluong)

31

FROM db_user1 Hy b tt c cc quyn cp pht cho ti khon c tn l db_user. REVOKE ALL FROM db_user

32

BI 4.

TH TC LU TR V TRIGGER
S TIT: 01 TIT

Mc tiu: Gii thiu th tc lu tr, hm v Trigger. y l nhng i tng CSDL c s dng nhm tng hiu nng khi s dng CSDL. 4.1. S dng th tc lu tr (store procedure) Cc th tc lu tr l mt trong nhng i tng c s d liu. C th xem chng tng t nh nhng th tc trong cc ngn ng lp trnh. Mi mt th tc lu tr c th c cc kh nng sau: Nhn cc tham s u vo, thc thi cc cu lnh bn trong th tc v tr v cc gi tr. Bn trong mi th tc c th cha cc cu lnh nhm thc hin cc thao tc trn c s d liu (k c vic gi n cc th tc lu tr khc) Tr v mt gi tr trng thi thng qua c th xc nh vic thc thi th tc l thnh cng hay b li.

Vic s dng cc th tc lu tr bn trong c s d liu s mang li nhng li ch sau: Th tc lu tr cho php module ho cng vic, to iu kin thun li cho vic thc hin cc thao tc trn d liu. Th tc lu tr c phn tch, ti u v bin dch khi to ra nn vic thc thi chng nhanh hn nhiu so vi vic s dng mt tp cc cu lnh giao tc SQL theo nhng cch thng thng. Th tc lu tr cho php chng ta thc hin cng mt yu cu bng mt cu lnh n gin thay v phi s dng nhiu dng lnh SQL. iu ny s lm gim thiu s lu thng trn mng. Thay v cp pht quyn trc tip cho ngi s dng trn cc cu lnh SQL, ta c th cp pht quyn cho ngi s dng thng qua cc th tc lu tr, nh tng kh nng bo mt i vi h thng.

4.1.1. To cc th tc lu tr to mt sp, ta s dng cu lnh CREATE PROCEDURE c c php nh sau: CREATE PROCEDURE procedure_name [;number]

33

[(parameter1 [,parameter2]...[parameter255])] AS sql_STATEMENTs V d 4.1: CREATE PROC sp_list @bten char(20) AS SELECT hoten, ngaysinh, diachi FROM nhanvien WHERE hoten= @bten Ch : Nu khi gi th tc, chng ta truyn tham s cho th tc di dng: @tham_s = gi_tr Th th t cc tham s khng cn phi tun theo th t nh khi to th tc bng cu lnh CREATE PROCEDURE. Tuy nhin, nu nh c mt tham s c truyn gi tr theo cch trn th tt c cc tham s cn li cng phi c truyn gi tr theo cch . Ta c th gn mt gi tr mc nh cho tham s trong cu lnh CREATE PROCEDURE. Gi tr ny, c th l hng bt k, s c ly lm tham s ca th tc khi ngi s dng khng cung cp gi tr cho tham s khi gi th tc. V d 4.2: CREATE PROC sp_list;2 @bten char(20)=Nguyen Van A AS SELECT * FROM nhanvien WHERE hoten = @bten Vi th tc trn, nu ta gi msp_list;2 m khng c tham s th th tc s ly tham s mc nh l Nguyn Vn A cho @bten. Gi tr mc nh c th NULL. Trong trng hp ny, nu ngi s dng khng cung cp tham s, SQL Server s thi hnh th tc theo cc tham s khc. V d 4.3: Vi cu lnh CREATE PROC sp_list;3 @bten char(20)=NULL,@bluong float AS SELECT * FROM nhanvien WHERE hoten=@bten AND hsluong=@bluong Ta th gi th tc trn nh sau: msp_list;3 @btuoi=23 m khng b li.

34

Mc nh c th bao gm cc k t i din (%, _, [], [^] ) nu th tc s dng tham s vi t kha LIKE. V d 4.4: CREATE PROC sp_list;4 @bten char(20) =Trn% AS SELECT * FROM nhanvien WHERE hoten LIKE @bten 4.1.2. Thng tin tr v t cc th tc lu tr Cc gi tr trng thi tr v: Cc th tc c th tr v mt gi tr nguyn c gi l mt trng thi tr v. Gi tr ny ch ra cho bit th tc c thc hin thnh cng hay gp li v nguyn nhn ca li (SQL Server nh ngha sn mt tp cc gi tr tr v, cc gi tr ny nm trong khong [-99;0]; trong gi tr tr v bng 0 tc l vic thc hin th tc thnh cng, cc gi tr cn li cho bit nguyn do khi b li). Gi tr tr v do ngi s dng nh ngha Ngi s dng c th nh ngha cc gi tr tr v ca mnh trong cc th tc lu tr bng cch b sung mt tham s vo cu lnh RETURN. Tt c cc s nguyn ngoi tr cc gi tr dnh ring cho h thng u c th c s dng. V d 4.5: CREATE PROC sp_exam @bten char(20) AS IF EXISTS (SELECT * FROM nhanvien WHERE hoten = @bten) RETURN 1 ELSE RETURN 2 Cc tham s tr v Khi c hai cu lnh CREATE PROCEDURE v EXECUTE cha mc chn OUTPUT cho tn mt tham s, th tc c th s dng mt bin tr v tr ca tham s n ngi gi. Bng vic s dng t kho OUTPUT, bt c s thay i no n cng vn cn gi li sau khi th tc c thc hin, v cc bin c th c s dng trong cc cu lnh SQL b sung sau trong tp lnh hay th tc c gi. Nu t kho OUTPUT khng c s dng, vic thay i n tham s s khng c gi li sau khi kt thc thc hin th tc. Ngoi ra, ta cn c th dng RETURN tr v gi tr.

35

Mt th tc lu tr c th s dng bt k hoc tt c kh nng sau tr v: Mt hoc nhiu tp cc gi tr. Mt gi tr tr v r rng (s dng cu lnh RETURN). Mt tham s OUTPUT.

Nu chng ta ch nh OUTPUT khi thc hin mt th tc nhng tham s tng ng khng c nh ngha vi OUTPUT khi to th tc th s b li. Tuy nhin nu ta nh ngha OUTPUT cho mt tham s trong th tc nhng khng ch nh OUTPUT khi thc hin th vn khng b li (gi tr tham s khi s khng c tr v). V d 4.6: CREATE PROC Chia @sobichia real,@sochia real, @kqua real OUTPUT AS IF (@sochia =0) Print Division by zero ELSE SELECT @kqua = @sobichia / @sochia Khi nu ta thc hin nh sau: DECLARE @ketqua real EXEC Chia 100, 2, @ketqua OUT SELECT @ketqua S cho kt qu l: ---------------------50.0 Cn nu thc hin DECLARE @ketqua real EXEC Chia 100, 2, @ketqua SELECT @ketqua S cho kt qu l: ---------------------(null) 4.1.3. Cc quy tc s dng cho Store Procedure Sau y l mt s quy tc cn lu khi to cc th tc lu tr

36

Cu lnh CREATE PROCEDURE khng th kt hp vi cc cu lnh SQL khc trong mt khi lnh n. Bn thn nh ngha CREATE PROCEDURE c th bao gm bt k s lng cng nh cu lnh SQL no ngoi tr nhng cu lnh sau:

37

CREATE VIEW CREATE DEFAULT CREATE RULE -

CREATE TRIGGER CREATE PROCEDURE

Cc i tng CSDL khc c th c to bn trong mt th tc lu tr. Ta c th tham chiu mt i tng c to trong cng th tc min l n c to trc khi tham chiu. Bn trong mt th tc, ta khng th to mt i tng, xo n v sau to mt i tng mi vi cng tn. Ta c th tham chiu cc bng tm thi bn trong mt th tc. Nu ta thc thi mt th tc m gi n th tc khc, th tc c gi c th truy cp n mi i tng ngoi tr cc bng tm thi c to bi th tc u tin. Nu ta to mt bng tm thi ring (private temporary TABLE) bn trong mt th tc, bng tm thi ch tn ti cho nhng mc ch ca th tc ; n s mt i khi thot ra khi th tc. S tham s ti a ca mt th tc l 255. S bin cc b v ton cc trong mt th tc ch b gii hn bi kh nng b nh. Cc th tc tm thi cc b (private) v ton cc (public), tng t nh cc bng tm thi, c th c to vi du # v ## ng trc tn th tc. # biu din th tc tm thi cc b cn ## biu din th tc tm thi ton cc.

4.1.4. Xc nh tn bn trong cc th tc Bn trong mt th tc, tn cc i tng c s dng vi cu lnh ALTER TABLE, CREATE TABLE, DROP TABLE, TRUNCATE TABLE, CREATE INDEX, DROP INDEX, UPDATE STATISTICS v DBCC phi c xc nh vi tn ca ngi s hu i tng (object owners name) nu nhnhng ngi dng (user) khc s dng th tc. V d, ngi dng Mary, l s hu ch ca bng marytab, phi ch nh tn ca bng ca mnh khi n c s dng vi mt trong nhng cu lnh ny nu c ta mun nhng user khc c th thc hin th tc m trong bng c s dng. Quy tc ny l cn thit v tn i tng c phn tch khi cc th tc c chy. Nu marytab khng c ch nh v user John tm cch thc hin th tc, SQL s tm bng marytab do John s hu. V d di y l mt cch dng ng, n ch ra cho SQL Server tm bng marytab do Mary s hu: CREATE PROC p1

38

AS CREATE INDEX marytab_ind ON mary.marytab(col1) 4.1.5. i tn cc th tc: S dng th tc: sp_rename old_name, new_name Ta ch c th i tn nhng th tc m ta s hu. Ngi s hu CSDL c th thay i tn ca bt k th tc no ca ngi s dng. Th tc c i tn phi nm trong CSDL hin thi. Ta phi xo v to li mt th tc nu ta thay i tn ca mt i tng c tham chiu bi th tc . c c bo co v nhng i tng c tham chiu bi mt th tc, ta s dng th tc h thng: sp_depends. xem ni dung ca nh ngha mt th tc, ta s dng th tc h thng: sp_helptext. 4.1.6. Xo th tc: xo mt th tc, ta s dng cu lnh: DROP PROCEDURE proc_name 4.2. S dng cc Trigger Mt trigger l mt dng c bit ca th tc lu tr v n c thc hin t ng khi ngi dng p dng cu lnh sa i d liu ln mt bng c ch nh. Cc trigger thng c s dng cho vic p buc cc quy tc lm vic v ton vn d liu. Tnh ton vn tham chiu c th c nh ngha bng cch s dng rng buc FOREIGN KEY vi cu lnh CREATE TABLE. Nu cc rng buc tn ti trong bng c s tc ng ca trigger, n c kim tra trc vic thc hin trigger. Nu cc rng buc b vi phm, trigger s khng thc thi. Cc trigger c s dng trong nhng cch sau: Cc trigger c th thay i ng lot (cascade change) cc bng c lin h trong mt CSDL. Cc trigger c th khng cho php hoc roll back nhng thay i vi phm tnh ton vn tham chiu, hy b giao tc sa i d liu. Cc trigger c th p t cc gii hn phc tp hn nhng gii hn c nh ngha bng rng buc CHECK. Khc vi rng buc CHECK, cc trigger c th tham chiu n cc ct trong cc bng khc.

39

Cc trigger cn c th tm s khc bit gia cc trng thi ca mt bng trc v sau khi sa i d liu v ly ra nhng tc ng da trn s khc bit .

4.2.1. To cc trigger Mt trigger l mt i tng CSDL. Ta to mt trigger bng vic ch nh bng hin hnh v cu lnh sa i d liu kch hot trigger. Sau ta xc nh cc cng vic m trigger lm. Mt bng c th c ti a 3 loi trigger: mt trigger cp nht (UPDATE trigger), mt trigger chn (INSERT trigger) v mt trigger xa (delete trigger). Tuy nhin, mi trigger c th thc hin nhiu hm v gi n 16 th tc. Mi trigger ch c th p dng cho mt bng. Tuy nhin, mt trigger n c th p dng cho c 3 cng vic (UPDATE, INSERT v DELETE). Ta khng th to mt trigger trn mt khung nhn hay mt bng tm thi mc d cc trigger c th tham chiu cc khung nhn hay cc bng tm thi. Cu lnh TRUNCATE TABLE mc d ging cu lnh DELETE khi khng c mnh WHERE nhng n khng th kch hot mt trigger. to mi mt trigger, ta s dng cu lnh c c php nh sau: CREATE TRIGGER trigger_name ON TABLE_name FOR {INSERT, UPDATE, DELETE} AS sql_STATEMENTs Hoc s dng mnh IF UPDATE: CREATE TRIGGER trigger_name ON TABLE_name FOR {INSERT, UPDATE} AS IF UPDATE (column_name) [{AND | OR } UPDATE (column_name)...] sql_STATEMENTs V d 4.7: Nu chng ta mun sau khi ta cp nht d liu cho bng nhanvien, SQL Server s hin th ni dung ca bng xem th ta to mt trigger nh sau: CREATE TRIGGER tgr_check ON NhanVien FOR INSERT, UPDATE AS PRINT '*** Ket qua sau khi cap nhat ***' SELECT * FROM nhanvien

40

4.2.2. Cc gi tr null ngm nh v hin Mnh IF UPDATE(tn_ct) l ng cho mt cu lnh INSERT khi m ct c gn mt gi tr trong danh sch chn hay trong mnh VALUES. Mt NULL hin (explicit) hay mt mc nh gn mt gi tr cho mt ct v v th kch hot trigger. Vi mt NULL ngm nh, nu gi tr khng c xc nh bi cu hi hoc bi mc nh c gn, trigger trn ct khng c kch hot. V d 4.8: CREATE TABLE vidu(col1 int NULL,col2 int NOT NULL) GO CREATE TRIGGER tgr_vidu ON vidu FOR INSERT AS IF UPDATE(col1) AND UPDATE(col2) Print Firing GO CREATE DEFAULT col2_default AS 99 /* IF UPDATE l ng cho c hai ct, trigger c kch hot */ INSERT vidu(col1,col2) VALUES(1, 2) /* IF UPDATE l ng cho c hai ct, trigger c kch hot */ INSERT vidu VALUES(1, 2) /* NULL hin: IF UPDATE l ng cho c hai ct, trigger c kch hot */ INSERT vidu VALUES(null, 2) /* Khng c mc nh trn ct col1, IF UPDATE khng ng cho c hai ct, trigger khng c kch hot */ INSERT vidu(col2) VALUES(2) /* Khng c mc nh trn ct col2, IF UPDATE khng ng cho c hai ct, trigger khng c kch hot */ INSERT vidu(col1) VALUES(2) Kt qu tng t c sn sinh vi vic s dng ch mnh IF UPDATE(col1) to mt trigger khng cho php vic chn cc gi tr null ngm nh, ta s dng:

41

IF UPDATE(col2) OR UPDATE(col2) Cu lnh SQL trong trigger c th sau kim tra xem col1 l NULL hay khng. 4.2.3. Vic i tn v cc trigger Nu mt bng c tham chiu bi mt trigger b i tn, ta phi xo trigger i v to li n ph hp vic tham chiu ca n n bng. Th tc sp_depends c chc nng lit k tt c cc trigger tham chiu n i tng (chng hn bng hay khung nhn) hoc tt c cc bng hay khung nhn m trigger tc ng. V d sau y lit k cc i tng c tham chiu bi trigger. tgr_check: sp_depends tgr_check 4.2.4. Hin th thng tin v cc trigger Do cc trigger l cc i tng CSDL nn chng c lit k trong bng h thng sysobjects. Ct type trong sysobjects xc nh cc trigger vi ch vit tt TR. S thc thi cc trigger c lu tr trong bng sysprocedures. Truy vn di y tm cc trigger trong mt CSDL: SELECT * FROM sysobjects WHERE type=TR hin th thng tin v mt trigger ta thc hin th tc: sp_help trigger_name Cu lnh CREATE TRIGGER cho mi trigger c lu tr trong bng h thng syscomments. Ta c th hin th li nh ngha trigger bng cch s dng th tc sp_helptext. V d 4.9: thc hin sp_helptext tgr_check ta c kt qu nh sau: text -------------CREATE trigger tgr_check on nhanvien for INSERT, UPDATE as print '***** Ket qua sau khi cap nhat *****' select * from nhanvien 4.2.5. Xo trigger Ta c th xo mt trigger bng cch xo n hoc xo bng trigger. Khi mt bng c xa, nhng trigger no c lin quan vi n cng ng thi b xa. DROP

42

TRIGGER mc nh cho php i vi ngi s dng bng trigger v khng th chuyn cho ngi khc. Ta c th xa mt trigger bng cch s dng cu lnh DROP TRIGGER

43

PH LC
Trong phn ny, chng ti gii thiu cu trc v d liu ca cc bng c s dng trong cc v d. Sau gii thiu mt s hm thng s dng trong SQL Server gip cc bn tham kho trong qu trnh thc hnh. 4.3. Cu trc v d liu bng NhanVien v bng DonVi

Bng nhn vin:


MANV HOTEN NGAYSINH DIACHI DIENTHOAI HSLUONG MADV

NV01001 NV02001 NV02002 NV03001 NV03002 NV05001

Nguyn Vn A Nguyn Vn B Nguyn Vn C Nguyn Vn D Nguyn Vn E Nguyn Vn F

05/05/1980 15/11/19 81 24/12/19 83 16/09/19 81 03/08/19 78 14/01/19 75

ng H, TN i T, TN Sc Sn, HN nh Ha, TN Ph Bnh, TN Ph Bnh, TN

3947532 3947095 3947551 3947119 3947234 3947444

2.34 2.34 3.0 2.67 2.34 2.67

01 02 02 03 03 05

Bng n v:

44

4.4. Mt s hm thng s dng trong SQL Server 4.4.1. Cc hm trn d liu kiu ngy gi a) Hm DATEADD C php: DATEADD(datepart, number, date) Chc nng: Hm tr v mt gi tr kiu DateTime bng cch cng thm mt khong gi tr l number vo ngy date c ch nh. DatePart: tham s ch nh thnh phn s c cng i vi gi tr Date bao gm: DatePart year quarter month dayofyear week hour minute second millisecond b) Hm DATEDIFF C php: DATEDIFF(DatePart, StartDate, EndDate) Chc nng: Hm tr v khong thi gian gia hai gi t kiu ny c ch nh ty thuc vo tham s DatePart. V d: hm DatePart(year,5/20/2001) cho kt qu l 25. c) Hm DatePart C php: DatePart(datepart, date) Chc nng: Hm tr v mt s nguyn c trch ra t thnh phn (c ch nh bi tham s DatePart) trong gi tr kiu ngy c ch nh V d: hm DatePart(year,5/20/1976) cho kt qu l 1976 d) Hm GetDate C php:GetDate() Chc nng:Hm tr v ngy hin ti e) Hm Day, Month, Year C php:Day(date), Month(date), year(date) Vit tt yy,yyyy qq,q mm,m dy,d wk, ww hh mi,n ss,s ms

45

Chc nng: Hm tr v gi tr ngy (tng ng ngy, thng, nm) ca gi tr kiu ngy c ch nh. 4.4.2. Cc hm v chui a) Hm Left C php: Left(string, n) Chc nng: Hm trch ra t chui string n k t t bn tri b) Hm Right C php: Right(string, n) Chc nng: Hm trch t chui string n k t t bn phi c) Hm SubString C php: SubString(string, m, n) Chc nng: Hm trch ra t chui string n k t tnh t k t th m d) Hm LTrim, RTrim C php: LTrim(string, n), RTrim(string, n) Chc nng: Hm ct b cc khong trng tha bn tri/phi chui string e) Hm Len C php: Len(string) Chc nng: Hm tr v di ca chui string

46

You might also like