You are on page 1of 101

Mc lc

Mc lc .................................................................................................................................1 1 Gii thiu v SQL Server 2005 ...................................................................................... 5 1.1 Ci t SQL Server 2005 Express Edition .............................................................. 5 1.1.1 Cc yu cu cho h thng 32bit .......................................................................5 1.1.2 Cc bc ci t SQL Server 2005 Express Edition .......................................7 1.2 Mt s thao tc c bn trn SQL Server 2005 Express Edition. .......................... 16 1.2.1 To mt CSDL mi ....................................................................................... 16 1.2.2 1.2.3 To bng mi .................................................................................................17 Xa bng, xa CSDL ..................................................................................... 19

1.2.4 M mt query editor vit cu lnh SQL ................................................... 19 2 Structured Query Language (SQL) ..............................................................................20 2.1 SQL l ngn ng ca c s d liu quan h ......................................................... 20 2.2 Vai tr ca SQL ....................................................................................................20 2.3 Gii thiu s lc v Transact SQL (T-SQL) ...................................................... 21 2.3.1 Ngn ng nh ngha d liu ( Data Definition Language DDL) ..............22 2.3.2 Ngn ng iu khin d liu (Data control language DCL) ...................... 22 2.3.3 Ngn ng thao tc d liu (Data manipulation language DML)................23 2.3.4 C php ca T-SQL ....................................................................................... 24 2.3.5 Cc kiu d liu ............................................................................................. 25 2.3.6 Bin (Variables) ............................................................................................. 26 2.3.7 Hm (Function) .............................................................................................. 27 2.3.8 Cc ton t (Operators) .................................................................................27 2.3.9 Cc thnh phn iu khin (Control of flow) ................................................28 2.3.10 Ch thch (Comment) ................................................................................... 28 2.3.11 Gi tr NULL ................................................................................................ 28 3 Ngn ng thao tc d liu DML ...............................................................................29 3.1 Cu lnh SELECT .................................................................................................29 3.1.1 Danh sch chn trong cu lnh SELECT ...................................................... 30 3.1.2 Mnh FROM ............................................................................................. 34 3.1.3 Mnh WHERE - iu kin truy vn d liu ............................................34 3.1.4 Php hp (UNION)........................................................................................ 38 3.1.5 Php ni .........................................................................................................41 3.1.6 Cc loi php ni ........................................................................................... 43 1

3.1.7

Php ni theo chun SQL-92.........................................................................45

3.1.8 Mnh GROUP BY .................................................................................... 47 3.1.9 Truy vn con (Subquery) ...............................................................................50 3.2 Thm, cp nht v xa d liu ..............................................................................51 3.2.1 3.2.2 Thm d liu ..................................................................................................52 Cp nht d liu ............................................................................................. 53

3.2.3 Xa d liu.....................................................................................................54 4 Ngn ng nh ngha d liu DDL............................................................................56 4.1 To bng ................................................................................................................56 4.2 Cc loi rng buc.................................................................................................58 4.2.1 Rng buc CHECK........................................................................................ 58 4.2.2 Rng buc PRIMARY KEY ..........................................................................59 4.2.3 Rng buc FOREIGN KEY ..........................................................................60 4.3 Sa i nh ngha bng ........................................................................................ 61 4.4 Xa bng ...............................................................................................................63 4.5 Khung nhn - VIEW .............................................................................................. 63 4.6 Thm, cp nht, xa d liu trong VIEW ............................................................. 65 4.7 Thay i nh ngha khung nhn ...........................................................................65 4.8 Xa khung nhn .....................................................................................................66 5 Th tc lu tr, hm v trigger..................................................................................... 67 5.1 Th tc lu tr (Stored procedure) .......................................................................67 5.1.1 To th tc lu tr ......................................................................................... 68 5.1.2 Li gi th tc................................................................................................ 69 5.1.3 Bin trong th tc lu tr ..............................................................................69 5.1.4 Gi tr tr v trong th tc lu tr.................................................................70 5.1.5 Tham s vi gi tr mc nh .........................................................................71 5.1.6 Sa i th tc ............................................................................................... 72 5.1.7 Xa th tc.....................................................................................................72 5.2 Hm do ngi dng nh ngha (User Defined Function -UDF)........................... 72 5.2.1 Hm v hng - Scalar UDF .........................................................................73 5.2.2 Hm ni tuyn - Inline UDF ..........................................................................74 5.2.3 Hm bao gm nhiu cu lnh bn trong Multi statement UDF .................. 75 5.2.4 Thay i hm .................................................................................................76 5.2.5 Xa hm .........................................................................................................77 5.3 Trigger ................................................................................................................... 77 2

5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6

Cc c im ca trigger ...............................................................................77 Cc trng hp s dng trigger .....................................................................77 Kh nng sau ca trigger ...............................................................................78 nh ngha trigger .......................................................................................... 78 Kch hot trigger da trn s thay i d liu trn ct..................................82 S dng trigger v Giao tc (TRANSACTION) ...........................................83

5.4 DDL TRIGGER ....................................................................................................84 5.5 Enable/ Disable TRIGGER ................................................................................... 85 6 Sao lu v phc hi d liu (Backup and Restore) ...................................................... 87 6.1 6.2 Cc l do phi thc hin Backup ..........................................................................87 Cc loi Backup ....................................................................................................87

6.2.1 Full backup v Differential backup ............................................................... 87 6.2.2 Transaction log backup .................................................................................. 88 6.3 Cc thao tc thc hin qu trnh Backup v Restore trong SQL Server 2005 Express Edition........................................................................................................................ 89 6.3.1 Sao lu (Backup) ........................................................................................... 89 6.3.2 Phc hi (Restore) ......................................................................................... 91 7 Cc hm quan trng trong T-SQL ................................................................................94 7.1 Cc hm lm vic vi kiu d liu s ...................................................................94 7.1.1 Hm ISNUMERIC......................................................................................... 94 7.1.2 Hm ROUND ................................................................................................ 94 7.2 Cc hm lm vic vi kiu d liu chui .............................................................. 95 7.2.1 Hm LEFT .....................................................................................................95 7.2.2 Hm RIGHT ..................................................................................................95 7.2.3 Hm SUBSTRING ........................................................................................ 95 7.2.4 Hm LEN .......................................................................................................96 7.2.5 Hm REPLACE ............................................................................................. 96 7.2.6 Hm STUFF...................................................................................................96 7.2.7 Hm LOWER/UPPER ................................................................................... 97 7.2.8 Hm LTRIM/RTRIM .................................................................................... 97 7.3 Cc hm lm vic vi kiu d liu Ngy thng/ Thi gian ..................................97 7.3.1 Hm GETDATE ............................................................................................ 97 7.3.2 Hm DAY/ MONTH/ YEAR ........................................................................97 7.3.3 Hm DATEPART .......................................................................................... 98 7.3.4 Hm DATENAME ........................................................................................ 99 3

7.4

Hm CAST v CONVERTER ..............................................................................99

Ti liu tham kho ............................................................................................................101

1 Gii thiu v SQL Server 2005


SQL Server 2005 l mt h thng qun l c s d liu (Relational Database Management System (RDBMS) ) s dng Transact-SQL trao i d liu gia Client computer v SQL Server computer. M t RDBMS bao gm databases, database engine v cc ng dng dng qun l d liu v cc b phn khc nhau trong RDBMS. SQL Server 2005 c ti u c th chy trn mi trng c s d liu rt ln (Very Large Database Environment) ln n Tera-Byte v c th phc v cng lc cho hng ngn user. SQL Server 2005 c th kt hp "n " vi cc server khc nh Microsoft Internet Information Server (IIS), E -Commerce Server, Proxy Server.... Cc phin bn ca SQL Server 2005: Enterprise: H tr khng gii hn s l ng CPU v kch thc Database. H tr khng gii hn RAM (nhng ty thuc vo kch thc RAM ti a m HH h tr) v cc h thng 64bit. Standard: Tng t nh bn Enterprise nhng ch h tr 4 CPU. Ngoi ra phin bn ny cng khng c trang b mt s tnh nng cao cp khc. Workgroup: Tng t bn Standard nhng ch h tr 2 CPU v ti a 3GB RAM Express: Bn min ph, h tr ti a 1CPU, 1GB RAM v kch thc Database gii hn trong 4GB. Chi tit c th tham kho ti a ch: http://www.microsoft.com/sql/prodinfo/features/compare -features.mspx

1.1 Ci t SQL Server 2005 Express Edition


1.1.1 Cc yu cu cho h thng 32bit

Chi tit yu cu h thng cho cc phin bn Microsoft SQL Server 2005 c th tham kho ti a ch: http://www.microsoft.com/sql/prodinfo/sysreqs/default.mspx Download v ci t Microsoft .NET Framework 2.0: ci t thnh cng SQL Server Express Edition hay cc phin b n SQL Server 2005 khc, Microsoft .NET Framework 2.0 phi c ci t trc. G b cc phin bn Beta, CTP hoc Tech Preview ca SQL Server 2005, Visual Studio 2005 v Microsoft .NET Framework 2.0. Download v ci t 6

Ci t SQL Server 2005 Express Edition: Microsoft SQL Server 2005 Express Edition l phin bn min ph, d s dng v nh ca Microsoft SQL Server 2005. Microsoft SQL Server 2005 Express Edition c tch hp trong Visual Studio 2005 to ra s d d ng trong vic pht trin cc ng dng h ng CSDL. SQL Server 2005 Express Edition c t do s dng trong cc ng dng th ng mi v d dng cp nht ln cc phin bn cao hn khi cn thit. Ci t SQL Server Management Studio Express: SQL Server Managemen t Studio Express cung cp giao din ngi dng d dng tng tc vi cc thnh phn ca Microsoft SQL Server 2005 Express Edition. Trc khi ci t SQL Server Management Studio Express, MSXML 6.0 phi c ci t Download ti a ch: http://www.microsoft.com/express/sql/download/default.aspx

1.1.2 Cc bc ci t SQL Server 2005 Express Edition


Double click vo file ci t Microsoft SQL Server Express Edition .

Click Next:

10

11

12

Lu : SQL Server 2005 c hai ki u authentication (kim tra ngi dng). Windows authentication mode: Vi c kim tra ngi dng ca SQL Server 2005 s ph thuc vo vic kim tra ngi dng ca Windows. Khi ngi dng c quyn ng nhp vo Windows, ngi dng s c quyn ng nhp vo SQL Server. Kiu kim tra ngi dng ny thng c s dng khi ng dng khai thc d liu v SQL Server c ci trn cng mt my tnh. SQL Server authentication mode: Vic kim tra ngi dng ca SQL Server 2005 s khng ph thuc vo vic kim tra ngi dng ca Windows. Khi ngi dng c quyn ng nhp vo Windows, ngi dng cha chc s c quyn ng nhp vo SQL Server. ng nhp vo SQL Server, ngi dng ny phi c mt b username v password do SQL Server qun l. Kiu kim tra ngi dng ny thng c s dng khi ng dng khai thc d liu v SQL Server khng c ci trn cng mt my tnh. Khi chn Mixed mode, SQL Server c th d ng bt k kiu kim tra ngi dng no khi cn thit. y l mt thit lp thc s rt hu ch khi xy dng cc ng dng CS DL. Ngoi ra, ta cng phi nh password v o hai bn di c th ng nhp vo SQL Server khi ta xy dng mt ng dng truy xut v o CSDL my ny khi ta ang my khc. Click Next ba ln:

13

14

Ci t SQL Server Management Studio Express . Sau khi ci t, ng nhp vo SQL Server 2005 Express Edition nh sau:

Khi ng nhp c th chn Windows Authentication hoc SQL Server Authentication . Nu chn SQL Server Authentication th phi nhp password. Password ny c thit lp trong qu trnh ci t SQL Server 2005 Express Edition. Nu trong qu trnh ci t SQL Server 2005 Express Edition chng ta khng cho php SQL Server kch hot ngay khi khi ng my, bm nt Connect s gy ra li. khc phc vo Start->Run nh services.msc->Enter. Tm service SQL Server (SQLExpress), double click v trong comboxbox Startup type chn Automatic -> Apply - >Start -> OK. Giao din sau khi ng nhp thnh cng

15

1.2 Mt s thao tc c bn trn SQL Server 2005 Express Edition.


Microsoft SQL Server Management S tudio cung cp mt giao din thn thin gip cho ngi dng thc hin cc thao tc mt cch d d ng. Mt s cc thao tc c bn bao gm: to CSDL mi, xa CSDL, to bng, xa bngCng cn l u rng cc thao tc thc hin thng qua giao din th u c th c thc hin c bng cc cu lnh SQL.

1.2.1 To mt CSDL mi

16

t tn Database trong Textbox Database Name, click OK .

1.2.2 To bng mi

17

Bng gm cc cc ct. Mi ct gm tn ct (Column Name), kiu d liu (Data Type) v mt gi tr cho bit ct c t h cha gi tr NULL hay khng. Trong bng s c t nht mt ct lm kha chnh (primary key) . Ct lm kha chnh s c biu tng cha kha trc tn ct. Sau khi to xong tt c cc ct ca bng, tin h nh Save -> OK

18

1.2.3 Xa bng, xa CSDL


Click chut phi ln bng hay CSDL mun xa -> Delete - >OK. Trong trng hp xa mt CSDL, nn chn du tch vo Close existing connections. Khi SQL Server 2005 s ngt tt c cc kt ni vo CSDL ny v vic xa s khng gy bo li.

1.2.4 M mt query editor vit cu lnh SQL

Cn ch l cu lnh SQL s c tc dng tr n CSDL ang c chn trong ComboBox. Do cn ch la chn ng CSDL cn t ng tc. 19

2 Structured Query Language (SQL)


2.1 SQL l ngn ng ca c s d liu quan h
SQL, vit tt ca Structured Quer y Language (ngn ng hi c cu trc), l cng c s dng t chc, qun l v truy xut d liu uc lu tr trong cc c s d liu. SQL l mt h thng ngn ng bao gm tp cc cu lnh s dng t ng tc vi c s d liu quan h. Kh nng ca SQL vt xa so vi mt cng c truy xut d liu, mc d y l mc ch ban u khi SQL c xy dng nn v truy xut d liu vn cn l mt trong nhng chc nng quan trng ca n. SQL c s dng iu khin tt c cc chc nng m mt h qun tr c s d liu cung cp cho ng i dng bao gm: nh ngha d liu: SQL cung cp kh nng nh ngha cc c s d liu, cc cu trc lu tr v t chc d liu cng nh mi quan h gia cc thnh phn d liu. Truy xut v thao tc d liu: Vi SQL, ngi dng c th d dng thc hin cc thao tc truy xut, b sung, cp nht v loi b d liu trong cc c s d liu. iu khin truy cp: SQL c th c s dng cp pht v kim sot cc thao tc ca ngi s dng trn d liu, m bo s an ton cho c s d liu m bo ton vn d liu: SQL nh ngha cc rng buc ton vn trong c s d liu nh m bo tnh hp l v chnh xc ca d liu trc cc thao tc cp nht cng nh cc li ca h thng. Nh vy, c th ni rng SQL l mt ngn ng hon thin c s dng trong cc h thng c s d liu v l mt thnh phn khng th thiu trong cc h qun tr c s d liu. Mc d SQL khng phi l mt ngn ng lp trnh nh C, C++, Java,... song cc cu l nh m SQL cung cp c th c nhng vo trong cc ngn ng lp trnh nhm xy dng cc ng dng tng tc vi c s d liu. Khc vi cc ngn ng lp trnh quen thuc nh C, C++, Java,... SQL l ngn ng c tnh khai bo. Vi SQL, ngi dng ch cn m t cc yu cu cn phi thc hin trn c s d liu m khng cn phi ch ra cch thc thc hin cc y u cu nh th no. Chnh v vy, SQL l ngn ng d tip cn v d s dng.

