You are on page 1of 108

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 1.1.2 Cc yu cu cho h thng 32bit .......................................................................5 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 1.2.4 2 2.1 2.2 2.3 To bng mi .................................................................................................17 Xa bng, xa CSDL .....................................................................................19 M mt query editor vit cu lnh SQL ...................................................19

Structured Query Language (SQL) ..............................................................................20 SQL l ngn ng ca c s d liu quan h .........................................................20 Vai tr ca SQL ....................................................................................................20 Gii thiu s lc v Transact SQL (T-SQL) ......................................................21 Ngn ng nh ngha d liu ( Data Definition Language DDL) ..............22 Ngn ng iu khin d liu (Data control language DCL) ......................22 Ngn ng thao tc d liu (Data manipulation language DML)................23 C php ca T-SQL .......................................................................................24 Cc kiu d liu .............................................................................................25 Bin (Variables).............................................................................................26 Hm (Function)..............................................................................................27 Cc ton t (Operators) .................................................................................27 Cc thnh phn iu khin (Control of flow) ................................................28

2.3.1 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9

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 Danh sch chn trong cu lnh SELECT ......................................................30 Mnh FROM .............................................................................................34 Mnh WHERE - iu kin truy vn d liu ............................................34 Php hp (UNION)........................................................................................38 Php ni .........................................................................................................41 Cc loi php ni ...........................................................................................43 1 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6

3.1.7 3.1.8 3.1.9 3.2 3.2.1 3.2.2 3.2.3 4 4.1 4.2

Php ni theo chun SQL-92.........................................................................45 Mnh GROUP BY ....................................................................................47 Truy vn con (Subquery) ...............................................................................50 Thm d liu..................................................................................................52 Cp nht d liu.............................................................................................53 Xa d liu.....................................................................................................54

Thm, cp nht v xa d liu ..............................................................................51

Ngn ng nh ngha d liu DDL............................................................................56 To bng................................................................................................................56 Cc loi rng buc.................................................................................................58 Rng buc CHECK........................................................................................58 Rng buc PRIMARY KEY..........................................................................59 Rng buc FOREIGN KEY ..........................................................................60

4.2.1 4.2.2 4.2.3 4.3 4.4 4.5 4.6 4.7

Sa i nh ngha bng........................................................................................61 Xa bng ...............................................................................................................63 Khung nhn - VIEW ..............................................................................................63 Thm, cp nht, xa d liu trong VIEW .............................................................65 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 To th tc lu tr .........................................................................................68 Li gi th tc................................................................................................69 Bin trong th tc lu tr ..............................................................................69 Gi tr tr v trong th tc lu tr.................................................................70 Tham s vi gi tr mc nh .........................................................................71 Sa i th tc ...............................................................................................72 Xa th tc.....................................................................................................72 Hm v hng - Scalar UDF .........................................................................73 Hm ni tuyn - Inline UDF..........................................................................74 Hm bao gm nhiu cu lnh bn trong Multi statement UDF..................75 Thay i hm .................................................................................................76 Xa hm.........................................................................................................77 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.2 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.3

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

Trigger...................................................................................................................77 2

5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.4 5.5 6 6.1 6.2

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

DDL TRIGGER ....................................................................................................84 Enable/ Disable TRIGGER ...................................................................................85 Cc l do phi thc hin Backup ..........................................................................87 Cc loi Backup ....................................................................................................87 Full backup v Differential backup ...............................................................87 Transaction log backup..................................................................................88

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

6.2.1 6.2.2 6.3

Cc thao tc thc hin qu trnh Backup v Restore trong SQL Server 2005 Sao lu (Backup) ...........................................................................................89 Phc hi (Restore) .........................................................................................91

Express Edition........................................................................................................................89 6.3.1 6.3.2 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 7.2 7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 7.2.6 7.2.7 7.2.8 7.3 7.3.1 7.3.2 7.3.3 7.3.4 Hm ROUND ................................................................................................94 Hm LEFT .....................................................................................................95 Hm RIGHT ..................................................................................................95 Hm SUBSTRING ........................................................................................95 Hm LEN.......................................................................................................96 Hm REPLACE.............................................................................................96 Hm STUFF...................................................................................................96 Hm LOWER/UPPER...................................................................................97 Hm LTRIM/RTRIM ....................................................................................97 Hm GETDATE ............................................................................................97 Hm DAY/ MONTH/ YEAR ........................................................................97 Hm DATEPART..........................................................................................98 Hm DATENAME ........................................................................................99 3 Cc hm lm vic vi kiu d liu chui..............................................................95

