Giao trinh SQL(DHHUE)

download Giao trinh SQL(DHHUE)

If you can't read please download the document

description

 

Transcript of Giao trinh SQL(DHHUE)

  • 1. Giao trnh thc hanh SQL
  • 2. Trn Nguyn Phong Chng 1: NGN NG NH NGHA D LIU Binary Int Smallint Bit Money Smallmoney Char Nchar Text Datetime Ntext Tinyint Decimal Nvarchar Varbinary Float Real Varchar Image Smalldatetime
  • 3. Giao trnh thc hanh SQL 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] ) - table_name: - colname_i:
  • 4. Trn Nguyn Phong - col_i_properties: - constraints_i: - table_constraint: 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 constraint_name] CHECK (expression)CREATE TABLE nhanvien(
  • 5. Giao trnh thc hanh SQLmanv char(10) not null,hoten char(30) not null,ngaysinh datetime null,diachi char(50) null,dienthoai char(6) null constraint check_dienthoai check (dienthoai like [0-9][0-9][0-9] [0-9][0-9] [0-9])) [CONSTRAINT constraint_name] DEFAULT {const_expression nonarguments_function NULL} 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 )
  • 6. Trn Nguyn Phong [CONSTRAINT constraint_name ] PRIMARY KEY [CLUSTERED|NONCLUSTERED] [( colname [,colname2 [...,colname16]])]CREATE TABLE nhanvien( manv char(10) primary key, hoten char(30) not null, ngaysinh datetime null, diachi char(50) null, dienthoai char(6) null)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))
  • 7. Giao trnh thc hanh SQL [CONSTRAINT constraint_name] UNIQUE [CLUSTERED | NONCLUSTERED] [colname1 [,colname2 [...,colname16]])] [CONSTRAINT constraint_name ] [FOREIGN KEY (colname [,colname2 [...,colname16]])] REFERENCES reference_table [(ref_colname [,ref_colname2 [...,ref_colname 16]])] CREATE TABLE donvi(
  • 8. Trn Nguyn Phong madv char(2) primary key, tendv char(20) not null)CREATE TABLE nhanvien( manv char(10) primary key, hoten char(20) not null, ngaysinh datetime null, diachi char(50) default khong biet, dienthoai char(6) check(dienthoai like [0-9][0-9][0-9] [0-9][0-9][0-9]), madv char(2) foreign key(madv) references donvi(madv)) 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]...] ALTER TABLE donvi ADD CONSTRAINT check_madv CHECK (madv LIKE [0-9][0-9])
  • 9. Giao trnh thc hanh SQL CREATE [CLUSTEREDNONCLUSTERED] INDEX index_name ON table_name(column_name [, column_name]...) CREATE NONCLUSTERED INDEX idx_nhanvien_madv ON nhanvien(madv)
  • 10. Trn Nguyn Phong CREATE VIEW view_name[(column_name [, column_name]...)] AS select_statement CREATE VIEW thongtin_nv AS SELECT manv,hoten,datediff(year,ngaysinh,getdate()),tendv FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv CREATE VIEW thongtin_nv(manv,hoten,tuoi,donvi)
  • 11. Giao trnh thc hanh SQLAS SELECT manv,hoten,datediff(year,ngaysinh,getdate()),tendv FROM nhanvien,donvi WHERE nhanvien.madv=donvi.madv
  • 12. Trn Nguyn Phong Chng 2: NGN NG THAO TAC 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 ltruy xut mt tp con cc dng trong mt hay nhiu bng), php chiu (tc l truyxut mt tp con cc ct trong mt hay nhiu bng) v php ni (tc l lin kt ccdng 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 tc nu trn.1.1 Xc nh bng bng mnh FROM Mnh FROM trong cu lnh SELECT c s dng nhm ch nh cc bngv khung nhn cn truy xut d liu. Sau mnh FROM l danh sch tn cc bngv khung nhn tham gia vo truy vn (tn ca cc bng v khung nhn c phn cchnhau bi du phy). SELECT select_list FROM {table_nameview_name list}
  • 13. Giao trnh thc hanh SQL n gin ho cu hi, ta c th s dng cc b danh (alias) cho cc bng haykhung nhn. B danh c gn trong mnh FROM bng cch ch nh b danh sautn bng. V d cu lnh sau gn b danh n1 cho bng nhanvien. SELECT ten, diachi FROM nhanvien n11.2 Mnh WHERE Mnh WHERE trong cu lnh SELECT xc nh cc iu kin i vi vic truyxut d liu. Sau mnh WHERE l mt biu thc logic v ch nhng dng d liuno tho mn biu thc sau WHERE mi c hin th trong kt qu truy vn. Trongmnh WHERE thng s dng: Cc ton t so snh Gii hn ( BETWEEN v NOT BETWEEN). Danh sch (IN, NOT IN) Khun dng (LIKE v NOT LIKE). Cc gi tr cha bit (IS NULL v IS NOT NULL). Kt hp cc iu kin (AND, OR).Cc ton t so snh: Ton t ngha = Bng > Ln hn < Nh hn >= Ln hn hoc bng Khng ln hn !< Khng nh hnV d 2.1: Truy vn sau y cho bit tn, a ch v in thoi ca nhng nhn vinc h s lng ln hn 1.92: SELECT ten, diachi, dienthoai FROM nhanvien WHERE hsluong>1.92Gii hn (BETWEEN v NOT BETWEEN) T kho BETWEEN v NOT BETWEEN c s dng nhm ch nh khonggi tr tm kim i vi cu lnh SELECT. Cu lnh di y cho bit tn v ia chca nhng nhn vin c h s lng nm trong khong 1.92 n 3.11 SELECT ten, tuoi, diachi FROM nhanvien WHERE hsluong BETWEEN 1.92 AND 3.11
  • 14. Trn Nguyn PhongDanh sch (IN v NOT IN) T kho IN c s dng khi ta cn ch nh iu kin tm kim d liu cho culnh SELECT l mt danh sch cc gi tr. Sau IN (hoc NOT IN) c th l mt danhsch cc gi tr hoc l mt cu lnh SELECT khc. V d 2.2: hin th thng tin v cc nhn vin c h s lng l 1.86, 1.92hoc 2.11, thay v s dng cu lnh: SELECT * FROM nhanvien WHERE hsluong=1.86 OR hsluong=1.92 OR hsluong=2.11Ta c th s dng cu lnh sau: SELECT * FROM nhanvien WHERE hsluong IN (1.86, 1.92, 2.11)Cc k t i din v mnh LIKE T kho LIKE (NOT LIKE) s dng trong cu lnh SELECT nhm m t khundng ca d liu cn tm kim. Chng thng c kt hp vi cc k t i din sauy: K t i din ngha % Chui k t bt k gm khng hoc nhiu k t - K t n bt k [] K t n bt k trong gii hn c ch nh (v d [a-f]) hay mt tp (v d [abcdef]) [^] K t n bt k khng nm trong gii hn c ch nh ( v d [^a-f] hay mt tp (v d [^abcdef]). V d 2.3: Cu lnh di y hin th thng tin v cc nhn vin c tn l Nam SELECT * FROM nhanvien WHERE hoten LIKE % NamIS NULL v NOT IS NULL Gi tr NULL c th c nhp vo mt ct cho php chp nhn gi tr NULLtheo mt trong ba cch sau: Nu khng c d liu c a vo v khng c mc nh cho ct hay kiu d liu trn ct . Ngi s dng trc tip a gi tr NULL vo cho ct . Mt ct c kiu d liu l kiu s s cha gi tr NULL nu gi tr c ch nh gy trn s. Trong mnh WHERE, ta s dng IS NULL hoc IS NOT NULL nh sau: WHERE col_name IS [NOT] NULLCc ton t logic Cc ton t logic s dng trong mnh WHERE bao gm AND, OR, NOT.AND v OR c s dng kt hp nhiu iu kin trong WHERE.1.3 Danh sch chn trong cu lnh SELECT
  • 15. Giao trnh thc hanh SQL n tt c cc ct trong bng Khi mun truy xut tt c cc ct trong bng, ta s dng cu lnh SELECT c cphp sau: SELECT * FROM table_name Khi s dng cu lnh ny, cc ct trong kt qu s c hin th theo th t mchng 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 cphp 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 ca cc ct c nu ra trong cu lnh sxc 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 khin c to ra trong cu lnh CREATE TABLE. Tuy nhin, cc tiu tr nnthn thin hn, ta c th i tn cc tiu ca cc ct. lm c vic ny, ta cth s dng mt trong hai cch vit sau: tiu__ct = tn_ct hoc tn_ct tiu__ct V d 2.4: Hai cu lnh sau s t tiu H v tn cho l hoten v a chcho 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 hinth kt qu ra mn hnh. V d 2.5: Cu lnh sau cho bit h tn, h s lng v xp loi lng ca nhnvin theo h s lng: SELECT H v tn = ten, H s lng = hsluong, Xp loi lng = CASE WHEN lsluong=NULL THEN Khng xc nh
  • 16. Trn Nguyn Phong WHEN hsluong= Ln hn hoc bng < Nh hn Khng ln hn !< Khng nh hn.1.9.2 Cc loi php ni* Php ni bng v php ni t nhin Mt php ni bng (equijoin) l mt php ni trong gi tr ca cc ct cs dng ni c so snh vi nhau da trn tiu chun bng v tt c cc ct trongcc 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 trongkt qu php ni v nh vy l khng cn thit. loi b iu ny, ta c th s dngphp 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 tmkim khc. V d 2.15: SELECT hoten, diachi, tendonvi FROM nhanvien, donvi WHERE nhanvien.madonvi = donvi.madonvi AND Nhanvien.hsluong>=2.11* Php t ni v cc b danh Php t ni l php ni m trong ta so snh cc gi tr bn trong mt ct cacng mt bng. V d 2.16: Tm nhng nhn vin c cng a ch vi nhn vin Trn Nguyn Phong SELECT n1.hoten FROM nhanvien n1, nhanvien n2 WHERE n2.hoten=Trn Nguyn Phong AND n1.diachi = n2.diachi* Php ni khng da trn tiu chun bng Trong php ni ny, cc ct c s dng kt ni c so snh vi nhaukhng da trn iu kin bng.* Php ni ngoi (outer join) Trong cc php ni cp trn, ch nhng dng hp l (tc l nhng dngc gi tr trong cc ct c ch nh tho m iu kin kt ni) mi c a ra trongkt qu. Theo mt ngha no , nhng php ni ny loi b thng tin cha trongnhng dng khng hp l. Tuy nhin, i khi ta cng cn gi li nhng thng tinkhng hp l bng cch cho php nhng dng khng hp l c mt trong kt qu ca
  • 22. Trn Nguyn Phongphp ni. lm iu ny, ta c th s dng php ni ngoi. Giao tc SQL cung cphai php ni ngoi: Php ni ngoi tri (*=) : Php ni ny cho php ly tt c cc t bng c tn u tin. Php ni ngoi phi (=*) : Php ni ny cho php ly tt c cc dng t bng c tn th hai. V d 2.17: Gi s ta c hai bng R v S c ni dung nh sau A B C D ----- ----------- ----------- ----- aaa 2 4 aaaa fff 8 4 f2 ggg 2 7 g4 xxx 2 12 gdf ggg 2 12 khf sss 45 0 k3h Bng R E F G ----- ----------- ----------- aaa 3 (null) xxx 23 26 abc 3 6 (null)12 (null) sss 20 3 Bng SKhi cu lnh: SELECT * FROM R,S WHERE R.A = S.ECho kt qu l: A B C D E F G ---- ----- ----- ----- ----- ------ -------- aaa 2 4 aaaa aaa 3 (null) xxx 2 12 gdf xxx 23 26 sss 45 0 k3h sss 20 3Cn cu lnh:
  • 23. Giao trnh thc hanh SQL SELECT * FROM R,S WHERE R.A *= S.ECho kt qu l: A B C D E F G --- ---- ---- ----- ----- ------ ------ aaa 2 4 aaaa aaa 3 (null) fff 8 4 f2 (null) (null) (null) ggg 2 7 g4 (null) (null) (null) xxx 2 12 gdf xxx 23 26 ggg 2 12 khf (null) (null) (null) sss 45 0 k3h sss 20 3V cu lnh SELECT * FROM R,S WHERE R.A =* S.ECho kt qu l: A B C D E F G ---- ----- ----- ----- ----- ------ --------- aaa 2 4 aaaa aaa 3 (null) xxx 2 12 gdf xxx 23 26 (null)(null) (null) (null) abc 3 6 (null)(null) (null) (null) (null)12 (null) sss 45 0 k3h sss 20 3Cc gii hn ca php ni ngoi Giao tc SQL khng cho php hai php ni ngoi lng nhau v php nitrong lng vo trong php ni ngoi. Tuy nhin, mt bng c th tham gia trong mtphp ni trong v l bng ngoi (outer table) trong mt php ni ngoi. Bng di y cho bit cc cch kt hp hp l v khng hp l ca phpni trong v php ni ngoi: Hp l Khng hp l T1 =* T2 *= T3 T1 *= T2 *= T3 T1 = T2 *= T3 T1 *= T2 = T3 T1 *= T2 =* T3 T3 T3
  • 24. Trn Nguyn Phong || || * * T2 =* T1 *= T4 T2 =* T1 =* T4 * * || || T5 T5 T3 T3 * || || * T2 *= T1 =* T4 T2 *= T1 *= T4 || || * * T5 T5* Php ni v cc gi tr NULL Nu trong cc ct ca cc bng tham gia php ni c cc gi tr NULL th ccgi tr NULL c xem nh l khng bng nhau. Chng hn ta c hai bng: A B C D ------ --------- -------- -------- 1 b1 Null d1 Null b2 4 d2 4 b3 Bng R Bng S Th cu lnh: SELECT * FROM R, S WHERE A *= C S cho kt qu l: A B C D ------ ------ ------ ------ 1 b1 Null Null Null b2 Null Null 4 b3 4 D21.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
  • 25. Giao trnh thc hanh SQLtheo tng nhm. Nhng gi tr thng k ny xut hin nh l nhng dng b sungtrong kt qu truy vn. Mt mnh COMPUTE BY cho php ta quan st c cc chitit v d liu ln cc gi tr thng k. Ta c th tnh cc gi tr thng k cho ccnhm con (subgroups) v ta cng c th tnh ton nhiu hm gp trn cng mtnhm. Mnh COMPUTE BY c c php nh sau: COMPUTE row-aggregate(col_name) [,...,row_aggregate(col_name)] BY col_name [,...,col_name] Cc hm gp c th s dng c vi COMPUTE BY bao gm SUM, AVG,MIN, MAX v COUNT. V d 2.18: Cu lnh di y cho bit h tn, tn n v h s lng ca nhnvin 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.madonviKt qu ca truy vn ny s nh sau: Hoten tendonvi hsluong --------------- -------------- -------------- Nguyn Th Hoa Phng k ton 2.11 avg =========== 2.11 L Hoi Nam Phng T chc 1.86 Hong Nam Phong Phng T chc 3.21 avg =========== 2.535 Trn Nguyn Phong Phng iu hnh 1.92 Nguyn Hu Tnh Phng iu hnh 1.92 avg =========== 1.92 Nguyn Trung Kin Phng ti v 1.86
  • 26. Trn Nguyn Phong avg =========== 1.86Khi s dng mnh COMPUTE ... BY cn tun theo cc qui tc di y: T kha DISTINCT khng cho php s dng vi cc hm gp dng Cc ct s dng trong mnh COMPUTE phi xut hin trong danh sch chn. Khng s dng SELECT INTO trong mt cu lnh SELECT c s dng COMPUTE. Nu s dng mnh COMPUTE ... BY th cng phi s dng mnh ORDER BY. Cc ct lit k trong COMPUTE BY phi ging ht hay l mt tp con ca nhng g c lit k sau ORDER BY. Chng phi c cng th t t tri qua phi, bt u vi cng mt biu thc v khng b qua bt k mt biu thc no. Chng hn nu mnh ORDER BY c dng: ORDER BY a, b, c Th mnh COMPUTE BY c dng di y l hp l: COMPUTE row_aggregate (column_name) BY a, b, c COMPUTE row_aggregate (column_name) BY a, b COMPUTE row_aggregate (column_name) BY a V cc dng di y l sai COMPUTE row_aggregate (column_name) BY b, c COMPUTE row_aggregate (column_name) BY a, c COMPUTE row_aggregate (column_name) BY c Phi s dng mt tn ct hoc mt biu thc trong mnh ORDER BY, vic sp xp (order) khng c thc hin da trn tiu ct. T kho COMPUTE c th c s dng m khng c BY v khi ORDER BY l ty chn.1.11 Thng k d liu vi GROUP BY v HAVING Ta c th s dng cc mnh GROUP BY v HAVING thng k d liu.GROUP BY t chc d liu vo cc nhm, HAVING thit lp cc iu kin ln ccnhm trong kt qu truy vn. Nhng mnh ny thng c s dng kt hp vinhau (HAVING c s dng khng km vi GROUP BY c th to ra nhng ktqu nhm ln). Cc hm gp tr v cc gi tr tm lc cho c bng hoc cho cc nhm trongbng. Do , chng thng c s dng vi GROUP BY. Cc hm gp c th xuthin trong mt dang sch chn hay trong mnh HAVING, nhng khng c sdng trong mnh WHERE. Ta c th s dng cc hm gp di y vi GROUP BY (Trong expressionl mt tn ct).
  • 27. Giao trnh thc hanh SQL Hm gp Chc nng SUM([ALL | DISTINCT] expression) Tnh tng cc gi tr. AVG([ALL | DISTINCT] expression) Tnh trung bnh ca cc gi tr COUNT([ALL | DISTINCT] expression) S cc gi tr trong biu thc. COUNT(*) S cc dng c chn. MAX(expression) Tnh gi tr ln nht MIN(expression) Tnh gi tr nh nht Trong , SUM v AVG ch lm vic vi nhng gi tr kiu s. SUM, AVG,COUNT, MAX v MIN b qua cc gi tr null cn COUNT(*) th khng. V d 2.19: Cu lnh di y cho bit h s lng trung bnh ca cc nhn vintheo tng n v: SELECT donvi.madonvi,tendonvi, avg(hsluong) FROM nhanvien,donvi WHERE nhanvien.madonvi = donvi.madonvi GROUP BY donvi.madonvi,tendonviCh : Danh sch cc tn ct trong danh sch chn ca cu lnh SELECT v danhsch cc tn ct sau GROUP BY phi nh nhau, nu khng cu lnh s khng hp l.V d cu lnh di y l khng ng: SELECT donvi.madonvi,tendonvi, avg(hsluong) FROM nhanvien,donvi WHERE nhanvien.madonvi = donvi.madonvi GROUP BY donvi.madonvi Mnh HAVING thit lp cc iu kin i vi mnh GROUP BY tng tnh 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 tmkim ca WHERE khng c c cc hm gp trong khi HAVING li cho php sdng cc hm gp trong iu kin tm kim ca mnh. Mnh HAVING c ththam chiu n bt k mc no trong danh sch chn v mnh HAVING c thcha ti a 128 iu kin tm kim. V d 2.20: Cu lnh di y cho bit h s lng trung bnh ca cc nhn vintheo tng n v v ch hin th nhng n v c h s lng trung bnh ln hn 1.92 SELECT donvi.madonvi,tendonvi, avg(hsluong) FROM nhanvien,donvi WHERE nhanvien.madonvi = donvi.madonvi GROUP BY donvi.madonvi,tendonvi HAVING avg(hsluong)>1.92
  • 28. Trn Nguyn Phong (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])(1) WHERE expression [NOT]IN (subquery)(2) WHERE expression comparison_operator [ANY|ALL](subquery)(3) WHERE [NOT]EXISTS (subquery) SELECT * FROM nhanvien WHERE madonvi NOT IN ( SELECT madonvi FROM donvi WHERE dienthoai like 82%)
  • 29. Giao trnh thc hanh SQL INSERT [INTO] table_name VALUES(value1, value2, ...) INSERT INTO nhanvien VALUES(NV02003,L Th Mai,23/5/72, NULL,523312,1.92,02) INSERT [INTO] table_name(col1,col2,..., colN) VALUES(value1, value2, ...,valueN)INSERT INTO nhanvien(manv,hoten,diachi)VALUES(NV03002,Nguyn Th Hanh Dung,56 Trn Phu)INSERT INTO luong_nhanvienSELECT hoten,hsluong*210000 FROM nhanvien
  • 30. Trn Nguyn PhongUPDATE updated_table_nameSET colname = expression [, ..., colname = expression ][FROM table_name [,..., table_name]][WHERE conditions ]UPDATE nhanvienSET hsluong = hsluong+0.2WHERE madonvi =04 UPDATE nhatkybanhangSET thanhtien = soluong*mathang.dongiaFROM mathangWHERE nhatkybanhang.mahang = mathang.mahangDELETE [FROM] delete_table_name[FROM table_name [,..., table_name]][WHERE conditions]DELETE FROM nhanvien
  • 31. Giao trnh thc hanh SQLFROM donviWHERE nhanvien.madonvi = donvi.madonvi AND donvi.dienthoai =848484
  • 32. Trn Nguyn Phong Chng 3: NGN NG IU KHIN GRANT ALL | statement [,...,statementN ] TO account [,...,accountN]GRANT ALL | permission [,...,permissionN] ON table_name |view_name [(column1 [,...,columnN])] |ON stored_procedureTO account [,...,accountN]
  • 33. Giao trnh thc hanh SQL GRANT CREATE TABLE, CREATE VIEW TO db_user GRANT SELECT, UPDATE ON nhanvien(hoten,diachi,dienthoai,hsluong) TO db_user1, db_user2REVOKE ALL | statement [,...,statementN]FROM account [,...,accountN]REVOKE ALL | permission [,...,permissionN]} ON table_name | view_name [(column [,...,columnN])] | stored_procedureFROM account [,...,accountN ]
  • 34. Trn Nguyn PhongREVOKE SELECT, UPDATEON nhanvien(hsluong)FROM db_user1REVOKE ALLFROM db_user
  • 35. Giao trnh thc hanh SQL Chng 4: THU TUC LU TR VA TRIGGER Cc th tc lu tr l mt trong nhng i tng c s d liu. C th xemchng tng t nh nhng th tc trong cc ngn ng lp trnh. Mi mt th tc lutr 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 lich sau: Th tc lu tr cho php module ho cng vic, to iu kin thun li cho vic thc hin cc thao tc trn d liu. Th tc lu tr c phn tch, ti u v bin dch khi to ra nn vic thc thi chng nhanh hn nhiu so vi vic s dng mt tp cc cu lnh giao tc SQL theo nhng cch thng thng. Th tc lu tr cho php chng ta thc hin cng mt yu cu bng mt cu lnh n gin thay v phi s dng nhiu dng lnh SQL. iu ny s lm gim thiu s lu thng trn mng. Thay v cp pht quyn trc tip cho ngi s dng trn cc cu lnh SQL, ta c th cp pht quyn cho ngi s dng thng qua cc th tc lu tr, nh tng kh nng bo mt i vi h thng. To cc th tc lu tr to mt sp, ta s dng cu lnh CREATE PROCEDURE c c php nh sau: CREATE PROCEDURE procedure_name [;number] [(parameter1 [,parameter2]...[parameter255])] AS sql_statements V d 4.1: CREATE PROC sp_list @bten char(20) AS SELECT hoten, ngaysinh, diachi FROM nhanvien WHERE hoten= @btenCh : Nu khi gi th tc, chng ta truyn tham s cho th tc di dng:
  • 36. Trn Nguyn Phong @tham_s = gi_trTh th t cc tham s khng cn phi tun theo th t nh khi to th tc bng culnh CREATE PROCEDURE. Tuy nhin, nu nh c mt tham s c truyn gitr 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 CREATEPROCEDURE. Gi tr ny, c th l hng bt k, s c ly lm tham s ca th tckhi 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 lytham s mc nh l Nguyn Vn A cho @bten. Gi tr mc nh c th NULL. Trong trng hp ny, nu ngi s dng khngcung cp tham s, SQL Server s thi hnh th tc theo cc tham s khc. V d 4.3: Vi cu lnh CREATE PROC sp_list;3 @bten char(20)=NULL,@bluong float AS SELECT * FROM nhanvien WHERE hoten=@bten AND hsluong=@bluong Ta th gi th tc trn nh sau: msp_list;3 @btuoi=23 m khng b li. Mc nh c th bao gm cc k t i din (%, _, [], [^] ) nu th tc s dngtham s vi t kha LIKE. V d 4.4: CREATE PROC sp_list;4 @bten char(20) =Trn% AS SELECT * FROM nhanvien WHERE hoten LIKE @bten Thng tin tr v t cc th tc lu trCc 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. Gitr ny ch ra cho bit th tc c thc hin thnh cng hay gp li v nguyn nhnca li (SQL Server nh ngha sn mt tp cc gi tr tr v, cc gi tr ny nmtrong khong [-99;0]; trong gi tr tr v bng 0 tc l vic thc hin th tc thnhcng, 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 tclu tr bng cch b sung mt tham s vo cu lnh RETURN. Tt c cc s nguynngoi tr cc gi tr dnh ring cho h thng u c th c s dng.
  • 37. Giao trnh thc hanh SQL V d 4.5: CREATE PROC sp_exam @bten char(20) AS IF EXISTS (SELECT * FROM nhanvien WHERE hoten = @bten) RETURN 1 ELSE RETURN 2Cc tham s tr v Khi c hai cu lnh CREATE PROCEDURE v EXECUTE cha mc chnOUTPUT cho tn mt tham s, th tc c th s dng mt bin tr v tr ca thams n ngi gi. Bng vic s dng t kho OUTPUT, bt c s thay i no ncng vn cn gi li sau khi th tc c thc hin, v cc bin c th c s dngtrong cc cu lnh SQL b sung sau trong tp lnh hay th tc c gi. Nu tkho OUTPUT khng c s dng, vic thay i n tham s s khng c gi lisau khi kt thc thc hin th tc. Ngoi ra, ta cn c th dng RETURN tr v gitr. 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 tngng khng c nh ngha vi OUTPUT khi to th tc th s b li. Tuy nhin nuta nh ngha OUTPUT cho mt tham s trong th tc nhng khng ch nhOUTPUT khi thc hin th vn khng b li (gi tr tham s khi s khng c trv). 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 / @sochiaKhi nu ta thc hin nh sau: DECLARE @ketqua real EXEC Chia 100, 2, @ketqua OUT SELECT @ketquaS cho kt qu l: ---------------------- 50.0Cn nu thc hin DECLARE @ketqua real EXEC Chia 100, 2, @ketqua SELECT @ketqua
  • 38. Trn Nguyn PhongS cho kt qu l: ---------------------- (null)I.3. Cc qui tc s dng cho sp Sau y l mt s qui tc cn lu khi to cc th tc lu tr Cu lnh CREATE PROCEDURE khng th kt hp vi cc cu lnh SQL khc trong mt khi lnh n (single batch). Bn thn nh ngha CREATE PROCEDURE c th bao gm bt k s lng cng nh cu lnh SQL no ngoi tr nhng cu lnh sau: CREATE VIEW CREATE TRIGGER CREATE DEFAULT CREATE PROCEDURE CREATE RULE Cc i tng CSDL khc c th c to bn trong mt th tc lu tr. Ta c th tham chiu mt i tng c to trong cng th tc min l n c to trc khi tham chiu. Bn trong mt th tc, ta khng th to mt i tng, xo n v sau to mt i tng mi vi cng tn. Ta c th tham chiu cc bng tm thi bn trong mt th tc. Nu ta thc thi mt th tc m gi n th tc khc, th tc c gi c th truy cp n mi i tng ngoi tr cc bng tm thi c to bi th tc u tin. Nu ta to mt bng tm thi ring (private temporary table) bn trong mt th tc, bng tm thi ch tn ti cho nhng mc ch ca th tc ; n s mt i khi thot ra khi th tc. S tham s ti a ca mt th tc l 255. S bin cc b v ton cc trong mt th tc ch b gii hn bi kh nng b nh. Cc th tc tm thi cc b (private) v ton cc (public), tng t nh cc bng tm thi, c th c to vi du # v ## ng trc tn th tc. # biu din th tc tm thi cc b cn ## biu din th tc tm thi ton cc.I.4 Xc nh tn bn trong cc th tc Bn trong mt th tc, tn cc i tng c s dng vi cu lnh ALTERTABLE, CREATE TABLE, DROP TABLE, TRUNCATE TABLE, CREATE INDEX,DROP INDEX, UPDATE STATISTICS v DBCC phi c xc nh vi tn cangi s hu i tng (object owners name) nu nh nhng ngi dng (user) khcs dng th tc. V d, ngi dng Mary, l s hu ch ca bng marytab, phi chnh tn ca bng ca mnh khi n c s dng vi mt trong nhng cu lnh nynu c ta mun nhng user khc c th thc hin th tc m trong bng c sdng. Qui tc ny l cn thit v tn i tng c phn tch khi cc th tc cchy. Nu marytab khng c ch nh v user John tm cch thc hin th tc, SQL
  • 39. Giao trnh thc hanh SQLs tm bng marytab do John s hu. V d di y l mt cch dng ng, n ch racho SQL Server tm bng marytab do Mary s hu: CREATE PROC p1 AS CREATE INDEX marytab_ind ON mary.marytab(col1)I.5 i tn cc th tc: S dng th tc: sp_rename old_name, new_name Ta ch c th i tn nhng th tc m ta s hu. Ngi s hu CSDL c ththay i tn ca bt k th tc no ca ngi s dng. Th tc c i tn phi nmtrong CSDL hin thi. Ta phi xo v to li mt th tc nu ta thay i tn ca mt i tng ctham chiu bi th tc . c c bo co v nhng i tng c tham chiu bi mt th tc, ta sdng th tc h thng: sp_depends. xem ni dung ca nh ngha mt th tc, ta s dng th tc h thng:sp_helptext.I.6. Xo th tc: xo mt th tc, ta s dng cu lnh: DROP PROCEDURE proc_nameII. S dng cc Trigger Mt trigger l mt dng c bit ca th tc lu tr v n c thc hin tng khi ngi dng p dng cu lnh sa i d liu ln mt bng c ch nh.Cc trigger thng c s dng cho vic p buc cc qui tc lm vic v ton vn dliu. Tnh ton vn tham chiu c th c nh ngha bng cch s dng rng bucFOREIGN KEY vi cu lnh CREATE TABLE. Nu cc rng buc tn ti trongbng c s tc ng ca trigger, n c kim tra trc vic thc hin trigger. Nucc rng buc b vi phm, trigger s khng thc thi. Cc trigger c s dng trong nhng cch sau: Cc trigger c th thay i ng lot (cascade change) cc bng c lin h trong mt CSDL. Cc trigger c th khng cho php hoc roll back nhng thay i vi phm tnh ton vn tham chiu, hy b giao tc sa i d liu. Cc trigger c th p t cc gii hn phc tp hn nhng gii hn c nh ngha bng rng buc CHECK. Khc vi rng buc CHECK, cc trigger c th tham chiu n cc ct trong cc bng khc. Cc trigger cn c th tm s khc bit gia cc trng thi ca mt bng trc v sau khi sa i d liu v ly ra nhng tc ng da trn s khc bit .
  • 40. Trn Nguyn PhongII.1 To cc trigger Mt trigger l mt i tng CSDL. Ta to mt trigger bng vic ch nh bnghin hnh v cu lnh sa i d liu kch hot trigger. Sau ta xc nh cc cngvic 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, mitrigger c th thc hin nhiu hm v gi n 16 th tc. Mi trigger ch c th pdng 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 dcc 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 cmnh 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_statementsHoc s dng mnh IF UPDATE: CREATE TRIGGER trigger_name ON table_name FOR {INSERT, UPDATE} AS IF UPDATE (column_name) [{ANDOR}UPDATE (column_name)...] sql_statements V d 4.7: Nu chng ta mun sau khi ta cp nht d liu cho bng nhanvien,SQL Server s hin th ni dung ca bng xem th ta to mt trigger nh sau: CREATE TRIGGER tgr_check ON nhanvien FOR INSERT, UPDATE AS print *** Ket qua sau khi cap nhat *** SELECT * FROM nhanvienII.2 Cc gi tr null ngm nh v hin (implicit and explicit null values) Mnh IF UPDATE(tn_ct) l ng cho mt cu lnh INSERT khi m ctc gn mt gi tr trong danh sch chn hay trong mnh VALUES. Mt NULLhin (explicit) hay mt mc nh gn mt gi tr cho mt ct v v th kch hottrigger. Vi mt NULL ngm nh, nu gi tr khng c xc nh bi cu hi hocbi 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
  • 41. Giao trnh thc hanh SQL FOR INSERT AS IF UPDATE(col1) AND UPDATE(col2) Print Firing GO CREATE DEFAULT col2_default AS 99 GO/* IF UPDATE l ng cho c hai ct, trigger c kch hot */ INSERT vidu(col1,col2) VALUES(1, 2)/* IF UPDATE l ng cho c hai ct, trigger c kch hot */ INSERT vidu VALUES(1, 2)/* NULL hin: IF UPDATE l ng cho c hai ct, trigger c kch hot */ INSERT vidu VALUES(null, 2)/* Khng c mc nh trn ct col1, IF UPDATE khng ng cho c hai ct, triggerkhng c kch hot */ INSERT vidu(col2) VALUES(2)/* Khng c mc nh trn ct col2, IF UPDATE khng ng cho c hai ct, triggerkhng 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 sdng: IF UPDATE(col2) OR UPDATE(col2) Cu lnh SQL trong trigger c th sau kim tra xem col1 l NULL haykhng.II.3 Vic i tn v cc trigger Nu mt bng c tham chiu bi mt trigger b i tn, ta phi xo trigger i v to li n ph hp vic tham chiu ca n n bng. Th tc sp_depends c chc nng lit k tt c cc trigger tham chiu n itng (chng hn bng hay khung nhn) hoc tt c cc bng hay khung nhn mtrigger tc ng. V d sau y lit k cc i tng c tham chiu bi triggertgr_check: sp_depends tgr_checkII.4 Hin th thng tin v cc trigger Do cc trigger l cc i tng CSDL nn chng c lit k trong bng hthng 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:
  • 42. Trn Nguyn Phong sp_help trigger_name Cu lnh CREATE TRIGGER cho mi trigger c lu tr trong bng h thngsyscomments. Ta c th hin th li nh ngha trigger bng cch s dng th tcsp_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 nhanvienII.5 Xo trigger Ta c th xo mt trigger bng cch xo n hoc xo bng trigger. Khi mtbng c xa, nhng trigger no c lin quan vi n cng ng thi b xa. DROPTRIGGER mc nh cho php i vi ngi s dng bng trigger v khng thchuyn cho ngi khc. Ta c th xa mt trigger bng cch s dng cu lnh DROP TRIGGER
  • 43. Giao trnh thc hanh SQLChng 5: PHU LUC
  • 44. Trn Nguyn Phong
  • 45. Giao trnh thc hanh SQL
  • 46. Trn Nguyn Phong MUC LUC 1.1 Xc nh bng bng mnh FROM ...................................................................................................12 1.2 Mnh WHERE.................................................................................................................................13 1.3 Danh sch chn trong cu lnh SELECT ............................................................................................14 1.4 Tnh ton cc gi tr trong cu lnh SELECT .....................................................................................16 1.5 T kho DISTINCT .............................................................................................................................16 1.6 To bng mi bng cu lnh SELECT ... INTO ..................................................................................17 1.7 Sp xp kt qu truy vn bng ORDER BY..........................................................................................17 1.8 Php hp v ton t UNION...............................................................................................................18 1.9 Php ni...............................................................................................................................................20 1.10 To cc dng thng k d liu vi COMPUTE ... BY........................................................................24 1.11 Thng k d liu vi GROUP BY v HAVING...................................................................................26 1.12 Truy vn con (subquery)..................................................................................................................27 I.1. To cc th tc lu tr ........................................................................................................................35 I.2. Thng tin tr v t cc th tc lu tr.................................................................................................36 I.3. Cc qui tc s dng cho sp .................................................................................................................38 I.4 Xc nh tn bn trong cc th tc .......................................................................................................38 I.5 i tn cc th tc:..............................................................................................................................39 I.6. Xo th tc: .........................................................................................................................................39II. S DNG CC TRIGGER II.1 To cc trigger....................................................................................................................................40 II.2 Cc gi tr null ngm nh v hin (implicit and explicit null values)................................................40 II.3 Vic i tn v cc trigger ..................................................................................................................41 II.4 Hin th thng tin v cc trigger .........................................................................................................41 II.5 Xo trigger .........................................................................................................................................42 2.2 Cac ham v chui..........................................................................................................................44