2.2 Vai tr ca SQL


Bn thn SQL khng phi l mt h qun tr c s d liu, n khng th tn ti c lp. SQL thc s l mt phn ca h qun tr c s d liu, n xut hin trong cc h qun tr c s d liu vi vai tr ngn ng v l cng c giao tip gia ngi s dng v h qun tr c s d liu. 20

Trong hu ht cc h qun tr c s d liu quan h, SQL c nhng vai tr nh sau: SQL l ngn ng hi c tnh tng tc: Ngi s dng c th d dng thng qua cc trnh tin ch gi cc yu cu di dng cc cu lnh SQL n c s d liu v nhn kt qu tr v t c s d liu SQL l ngn ng lp trnh c s d liu: Cc lp trnh vin c th nhng cc cu lnh SQL vo trong cc ngn ng lp trnh xy dng nn cc chng trnh ng dng giao tip vi c s d liu SQL l ngn ng qun tr c s d liu: Thng qua SQL, ngi qun tr c s d liu c th qun l c c s d liu, nh ngha cc cu trc l u tr d liu, iu khin truy cp c s d liu,... SQL l ngn ng cho cc h thng khch/ch (client/server) : Trong cc h thng c s d liu khch/ch, SQL c s dng nh l cng c giao tip gia cc trnh ng dng pha my khch vi my ch c s d liu. SQL l ngn ng truy cp d liu trn Internet: Cho n nay, hu ht cc my ch Web cng nh cc my ch trn Internet s dng SQL vi vai tr l ngn ng tng tc vi d liu trong cc c s d liu. SQL l ngn ng c s d liu phn tn: i vi cc h qun tr c s d liu phn tn, mi mt h thng s dng SQL giao tip vi cc h thng khc tr n mng, gi v nhn cc yu cu truy xut d liu vi nhau. SQL l ngn ng s dng cho cc cng giao tip c s d liu: Trong mt h thng mng my tnh vi nhiu h qun tr c s d liu khc nhau, SQL th ng c s dng nh l mt chun ngn ng giao tip gia cc h qun tr c s d liu.

2.3 Gii thiu s lc v Transact SQL (T-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. SQL chun bao gm khong 40 cu lnh. Trong cc h qun tr c s d liu khc nhau, mc d cc cu lnh u c cng dng v cng mc ch s dng song mi mt h qun tr c s d liu c th c mt s thay i n o . iu ny i khi dn n c php chi tit ca cc cu lnh c th s khc nhau trong cc h qun tr c c s d liu khc nhau. T-SQL c chia lm 3 nhm:

21

2.3.1 Ngn ng nh ngha d liu ( Data Definition Language DDL)


y l nhng lnh dng to (create), thay i (alter) hay xa (drop) c c i tng trong CSDL. Cc cu lnh DDL thng c dng: Create object Alter object Drop object Trong object c th l: table, view, storedprocedure, function, trigger V d: Cu lnh Create sau s to mt bng mi c t n l Nhanvien trong CSDL Test. Bng Nhanvien ny gm c ba ct: manv, tennv, diachi . Lu : Nu trong SQL Server 2005 Express Edition ch a c CSDL Test, hy to mt CSDL c tn Test theo h ng dn trong Chng 1. create table Nhanvien ( manv int primary key, tennv nvarchar(50) not nu ll, diachi nvarchar(50) not null ) chy cu lnh SQL trn, m mt Query Editor, copy cu lnh vo Query Editor, bi en ton b cu lnh v bm F5. Tip theo, dng lnh alter thay i cu trc bng Nhanvien.C th l mt thm mt ct mi c tn ghichu vo bng Nhanvien. alter table Nhanvien add ghichu nvarchar(50) not null Cui cng, dng lnh drop xa hon ton bng Nhanvien ra khi CSDL, ngha l ton b nh ngha bng v cc d liu bn trong u b xa. drop table Nhanvien Lu : Lnh drop khc vi lnh delete. Lnh delete ch xa cc d ng d liu c trong bng

2.3.2 Ngn ng iu khin d liu (Data control language DCL)


y l cc lnh qun l quyn truy cp l n cc object (table, view, storedprocedure) . Bao gm: Grant Deny Revoke 22

V d: Lnh grant s cp quyn Select trn bng Nhanvien trong CSDL Test cho cc Users thuc Role public grant select on nhanvien to public Sau khi thc hin lnh ny, c Users trong Role public c th thc hin cu lnh Select trn bng Nhanvien trong CSDL Test. Dng lnh deny t chi quyn select trn bng Nhanvien trong CSDL Test ca cc Users thuc Role public deny select on nhanvien to public Sau khi thc hin lnh ny, c Users trong Role public s khng th thc hin cu lnh Select trn bng Nhanvien trong CSDL Test. Dng lnh revoke xa b cc quyn c cp hay t chi trc . revoke select on nhanvien to public Sau khi thc hin lnh ny, cc quyn c gn hay t chi ca Users trong Role public trn bng Nhanvien trong CSDL Test s c xa hon ton.

2.3.3 Ngn ng thao tc d liu (Data manipulation language DML)


y l cc lnh ph bin dng x l d liu. Bao gm: Select Insert Update Delete V d: Cu lnh sau s lc ra cc nhn vin c tn bt u bng ch A trong bng Nhanvien. select * from Nhanvien as nv where nv.tennv like 'A%' Du * hm l la chn tt c cc ct ca bng Nhanvien . Ton t like v k t i din s c ni trong phn sau. Cu lnh sau s thm d liu v mt nhn vin mi vo trong bng Nhanvien. 23

insert into Nhanvien values(1, N'Nguyn Vn An', N'22 Nguyn Thin Thut') Cu lnh sau s cp nht lai a ch ca nhn vi n c manv l 1 update Nhanvien set diachi = N'22 Nguyn Th Minh Khai' where manv = 1 Cu lnh sau s xa thng tin ca nhn vi n c manv l 1 trong bng Nhanvien delete Nhanvien where manv = 1

2.3.4 C php ca T-SQL


Cc i tng trong c s d liu da trn SQL (table, view, index, storedprocedure) c xc nh thng qua tn ca i tng (hay cn gi l identifier). Tn ca cc i tng l duy nht trong mi c s d liu. Tn c s dng nhiu nht trong cc truy vn SQL v c xem l nn tng trong c s d liu quan h l tn bng v tn ct. C hai loi Identifiers mt loi thng th ng (Regular Identifier) v mt loi gi l Delimited Identifier, loi ny cn c du "" hay du [] ngn cch. Loi Delimited c dng i vi cc ch trng vi t kha ca SQL Server (reserved keyword) hay cc ch c khong trng. V d: Select * From My table Where [sum] = 10 Trong cc c s d liu ln vi nhiu ngi s dng, khi ta ch nh t n ca mt bng no trong cu lnh SQL, h qun tr c s d liu hiu l tn ca bng do ta s hu (tc l bng do ta to ra). Thng th ng, trong cc h qun tr c s d liu ny cho php nhng ngi dng khc nhau to ra nhng bng trng tn vi nhau m khng gy ra xung t v tn. Nu trong mt cu lnh SQL ta cn ch n mt bng do mt ng i dng khc s hu (hin nhin l phi c php) th tn ca bng phi c vit sau tn ca ngi s hu v phn cch vi tn ngi s hu bi du chm: tn_ngi_s_hu.tn_bng Mt s i tng c s d liu khc (nh khung nhn, th tc, hm), vic s dng tn cng tng t nh i vi bng. Ta c th s dng tn ct mt cch bnh thng trong cc cu lnh SQL bng cch ch cn ch nh tn ca ct trong bng. Tuy nhi n, nu trong cu lnh c lin quan n hai ct tr 24

ln c cng tn trong cc b ng khc nhau th bt buc phi ch nh th m tn bng trc tn ct; tn bng v tn ct c phn cch nhau bi du chm V d: Gi s chng ta c CSDL nh sau:

tm ra khch hng c tn Nguyn Vn An t hng vo ngy no, cu truy v n nh sau: Select orderid, orderdate from orders, customers where orders.customerid = customers.customerid and customername = N'Nguy n Vn An'

2.3.5 Cc kiu d liu


Bng di y lit k mt s kiu d liu thng dng c s dng trong SQL. Char(n) Nchar(n) Varchar(n) Nvarchar(n) Int Tinyint Smallint Kiu chui vi di c nh Kiu chui vi di c nh h tr UNICODE Kiu chui vi di chnh xc Kiu chui vi di chnh xc h tr UNICODE S nguyn c gi tr t -231 n 231 - 1 S nguyn c gi tr t 0 n 255. S nguyn c gi tr t -215 n 215 1 25

Bigint Numeric Decimal Float Real Money Bit Datetime Smalldatetime Binary Varbinary Image Text Ntext

S nguyn c gi tr t -263 n 263-1 Kiu s vi chnh xc c nh. Tng t kiu Numeric S thc c gi tr t -1.79E+308 n 1.79E+308 S thc c gi tr t -3.40E + 38 n 3.40E + 38 Kiu tin t Kiu bit (c gi tr 0 hoc 1) Kiu ngy gi (chnh xc n phn trm ca giy) Kiu ngy gi (chnh xc n pht) D liu nh phn vi di c nh (ti a 8000 bytes) D liu nh phn vi di chnh xc (ti a 8000 bytes) D liu nh phn vi d i chnh xc (ti a 2,147,483,647 bytes) D liu kiu chui vi d i ln (ti a 2,147,483,647 k t) D liu kiu chui vi d i ln v h tr UNICODE (ti a 1,073,741,823 k t)

V d: Mi ct trong bng s cha nhng d liu thuc v duy nht mt kiu d liu trong SQL Server. Ct no cha nhng d liu thuc kiu n o s c quy nh lc nh ngha bng. Create table Nhanvien ( MANV NVARCHAR(10) NOT NULL, HOTEN NVARCHAR(30) NOT NULL, GIOITINH BIT, NGAYSINH SMALLDATETIME, NOISINH NCHAR(50), HSLUONG DECIMAL(4,2), MADV INT )

2.3.6 Bin (Variables)


Bin trong T-SQL cng c chc nng tng t nh trong cc ngn ng lp trnh khc ngha l cn khai bo trc loi d liu trc khi s dng. Bin c bt u bng du @ ( i vi cc bin ton cc - global variable - th c hai du @@)

26

V d: V d di y khai bo mt bin c t n @numberOfCustomers thng qua t kha declare. Bin ny lu s khch hng m c thng qua hm count. Sau in ra gi tr ca bin. declare @numberOfCustomers int select @numberOfCustomers = count(*) from Customers print @numberOfCustomers

2.3.7 Hm (Function)
C 2 loi hm: mt loi l c xy dng sn trong SQL Server 20005 Express Edition (built-in) v mt loi do ngi dng t nh ngha (user-defined) Cc hm Built-In c chia lm 3 nhm: Rowset Functions : Loi ny thng tr v mt object v c i x nh mt table. V d nh hm OPENQUERY s tr v mt recordset v c th ng v tr ca mt table trong cu lnh Select. Aggregate Functions : Loi ny lm vic trn mt s gi tr v tr v mt gi tr n hay l cc gi tr tng. V d nh hm AVG s tr v gi tr trung bnh ca mt ct. Scalar Functions : Loi ny lm vic trn mt gi tr n v tr v mt gi tr n. Trong loi ny li chia lm nhiu loi nh nh cc hm v ton hc, v thi gian, x l kiu d liu String....V d nh hm MONTH('2002-09-30') s tr v thng 9. Cc hm User-Defined (c to ra bi cu lnh CREATE FUNCTION v phn body thng c gi trong cp lnh BEGIN...END) cng c chia lm cc nhm nh sau: Scalar Functions : Loi ny cng tr v mt gi tr n bng cu lnh RETURNS. Table Functions : Loi ny tr v mt table

2.3.8 Cc ton t (Operators)


Trong SQL Server cc biu din (expression) c th xut hin nhiu ton t. u tin ca ton t s quyt nh th t thc hin ca cc php tnh. Th t thc hin nh hng rt ln n kt qu. Bng di y m t cc ton t trong SQL Server 2005 Express Edititon v mc u tin ca cc ton t . Level 1 2 Operators * (Multiply), / (Division), % (Modulo) + (Positive), - (Negative), + (Add), (+ Concatenate), - (Subtract), 27

3 4 5 6 7

=, >, <, >=, <=, <>, !=, !>, !< (Comparison operators) NOT AND ALL, ANY, BETWEEN, IN, LIKE, OR, SOME = (Assignment)

2.3.9 Cc thnh phn iu khin (Control of flow)


Nh BEGIN...END, BREAK, CONTINUE, GOTO, IF...ELSE, RETURN, W HILE

2.3.10 Ch thch (Comment)


T-SQL dng k hiu -- ch thch cho mt dng n v k hiu /**/ ch thch cho mt nhm dng V d: /* Minh ha ch thch Ch thch cho mt dng n v mt nhm cc dng*/ DECLARE @MyNumber int -- khai bo bin SET @MyNumber = 4 - 2 + 27 -- kt qu l 29 SELECT @MyNumber

2.3.11 Gi tr NULL
Mt c s d liu l s phn nh ca mt h thng trong th gii thc, do cc gi tr d liu tn ti trong c s d liu c th khng xc nh c. Mt gi tr khng xc nh c xut hin trong c s d liu c th do mt s nguy n nhn sau: Gi tr c tn ti nhng khng bit. Khng xc nh c gi tr c tn ti hay khng. Ti mt thi im no gi tr cha c nhng ri c th s c. Gi tr b li do tnh ton (trn s, chia cho khng,...) Nhng gi tr khng xc nh c biu din trong c s d liu quan h bi cc gi tr NULL. y l gi tr c bit v khng nn nhm ln vi chui rng (i vi d liu k iu chui) hay gi tr khng (i vi gi tr kiu s). Gi tr NULL ng mt vai tr quan trng trong cc c s d liu v hu ht cc h qun tr c s d liu quan h hin nay u h tr vic s dng gi tr ny.

28

3 Ngn ng thao tc d liu DML


SQL c xem nh l cng c hu hiu thc hin cc y u cu truy vn v thao tc trn d liu. Trong chng ny, ta s bn lun n nhm cc cu lnh trong SQL c s dng cho mc ch ny. Nhm cc cu lnh ny c gi chung l ngn ng thao tc d liu (DML: Data Manipulation Language) bao g m cc cu lnh sau: SELECT: S dng truy xut d liu t mt hoc nhiu bng. INSERT: Thm d liu. UPDATE: Cp nht d liu DELETE: Xo d liu Trong s cc cu lnh ny, c th ni SELECT l cu lnh tng i phc tp v c s dng nhiu trong c s d liu. Vi cu lnh n y, ta khng ch thc hin cc yu cu truy xut d liu n thun m cn c th thc hin c cc yu cu thng k d liu phc tp. Cng chnh v vy, phn u ca chng ny s tp trung tng i nhiu n cu lnh SELECT. Cc cu lnh INSERT, UPDATE v DELETE c bn lun n cui chng

3.1 Cu lnh SELECT


Cu lnh SELECT c s dng truy xut d liu t cc d ng v cc ct ca mt hay nhiu bng, khung nhn. 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). Ngoi ra, cu lnh ny cn cung cp kh nng thc hin cc thao tc truy vn v thng k d liu phc tp khc. C php chung ca cu lnh SELECT c dng: SELECT [ALL | DISTINCT][TOP n] danh_sch_ch n [INTO tn_bng_mi] FROM danh_sch_bng/khung_nhn [WHERE iu_kin] [GROUP BY danh_sch_ct] [HAVING iu_kin] [ORDER BY ct_sp_xp] [COMPUTE danh_sch_hm_gp [BY danh_sch_ct]] iu cn lu u tin i vi cu lnh ny l cc thnh phn trong cu lnh SELECT nu c s dng phi tun theo ng th t nh trong c php. Nu khng, cu lnh s c xem l khng hp l. 29