Cc hm lm vic vi kiu d liu Ngy thng/ Thi gian ..................................97

7.4 8

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

Kt ni vo SQL Server 2005 t cc ngn ng lp trnh xy dng cc ng dng 8.1 Cu hnh Microsoft SQL Server 2005 ................................................................101 Cho php tip nhn cc kt ni t xa trn th hin ca SQL Server ...........102 Kch hot dch v SQL Server Browser ......................................................102 To cc ngoi l trn Windows Firewall .....................................................103 C# v VB.NET.............................................................................................104 VB 6.............................................................................................................106

lin quan n CSDL ..................................................................................................................101 8.1.1 8.1.2 8.1.3 8.2 8.2.1 8.2.2

Kt ni vo SQL Server trong cc ngn ng lp trnh........................................104

Ti liu tham kho ............................................................................................................108

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. Mt 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 lng 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 bn 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 dng trong vic pht trin cc ng dng hng CSDL. SQL Server 2005 Express Edition c t do s dng trong cc ng dng thng mi v d dng cp nht ln cc phin bn cao hn khi cn thit. Ci t SQL Server Management Studio Express: SQL Server Management 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 kiu authentication (kim tra ngi dng). Windows authentication mode: Vic 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 dng 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 CSDL. Ngoi ra, ta cng phi nh password vo hai bn di c th ng nhp vo SQL Server khi ta xy dng mt ng dng truy xut vo 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 Studio cung cp mt giao din thn thin gip cho ngi dng thc hin cc thao tc mt cch d dng. Mt s cc thao tc c bn bao gm: to CSDL mi, xa CSDL, to bng, xa bngCng cn lu 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 th 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 hnh 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 trn CSDL ang c chn trong ComboBox. Do cn ch la chn ng CSDL cn tng 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 Query 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 tng 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 ngi 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 lnh 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 yu 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 lu 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 trn 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 thng 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 no . 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) cc 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 tn l Nhanvien trong CSDL Test. Bng Nhanvien ny gm c ba ct: manv, tennv, diachi. Lu : Nu trong SQL Server 2005 Express Edition cha c CSDL Test, hy to mt CSDL c tn Test theo hng dn trong Chng 1. create table Nhanvien ( manv int primary key, tennv nvarchar(50) not null, 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 dng 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 ln 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 vin 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 vin 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 thng (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 tn 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 thng, 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 ngi 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 nhin, nu trong cu lnh c lin quan n hai ct tr 24

ln c cng tn trong cc bng khc nhau th bt buc phi ch nh thm 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 vn nh sau: Select orderid, orderdate from orders, customers where orders.customerid = customers.customerid and customername = N'Nguyn 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 di chnh xc (ti a 2,147,483,647 bytes) D liu kiu chui vi di ln (ti a 2,147,483,647 k t) D liu kiu chui vi di 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 no s c quy nh lc nh ngha bng. Create table Nhanvien ( MANV NVARCHAR(10) HOTENNVARCHAR(30) GIOITINH NGAYSINH NOISINH HSLUONG MADV INT ) BIT, SMALLDATETIME, NCHAR(50), DECIMAL(4,2), NOT NULL, NOT NULL,

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 tn @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, WHILE

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 nguyn 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 kiu 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 yu 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 gm 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 ny, 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 dng 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_chn [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 ln 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 SELECT c s dng ch nh cc trng, cc biu thc cn hin th trong cc ct ca kt qu truy vn. Cc trng, 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 trng 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 tn 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 ny 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 hng 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 dng d liu ging nhau. Trong v d trn, c hai khch hng c tn Cao Van Trung. Nu 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 dng 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 hng Select * from Customers

Trong mnh FROM c th s dng b danh (alias) nhm lm 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 hng 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 (ngoi) 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 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 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

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 tm 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 bt 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 trng 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 truy vn tun theo th t ca chng trong bng d liu hoc c sp xp theo ch mc (nu trn bng c ch mc). Trong trng 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 hng 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 trn 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 [COMPUTE ct_sp_xp] 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_ct] [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_ct] [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 thnh phn ca php hp xut hin nhng dng d liu ging nhau th trong kt qu truy vn ch gi li mt dng. 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 nguyn 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 hp so snh cc ct tng ct mt theo th t c cho trong mi truy vn. Khi cc kiu d liu khc nhau c kt hp vi nhau trong cu lnh UNION, chng s c chuyn sang kiu d liu cao hn (nu c th c). 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 thnh 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 dng n php ni. Mt cu lnh ni kt hp cc dng 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 bng 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 dng 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 truy 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 trng hp, iu kin ca php ni c xc nh nh vo mi quan h gia cc bng cn phi truy xut d liu. Thng thng, 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 tn 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 no , 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 trn 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 nhin 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 tm 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 nhiu 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.orderid 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 lt vi cc m khch hng, m ha n v ngy t hng t bng c2, o2. Nu vic so snh hai tp hp ny 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 no , 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 dng 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 ngoi 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 ny 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 ngi 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 ny 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 ngoi cng c ch nh ngay trong mnh FROM theo c php: tn_bng_1 LEFT|RIGHT|FULL [OUTER] JOIN tn_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 dng 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 vo 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 thng (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 dng 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 bnh,... 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, nhng khng c php xut hin trong mnh WHERE SQL cung cp cc hm gp di y: Hm gp SUM([ALL| DISTINCT] biu_thc) AVG([ALL| DISTINCT] biu_thc) COUNT([ALL|DISTINCT] biu_thc) Chc nng 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 trng nhau (ch gi li mt gi tr), ta ch nh thm 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 hm gp trong danh sch chn ca cu lnh SELECT. Trong trng 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 vo trong cc nhm. Cc hm gp c s dng s thc hin thao tc tnh ton trn 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) 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 as money),1) as

Nu mun hin s tin khch hng 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 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 money),1) as