Cu lnh SELECT c s dng tc ng l n cc bng d liu v kt qu ca cu lnh cng c hin th di dng bng, tc l mt tp hp cc dng v cc ct (ngoi tr trng hp s dng cu lnh SELECT vi mnh COMPUTE). V d:

V d di y hin th tn khch hng v a ch cc khch hng hin c. select customername, gender, address from customers

3.1.1 Danh sch chn trong cu lnh SELECT


Danh sch chn trong cu lnh SELEC T c s dng ch nh cc tr ng, cc biu thc cn hin th trong cc ct ca kt qu truy vn. Cc tr ng, cc biu thc c ch nh ngay sau t kho SELECT v phn cch nhau bi du phy. S dng danh sch chn trong cu lnh SELECT bao gm cc t rng hp sau: 30

Chn tt c cc ct: Nh ni trong chng 1, chng ta dng du * trong cu lnh Select hm chn ht tt c cc ct. Trong trng hp ny, cc ct c hin th trong kt qu truy vn s tun theo th t m chng c to ra khi bng c nh ngha. V d: Select * from Customers

Chn mt s ct c th: Trong trng hp cn ch nh c th cc ct cn hin th trong kt qu truy vn, ta ch nh danh sch cc t n ct trong danh sch chn. Th t ca cc ct trong kt qu truy vn tun theo th t ca cc trng trong danh sch chn. V d: Select CUSTOMERNAME, ADDRESS From Customers

Lu : Nu truy vn c thc hin trn nhiu bng/khung nhn v trong cc bng/khung nhn c cc trng trng tn th tn ca nhng trng ny nu xut hin trong danh sch chn phi c vit di dng: tn_bng.tn_trng Thay i tiu cc ct: Trong kt qu truy vn, tiu ca cc ct mc nh s l tn ca cc trng tng ng trong bng. Tuy nhin, cc tiu tr nn thn thin hn, ta c th i tn cc tiu ca cc ct. t tiu cho mt ct no , ta s dng cch vit: tiu__ct = tn_trng hoc tn_trng AS tiu__ct hoc tn_trng tiu__ct 31

V d: select [M khch hng] = Customerid, customername as [Tn khch hng], address [a ch] from Customers

S dng cu trc CASEWHEN : Cu trc CASE c s dng trong danh sch chn nhm thay i kt qu ca truy vn tu thuc vo cc trng hp khc nhau. Cu trc n y c c php nh sau: CASE biu_thc WHEN biu_thc_kim_tra THEN kt_qu [ ... ] [ELSE kt_qu_ca_else] END hoc: CASE WHEN iu_kin THEN kt_qu [ ... ] [ELSE kt_qu_ca_else] END V d: Cu lnh SQL di y s hin th gii tnh ca khch h ng ty theo gi tr thc c lu trong CSDL. Nu gi tr trong CSDL l FALSE-> hin th gii tnh N, nu gi tr l TRUE-> hin th gii tnh NAM. select CUSTOMERNAME, ADDRESS, case GENDER when 1 then 'NAM' else N'N' end as [GII TNH] from customers Cu lnh trn cng c th vit nh sau: 32

select CUSTOMERNAME, ADDRESS, case when GENDER = 1 then 'NAM' else N'N' end as [GII TNH] from customers

Loi b cc dng d liu trng nhau: T kha DISTINCT s loi b cc d ng d liu ging nhau. Trong v d tr n, c hai khch hng c tn Cao Van Trung. N u ta ch truy vn tn khch hng, loi b s trng lp ta dng t kha DISTINCT select distinct CUSTOMERNAME from customers

La chn mt s lng gii hn cc dng: T kha TOP n s tr v ch n d ng d liu V d: v d sau ch tr v duy nht hai dng d liu select top 2 Customername from customers

Nu s dung TOP n PERCENT th s tr v n % s dng d liu hin c trong CSDL.

33

3.1.2 Mnh FROM


Mnh FROM trong cu lnh SELECT c s dung nhm ch nh cc bng v khung nhn cn truy xut d liu. Sau FROM l danh sch tn ca cc bng v khung nhn tham gia vo truy vn, tn ca cc bng v khung nhn c phn cch nhau bi du phy. V d: Cu lnh sau hin th thng tin khch h ng Select * from Customers

Trong mnh FROM c th s dng b danh (alias) nhm l m cho cu truy vn d nhn hn. V d: Select * from Customers c Where c.CustomerID = 1

3.1.3 Mnh WHERE - iu kin truy vn d liu


Mnh WHERE trong cu lnh SELECT c s dng nhm 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 tho mn iu kin c ch nh mi c hin th trong kt qu truy vn. V d: Lc ra thng tin cc khch h ng c m Select * From Customers Where CustomerID > 3

Trong mnh WHERE thng s dng: Cc ton t kt hp iu kin (AND, OR) Cc ton t so snh Kim tra gii hn ca d liu (BETWEEN/ NOT BETWEEN) 34

Tp hp Kim tra khun dng d liu. Cc gi tr NULL 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: V d di y ly tn, ngy sinh theo nh dng dd/MM/yyyy v a ch ca nhng khch hng c tn Le Thi Hoa v tui cc khch hng ny ln hn 20. select CUSTOMERNAME, convert (varchar, BIRTHDAY, 103) as BIRTHDAY, ADDRESS from Customers where Customername = 'Le Thi Hoa' and year(getdate()) - year(BIRTHDAY) > 20

Kim tra gii hn ca d liu kim tra xem gi tr d liu nm trong (ngo i) mt khong no , ta s dng ton t BETWEEN/ NOT BETWEEN nh sau: Mnh variable BETWEEN a AND b variable NOT BETWEEN a AND b ngha a <= variable <=b variable <a hoc variable > b

V d: v d ny tng t v d trn nhng iu kin l tui nm trong khong t 20 n 30 tui. select CUSTOMERNAME, convert (varchar, BIRTHDAY, 103) as BIRTHDAY, ADDRESS from Customers where Customername = 'Le Thi Hoa' and year(getdate()) - year(BIRTHDAY) between 20 and 30 35

Ton t lm vic trn tp hp (IN/ NOT IN) T kho IN/ NOT IN c s dng khi ta cn ch nh iu kin t m kim d liu cho cu lnh SELECT l mt danh sch cc gi tr. Sau IN/ NOT IN c th l mt danh sch cc gi tr hoc l mt cu lnh SELECT khc. V d: Cu lnh di y ly ra cc thng tin ca khch hng c m l 5,6 hoc 7 select CUSTOMERID, CUSTOMERNAME, convert(varchar,BIRTHDAY, 103) as BIRTHDAY, ADDRESS from Customers where CUSTOMERID in (5,6,7)

V d: V d ny minh ha mt cu lnh SELECT khc ng sau mnh IN/ NOT IN select CUSTOMERID, CUSTOMERNAME, convert(varchar,BIRTHDAY, 103) as BIRTHDAY, ADDRESS from Customers where CUSTOMERID not in ( select CUSTOMERID from customers where customerid >= 7)

Ton t LIKE/ NOT LIKE v k t i din (WildCard) T kho 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 Mt k t bt k Mt k t nm trong gii hn c ch nh. V d:[a-f] hm ch mt trong cc k t: a, b, c, d, e, f. Mt k t khng nm trong gii hn c ch nh. V d:[^a-f] hm ch mt k t khc tt c cc k t: a, b, c, d, e, f.

V d: V d di y tm ra cc khch hng c tn b t u bng Nguyen 36

select * from customers where customername like 'Nguyen%'

Gi tr NULL D liu trong mt ct cho php NULL s nhn gi tr NULL trong cc tr ng hp sau: Nu khng c d liu c nhp cho ct 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, kim tra gi tr ca mt ct c gi tr NULL hay khng, ta s dng cch vit: WHERE tn_ct IS NULL hoc: WHERE tn_ct IS NOT NULL V d: select * from Customers where birthday is null

To mi bng d liu t cau lnh SELECT 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: select CUSTOMERNAME, convert(varchar,BIRTHDAY, 103) as BIRTHDAY, ADDRESS into NEWCUSTOMERS from Customers Lu : Nu trong danh sch chn c cc biu thc th nhng biu thc ny phi c t tiu 37

Sp xp kt qu truy vn Mc nh, cc dng d liu trong kt qu ca cu t ruy vn tun theo th t ca chng trong bng d liu hoc c sp xp theo ch mc (nu tr n bng c ch mc). Trong tr ng hp mun d liu c sp xp theo chiu tng hoc gim ca gi tr ca mt hoc nhiu trng, ta s dng thm mnh ORDER BY trong cu lnh SELECT; Sau ORDER BY l danh sch cc ct cn sp xp (ti a l 16 ct). D liu c sp xp c th theo chiu tng (ASC) hoc gim (DESC), mc nh l sp xp theo chiu tng. Nu sau ORDER BY c nhiu ct th vic sp xp d liu s c u tin theo th t t tri qua phi. V d: V d i y sp xp thng tin cc khch h ng theo th t tui gim dn. select CUSTOMERNAME, year(getdate()) - year(BIRTHDAY) as AGE, ADDRESS from Customers order by AGE DESC

Ta c th ch nh s th t ca ct cn c sp xp. Cu lnh v d tr n c th c vit li nh sau: select CUSTOMERNAME, year(getdate()) - year(BIRTHDAY) as AGE, ADDRESS from Customers order by 2 DESC

3.1.4 Php hp (UNION)


Php hp c s dng trong trng hp ta cn gp kt qu ca hai hay nhiu truy vn thnh mt tp kt qu duy nht. SQL cung cp ton t UNION thc hin php hp. C php nh sau: Cu_lnh_1 UNION [ALL] Cu_lnh_2 [UNION [ALL] Cu_lnh_3] ... [UNION [ALL] Cu_lnh_n] [ORDER BY ct_sp_xp] [COMPUTE danh_sch_hm_gp [BY danh_sch_ct]] 38

Trong Cu_lnh_1 c dng SELECT danh_sch_ct [INTO tn_bng_mi] [FROM danh_sch_bng|khung_nhn] [WHERE iu_kin] [GROUP BY danh_sch_c t] [HAVING iu_kin] v Cu_lnh_i (i = 2,..,n) c dng SELECT danh_sch_ct [FROM danh_sch_bng|khung_nhn] [WHERE iu_kin] [GROUP BY danh_sch_c t] [HAVING iu_kin] V d: Php hp gia hai bng di y cho kt qu nh sau:

UNION select A,B from A union select F,G from B Mc nh, nu trong cc truy vn th nh phn ca php hp xut hin nhng d ng d liu ging nhau th trong kt qu truy vn ch gi li mt d ng. Nu mun gi li cc dng ny, ta phi s dng thm t kho ALL trong truy vn thnh phn.

39

UNION ALL Khi s dng ton t UNION thc hin php hp, ta cn ch cc nguy n tc sau: Danh sch ct trong cc truy vn thnh phn phi c cng s lng. 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 thnh phn phi cng kiu d liu. Cc ct tng ng trong bn thn tng truy vn thnh phn ca mt cu lnh UNION phi xut hin theo th t nh nhau. Nguyn nhn l do php h p 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 h n (nu c th c). Tiu ct trong kt qu ca php hp s l tiu ct c ch nh trong truy vn u tin. Mnh ORDER BY v COMPUTE dng sp xp kt qu truy vn hoc tnh ton cc gi tr thng k ch c s dng cui cu lnh UNION. Chng khng c s dng trong bt k truy vn th nh phn no. Mnh GROUP BY v HAVING ch c th c s dng trong bn thn tng truy vn thnh phn. Chng khng c php s dng tc ng ln kt qu chung ca php hp. Php ton UNION c th c s dng bn trong cu lnh INSERT. Php ton UNION khng c s dng trong cu lnh CREATE VIEW.

40

3.1.5 Php ni
Khi cn thc hin mt yu cu truy vn d liu t hai hay nhiu bng, ta phi s d ng n php ni. Mt cu lnh ni kt hp cc d ng d liu trong cc bng khc nhau li theo mt hoc nhiu iu kin no v hin th chng trong kt qu truy vn. V d: tm ra khch hng c m l 3 t hng trong nhng ngy no th cu truy vn nh sau: select c.CUSTOMERNAME, o.ORDERDATE from customers c, orders o where c.customerid = o.customerid and c.customerid = 3

Gii thch cu truy vn: Bng Customers

Bng Order

Trc tin vo bng Customers tm ra dng c c m khch hng l 3. Tm kim trong bng Orders cc dng c gi tr trng CUSTOMERID l 3 v cho cc dng ny vo kt qu truy vn. Nh vy thc hin yu cu truy vn, chng ta phi thc hin php kt ni gia hai bng Customers v Orders vi iu kin kt ni l CUSTOMERID ca bng CUSTOMERS bng vi CUSTOMERID ca b ng ORDERS. Php ni l c s thc hin cc yu cu truy vn d liu lin quan n nhiu bng. Mt cu lnh ni thc hin ly cc d ng d liu trong cc bng tham gia truy vn, so snh gi tr ca cc dng ny trn mt hoc nhiu ct c ch nh trong iu kin ni v kt hp cc dng tho mn iu kin thnh nhng dng trong kt qu truy vn. thc hin c mt php ni, cn phi xc nh c nhng yu t sau: 41

Nhng ct no cn hin th trong kt qu t ruy vn Nhng bng no c tham gia vo truy vn. iu kin thc hin php ni gia cc bng d liu l g Trong cc yu t k trn, vic xc nh chnh xc iu kin thc hin php ni gia cc bng ng vai tr quan trng nht. Trong a s cc tr ng hp, iu kin ca php ni c xc nh nh vo mi quan h gia cc bng cn phi truy xut d liu. Thng th ng, l iu kin bng nhau gia kho chnh v kho ngoi ca hai bng c mi quan h vi nhau. Nh vy, c th a ra mt cu lnh ni thc hin chnh xc yu cu truy vn d liu i hi phi hiu c mi quan h cng nh ngha ca chng gia cc bng d liu. Mt cu lnh ni cng c bt u vi t kha SELECT. Cc ct c ch nh tn sau t kho SELECT l cc ct c hin th trong kt qu truy vn. Vic s dng t n cc ct trong danh sch chn c th l: Tn ca mt s ct no trong cc bng c tham gia vo truy vn. Nu tn ct trong cc bng trng tn nhau th tn ct phi c vit di dng tn_bng.tn_ct Du sao (*) c s dng trong danh sch chn khi cn hin th tt c cc ct ca cc bng tham gia truy vn. Trong trng hp cn hin th tt c cc ct ca mt bng n o , ta s dng cch vit: tn_bng.* Mnh FROM trong php ni Sau mnh FROM ca cu lnh ni l danh sch tn cc bng (hay khung nhn) tham gia vo truy vn. Nu ta s dng du * trong danh sch chn th th t ca cc bng lit k sau FROM s nh hng n th t cc ct c hin th trong kt qu truy vn. Mnh WHERE trong php ni Khi hai hay nhiu bng c ni vi nhau, ta phi ch nh iu kin thc hin php ni ngay sau mnh WHERE. iu kin ni c biu din di dng biu thc logic so snh gi tr d liu gia cc ct ca cc bng tham gia truy vn. Cc ton t so snh di y c s dng xc nh iu kin ni Php ton = > >= < ngha Bng Ln hn Ln hn hoc bng Nh hn 42

<= <> !> !<

Nh hn hoc bng Khc Khng ln hn Khng nh hn

3.1.6 Cc loi php ni


Php ni bng: Mt php ni bng (equi-join) l mt php ni trong gi tr ca cc ct c s dng ni c so snh vi nhau da tr n tiu chun bng v tt c cc ct trong cc bng tham gia ni u c a ra trong kt qu. Mt dng c bit ca php ni bng c s dng nhiu l php ni t nhin (naturaljoin). Trong php ni t nhin, iu kin ni gia hai bng chnh l iu kin bng gia kho ngoi v kho chnh ca hai bng; V trong danh sch chn ca cu lnh ch gi li mt ct trong hai ct tham gia vo iu kin ca php ni. V d php kt ni bng: select * from Customers c, Orders o where c.customerid = o.customerid

V d php kt ni t nhin: select c.CUSTOMERID, c.CUSTOMERNAME, c.BIRTHDAY, c.GENDER, c.ADDRESS, o.ORDERDATE from Customers c, Orders o where c.customerid = o.customerid hoc vit gn: select c.*, o.ORDERDATE from Customers c, Orders o where c.customerid = o.customerid

Trong php kt ni bng, trng CUSTOMERID xut hin hai ln. S d tha c loi b bng cch s dng php kt ni t nhi n v vic ch nh r cc ct ct cn truy xut.

43

Trong cc cu lnh ni, ngoi iu kin ca php ni c ch nh trong mnh WHERE cn c th ch nh cc iu kin t m kim d liu khc (iu kin chn). Thng thng, cc iu kin ny c kt hp vi iu kin ni thng qua ton t AND. V d: select c.*, o.ORDERDATE from Customers c, Orders o where c.customerid = o.customerid and c.customerid = 3 Php t ni Php t ni l php ni m trong iu kin ni c ch nh lin quan n cc ct ca cng mt bng. Trong trng hp ny, s c s xut hin tn ca cng mt bng nhiu ln trong mnh FROM v do cc bng cn phi c t b danh. V d: Gi s c yu cu tm ra cc khch hng c nhi u hn mt n t hng trong cng ngy select c1.CUSTOMERID, c1.CUSTOMERNAME from customers c1, customers c2, orders o1, orders o2 where c1.customerid = o1.customerid and c2.customerid = o2.customerid and c1.customerid = c2.customerid and o1.orderdate = o2.orderdate and o1.orderid <> o2.ord erid Cu truy vn c gii thch nh sau: Ln lt ly ra cc m khch hng, m ha n v ngy t hng t bng c1, o1 em so snh ln l t vi cc m khch hng, m ha n v ngy t hng t bng c2, o2. Nu vic so snh hai tp hp n y tha iu kin sau y: m khch hng trng nhau, ngy t hng trng nhau v c m ha n khc nhau th thng tin khch hng ny c cho vo kt qua truy vn. Php ni ngoi Trong cc php ni cp trn, ch nhng dng c gi tr trong cc ct c ch nh tho mn iu kin kt ni mi c hin th trong kt qu truy vn, v c gi l php ni trong (inner join) Theo mt ngha n o , nhng php ni ny loi b thng tin cha trong nhng dng khng tho mn iu kin ni. Tuy nhin, i khi ta cng cn gi li nhng thng tin ny bng cch cho php nhng d ng khng tho mn iu kin ni c mt trong kt qu ca php ni. lm iu ny, ta c th s dng php ni ngoi. SQL cung cp cc loi php ni ngo i sau y: 44

Php ni ngoi tri (k hiu: *=): Php ni ny hin th trong kt qu truy vn tt c cc dng d liu ca bng nm bn tri trong iu kin ni cho d nhng dng ny khng tho mn iu kin ca php ni Php ni ngoi phi (k hiu: =*): Php ni n y hin th trong kt qu truy vn tt c cc dng d liu ca bng nm bn phi trong iu kin ni cho d nhng dng ny khng tho iu kin ca php ni. Tuy nhin trong SQL Server 2005 Express Edition khng h tr trc tip cc php ni *= v =*. Mt khc trong cc phin bn SQL Server sp ti cc php ni ny s hon ton khng c h tr. Do Microsoft khuyn co ng i s dng dng cc php ni LEFT JOIN, RIGHT JOIN. Cc php ni ny s c ni r trong phn di y.

3.1.7 Php ni theo chun SQL-92


Chun SQL2 (SQL-92) a ra mt cch khc biu din cho php ni, trong cch biu din ny, iu kin ca php ni khng c ch nh trong mnh WHERE m c ch nh ngay trong mnh FROM ca cu lnh. Cch s dng php ni n y cho php ta biu din php ni cng nh iu kin ni c r rng, c bit l trong trng hp php ni c thc hin trn ba bng tr ln. Php ni trong iu kin thc hin php ni trong c ch nh trong mnh FROM theo c php nh sau: tn_bng_1 [INNER] JOIN tn_bng_2 ON iu_kin_ni V d: Php ni ngoi SQL2 cung cp cc php ni ngoi sau y: Php ni ngoi tri (LEFT OUTER JOIN) Php ni ngoi phi (RIGHT OUTER JOIN) Php ni ngoi y (FULL OUTER JOIN) Cng tng t nh php ni trong, iu kin ca php ni ngo i cng c ch nh ngay trong mnh FROM theo c php: tn_bng_1 LEFT|RIGHT|FULL [OUTER] JOIN t n_bng_2 ON iu_kin_ni V d: tm ra cc khch hng c t hng thay v s dng cu truy vn sau: select * customers c, orders o where c.customerid = o.orderid 45

Ta c th s dng cu truy vn sau: select * from customers c inner join orders o on c.customerid = o.customerid

Nu php ni ngoi tri hin th trong kt qu truy vn c nhng d ng d liu khng tho iu kin ni ca bng bn tri trong php ni th php ni ngoi y hin th trong kt qu truy vn c nhng dng d liu khng tho iu kin ni ca c hai bng tham gia v o php ni. V d: Gi s c CSDL nh sau:

Thc hin php ni ngoi tri, ni ngoi phi v ni ngoi y cho kt qu nh sau: Php ni ngoi tri: select * from faculty f left join class c on f.facultyid = c.facultyid

Php ni ngoi phi: select * from faculty f right join class c on f.facultyid = c.facultyid

Php ni ngoi y : select * from faculty f full join class c 46

on f.facultyid = c.facultyid

Mt c im ni bt ca SQL2 l cho php biu din php ni trn nhiu bng d liu mt cch r rng. Th t thc hin php ni gia cc bng c xc nh theo ngha kt qu ca php ni ny c s dng trong mt php ni khc. V d: Lit k tn cc mt hng c trong n t hng c m l 1. select i.ITEMNAME, o.ORDERDATE from (orders o inner join orderdetail od on o.orderid = od.orderid) inner join items i on od.itemid = i.itemid where o.orderid = 1

3.1.8 Mnh GROUP BY


Ngoi kh nng thc hin cc yu cu truy vn d liu thng th ng (chiu, chn, ni,) nh cp nh cc phn trc, cu lnh SELECT cn cho php thc hin cc thao tc truy vn v tnh ton thng k trn d liu. Mnh GROUP BY s dng trong cu lnh SELECT nhm phn hoch cc d ng d liu trong bng thnh cc nhm d liu, v trn mi nhm d liu thc hin tnh ton cc gi tr thng k nh tnh tng, tnh gi tr trung b nh,... Cc hm gp (aggregate functions) c s dng tnh gi tr thng k cho ton bng hoc trn mi nhm d liu. Chng c th c s dng nh l cc ct trong danh sch chn ca cu lnh SELECT hoc xut hin trong mnh HAVING, nh ng khng c php xut hin trong mnh WHERE SQL cung cp cc hm gp di y: Hm gp Chc nng SUM([ALL| DISTINCT] biu_thc) AVG([ALL| DISTINCT] biu_thc) COUNT([ALL|DISTINCT] biu_thc) Tnh tng cc gi tr. Tnh trung bnh ca cc gi tr m s cc gi tr trong biu thc. 47

COUNT(*) MAX(biu_thc) MIN(biu_thc)

m s cc dng c chn. Tnh gi tr ln nht Tnh gi tr nh nht

Hm SUM v AVG ch lm vic vi cc biu thc s. Hm SUM, AVG, COUNT, MIN v MAX b qua cc gi tr NULL khi tnh ton. Hm COUNT(*) khng b qua cc gi tr NULL. Mc nh, cc hm gp thc hin tnh ton thng k trn ton b d liu. Trong trng hp cn loi b bt cc gi tr tr ng nhau (ch gi li mt gi tr), ta ch nh th m t kho DISTINCT trc biu thc l i s ca hm. Thng k trn ton b d liu Khi cn tnh ton gi tr thng k trn ton b d liu, ta s dng cc h m gp trong danh sch chn ca cu lnh SELECT. Trong tr ng hp ny, trong danh sch chn khng c s dng bt k mt tn ct hay biu thc no ngoi cc hm gp. V d: Tnh tui trung bnh, tui nh nht v ln nht ca cc khch hng select min(year(getdate())-year(BIRTHDAY)) as MINAGE, max(year(getdate())-year(BIRTHDAY)) as MAXAGE, avg(year(getdate())-year(BIRTHDAY)) as AVGAGE from customers

Thng k trn nhm Trong trng hp cn thc hin tnh ton cc gi tr thng k trn cc nhm d liu, ta s dng mnh GROUP BY phn hoch d liu v o trong cc nhm. Cc hm g p c s dng s thc hin thao tc tnh ton tr n mi nhm v cho bit gi tr thng k theo cc nhm d liu. V d: Cu truy vn sau cho bit s tng s tin khch hng phi tr cho tt c cc ln t hng select c.CUSTOMERID, c.CUSTOMERNAME, convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY) as money),1) as SUMTOTAL from customers c inner join orders o on o.customerid = c.customerid inner join orderdetail od on o.orderid = od.orderid inner join items i on i.itemid = od.itemid group by c.customerid, c.customername 48

Nu mun hin s tin khch h ng phi tr cho tng n t hng, ch cn thm trng ORDERID vo mnh group by. select c.CUSTOMERID, c.CUSTOMERNAME, convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY)as SUMTOTAL from money),1) as

customers c inner join orders o on o.customerid = c.customerid inner join orderdetail od on o.orderid = od.orderid inner join items i on i.itemid = od.itemid

group by c.customerid, c.customername, o.orderid

Lu : Trong trng hp danh sch chn ca cu lnh SELECT c c cc h m gp v nhng biu thc khng phi l hm gp th nhng biu thc ny phi c mt y trong mnh GROUP BY, nu khng cu lnh s khng hp l. Mnh HAVING ch nh iu kin trong h m gp Mnh HAVING c s dng nhm ch nh iu kin i vi cc gi tr thng k c sn sinh t cc hm gp tng t nh cch thc mnh WHERE thit lp cc iu kin cho cu lnh SELECT. Mnh HAVING th ng khng thc s c ngha nu nh khng s dng kt hp vi mnh GROUP BY. Mt im khc bit gia HAVING v WHERE l trong iu kin ca WHERE khng c c cc hm gp trong khi HAVING li cho php s dng cc hm gp trong iu kin ca mnh. V d: Tm ra cc khch hng c t ng s tin phi thanh ton cho tt c cc ln t h ng ln hn 100 triu. select c.CUSTOMERID, c.CUSTOMERNAME, convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY)as money),1) as SUMTOTAL from customers c inner join orders o on o.customerid = c.customerid inner join orderdetail od on o.orderid = od.orderid inner join items i on i.itemid = od.itemid group by c.customerid, c.cu stomername having sum(i.UNITPRICE*od.QUANTITY) > 100000000 49

3.1.9 Truy vn con (Subquery)


Truy vn con l mt cu lnh SELECT c lng vo bn trong mt cu lnh SELECT, INSERT, UPDATE, DELETE ho c bn trong mt truy vn con khc. Loi truy vn ny c s dng biu din cho nhng truy vn trong iu kin truy vn d liu cn phi s dng n kt qu ca mt truy vn khc. C php ca truy vn con nh sau: (SELECT [ALL | DISTINCT] danh_sch_ch n FROM danh_sch_bng [WHERE iu_kin] [GROUP BY danh_sch_ct] [HAVING iu_kin]) Khi s dng truy vn con cn l u mt s quy tc sau: Mt truy vn con phi c vit trong cp du ngoc. Trong hu ht cc tr ng hp, mt truy vn con thng phi c kt qu l mt ct (tc l ch c duy nht mt ct trong danh sch chn). Mnh COMPUTE v ORDER BY khng c php s dng trong truy vn con. Cc tn ct xut hin trong truy vn con c th l cc ct ca cc bng trong truy vn ngoi. Mt truy vn con thng c s dng lm iu kin trong mnh WHERE hoc HAVING ca mt truy vn khc. Nu truy vn con tr v ng mt gi tr, n c th s dng nh l mt thnh phn bn trong mt biu thc (chng hn xut hin trong mt php so snh bng) Php so snh i vi vi kt qu truy vn con Kt qu ca truy vn con c th c s dng thc hin php so snh s hc vi mt biu thc ca truy vn cha. Trong tr ng hp ny, truy vn con c s dng di dng: WHERE biu_thc php_ton_s_hc [ANY|ALL] (truy_vn_con) Trong php ton s hc c th s dng bao gm: =, <>, >, <, >=, <=; V truy vn con phi c kt qu bao gm ng mt ct. V d: Cu truy vn sau y tm tn khch hng c tui ln nht select c.CUSTOMERNAME, c.ADDRESS from customers c where year(getdate()) - year(BIRTHDAY) = 50

(select max(year(getdate()) - year(BIRTHDAY)) from customers)

Nu truy vn con tr v nhiu h n mt gi tr, vic s dng php so snh nh trn s khng hp l. Trong trng hp ny, sau php ton so snh ph i s dng thm lng t ALL hoc ANY. Lng t ALL c s dng khi cn so snh gi tr ca biu thc vi tt c cc gi tr tr v trong kt qu ca truy vn con; ng c lai, php so snh vi l ng t ANY c kt qu ng khi ch cn mt gi tr bt k n o trong kt qu ca truy vn con tho m n iu kin V d: Ton t IN/NOT IN Khi cn thc hin php kim tra gi tr ca mt biu thc c xut hin (khng xut hin) trong tp cc gi tr ca truy vn con hay khng, ta c th s dng ton t IN (NOT IN) nh sau: WHERE biu_thc [NOT] IN (truy_vn_con) V d: Truy vn con vi EXISTS Lng t EXISTS c s dng kt hp vi truy vn con d i dng: WHERE [NOT] EXISTS (truy_v n_con) Lng t EXISTS (tng ng NOT EXISTS) tr v gi tr True (t ng ng False) nu kt qu ca truy vn con c t nht mt d ng (tng ng khng c dng no). iu khc bit ca vic s dng EXISTS vi hai cch nu trn l trong danh sch chn ca truy vn con c th c nhiu hn hai ct. V d: Truy vn con v mnh HAVING Mt truy vn con c th c s dng trong mnh HAVING ca mt truy vn khc. Trong trng hp ny, kt qu ca truy vn con c s dng to nn iu kin i vi cc hm gp. V d:

3.2 Thm, cp nht v xa d liu