Lu : Trong trng hp danh sch chn ca cu lnh SELECT c c cc hm 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 hm 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 thng 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 tng s tin phi thanh ton cho tt c cc ln t hng ln hn 100 triu. select c.CUSTOMERID, c.CUSTOMERNAME, convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY)as SUMTOTAL from customers c inner join orders o on o.customerid = c.customerid inner join orderdetail od on o.orderid = od.orderid money),1) as

inner join items i on i.itemid = od.itemid group by c.customerid, c.customername 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 hoc 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_chn FROM danh_sch_bng [WHERE iu_kin] [GROUP BY danh_sch_ct] [HAVING iu_kin]) Khi s dng truy vn con cn lu mt s quy tc sau: Mt truy vn con phi c vit trong cp du ngoc. Trong hu ht cc trng 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 trng 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 hn mt gi tr, vic s dng php so snh nh trn s khng hp l. Trong trng hp ny, sau php ton so snh phi 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; ngc lai, php so snh vi lng t ANY c kt qu ng khi ch cn mt gi tr bt k no trong kt qu ca truy vn con tho mn 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 di dng: WHERE [NOT] EXISTS (truy_vn_con) Lng t EXISTS (tng ng NOT EXISTS) tr v gi tr True (tng ng False) nu kt qu ca truy vn con c t nht mt dng (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 tn 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 lng cc trng ca bng cn b sung d liu cng nh phi tun theo ng th t ca cc trng 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 cn thm gi tr trng ny m SQL s t ng to ra mt gi tr cho trng 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 tn 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 dng d liu vo mt bng, cc dng d liu ny c ly t mt bng khc thng qua cu lnh SELECT. cch ny, cc gi tr d liu c b sung vo bng khng c ch nh tng minh m thay vo l mt 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 th cp nht d liu cho nhiu ct bng cch ch nh cc danh sch tn 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, phm 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 ny 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 dng 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 lin quan n cc bng khng phi l bng cn xa d liu, ta phi s dng thm mnh FROM v sau l danh sch tn cc bng . Trong trng hp ny, trong mnh WHERE ta ch nh thm 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 dng d liu cn xo trong mnh WHERE s xo ton b d liu trong bng. Thay v s dng cu lnh DELETE trong trng hp ny, ta c th s dng cu lnh TRUNCATE c c php nh sau: TRUNCATE TABLE tn_bng 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 trng (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 nhng 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 ( rng 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 vo 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, address, 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 rng 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_buc] 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 rng 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 ca 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. Rng buc PRIMARY KEY l c s cho vic m bo tnh ton vn thc th cng nh ton vn tham chiu. khai bo mt rng buc PRIMARY KEY, ta s dng c php nh sau: [CONSTRAINT tn_rng_buc] 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 di y: [CONSTRAINT tn_rng_buc] 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 bng c nh ngha tham gia vo kho ngoi. Tn ca bng c tham chiu bi kho ngoi 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 key 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 foreign 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 DROP COLUMN tn_ct | ADD CONSTRAINT tn_rng_buc nh_ngha_rng_buc DROP CONSTRAINT tn_rng_buc 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 ngoi no. 62 kiu_d_liu [NULL | NOT NULL]

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 rng 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 trng 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 rng 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 tng 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 nhn 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 ngi dng, an ton trong khai thc, khng nh hng d liu gc. C th thc hin truy vn d liu trn 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 nhn 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 nhn v c c php nh sau: CREATE VIEW tn_khung_nhn[(danh_sch_tn_ct)] 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 tn 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 thc (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 cng 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 ny 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 nhn 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 hm gp. Ngoi nhng iu kin trn, cc thao tc thay i n d liu thng qua khung nhn 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 nhn 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 nhn


Cu lnh ALTER VIEW dng nh ngha li khung nhn c cu trc nh sau: ALTER VIEW tn_khung_nhn [(danh_sch_tn_ct)] 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 lu tr c thc thi. Vi th tc lu tr, mt phn no kh nng ca ngn ng lp trnh 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 thnh mt khi lnh bn trong mt th tc. Mt th tc c th nhn cc tham s truyn vo 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 vo, 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 lu 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 lu 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 hn nhiu so vi vic phi thc hin mt tp ri rc cc cu lnh SQL tng ng theo cch thng thng. Th tc lu tr cho php chng ta thc hin cng mt yu cu bng mt cu lnh n gin thay v phi s dng nhiu dng lnh SQL. iu ny s lm gim thiu s lu thng trn mng. Thay v cp pht quyn trc tip cho ngi s dng trn cc cu lnh SQL v trn cc i tng c s d liu, ta c th cp pht quyn cho ngi s dng thng qua cc th tc lu tr, nh tng kh nng bo mt i vi h thng. 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 ny lun tr v gi tr s nguyn.

67

Tp cc gi tr tr v ca mi cu lnh SELECT c trong th tc lu tr hoc ca qu trnh gi mt th tc lu tr khc trong mt th tc lu tr. Mt bin con tr ton cc c th tham chiu t bn 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 cu 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 trn 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 tng t nhau cho cc khch hng khc nhau. Mt cch gii quyt vn ny l dng th tc lu tr v dng tham s nhn cc thng tin thay i. create procedure sp_InsertOrderAndOrderDetail @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 bn 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 cho 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 trnh 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 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 = gi_tr_mc_nh

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 vo 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 hnh 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 bn trong, tr v gi tr dng bng) Scalar UDF: c s dng tr v mt duy nht mt gi tr da trn mt cc tham s truyn vo. V d: ta c th to ra mt UDF v hng 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 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. FUNCTION tn_hm ([danh_sch_tham_s]) RETURNS (kiu_tr_v_ca_hm)

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 hng 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_SelectCustomer(0)

select * from f_SelectCustomer(3)

5.2.4 Thay i hm
Dng lnh ALTER FUNCTION thay i nh ngha hm. 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 hm. 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 ngi dng trn hm cng b xa. Do khi nh ngha li hm ny, ta phi cp li quyn cho cc ngi dng.

5.3 Trigger
Trigger l mt dng c bit ca th tc lu tr, c thc thi mt cch t ng khi c s thay i d liu (do tc ng ca cu lnh INSERT, 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 ny 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 ton vn d liu khc khng bo m c. Cc cng c ny s thc hin kim tra tnh ton vn trc khi a d liu vo CSDL, cn Trigger thc hin kim tra tnh ton 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 nht 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 ny 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 trn 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 hn 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 ny tng t nh cu trc ca bng m trigger tc ng. D liu trong hai bng ny 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 trng 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 trng 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 tnh 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_DecreaseQuantityOfItemForSale') 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 lng 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 lng 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 lin 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 = 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) 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 trn 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 di ny cho php CSDL quay tr li trng thi trc . V d: V d di y xy dng trigger khng cho php nhp vo 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 = salequantity 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 trn 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 trn 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 lm 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 trc 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_DoNotAllowCreateNewLogin ON ALL SERVER FOR CREATE_LOGIN AS PRINT N'Phi DROP trigger t_DoNotAllowCreateNewLogin trc 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 trng 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 lu (backup) v khi phc (restore) d liu, l k thut thng c s dng bo m an ton 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 lu 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 cp 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 trn 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 yu 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 trnh 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 lu 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 lu 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 lu ca qu trnh differential backup vo ngy th 3. 87

6.2.2 Transaction log backup


Qu trnh full backup v differential backup chim 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 ngy lm vic nu CSDL c s c trc khi qu trnh sao lu din ra. Transaction log backup l mt 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 di 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 transaction 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 tin 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 ny 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 ca ti th 6 v ti th 3 phc hi li trng thi CSDL vo 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 chng ny s trnh by mt s cc hm thng dng lm vic vi cc kiu d liu s, chui, 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.9995, 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 di 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 trc. Cu trc hm SUBSTRING nh sau: SUBSTRING (chui_ban_u, v_tr_bt_u, chiu_di_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 thnh 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 Ngy 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.customerid = 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 ngy 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 V d: select datepart(yyyy, orderdate)as YEAROFORDERDATE, datepart(qq, orderdate)as QUARTEROFORDERDATE, 98 Ch vit tt yy, yyyy qq,q mm,m dy,y dd,d wk,ww dw hh mi,n ss,s

datepart(m, orderdate) as MONTHOFORDERDATE, datepart(wk, orderdate) as WEEKOFORDERDATE, datepart(d, orderdate) as DATEOFORDERDATE, 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 QUARTEROFORDERDATE, 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: select

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

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)

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) SUMTOTAL from inner join orderdetail od on o.orderid = od.orderid inner join items i on i.itemid = od.itemid group by c.customerid, c.customername as money),1) as

customers c inner join orders o on o.customerid = c.customerid

100

8 Kt ni vo SQL Server 2005 t cc ngn ng lp trnh xy dng cc ng dng lin quan n CSDL
Mc tiu cui cng ca vic hc h qun tr CSDL Microsoft SQL Server 2005 l ngi hc bit dng h qun tr ny trong vic xy dng cc CSDL cho cc ng dng qun l trong thc t. ng thi s dng cc cng c trong Microsoft SQL Server 2005 qun tr CSDL ca mnh.

8.1 Cu hnh Microsoft SQL Server 2005


Nh ni trong chng 1, Microsoft SQL Server 2005 s dng hai kiu nh danh ngi dng: Windows Authentication v SQL Server Authentication. Windows Authentication: thch hp trong vic xy dng cc ng dng qun l trn my n ( ngha l SQL Server v ng dng qun l cng trn mt my). Nhng ng dng ny thng c CSDL kh nh v tc tng trng ca CSDL khng cao. SQL Server Authentication: thch hp trong vic xy dng cc ng dng qun l c CSDL ln, nhiu ngi dng cng lc. Trong cc ng dng ny, CSDL c t trn Database Server, ng dng trn cc my trm s thc hin cc kt ni vo Database Server ny v thc hin cc thao tc trn CSDL. Cc kt ni ny c gi l cc kt ni t xa (remote connection). Tuy nhin, khi kt ni mt my tnh n mt th hin (instance) ca Microsoft SQL Server 2005 to mt kt ni t xa, bn c th nhn mt thng bo li nh sau: Microsoft SQL Native Client: An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. Li ny xy ra v Microsoft SQL Server cha c cu hnh chp nhn cc kt ni t xa. Mc nh, phin bn SQL Server 2005 Express Edition v phin bn SQL Server 2005 Developer Edition khng cho php cc kt ni t xa. cu hnh SQL Server 2005 chp nhn cc kt ni t xa cn thc hin cc bc sau: Cho php tip nhn cc kt ni t xa trn th hin ca SQL Server m cc ng dng my trm cn kt ni. Kch hot dch v SQL Server Browser Cu hnh tng la cho php cc d liu lin quan n SQL Server v dch v SQL Server Browser c lu thng trn mng.