Cc cu lnh thao tc d liu trong SQL khng nhng ch s dng truy vn d liu m cn thay i v cp nht d liu trong c s d liu. So vi cu lnh SELECT, vic s dng cc cu lnh b sung, cp nht hay xo d liu n gin hn nhiu. Trong phn cn li ca chng ny s cp n 3 cu lnh: 51

Lnh INSERT Lnh UPDATE Lnh DELETE

3.2.1 Thm d liu


D liu trong cc bng c th hin di dng cc dng (bn ghi). b sung thm cc dng d liu vo mt bng, ta s dng cu lnh INSERT. Hu ht cc h qun tr CSDL da trn SQL cung cp cc cch di y thc hin thao tc thm d liu cho bng: Thm tng dng d liu vi mi cu lnh INSERT. y l cc s dng thng gp nht trong giao tc SQL. Thm nhiu dng d liu bng cch truy xut d liu t cc bng d liu khc. Thm tng dng d liu b sung mt dng d liu mi vo bng, ta s dng cu lnh INSERT vi c php nh sau: INSERT INTO tn_bng[(danh_sch_ct)] VALUES(danh_sch_tr) Trong cu lnh INSERT, danh sch ct ngay sau t n bng khng cn thit phi ch nh nu gi tr cc trng ca bn ghi mi c ch nh y trong danh sch tr. Trong trng hp ny, th t cc gi tr trong danh sch tr phi bng vi s l ng cc trng ca bng cn b sung d liu cng nh phi tun theo ng th t ca cc tr ng nh khi bng c nh ngha V d: Thm thng tin mt khch hng mi vo bng Customer insert into customers (customername, birthday, gender, address) values('Nguyen Van An', '4/2/1976', 'True', '14 Thong Nhat') hoc insert into customers values('Nguyen Van An', '4/2/1976', 'True', '14 Thong Nhat') Lu : Trng CUSTOMERID c thit lp identity l YES nn ta khng c n thm gi tr trng ny m SQL s t ng to ra mt gi tr cho tr ng ny. Chi tit v identity s ni trong chng 4. Trong trng hp ch nhp gi tr cho mt s ct trong bng, ta phi ch nh danh sch cc ct cn nhp d liu ngay sau t n bng. Khi , cc ct khng c nhp d liu s nhn gi tr mc nh (nu c) hoc nhn gi tr NULL (nu ct cho php chp nhn gi tr NULL). Nu mt ct khng c gi tr mc nh v khng chp nhn gi tr NULL m khng uc nhp d liu, cu lnh s b li. Thm mt tp cc dng d liu vo bng 52

Mt cch s dng khc ca cu lnh INSERT c s dng b sung nhiu d ng d liu vo mt bng, cc dng d liu ny c ly t mt bng khc thng qua c u lnh SELECT. cch ny, cc gi tr d liu c b sung vo bng khng c ch nh tng minh m thay vo l m t cu lnh SELECT truy vn d liu t bng khc. C php cu lnh INSERT c dng nh sau: INSERT INTO tn_bng[(danh_sch_ct)] cu_lnh _SELECT V d: insert into Customers_Backup select * from Customers Lu : Kt qu ca cu lnh SELECT phi c s ct bng vi s ct c ch nh trong bng ch v phi tng thch v kiu d liu.

3.2.2 Cp nht d liu


Cu lnh UPDATE trong SQL c s dng cp nht d liu trong cc bng. Cu lnh ny c c php nh sau: UPDATE tn_bng SET tn_ct = biu_thc [, ..., tn_ct_k = biu_thc_k] [FROM danh_sch_bng] [WHERE iu_kin] Sau UPDATE l tn ca bng cn cp nht d liu. Mt cu lnh UPDATE c t h cp nht d liu cho nhiu ct bng cch ch nh cc danh sch t n ct v biu thc tng ng sau t kho SET. Mnh WHERE trong cu lnh UPDATE c s dng ch nh cc dng d liu chu tc ng ca cu lnh (nu khng ch nh, ph m vi tc ng ca cu lnh c hiu l ton b cc dng trong bng) V d: update customers set customername = 'Cao Van Chung' where customerid = 9 Trong cu lnh UPDATE c th s dng CASEWHEN . V d: select * into tmp1 from customers 53

update tmp1 set address = case end when customerid < 2 then 'Nguyen Trung Truc' else 'Nguyen Thi Minh Khai'

3.2.3 Xa d liu
xo d liu trong mt bng, ta s dng cu lnh DELETE. C php ca cu lnh n y nh sau: DELETE FROM tn_bng [FROM danh_sch_bng] [WHERE iu_kin] Trong cu lnh ny, tn ca bng cn xo d liu c ch nh sau DELETE FROM. Mnh WHERE trong cu lnh c s dng ch nh iu kin i vi cc d ng d liu cn xo. Nu cu lnh DELETE khng c mnh WHERE th ton b cc dng d liu trong bng u b xo. V d: delete from Items where itemid = 3 Xo d liu khi iu kin lin quan n nhiu bng Nu iu kin trong cu lnh DELETE li n quan n cc bng khng phi l bng cn xa d liu, ta phi s dng th m mnh FROM v sau l danh sch tn cc b ng . Trong trng hp ny, trong mnh WHERE ta ch nh th m iu kin ni gia cc bng V d: delete from orderdetail from items where items.itemid = orderdetail.itemid and items.itemname = 'LAPTOP' S dng truy vn con trong cu lnh DELETE Mt cu lnh SELECT c th c lng vo trong mnh WHERE trong cu lnh DELETE lm iu kin cho cu lnh tng t nh cu lnh UPDATE. V d: delete from orderdetail from items 54

where items.itemid = (select i.itemid from items i inner join orderdetail od on i.itemid = od.itemid WHERE itemname = 'LAPTOP') Xo ton b d liu trong bng Cu lnh DELETE khng ch nh iu kin i vi cc d ng d liu cn xo trong mnh WHERE s xo ton b d liu trong bng. Thay v s dng cu lnh DELETE trong tr ng hp ny, ta c th s dng cu lnh TRUNCATE c c php nh sau: TRUNCATE TABLE tn_b ng V d: truncate table tmp1

55

4 Ngn ng nh ngha d liu DDL


Trong chng ny s cp n nhm cc cu lnh c s dng nh ngha v qun l cc i tng CSDL nh bng, khung nhn, ch mc,... v c gi l ngn ng nh ngha d liu (DDL). V c bn, ngn ng nh ngha d liu bao gm cc lnh: CREATE: nh ngha v to mi i tng CSDL. ALTER: thay i nh ngha ca i tng CSDL. DROP: Xo i tng CSDL c.

4.1 To bng
Cu lnh CREATE TABLE c s dng nh ngha mt bng d liu mi trong CSDL. Khi nh ngha mt bng d liu mi, ta cn phi xc nh c cc yu cu sau y: Bng mi c to ra s dng vi mc ch g v c vai tr nh th no trong c s d liu. Cu trc ca bng bao gm nhng tr ng (ct) no, mi mt trng c ngha nh th no trong vic biu din d liu, kiu d liu ca mi trng l g v trng c cho php nhn gi tr NULL hay khng. Nhng trng no s tham gia vo kha chnh ca bng. Bng c quan h vi nhng bng khc hay khng v nu c th quan h nh th no. Trn cc trng ca bng c tn ti nhn g rng buc v khun dng, iu kin hp l ca d liu hay khng; nu c th s dng u v nh th no. Cu lnh CREATE TABLE c c php nh sau CREATE TABLE tn_bng ( tn_ct thuc_tnh_ct cc_rng_buc [,... ,tn_ct_n thuc_tnh_ct_n cc_rng_buc_ct_n] [,cc_rng_buc_trn_bng] ) Tn_bng: tun theo quy tc nh danh, khng vt qu 128 k t Tn_ct: cc ct trong bng, mi bng c t nht mt ct. Thuc_tnh_ct: bao gm kiu d liu ca ct, gi tr mc nh ca ct, ct c c thit lp thuc tnh identity, ct c chp nhn gi tr NULL hay khng. Trong kiu d liu l thuc tnh bt buc. 56

Cc_rng_buc: gm cc rng buc v khun dng d liu ( r ng buc CHECK) hay cc rng buc v bo ton d liu (PRIMARY KEY, FOREIGN KEY, UNIQUE) V d: V d di y to mt bng c tn CUSTOMERS create table customers ( customerid int identity (1,1) primary key, customername nvarchar(50) not null, address nvarchar(100 ) null , birthday datetime null, gender bit default('true') not null ) Ct customerid c kiu d liu int, c ch nh thuc tnh identity(1,1) ngha l d liu ct ny c thm t ng bt u t 1 v mi ln c dng mi thm vo, gi tr ct ny c tng ln 1. Ct ny cng c ch nh lm kha chnh ca bng thng qua thuc tnh primary key Thuc tnh NULL/ NOT NULL ch ra rng ct c chp nhn/ khng chp nhn gi tr NULL. Ct gender c ch nh gi tr mc nh l true ngha l nu khng ch nh gi tr cho ct ny th ct ny c gi tr l true V d: Thm dng mi vo bng customers vi gi tr truyn v o y cho cc ct insert into customers values('Nguyen Van An', '22 Nguyen Thien Thuat', '5/5/1988', 'True') Thm dng mi vo bng customers s dng gi tr mc nh insert into customers (customername, addr ess, birthday) values('Nguyen Van An', '22 Nguyen Thien Thuat', '5/5/1988') Thm dng mi vo bng customers v khng truyn gi tr cho cc ct cho php gi tr NULL insert into customers (customername ) values('Nguyen Van An')

57

4.2 Cc loi rng buc


4.2.1 Rng buc CHECK
Rng buc CHECK c s dng nhm ch nh iu kin hp l i vi d liu. Mi khi c s thay i d liu trn bng (INSERT, UPDATE), nhng r ng buc ny s c s dng nhm kim tra xem d liu mi c hp l hay khng. Rng buc CHECK c khai bo theo c php nh sau: [CONSTRAINT tn_rng_bu c] CHECK (iu_kin) V d: create table students ( studentid int identity(1,1) primary key, studentname nvarchar(50) not null, address nvarchar(100) not null, score1 tinyint not null constraint chk_score1 CHECK (score1 >= 0 and score1 <= 10), score2 tinyint not null constraint chk_score2 CHECK (score2 between 0 and 10), score3 tinyint not null constraint chk_score3 CHECK (score3 in (1,2,3,4,5,6,7,8,9,10)), ) Thc hin vic thm mt dng c d liu khng tha iu kin insert into students values('Nguyen Van Dung', '12 Tran Quang Khai', 10, 10, -2)

C th gp chung cc rng buc CHECK li trong mt r ng buc duy nht nh sau create table students ( studentid int identity(1,1) primary key, studentname nvarchar(50) not null, address nvarchar(100) not null, score1 tinyint not null , score2 tinyint not null, 58

score3 tinyint not null, constraint chk_score CHECK( (score1>= 0 and score1 <=10) and (score2 between 0 and 10) and (score3 in (1,2,3,4,5,6,7,8,9,10))) )

4.2.2 Rng buc PRIMARY KEY


Rng buc PRIMARY KEY c s dng nh ngha kho chnh ca bng. Kho chnh ca mt bng l mt hoc mt tp nhiu ct m gi tr ca chng l duy nht trong bng. Hay ni cch khc, gi tr c a kho chnh s gip cho ta xc nh c duy nht mt dng (bn ghi) trong bng d liu. Mi mt bng ch c th c duy nht mt kho chnh v bn thn kho chnh khng chp nhn gi tr NULL. R ng 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, ta s dng c php nh sau: [CONSTRAINT tn_rng_bu c] PRIMARY KEY [(danh_sch_ct)] Nu kho chnh ca bng ch bao gm ng mt ct v rng buc PRIMARY KEY c ch nh mc ct, ta khng cn thit phi ch nh danh sch ct sau t kho PRIMARY KEY. Tuy nhin, nu vic khai bo kho chnh c tin hnh mc bng (s dng khi s lng cc ct tham gia vo kho l t hai tr ln) th bt buc phi ch nh danh sch ct ngay sau t kha PRIMARY KEY v tn cc ct c phn cch nhau bi du phy. V d 1: nh ngha mt bng ch c mt kha chnh create table customers ( customerid int identity(1,2) constraint chk_primarykey primary key, customername nvarchar(50) not null, address nvarchar(100) not null, gender bit not null ) Hoc l create table customers ( customerid int identity(1,2) primary key, customername nvarchar(50) not null, 59

address nvarchar(100) not null, gender bit not null ) V d 2: nh ngha bng c hai kha chnh: create table orderdetail ( customerid int, orderid int, itemid int not null, quantity decimal(8,2) not null, constraint chk_primarykey primary key (customerid, orderid) )

4.2.3 Rng buc FOREIGN KEY


FOREIGN KEY l mt ct hay mt s kt hp ca nhiu ct c s dng p t mi lin kt d liu gia hai table. FOREIGN KEY ca mt bng s gi gi tr ca PRIMARY KEY ca mt bng khc v chng ta c th to ra nhiu FOREIGN KEY trong mt table. FOREIGN KEY c th tham chiu vo PRIMARY KEY hay ct c rng buc duy nht. FOREIGN KEY c th cha gi tr NULL. Mc d mc ch chnh ca rng buc FOREIGN KEY l kim sot d liu cha trong bng c FOREIGN KEY (tc table con) nhng thc cht n cng kim sot lun c d liu trong bng cha PRIMARY KEY (tc table cha). V d nu ta xa d liu trong bng cha th d liu trong bng con tr nn "m ci" (orphan) v khng th tham chiu ngc v bng cha. Do rng buc FOREIGN KEY s m bo iu khng xy ra. Nu bn mun xa d liu trong bng cha th trc ht bn phi xa hay v hiu ha rng buc FOREIGN KEY trong bng con trc. Rng buc FOREIGN KEY c nh ngha theo c php d i y: [CONSTRAINT tn_rng_bu c] FOREIGN KEY [(danh_sch_ct)] REFERENCES tn_bng_tham_chiu(danh_sch_ct_tham_chiu) [ON DELETE CASCADE | NO ACTION | SET NULL | SET DEFAULT] [ON UPDATE CASCADE | NO ACTION | SET NULL | SET DEFAULT] Vic nh ngha mt rng buc FOREIGN KEY bao gm cc yu t sau: Tn ct hoc danh sch ct ca b ng c nh ngha tham gia vo kho ngoi. Tn ca bng c tham chiu bi kho ngo i v danh sch cc ct c tham chiu n trong bng tham chiu. 60

Cch thc x l i vi cc bn ghi trong bng c nh ngha trong trng hp cc bn ghi c tham chiu trong bng tham chiu b xo (ON DELETE) hay cp nht (ON UPDATE). SQL chun a ra 4 cch x l CASCADE: T ng xo (cp nht) nu bn ghi c tham chiu b xo (cp nht). NO ACTION: (Mc nh) Nu bn ghi trong bng tham chiu ang c tham chiu bi mt bn ghi bt k trong bng c nh ngha th bn ghi khng c php xo hoc cp nht (i vi ct c tham chiu). SET NULL: Cp nht li kho ngoi ca bn ghi thnh gi tr NULL (nu ct cho php nhn gi tr NULL). SET DEFAULT: Cp nht li kho ngoi ca bn ghi nhn gi tr mc nh (nu ct c qui nh gi tr mc nh). V d: drop table orderdetail create table orderdetail ( orderid int constraint fk_orderdetail_orders foreign k ey references orders(orderid) on delete cascade on update cascade, customerid int constraint fk_orderdetail_customer foreign key references customers(customerid) on delete cascade on update cascade, itemid int constraint fk_orderdetail_items fore ign key references items(itemid) on delete cascade on update cascade, quantity decimal(18,2) not null, )