101

8.1.1 Cho php tip nhn cc kt ni t xa trn th hin ca SQL Server


Click Start -> Programs -> Microsoft SQL Server 2005 -> Configuration Tools -> SQL Server Surface Area Configuration. Trong trang SQL Server 2005 Surface Area Configuration, click Surface Area Configuration for Services and Connections. Trong trang Surface Area Configuration for Services and Connections, m nt Database Engine, click Remote Connections, click Local and remote connections, click chn giao thc thch hp (giao thc ny c la chn da trn giao thc thc t c dng trong mi trng lm vic), sau click Apply. Trong mi trng hc tp, chng ta thng dng giao thc TCP/IP. Lu : Click OK khi nhn c thng bo: Changes to Connection Settings will not take effect until you restart the Database Engine service. Trong trang Surface Area Configuration for Services and Connections, m nt Database Engine, click Service, click Stop, i n khi dch v MSSQLSERVER dng li, sau click Start khi ng li dch v MSSQLSERVER . Lu : nu chng ta khng cn s dng SQL Server 2005 thng xuyn, ta c th ch khi ng ca dch v MSSQLSERVER l manual (ngha l khi no cn dng th s kch hot) nhm gim bt thi gian khi ng Windows v tit kim ti nguyn h thng..

8.1.2 Kch hot dch v SQL Server Browser


Nu chng ta thao tc trn SQL Server 2005 bng vic s dng tn th hin (instance name) v khng ch nh mt port c th trong chui kt ni (chng ta s ni v chui kt ni k hn trong phn kt ni cc ngn ng lp trnh vi SQL Server 2005) th chng ta phi kch hot dch v SQL Server Browser cho php cc kt ni t xa. V d: SQL Server 2005 Express Edition c ci t vi mt th hin mc nh l tn_my_tnh\SQLEXPRESS. Chng ta ch cn kch hot dch v SQL Server Browser mt ln bt k chng ta c bao nhiu

102

th hin ca SQL Server 2005 ang c s dng (running). kch hot dch v SQL Server Browser, cn lm theo cc bc sau: Click Start -> Programs -> Microsoft SQL Server 2005 -> Configuration Tools, click SQL Server Surface Area Configuration. Trong trang SQL Server 2005 Surface Area Configuration, click Surface Area Configuration for Services and Connections. Trong trang Surface Area Configuration for Services and Connections, click SQL Server Browser, click Automatic for Startup type, click Apply. Lu : tng t nh dch v MSSQLSERVER, nu chn startup type l Automatic th dch v SQL Server Browser s c khi ng khi Windows khi ng Kim tra tnh trng dch v trong Service status. Sau click Start nu dch v ny ang b Stop. Lu : Thc hin cc bc trn lm tng cc nguy c cho h thng v h thng s hin th thng tin ca cc th hin ca SQL Server ng chy trn h thng. Cc nguy c ny c th c gim thiu bng cch khng kch hot dch v SQL Server Browser v kt ni vo th hin ca SQL Server thng qua mt port. Chi tit c th tham kho Microsoft Book Online theo cc ch sau: SQL Server Browser Service Connecting to the SQL Server Database Engine Client Network Configuration

8.1.3 To cc ngoi l trn Windows Firewall


Cc bc di y p dng cho Windows Firewall trong Windows XP Service Pack 2 (SP2) v trong Windows Server 2003. Nu tng la c s dng trn my tnh ci t SQL Server 2005, cc kt ni t bn ngoi s b chn tr khi SQL Server 2005 v SQL Serve Browser c th lin lc qua tng la. Chng ta phi to ra cc ngoi l cho mi th hin ca SQL Server 2005 (mun th hin no tip nhn kt ni t xa th chng ta phi to ngoi l cho th hin ) v mt ngoi l cho dch v SQL Server Browser. Vic to ngoi l theo cc bc sau: Click Start -> Programs -> Microsoft SQL Server 2005 ->Configuration Tools -> SQL Server Configuration Manager. 103