4.3 Sa i nh ngha bng


Mt bng sau khi c nh ngha bng cu lnh CREATE TABLE c th c sa i thng qua cu lnh ALTER TABLE. Cu lnh ny cho php thc hin c cc thao tc sau: B sung mt ct vo bng. 61

Xo mt ct khi bng. Thay i nh ngha ca mt ct trong bng. Xo b hoc b sung cc rng buc cho bng C php ca cu lnh ALTER TABLE nh sau: ALTER TABLE tn_bng ADD nh_ngha_ct | ALTER COLUMN tn_ct kiu_d_liu [NULL | NOT NULL] DROP COLUMN tn_ct | ADD CONSTRAINT tn_rng_bu c nh_ngha_rng_buc DROP CONSTRAINT tn_rng_bu c V d 1: Thm mt ct mi vo bng ORDERS alter table orders add description nvarchar(100) not null V d 2: Thay i nh ngha ct desciption alter table orders alter column description nvarchar(200) null V d 3: Thm rng buc CHECK vo ct decription alter table orders add constraint chk_descriptionlength CHECK (len(description) > 10) V d 4: Xa rng buc CHECK alter table orders drop chk_descriptionlength V d 5: Xa ct description alter table orders drop column description V d 6: Thm mt ct mi vo bng orders v thm rng buc cho ct ny alter table orders add description nvarchar(100) null, constraint chk_descriptionlength CHECK (len(description) > 0) Nu b sung thm mt ct vo bng v trong bng c t nht mt bn ghi th ct mi cn b sung phi cho php chp nhn gi tr NULL hoc phi c gi tr mc nh. Mun xo mt ct ang c rng buc bi mt rng buc hoc ang c tham chiu bi mt kho ngoi, ta phi xo rng buc hoc kho ngoi trc sao cho trn ct khng cn bt k mt rng buc v khng cn c tham chiu bi bt k kho ngo i no. 62

Nu b sung thm rng buc cho mt bng c d liu v rng buc cn b sung khng c tho mn bi cc bn ghi c trong bng th cu lnh ALTER TABLE khng thc hin c.

4.4 Xa bng
Khi mt bng khng cn cn thit , ta c th xo n ra khi c s d liu bng cu lnh DROP TABLE. Cu lnh ny cng ng thi xo tt c nhng r ng buc, ch mc, trigger lin quan n bng . Cu lnh c c php nh sau: DROP TABLE tn_bng Trong cc h qun tr c s d liu, khi xo mt bng bng lnh DROP TABLE, ta khng th khi phc li bng cng nh d liu ca n. Do , cn phi cn thn khi s dng cu lnh ny. Cu lnh DROP TABLE khng th thc hin c nu bng cn xo ang c tham chiu bi mt rng buc FOREIGN KEY. Trong tr ng hp ny, rng buc FOREIGN KEY ang tham chiu hoc bng ang tham chiu n bng cn xo phi c xo trc. Khi mt bng b xo, tt c cc r ng buc, ch mc v trigger lin quan n bng cng ng thi b xa theo. Do , nu ta to li bng th cng phi to li cc i t ng ny. V d: xa bng ORDERS trc tin ta phi xa rng buc FOREIGN KEY t bng ORDERDETAIL alter table orderdetail drop constraint fk_orderdetail_orders Sau xa bng ORDERS drop table orders

4.5 Khung nhn - VIEW


Khung nhn l mt bng tm thi, c cu trc nh mt bng, khung nhn khng lu tr d liu m n c to ra khi s dng, khung nh n l i tng thuc CSDL. Khung nhn c to ra t cu lnh truy vn d liu (lnh SELECT), truy vn t mt hoc nhiu bng d liu. Khung nhn c s dng khai thc d liu nh mt bng d liu, chia s nhiu ng i dng, an ton trong khai thc, khng nh hng d liu gc. C th thc hin truy vn d liu tr n cu trc ca khung nhn. 63

Nh vy, mt khung nhn trng ging nh mt bng vi mt tn khung nhn v l mt tp bao gm cc dng v cc ct. im khc bit gia khung nh n v bng l khung nhn khng c xem l mt cu trc lu tr d liu tn ti trong c s d liu. Thc cht d liu quan st c trong khung nhn c ly t cc bng thng qua cu lnh truy vn d liu. Cu lnh CREATE VIEW c s dng to ra khung nh n v c c php nh sau: CREATE VIEW tn_khung_nhn[(danh_sch_tn_c t)] AS cu_lnh_SELECT V d: create view CUSTOMERINFO as select CUSTOMERNAME, (year(getdate()) - year(BIRTHDAY)) as AGE, ADDRESS from customers Thc hin cu truy vn trn khung nhn va to ra: select * from customerinfo

Nu trong cu lnh CREATE VIEW, ta khng ch nh danh sch cc t n ct cho khung nhn, tn cc ct trong khung nhn s chnh l tiu cc ct trong kt qu ca cu lnh SELECT. Trong trng hp tn cc ct ca khung nhn c ch nh, chng phi c cng s lng vi s lng ct trong kt qu ca cu truy vn. V d: create view CUSTOMERINFO (CUSTOMERNAME, AGE, ADDRESS) as select CUSTOMERNAME, year(getdate()) - year(BIRTHDAY), ADDRESS from customers Lu : Phi t tn cho cc ct ca khung nhn trong cc trng hp sau y:

64

Trong kt qu ca cu lnh SELECT c t nht mt ct c sinh ra bi mt biu th c (tc l khng phi l mt tn ct trong bng c s) v ct khng c t tiu . Tn ti hai ct trong kt qu ca cu lnh SELECT c c ng tiu ct.

4.6 Thm, cp nht, xa d liu trong VIEW


i vi mt s khung nhn, ta c th tin hnh thc hin cc thao tc cp nhp, thm v xo d liu. Thc cht, nhng thao tc n y s c chuyn thnh nhng thao tc trn cc bng c s v c tc ng n nhng bng c s. V mt l thuyt, c th thc hin thao tc b sung, cp nht v xo, mt khung nhn trc tin phi tho mn cc iu kin sau y: Trong cu lnh SELECT nh ngha khung nh n khng c s dng t kho DISTINCT, TOP, GROUP BY v UNION. Cc thnh phn xut hin trong danh sch chn ca cu lnh SELECT phi l cc ct trong cc bng c s. Trong danh sch chn khng c cha cc biu thc tnh ton, cc h m gp. Ngoi nhng iu kin trn, cc thao tc thay i n d liu thng qua khung nh n cn phi m bo tho mn cc rng buc trn cc bng c s, tc l vn m bo tnh ton vn d liu. Mc d thng qua khung nhn c th thc hin c thao tc b sung v cp nht d liu cho bng c s nhng ch hn ch i vi nhng khung nh n n gin. i vi nhng khung nhn phc tp th thng khng thc hin c; hay ni cch khc l d liu trong khung nhn l ch c.

4.7 Thay i nh ngha khung nh n


Cu lnh ALTER VIEW dng nh ngha li khung nh n c cu trc nh sau: ALTER VIEW tn_khung_nhn [(danh_sch_tn_c t)] AS Cu_lnh_SELECT V d: V d di y nh ngha li khung nhn CUSTOMERINFO alter view customerinfo as select CUSTOMERNAME, (year(getdate()) - year(birthday)) as AGE, ADDRESS, GENDER from customers Lu : lnh CREATE VIEW khng lm thay i cc quyn c cp pht cho ngi s dng trc . 65

4.8 Xa khung nhn


Cu lnh DROP VIEW dng xa khung nhn c cu trc nh sau: DROP VIEW tn_khung_nhn V d: drop view customerinfo Lu : Nu mt khung nhn b xo, ton b nhng quyn cp pht cho ngi s dng trn khung nhn cng ng thi b xo. Do , nu ta to li khung nhn th phi tin hnh cp pht li quyn cho ngi s dng.

66

5 Th tc lu tr, hm v trigger
5.1 Th tc lu tr (Stored procedure)
Th tc lu tr l mt i tng trong CSDL, bao gm nhiu cu lnh T-SQL c tp hp li vi nhau thnh mt nhm, v tt c cc lnh ny s c thc thi khi th tc l u tr c thc thi. Vi th tc lu tr, mt phn no kh nng ca ngn ng lp tr nh c a vo trong ngn ng SQL. Th tc lu tr c th c cc thnh phn sau: Cc cu trc iu khin (IF, WHILE, FOR ) c th c s dng trong th tc. Bn trong th tc lu tr c th s dng cc bin nh trong ngn ng lp trnh nhm lu gi cc gi tr tnh ton c, cc gi tr c truy xut c t c s d liu. Mt tp cc cu lnh SQL c kt hp li vi nhau th nh mt khi lnh bn trong mt th tc. Mt th tc c th nhn cc tham s truyn v o cng nh c th tr v cc gi tr thng qua cc tham s (nh trong cc ngn ng lp trnh). Khi mt th tc lu tr c nh ngha, n c th c gi thng qua tn th tc, nhn cc tham s truyn v o, thc thi cc cu lnh SQL bn trong th tc v c th tr v cc gi tr sau khi thc hin xong. Li ch ca vic s dng th tc l u tr: SQL Server ch bin dch cc th tc lu tr mt ln v s dng li kt qu bin dch ny trong cc ln tip theo tr khi ngi dng c nhng thit lp khc. Vic s dng li kt qu bin dch khng lm nh hng n hiu sut h thng khi th tc l u tr c gi lin tc nhiu ln. Th tc lu tr c phn tch, ti u khi to ra nn vic thc thi chng nhanh h n nhiu so vi vic phi thc hin mt tp ri rc cc cu lnh SQL t ng ng theo cch thng thng. Th tc lu tr cho php chng ta thc hin c ng 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 ng i s dng trn cc cu lnh SQL v trn cc i tng c s d liu, ta c th cp pht quyn c ho ngi s dng thng qua cc th tc l u tr, nh tng kh nng bo mt i vi h thng. Cc th tc lu tr tr v kt qu theo 4 cch: S dng cc tham s output S dng cc lnh tr v gi tr, cc lnh n y lun tr v gi tr s nguyn.

67

Tp cc gi tr tr v ca mi cu lnh SELECT c trong th tc l u tr hoc ca qu trnh gi mt th tc lu tr khc trong mt th tc l u tr. Mt bin con tr ton cc c th tham chiu t b n ngoi th tc.

5.1.1 To th tc lu tr
Th tc lu tr c to thng qua c.u lnh CREATE PROCEDURE. CREATE PROCEDURE tn_th _tc [(danh_sch_tham_s)] [WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS Cc_cu_lnh_ca_th_tc Trong : WITH RECOMPILE: yu c u SQL Server bin dch li th tc lu tr mi khi c gi. WITH ENCRYPTION: yu cu SQL Server m ha th tc lu tr. Cc_cu_lnh_ca_th_tc: Cc lnh T-SQL. Cc lnh ny c th nm trong cp BEGINEND hoc khng. V d: Gi s cn thc hin cc cng vic theo th t nh sau: Nhp mt n t hng mi ca khch hng c m khch hng l 3 Nhp cc chi tit n t hng cho n t hng trn. thc hin cc cng vic tr n chng ta cn cc cu lnh nh sau: Trc tin nhp n t hng cho khch hng c m khch hng l 3 insert into orders values(3, '7/22/2008') Tip theo thm cc chi tit n t hng cho ha n ny. Gi s rng n t hng c m l 4 v khch hng t mt mt hng c m l 1. insert into orderdetail values(4, 1, 10) Cch vit nh trn c hn ch l: trong qu trnh lm vic s c rt nhiu n t hng mi, do ngi dng s phi vit i vit li nhng cu lnh t ng t nhau cho cc khch hng khc nhau. Mt cch gii quyt vn n y l dng th tc lu tr v dng tham s nhn cc thng tin thay i. create procedure sp_InsertOrderAndOrderD etail @customerid int, @orderdate datetime, @orderid int, @itemid int, 68

@quantity decimal, as begin insert into orders values(@customerid, @orderdate) insert into orderdetail values(@orderid, @itemid, @quantity) end Thc hin th tc lu tr ny nh sau: sp_InsertOrderAndOrderDetail 3, 22/7/2008, 4, 1, 10)

5.1.2 Li gi th tc
Th tc lu tr c gi theo cu trc Tn_th_tc_lu _tr [danh_sch_tham_s] Cn lu l danh sch tham s truyn vo trong li gi phi theo ng th t khai bo cc tham s trong th tc lu tr. Nu th tc c gi t mt th tc khc, thc hin b n trong mt trigger hay phi hp vi cu lnh SELECT, cu trc nh sau; Exec Tn_th_tc_lu _tr [danh_sch_tham_s]

5.1.3 Bin trong th tc lu tr


Trong th tc lu tr c th c cc bin nhm lu cc kt qu tnh ton hay truy xut t CSDL. Cc bin trong th tc c khai bo bng t kha DECLARE theo cu trc nh sau: DECLARE @tn_bin kiu_d_liu V d: create procedure sp_SelectCustomerWithMaxAge as begin declare @maxAge int select @maxAge = max(year(getdate()) -year(BIRTHDAY)) from customers select CUSTOMERNAME, BIRTHDAY from customers where year(getdate())-year(BIRTHDAY)=@maxAge 69

end

5.1.4 Gi tr tr v trong th tc lu tr
Trong cc v d trc, nu i s truyn c ho th tc khi c li gi n th tc l bin, nhng thay i gi tr ca bin trong th tc s khng c gi li khi kt thc qu tr nh thc hin th tc. V d: C th tc lu tr nh sau create procedure sp_TestOutput @a int, @b int, @c int as select @c = @a + @b Thc thi th tc: Declare @tong int set @tong = 0 sp_TestOutput 100, 200, @tong select @tong Kt qu l 0. S dng tham s OUTPUT Trong trng hp cn phi gi li gi tr ca i s sau khi kt thc th tc, ta phi khai bo tham s ca th tc theo c php nh sau: @tn_tham_s kiu_d_liu OUTPUT V d trn c vit li nh sau: create procedure sp_TestOutput @a int, @b int, @c int output as select @c = @a + @b Thc thi th tc: Declare @tong int set @tong = 0 sp_TestOutput 100, 100, @tong output select @tong 70

Kt qu l 200. S dng lnh RETURN Tng nh nh vic s dng tham s OUTPUT, cu lnh RETURN tr v gi tr cho i tng thc thi stored procedure. V d: create procedure sp_TestReturn as begin declare @out int select @out = count(*) from customers return @out end Thc thi th tc lu tr declare @a int exec @a = sp_TestReturn select @a

5.1.5 Tham s vi gi tr mc nh
Cc tham s c khai bo trong th tc c th nhn cc gi tr mc nh. Gi tr mc nh s c gn cho tham s trong trng hp khng truyn i s cho tham s khi c li gi n th tc. Tham s vi gi tr mc nh c khai bo theo c php nh sau: @tn_tham_s kiu_d_liu = gi_tr_mc_nh V d: create procedure sp_TestDefault @customerid int = 3 as begin select * from customers where customerid = @customerid end Thc thi th tc lu tr theo gi tr mc nh ca tham s. sp_TestDefault 71

Thc thi th tc v truyn gi tr cho tham s: sp_TestDefault 4

5.1.6 Sa i th tc
Khi mt th tc c to ra, ta c th tin hnh nh ngha li th tc bng cu lnh ALTER PROCEDURE c c php nh sau: ALTER PROCEDURE tn_th _tc [(danh_sch_tham_s)] [WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS Cc_cu_lnh_ca_th_tc Cu lnh ny s dng tng t nh cu lnh CREATE PROCEDURE. Vic sa i li mt th tc c khng lm thay i n cc quyn cp pht trn th tc cng nh khng tc ng n cc th tc khc hay trigger ph thuc v o th tc ny.

5.1.7 Xa th tc
xo mt th tc c, ta s dng cu lnh DROP PROCEDURE vi c php nh sau: DROP PROCEDURE tn_th _tc Khi xo mt th tc, tt c cc quyn cp cho ngi s dng trn th tc cng ng thi b xo b. Do , nu to li th tc, ta phi tin h nh cp pht li cc quyn trn th tc .

5.2 Hm do ngi dng nh ngha (User Defined Function-UDF)


Hm do ngi dng nh ngha c chia lm 3 loi: (1) scalar (hm v hng), (2) inline table-valued (hm ni tuyn, gi tr tr v dng bng), (3) multi -statement table-valued (hm bao gm nhiu cu lnh SQL b n trong, tr v gi tr dng bng) Scalar UDF: c s dng tr v mt duy nht mt gi tr da tr n mt cc tham s truyn vo. V d: ta c th to ra mt UDF v h ng nhn Customerid l tham s v tr v CustomerName. Inline table-valued: tr v mt bng da trn mt cu lnh SQL duy nht nh ngha cc dng v cc ct tr v. 72

Multi-statement table-value: cng tr v kt qu l mt tp hp nhng c th da trn nhiu cu lnh SQL.

5.2.1 Hm v hng - Scalar UDF


Scarlar UDF c to ra bng cu lnh CREATE FUNCTION c cu trc nh sau; CREATE FUNCTION tn_hm ([danh_sch_tham_s]) RETURNS (kiu_tr_v_ca_h m) AS BEGIN cc_cu_lnh_ca_hm END V d: Cu lnh di y nh ngha hm tnh ngy trong tun (th trong tun) ca mt gi tr kiu ngy create function f_ thu(@ngay datetime) returns nvarchar(10) as begin declare @st nvarchar(10) select @st=case datepart(dw,@ngay) when 1 then N'ch nht' when 2 then N'th hai' when 3 then N 'th ba' when 4 then N 'th t' when 5 then N 'th nm' when 6 then N 'th su' else N 'th by' end return (@st) /* tr tr v ca hm */ end Sau khi chy thnh cng, hm tr thnh mt i tng trong CSDL v c th c truy xut nh cc hm c xy dng sn trong SQL Server 2005 Express Edition.

73

V d: select CUSTOMERNAME, dbo.f_thu(BIRTHDAY) from customers

5.2.2 Hm ni tuyn - Inline UDF


Hm ni tuyn c nh ngha bng lnh CREATE FUNCTION. CREATE FUNCTION tn_hm ([danh_sch_tham_s ]) RETURNS TABLE AS RETURN (cu_lnh_select) C php ca hm ni tuyn phi tun theo cc qui tc sau: Kiu tr v ca hm phi c ch nh bi mnh RETURNS TABLE.

74

Trong phn thn ca hm ch c duy nht mt cu lnh RETURN xc nh gi tr tr v ca hm thng qua duy nht mt cu lnh SELECT. Ngoi ra, khng s dng bt k cu lnh no khc trong phn thn ca hm. V d: V d di y ly ra cc khch h ng ty thuc vo gi tr m khch hng truyn vo cho tham s. create function f_SelectCustomer (@customerid int) returns table as return (select * from customers where customerid > @customerid) Vic gi cc hm ni tuyn cng tng t nh vic gi cc hm v hng. V d: select tmp.CUSTOMERNAME, o.ORDERDATE from orders o inner join dbo.f_SelectCustomer(3) as tmp on o.customerid = tmp.customerid

5.2.3 Hm bao gm nhiu cu lnh bn trong Multi statement UDF


Hm ny cng c nh ngha bng lnh CREATE FUNCTION CREATE FUNCTION tn_hm ([danh_sch_tham_s]) RETURNS @bin_bng TABLE nh_ngha_bng AS BEGIN cc_cu_lnh_trong_thn_hm RETURN END Lu : sau t kha RETURNS l mt bin bng c nh ngha. V sau t kha RETURN cui hm khng c tham s no i km. V d: create function f_SelectCustomer (@customerid int) returns @myCustomers table ( customerid int, 75

customername nvarchar(50), orderdate datetime ) as begin if @customerid = 0 insert into @myCustomers select c.customerid, c.customername, o.orderdate from customers c inner join orders o on o.customerid = c.customerid else insert into @myCustomers select c.customerid, c.customername, o.orderdate from customers c inner join orders o on c.customerid = o.customerid where c.customerid = @customerid return end Vic gi hm multi statement UDF cng tng t cc loi hm khc select * from f_SelectCustome r(0)

select * from f_SelectCustomer(3)

5.2.4 Thay i hm
Dng lnh ALTER FUNCTION thay i nh ngha h m. Cu trc ca cu lnh ALTER FUNCTION tng t nh CREATE FUNCTION V d: alter function f_SelectCustomer (@customerid int) returns table as return (select * from customers 76

where customerid > @customerid)

5.2.5 Xa hm
Dng lnh DROP FUNCTION xa h m. Cu trc lnh DROP FUNCTION nh sau DROP FUNCTION tn_hm V d: drop function f_thu Tng t nh th tc lu tr, khi hm b xa cc quyn cp cho ng i dng trn hm cng b xa. Do khi nh ngha li hm ny, ta phi cp li quyn cho cc ng i dng.

5.3 Trigger
Trigger l mt dng c bit ca th tc l u tr, c thc thi mt cch t ng khi c s thay i d liu (do tc ng ca cu lnh INSER T, UPDATE, DELETE) trn mt bng no .

5.3.1 Cc c im ca trigger
Trigger ch thc thi t ng thng qua cc s kin m khng thc hin bng tay. Trigger s dng c vi khung nhn. Khi trigger thc thi theo cc s kin Insert hoc Delete th d liu khi thay i s c chuyn sang cc bng INSERTED v DELETED, l 2 bng tm thi ch cha trong b nh, cc bng ny ch c s dng vi cc lnh trong trigger. Cc bng n y thng c s dng khi phc li phn d liu thay i (roll back). Trigger chia thnh 2 loi INSTEAD OF v AFTER: INSTEAD OF l loi trigger m hot ng ca s kin gi trigger s b b qua v thay vo l cc lnh trong trigger c thc hin. AFTER trigger l loi ngm nh, khc vi loi INSTEAD OF th loi trigger ny s thc hin cc lnh bnh trong sau khi thc hin xong s kin kch hot trigger.

5.3.2 Cc trng hp s dng trigger


S dng Trigger khi cc bin php bo m to n vn d liu khc khng bo m c. Cc cng c ny s thc hin kim tra tnh ton vn tr c khi a d liu vo CSDL, cn Trigger thc hin kim tra tnh to n vn khi cng vic thc hin Khi CSDL cha c chun ha (Normalization) th c th xy ra d liu tha, cha nhiu v tr trong CSDL th yu cu t ra l d liu cn cp nht thng n ht trong mi ni. Trong trng hp ny ta phi s dng Trigger.

77

Khi xy ra thay i dy chuyn d liu gia cc bng vi nhau (khi d liu bng n y thay i th d liu trong bng khc cng c thay i theo).

5.3.3 Kh nng sau ca trigger


Mt trigger c th nhn bit, ngn chn v hu b c nhng thao tc lm thay i tri php d liu trong c s d liu. Cc thao tc trn d liu (xo, cp nht v b sung) c th c trigger pht hin ra v t ng thc hin mt lot cc thao tc khc tr n c s d liu nhm m bo tnh hp l ca d liu. Thng qua trigger, ta c th to v kim tra c nhng mi quan h phc tp h n gia cc bng trong c s d liu m bn thn cc rng buc khng th thc hin c.

5.3.4 nh ngha trigger


Cu lnh CREATE TRIGGER c s dng inh ngha trigger v c cu trc nh sau: CREATE TRIGGER tn_trigger ON tn_bng FOR {[INSERT][,][UPDATE][,][DELETE]} AS [IF UPDATE(tn_ct) [AND UPDATE(tn_ct)|OR UPDATE(tn_ct)] ...] cc_cu_lnh_ca_trigger Lu : Nh ni trn, chun SQL nh ngha hai bng logic INSERTED v DELETED s dng trong cc trigger. Cu trc ca hai bng n y tng t nh cu trc ca bng m trigger tc ng. D liu trong hai bng n y tu thuc vo cu lnh tc ng ln bng lm kch hot trigger; c th trong cc trng hp sau: Khi cu lnh DELETE c thc thi trn bng, cc dng d liu b xo s c sao chp vo trong bng DELETED. Bng INSERTED trong tr ng hp ny khng c d liu. D liu trong bng INSERTED s l dng d liu c b sung vo bng gy nn s kch hot i vi trigger bng cu lnh INSERT. Bng DELETED trong tr ng hp ny khng c d liu. Khi cu lnh UPDATE c thc thi trn bng, cc dng d liu c chu s tc ng ca cu lnh s c sao chp vo bng DELETED, cn trong bng INSERTED s l cc dng sau khi c cp nht. 78

Hot ng INSERT DELETE UPDATE

Bng INSERTED d liu c insert khng c d liu d liu c cp nht

Bng DELETED khng c d liu d liu b xa d liu trc khi cp nht

V d 1: V d di y minh ha vic trigger c kch hot khi thm d liu vo bng CUSTOMERS if exists (select name from sysobjects where name = 't_CheckCustomerName' and type = 'TR') drop trigger t_CheckCustomerName go create trigger t_CheckCustomerName on customers for insert as declare @lengthOfName int select @lengthOfName = len(inserted.customername) from inserted if @lengthOfName <=1 print N'Tn khng hp l' rollback tran go Thm mt khch hng mi c tn l A insert into customers values('A', '5/5/1978', 'True', '35 Hung Vuong')

V d 2: V d di y minh ha trigger c kch hot khi c s thay i mang t nh y chuyn gia cc bng. Gi s c CSDL nh sau:

79

Vi d liu trong tng bng l :

Gi s c mt khch hng mua 10 n v mt hng LAPTOP. Khi s lng LAPTOP trong bng ITEMFORSALE s gim xung cn 90. Trigger di y s thc hin cng vic . if exists (select name from sysobjects where name = 't_DecreaseQuantityOf ItemForSale') drop trigger t_DecreaseQuantityOfItemForSale go create trigger t_DecreaseQuantityOfItemForSale on SALE for insert as update ITEMSFORSALE set itemsforsale.quantity = itemsforsale.quantity - inserted.salequantity from itemsforsale inner join inserted on itemsforsale.itemid = inserted.itemid go Thc hin thm dng vo bng SALE insert into sale values( 1, 10)

V d 3: V d ny minh ha cng minh ha trigger c kch hot khi c s thay i mang tnh dy chuyn gia cc bng nhng trong trng hp ny d liu thay i lin quan n nhiu dng. 80

Gi s ngi qun l mun thay i s l ng bn mt hng LAPTOP trong bng SALE ln thm 5 n v. Nh vy t kt qu v d 2, ta thy cn phi gim s l ng LAPTOP trong bng ITEMSFORSALE xung 10 n v. Tuy nhin, trong thc t khi s lng cc dng trong bng SALE rt ln, khi phi s dng trigger: if exists (select name from sysobjects where name = 't_DecreaseSumQuantityOfItemForSale') drop trigger t_DecreaseSumQuantityOfItemForSale go create trigger t_DecreaseSumQuantityOfItemForSale on SALE for update as if update(salequantity) update ITEMSFORSALE set itemsforsale.quantity = itemsforsale.quantity (select sum(inserted.salequantity - deleted.salequantity) from deleted inner join inserted on deleted.saleid = inserted.saleid where inserted.itemid = itemsforsale.itemid) where itemsforsale.itemid in (select inserted.itemid from inserted) Thc hin cp nht cho bng SALE : update sale set salequantity = salequantity + 10 where itemid = 1

V d 4: V d ny minh ha INSTEAD OF trigger. Trigger di y s khng cho thc hin thao tc xa trn bng CUSTOMERS. create trigger t_RollbackDelete on customers after delete as 81

rollback tran

5.3.5 Kch hot trigger da trn s thay i d liu trn ct


Thay v ch nh mt trigger c kch hot trn mt bng, ta c th ch nh trigger c kch hot v thc hin nhng thao tc c th khi vic thay i d liu ch li n quan n mt s ct nht nh no ca ct. Trong trng hp ny, ta s dng mnh IF UPDATE trong trigger. IF UPDATE khng s dng c i vi cu lnh DELETE. Tr li v d 3 trong phn nh ngha trigger: if exists (select name from sysobjects where name = 't_DecreaseSumQuantityOfItemForSale') drop trigger t_DecreaseSumQuantityOfItemForSale go create trigger t_DecreaseSumQuantityOfItemForSale on SALE for update as if update(salequantity) update ITEMSFORSALE set itemsforsale.quantity = itemsf orsale.quantity (select sum(inserted.salequantity - deleted.salequantity) from deleted inner join inserted on deleted.saleid = inserted.saleid where inserted.itemid = itemsforsale.itemid) where itemsforsale.itemid in (select inserted.itemi d from inserted) Trong v d ny trigger s c kch hot khi c s thay i d liu trong ct salequantity ca bng Sale. Nu c s thay i d liu tr n cc ct khc th trigger s khng c kch hot. Cu lnh di y khng lm cho trigger kch hot. update sale set itemid = 3 where itemid = 2 Mnh IF UPDATE c th xut hin nhiu ln trong phn thn ca trigger. Khi , mnh IF UPDATE no ng th phn cu lnh ca mnh s c thc thi khi trigger c kch hot. 82

5.3.6 S dng trigger v Giao tc (TRANSACTION)


Khi mt trigger c kch hot, SQL Server lun to ra mt giao tc theo di nhng thay i do cu lnh kch hot trigger hoc do bn thn trigger gy ra. S theo d i ny cho php CSDL quay tr li trng thi trc . V d: V d di y xy dng trigger khng cho php nhp v o mt bn ghi trong bng SALE khi s lng hng bn ln hn s lng hng thc t cn li trong bng ITEMSFORSALE if exists (select name from sysobjects where name = 't_CheckQuantity' and type = 'TR') drop trigger t_CheckQuantity go create trigger t_CheckQuantity on sale for insert as declare @insertedQuantity decimal(18,2) declare @currentQuantity decimal(18,2) declare @itemid int select @itemid = itemid from inserted select @insertedQuantity = s alequantity from inserted select @currentQuantity = quantity from itemsforsale where itemid = @itemid if(@currentquantity < @insertedquantity) print N's lng nhp vo ln hn s lng hin c' rollback tran Tin hnh thm vo bng SALE s liu nh sau: insert into sale values(2, 1000) 83

5.4 DDL TRIGGER


c gii thiu trong SQL Server 2005, khc vi DML trigger c kch hot khi c s thay i d liu trn bng, DDL trigger c thit k p ng li cc s kin din ra tr n server hay trn CSDL. Mt DDL trigger c th c kch hot khi ngi dng thc hin cc lnh CREATE TABLE hay DROP TABLE. cp server, DDL trigger c th c kch hot khi c mt ti khon mi c to ra DDL trigger c lu tr trong CSDL m DDL trigger c gn vo. Vi cc Server DDL Trigger theo di cc thay i cp Server, c lu tr trong CSDL master. DDL trigger c to ra cng bng cu lnh CREATE TRIGGER vi cu trc nh sau: CREATE TRIGGER tn_trigger ON { ALL SERVER | DATABASE } FOR { loi_s_kin } [ ,...n ] AS { cc_cu_lnh_SQL} Trong : ALL SERVER | DATABASE : quy nh trigger s kch hot da tr n cc s kin din ra trn Server hay cc s kin din ra trn CSDL. loi_s_kin: l mt s kin n cp Server hay cp CSDL l m kch hot DDL trigger nh: CREATE_TABLE, ALTER_TABLE, DROP_TABLE V d 1: Cu lnh di y xy dng mt trigger c kch hot khi xy ra cc s kin cp CSDL. Trigger ny s ngn chn cc lnh DROP TABLE v ALTER TABLE. create trigger t_safety on database for CREATE_TABLE, DROP_TABLE as print N'Phi xa trigger t_safety tr c khi ALTER hay DROP bng' rollback tran Tin hnh xa bng ORDERDETAIL drop table orderdetail

84

V d 2: Cu lnh di y xy dng mt trigger c kch hot khi xy ra cc s kin cp Server. Trigger ny s ngn chn vic to ra mt account login mi IF EXISTS (SELECT * FROM sys.server_triggers WHERE name = 't_DoNotAllowCreateNewLogin') DROP TRIGGER t_DoNotAllowCreateNewLogin ON ALL SERVER GO CREATE TRIGGER t_DoNotAllowCreat eNewLogin ON ALL SERVER FOR CREATE_LOGIN AS PRINT N'Phi DROP trigger t_DoNotAllowCreateNewLogin tr c khi to account' rollback GO Tin hnh to mt account login mi : create login test with password = '123456'

5.5 Enable/ Disable TRIGGER


Trigger cn b v hiu ha trong mt s tr ng hp: Trigger gy ra li trong qu trnh x l CSDL Qu trnh nhp hay khi phc nhng d liu khng tha trigger. V hiu ha trigger bng lnh DISABLE TRIGGER c cu trc nh sau: DISABLE TRIGGER tn_trigger ON { tn_i_tng | DATABASE | SERVER } V d 1: V d ny s v hiu ha trigger t_DoNotAllowCreateNewLogin disable trigger t_DoNotAllowCreateNewLogin on all server Tin hnh to mt account login mi: create login newLogin with password = '12345'

85

V d 2: V d ny s khi phc li trigger t_ DoNotAllowCreateNewLogin enable trigger t_DoNotAllowCreateNewLogin on all server Tin hnh to mt account login mi: create login newLogin1 with password = '12345'

86

6 Sao lu v phc hi d liu (Backup and Restore)


Chng ny s gii thiu k thut sao l u (backup) v khi phc (restore) d liu, l k thut thng c s dng bo m an to n d liu phng trng hp CSDL c s c.

6.1 Cc l do phi thc hin Backup


Trong qu trnh thc hin qun tr CSDL SQL Server th mt s nguyn nhn sau y bt buc bn phi xem xt n k thut sao l u v khi phc d liu: Thit b lu tr (CSDL nm trn cc thit b lu tr ny) b h hng. Ngi dng v tnh xa d liu. Cc hnh ng v tnh hay c ph hoi CSDL.

6.2 Cc loi Backup


Microsoft SQL Server 2005 cung c p hai k thut sao lu CSDL chnh: full backup v differential backup.

6.2.1 Full backup v Differential backup


Full backup: sao lu mt bn y ca CSDL tr n cc phng tin lu tr. Qu trnh full backup c th tin hnh m khng cn offline CSDL, nhng qu trnh ny li chim mt lng ln ti nguyn h thng v c th nh hng nghim trng ti thi gian p ng cc y u cu ca h thng. Differential backup: c xy dng nhm lm gim thi gian cn thit thc hin qu trnh full backup. Differential backup ch sao lu nhng thay i trn d liu k t ln full backup gn nht. Trong nhng h thng CSDL ln, qu tr nh differential backup s s dng ti nguyn t hn rt nhiu so vi qu trnh full backup v c th khng nh hng n hiu sut ca h thng. Qu trnh differential ch sao lu nhng s thay i ca d liu t ln full backup gn nht, do khi c s c vi CSDL nu khng c bn sao l u ca qu trnh full backup th bn sao lu ca qu trnh differential backup s tr nn v ngha. V d: Cng ty XYZ thc hin full backup vo cui ngy th 6 hng tun v thc hin differential backup vo ti cc ngy t th 2 ti th 5. Nu CSDL c s c vo sng th 4, qun tr vin CSDL s phc hi d liu bng bn sao l u ca qu trnh full backup ca ngy th 6 tun trc v sau phc hi cc thay i ca d liu bng cch p dng bn sao l u ca qu trnh differential backup vo ngy th 3. 87

6.2.2 Transaction log backup


Qu trnh full backup v differential backup chi m nhiu ti nguyn h thng v nh hng n hiu sut lm vic h thng nn thng c thc hin vo sau gi lm vic. Tuy nhin iu ny c th dn n cc mt mt d liu trong mt ng y lm vic nu CSDL c s c trc khi qu trnh sao lu din ra. Transaction log backup l m t gii php nhm gim thiu ti a lng d liu c th mt khi c s c CSDL. Trong qu trnh hot ng, SQL Server s dng transaction log theo d i tt c cc thay i trn CSDL. Log bo m CSDL c th phc hi sau nhng s c t xut v cng m bo ngi dng c th quay ngc cc kt qu trong cc giao tc CSDL. Cc giao tc cha hon thnh c lu trong log trc khi c lu vnh vin trong CSDL. Transaction log backup sao lu transactio n log ca CSDL vo thit b lu tr. Mi khi transaction log c sao lu, SQL Server b i cc transaction thc hin thnh cng (committed tracsaction) v ghi cc transaction vo phng ti n sao lu. Transaction log backup s dng ti nguyn h thng t hn rt nhiu so vi full backup v differential backup, do c th s dng transaction log backup bt k thi gian no m khng s nh hng n hiu sut h thng. Tr li vi v d v cng ty XYZ. Cng ty n y thc hin full backup vo ti th 6 v differential backup vo ti t th 2 ti th 5. Cng ty thc hin thm qu trnh transaction log backup mi gi mt ln. Gi s s c CSDL xy ra vo 9h:05 sng th 4. Qu trnh khi phc li CSDL nhu sau: Dng full backup v differential backup c a ti th 6 v ti th 3 phc hi li trng thi CSDL v o ti th 3. Tuy nhin qu trnh ny vn cn mt d liu trong 2 gi (7 9h) sng th 4. Tip theo s dng 2 bn sao lu transaction backup lc 8h v 9h sng khi phc CSDL v trng thi lc 9h sng th 4.

88

6.3 Cc thao tc thc hin qu trnh Backup v Restore trong SQL Server 2005 Express Edition
6.3.1 Sao lu (Backup)

Click OK

89

90

Click OK. Qu trnh sao lu hon tt

6.3.2 Phc hi (Restore)

91

Click OK hai ln

92

Click OK. Qu trnh phc hi hon tt

93

7 Cc hm quan trng trong T-SQL


Ngn ng T-SQL c nhiu hm c th tham gia vo cu lnh T-SQL. Nhng hm ny thc hin cc nhim v quan trng khc nhau. Trong ch ng ny s trnh by mt s cc hm thng dng lm vic vi cc kiu d liu s, ch ui, ngy/thi gian v gi tr NULL trong SQL Server 2005.

7.1 Cc hm lm vic vi kiu d liu s


Cc hm quan trng lm vic vi kiu d liu s l hm ISNUMERIC v ham ROUND

7.1.1 Hm ISNUMERIC
Hm isNumeric kim tra mt gi tr c phi thuc kiu d liu s hay khng. V d: Cu lnh di y tr v tn khch hng, v mt ct c tn NUMERIC. Ct ny s mang gi tr 0 nu a ch khch hng khng phi l s v ngc li select CUSTOMERNAME, isnumeric(ADDRESS) as ISNUMERIC from customers

7.1.2 Hm ROUND
Hm ROUND tr v mt gi tr s, c lm trn theo mt i ch nh Cu trc hm ROUND nh sau: ROUND ( s_lm_trn , _di_lm_trn ) Khi s dng hm ROUND cn lu : s_lm_trn phi c kiu d liu s (numeric data type) nh int, float, decimal tr kiu d liu dng nh phn. Cho d s_lm_trn thuc kiu d liu g, kt qu hm ROUND lun tr v kiu s nguyn. Nu _di_lm_trn l s m v ln hn s ch s pha trc du thp phn th hm ROUND tr v 0. V d 1: 94

select ROUND(123.9994, 3), ROUND(123.99 95, 3)

V d 2: select ROUND(123.4545, 2),ROUND(123.45, -2)

V d 3: SELECT ROUND(150.75, 0), ROUND(150.75, 0, 1)

7.2 Cc hm lm vic vi kiu d liu chui


Cc hm quan trng bao gm LEFT, RIGHT, LEN, REPLACE, STUFF, SUBSTRING, LOWER, UPPER, LTRIM, and RTRIM.

7.2.1 Hm LEFT
Hm LEFT tr v mt chui k t c chiu d i c ch nh tnh t bn tri ca chui. V d: select left('Nha Trang', 5)

7.2.2 Hm RIGHT
Hm RIGHT tng t hm LEFT nhng tnh t bn phi ca chui V d: select right('Nha Trang', 5)

7.2.3 Hm SUBSTRING
Hm STRING trch xut mt chui con t mt chui cho tr c. Cu trc hm SUBSTRING nh sau: SUBSTRING (chui_ban_u, v_tr_bt_u, chiu_d i_chui_con) V d 1: select substring ('Nha Trang', 2, 5) 95

V d 2: Select substring(Nha Trang, -2, 5)

7.2.4 Hm LEN
Hm LEN tr v chiu di mt chui V d: Select len(Nha Trang)

7.2.5 Hm REPLACE
Hm REPLACE thay th mt chui bi mt chui khc V d 1: Cu lnh di y thay th ch Nha trong chui Nha Trang bng ch nha Select replace(Nha Trang, Nha , nha)

V d 2: select replace(ADDRESS, 'Minh', 'Ninh') from customers

7.2.6 Hm STUFF
Hm STUFF thay th mt s lng xc nh cc k t trong mt chui bng mt chui khc bt u t mt v tr c ch nh. V d: 96

select stuff('Nha Trang', 2, 3, '*** ')

7.2.7 Hm LOWER/UPPER
Hm LOWER chuyn cc k t hoa trong chui th nh cc k t thng. Hm UPPER chuyn cc chui k t thng trong chui thnh cc k t hoa. V d: select lower('Nha Trang'), upper('Nha Trang')

7.2.8 Hm LTRIM/RTRIM
Hm LTRIM ct cc khong trng bn tri ca chui, hm RTRIM ct khong trng bn phi chui. V d: declare @llen int declare @rlen int declare @len int select @llen = len(ltrim(' Nha Trang')), @rlen = len(rtrim('Nha Trang ')), @len = len('Nha Trang') select @llen, @rlen, @len

7.3 Cc hm lm vic vi kiu d liu Ng y thng/ Thi gian


7.3.1 Hm GETDATE
Hm GETDATE tr v ngy gi lc thc hin cu truy vn. V d: select getdate()

7.3.2 Hm DAY/ MONTH/ YEAR


Hm DAY tr v ngy ca mt mt gi tr thuc kiu datetime. Hm MONTH tr v thng ca mt gi tr thuc kiu datetime 97

Hm YEAR tr v nm ca mt gi tr thuc kiu datetime. V d: select day(orderdate) as DAYOFORDER, month(orderdate) as MONTHOFORDER, year(orderdate) as YEAROFORDER from orders o inner join customers c on c.cus tomerid = o.customerid where c.customerid = 3

7.3.3 Hm DATEPART
Trong qu trnh lm vic vi cc CSDL, i lc ta mun bit xem mt ng y no thuc qu my trong nm, hay thuc tun th my trong thng . Hm DATEPART gip gii quyt cc yu cu trn mt cch d dng. Cu trc hm DATEPART nh sau: DATEPART (yu_cu_trch_xut, gi_tr_trch_xut ) gi_tr_trch_xut l mt gi tr thuc kiu datetime. yu_cu_trch_xut: ngy, thng, nm, qu,. Khi c mt yu cu trch xut no , chng ta s c cc ch vit tt tng ng vi cc yu cu . Bng di y m t cc yu ch vit tt v cc yu cu trch xut tng ng. ngha Nm Qu Thng S ngy qua trong nm Ngy Tun S ngy qua trong tun Gi Pht Giy Ch vit tt yy, yyyy qq,q mm,m dy,y dd,d wk,ww dw hh mi,n ss,s

V d: select datepart(yyyy, orderdate)as YEAROFORDERDATE, datepart(qq, orderdate)as QUARTEROFORDERDATE, 98

datepart(m, orderdate) as MONTHOFORDERDATE, datepart(wk, orderdate) as WEEKOFORDERDATE, datepart(d, orderdate) as D ATEOFORDERDATE, datepart(dy, Orderdate), datepart(dw, orderdate) from orders

7.3.4 Hm DATENAME
Tng t hm DATEPART nhng hm DATENAME tr v mt chui k t V d: select datename(yyyy, orderdate)as YEAROFORDERDATE, datename(qq, orderdate)as QUARTEROFORDER DATE, datename(m, orderdate) as MONTHOFORDERDATE, datename(wk, orderdate) as WEEKOFORDERDATE, datename(d, orderdate) as DATEOFORDERDATE, datename(dy, Orderdate), datename(dw, orderdate) from orders

7.4 Hm CAST v CONVERTER


Chuyn i mt gi tr thuc kiu d liu ny sang mt kiu d liu khc. Hm CAST v CONVERTER cung cp cng mt chc nng. Mt im thun li khi dng CONVERTER l khi chuyn i, hm ny cng cho php ngi dng s nh dng li gi tri kt qu theo mun. Cu trc hm CAST v CONVERTER nh sau: CAST (biu_thc/gi_ tr AS kiu_d liu [_di_kiu_d_liu ] ) CONVERT ( kiu_d liu [_di_kiu_d_liu ] , biu_thc/gi_ tr [ ,kiu_nh_dng] ) Nm 2 ch s 1 2 Nm 4 ch s 0 hoc 100 101 102 Output mon dd yyyy hh:mi AM (PM) mm/dd/yy yy.mm.dd 99

3 4 5 6 7 8 10 11 12 14 V1 d:

103 104 105 106 107 108 9 hoc 109 110 111 112 13 hoc 113 114

dd/mm/yy dd.mm.yy dd-mm-yy dd mon yy Mon dd, yy hh:mm:ss mon dd yyyy hh:mi:ss:mmmAM (PM ) mm-dd-yy yy/mm/dd yymmdd dd mon yyyy hh:mm:ss:mmm(24h) hh:mi:ss:mmm(24h)

select CUSTOMERNAME, convert (varchar, BIRTHDAY, 103) as BIRTHDAY, ADDRESS from Customers where Customername = 'Le Thi Hoa' and year(getdate()) - year(BIRTHDAY) > 20 Hm CONVERT v hm CAST c th s dng kt hp vi nhau cho kt qua nh mong mun. V d: select c.CUSTOMERID, c.CUSTOMERNAME, convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY) as money),1) as SUMTOTAL from customers c inner join orders o on o.customerid = c.customerid inner join orderdetail od on o.or derid = od.orderid inner join items i on i.itemid = od.itemid group by c.customerid, c.customername

100

Ti liu tham kho


1. Gio trnh h qun tr c s d liu SQL Server, Khoa CNTT, i hc Hu . 2. SQL Server 2005, T-SQL Recipes: Problem, Solution, Approach Appress Publisher. 3. Sams Teach yourself Microsoft SQL Server 2005 Express in 24 hours.

101

You might also like