Trong trang SQL Server Configuration Manager, click SQL Server Services, right-click tn th hin, v click Properties. Trong trang SQL Server Browser Properties, click tab Advanced, xc nh instanceID trong danh sch thuc tnh, v click OK. Lu : Chng ta c th c nhiu th hin SQL Server, do chng ta phi xc nh ng instanceID no chng tao mun to ngoi l. m Windows Firewall, click Start, click Run, nh firewall.cpl, v click OK. To ngoi l cho SQL Server 2005 trong Windows Firewall Trong Windows Firewall, click tab Exceptions, sau click Add Program. Trong ca s Add a Program window, click Browse. C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe, click Open, v click OK. Lu : ng dn c th khc nhau ty thuc vo th mc ci t ca SQL Server 2005. MSSQL.1 l ni lu tr cho instanceID chng ta thu c trong bc trn. Lp li cc bc trn cho mi th hin ca SQL Server 2005 cn thit lp ngoi l. To ngoi l cho dch v SQL Server Browser trong Windows Firewall Trong Windows Firewall, click tab Exceptions, v click Add Program. Trong ca s Add a Program, click Browse. C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe, click Open, v click OK. Lu : ng dn c th thay i ty thuc vo th mc ci t ca SQL Server 2005.

8.2 Kt ni vo SQL Server trong cc ngn ng lp trnh


8.2.1 C# v VB.NET
Ty thuc vo vic s dng .NET Data Provider (tp cc i tng phc v vic trao i d liu) no trong .NET Framework v vic s dng hnh thc Authentication no truy xut d liu trong SQL Server 2005, chng ta s c cc cch khc nhau kt ni n SQL Server 2005. Trong phn trnh by ny s s dng System.Data.SqlClient l mt Data Provider ph bin kt ni vi SQL Server 2005. Trong C#: public void ConnectToSql () 104

{ System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection (); // TODO Xy dng chui kt ni conn.ConnectionString = "integrated security=true;data source=tn_SQLSERVER;" + "persist security info=False;initial catalog=tn_CSDL"; try { conn.Open(); // Xy dng code tng tc vi CSDL y } catch (Exception ex) { MessageBox.Show("Failed to connect to data source"); } finally { conn.Close(); } } Trong VB.NET Public Sub ConnectToSql() Dim conn As New SqlClient.SqlConnection ' TODO Xy dng chui kt ni conn.ConnectionString = & _ "integrated security=true;data source=tn_SQL Server;" & _ "persist security info=False;initial catalog=tn_CSDL" Try conn.Open() ' Xy dng code tng tc vi CSDL y Catch ex As Exception 105

MessageBox.Show("Failed to connect to data source") Finally conn.Close() End Try End Sub Trong hai v d trn chng ta xy dng hm kt ni vo SQL Server 2005 m thnh phn quan trng nht l chui kt ni vo CSDL: Trong C#: "integrated security=true;data source=tn_SQLSERVER;" + "persist security info=False;initial catalog=tn_CSDL"; Trong VB.NET: "integrated security=true;data source=tn_SQL Server;" & _ "persist security info=False;initial catalog=tn_CSDL" Trong : Intergrated security = true: s dng Windows Authentication data source: ch nh tn th hin ca SQL Server 2005 m chng ta mun kt ni. persist security info: Thit lp mc nh cho t kha persist security info l false. Thit lp sang gi tr true s cho php cc d liu nhy cm bao gm UserID v password c th c truy xut khi kt ni c m initial catalog: Tn CSDL m chng ta mun tng tc. V d chui kt ni s dng Windows Authentication: "integrated security=true;data source=.\\SQLExpress" + "persist security info=False;initial catalog=myDB"; V d chui kt ni s dung SQL Server Authentication: "persist security info=False;User ID = *****; password = ***** + initial catalog=myDB; data source=.\\SQLExpress ";

8.2.2 VB 6
V d di y minh ha vic xy dng ng dng CSDL bng VB6. Gi s chng ta c CSDL tn l Test, SQL Server l .\\SQLExpress, User l sa, Password l 1234. Private Sub Command1_Click() Dim connectionString As String Dim commandString As String Dim sqlConnection As ADODB.Connection 106

Dim rs As Recordset connectionString="PROVIDER=SQLOLEDB; DATA SOURCE=.\SQLEXPRESS;

connectionString = UID=sa; PWD=1234;DATABASE=Test" commandString = "select count(*) as count from Users where UserName = '" commandString = commandString & Text1.Text & "' and Password = '" commandString = commandString & Text2.Text & "'" Set sqlConnection = New ADODB.Connection sqlConnection.Open (connectionString) Set rs = New Recordset rs.Open commandString, sqlConnection If (rs("count") = 1) Then MsgBox "Login successfully" End If End Sub

107

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.

108

You might also like