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

Cc yu cu cho h thng 32bit .......................................................................5

1.1.2

Cc bc ci t SQL Server 2005 Express Edition .......................................7

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


1.2.1 To mt CSDL mi .......................................................................................16

1.2.2

To bng mi .................................................................................................17

1.2.3

Xa bng, xa CSDL .....................................................................................19

1.2.4

M mt query editor vit cu lnh SQL ...................................................19

Structured Query Language (SQL) ..............................................................................20


2.1

SQL l ngn ng ca c s d liu quan h .........................................................20

2.2

Vai tr ca SQL ....................................................................................................20

2.3

Gii thiu s lc v Transact SQL (T-SQL) ......................................................21

2.3.1

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

2.3.2

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

2.3.3

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

2.3.4

C php ca T-SQL .......................................................................................24

2.3.5
2.3.6

Cc kiu d liu .............................................................................................25


Bin (Variables).............................................................................................26

2.3.7

Hm (Function)..............................................................................................27

2.3.8

Cc ton t (Operators) .................................................................................27

2.3.9

Cc thnh phn iu khin (Control of flow) ................................................28

2.3.10 Ch thch (Comment) ...................................................................................28


2.3.11 Gi tr NULL ................................................................................................28
3

Ngn ng thao tc d liu DML ...............................................................................29


3.1

Cu lnh SELECT.................................................................................................29

3.1.1

Danh sch chn trong cu lnh SELECT ......................................................30

3.1.2

Mnh FROM .............................................................................................34

3.1.3
3.1.4

Mnh WHERE - iu kin truy vn d liu ............................................34


Php hp (UNION)........................................................................................38

3.1.5

Php ni .........................................................................................................41

3.1.6

Cc loi php ni ...........................................................................................43


1

3.1.7

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

3.1.8

Mnh GROUP BY ....................................................................................47

3.1.9

Truy vn con (Subquery) ...............................................................................50

3.2

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

3.2.1

Thm d liu..................................................................................................52

3.2.2

Cp nht d liu.............................................................................................53

3.2.3

Xa d liu.....................................................................................................54

Ngn ng nh ngha d liu DDL............................................................................56


4.1

To bng................................................................................................................56

4.2

Cc loi rng buc.................................................................................................58

4.2.1

Rng buc CHECK........................................................................................58

4.2.2

Rng buc PRIMARY KEY..........................................................................59

4.2.3

Rng buc FOREIGN KEY ..........................................................................60

4.3

Sa i nh ngha bng........................................................................................61

4.4

Xa bng ...............................................................................................................63

4.5

Khung nhn - VIEW ..............................................................................................63

4.6

Thm, cp nht, xa d liu trong VIEW .............................................................65

4.7

Thay i nh ngha khung nhn ...........................................................................65

4.8 Xa khung nhn .....................................................................................................66


5 Th tc lu tr, hm v trigger.....................................................................................67
5.1

Th tc lu tr (Stored procedure) .......................................................................67

5.1.1

To th tc lu tr .........................................................................................68

5.1.2

Li gi th tc................................................................................................69

5.1.3

Bin trong th tc lu tr ..............................................................................69

5.1.4
5.1.5

Gi tr tr v trong th tc lu tr.................................................................70
Tham s vi gi tr mc nh .........................................................................71

5.1.6

Sa i th tc ...............................................................................................72

5.1.7

Xa th tc.....................................................................................................72

5.2

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

5.2.1

Hm v hng - Scalar UDF .........................................................................73

5.2.2

Hm ni tuyn - Inline UDF..........................................................................74

5.2.3
5.2.4

Hm bao gm nhiu cu lnh bn trong Multi statement UDF..................75


Thay i hm .................................................................................................76

5.2.5

Xa hm.........................................................................................................77

5.3

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

5.3.1

Cc c im ca trigger ...............................................................................77

5.3.2

Cc trng hp s dng trigger .....................................................................77

5.3.3

Kh nng sau ca trigger ...............................................................................78

5.3.4

nh ngha trigger..........................................................................................78

5.3.5

Kch hot trigger da trn s thay i d liu trn ct..................................82

5.3.6

S dng trigger v Giao tc (TRANSACTION) ...........................................83

5.4

DDL TRIGGER ....................................................................................................84

5.5

Enable/ Disable TRIGGER ...................................................................................85

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


6.1

Cc l do phi thc hin Backup ..........................................................................87

6.2

Cc loi Backup ....................................................................................................87

6.2.1

Full backup v Differential backup ...............................................................87

6.2.2

Transaction log backup..................................................................................88

6.3

Cc thao tc thc hin qu trnh Backup v Restore trong SQL Server 2005

Express Edition........................................................................................................................89

6.3.1

Sao lu (Backup) ...........................................................................................89

6.3.2

Phc hi (Restore) .........................................................................................91

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

Hm ROUND ................................................................................................94

Cc hm lm vic vi kiu d liu chui..............................................................95

7.2.1

Hm LEFT .....................................................................................................95

7.2.2

Hm RIGHT ..................................................................................................95

7.2.3
7.2.4

Hm SUBSTRING ........................................................................................95
Hm LEN.......................................................................................................96

7.2.5

Hm REPLACE.............................................................................................96

7.2.6

Hm STUFF...................................................................................................96

7.2.7

Hm LOWER/UPPER...................................................................................97

7.2.8

Hm LTRIM/RTRIM ....................................................................................97

7.3

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

7.3.1
7.3.2

Hm GETDATE ............................................................................................97
Hm DAY/ MONTH/ YEAR ........................................................................97

7.3.3

Hm DATEPART..........................................................................................98

7.3.4

Hm DATENAME ........................................................................................99
3

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

lin quan n CSDL ..................................................................................................................101


8.1

Cu hnh Microsoft SQL Server 2005 ................................................................101

8.1.1

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

8.1.2

Kch hot dch v SQL Server Browser ......................................................102

8.1.3

To cc ngoi l trn Windows Firewall .....................................................103

8.2

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

8.2.1

C# v VB.NET.............................................................................................104

8.2.2

VB 6.............................................................................................................106

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
Express Edition System Requirements
32-bit
Processor

PIII 600MHZ hoc cao hn


Tt nht: 1GHZ hoc cao hn

Framework
Operating
System

Microsoft .NET Framework 2.0

Windows XP with Service Pack 2 hoc cao hn

Microsoft Windows 2000 Professional SP4

Express Edition System Requirements


32-bit

Memory
Hard Disk

Microsoft Windows 2000 Server Service Pack 4 hoc cao hn

Windows Server 2003 Standard, Enterprise, or Datacenter editions

Windows Server 2003 Web Edition SP1

Windows Small Business Server 2003 with Service Pack 1 hoc cao hn

Vista Home Basic v cc phin bn cao hn (SQL Express SP1 and SQL Express

Windows XP Embedded SP2 Feature Pack 2007

Windows Embedded for Point of Service SP2

with Service Pack 1 hoc cao hn

Advanced SP2)

192 MB RAM hoc cao hn; tt nht: 512 MB hoc cao hn

350 MB cng cho cc ci t c bn

425 MB cng cho cc ci t SQL Server Books Online, SQL Server Mobile Books
Online, v sample databases

Drive

CD-ROM or DVD-ROM drive

Display

Super VGA (1,024x768) hoc cao hn

Other Devices

Mouse, Keyboard

Other

Microsoft Internet Explorer 6.0 SP1 hoc cao hn

Requirements

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)

Kiu chui vi di c nh

Nchar(n)

Kiu chui vi di c nh h tr UNICODE

Varchar(n)

Kiu chui vi di chnh xc

Nvarchar(n)

Kiu chui vi di chnh xc h tr UNICODE

Int

S nguyn c gi tr t -231 n 231 - 1

Tinyint

S nguyn c gi tr t 0 n 255.

Smallint

S nguyn c gi tr t -215 n 215 1


25

Bigint

S nguyn c gi tr t -263 n 263-1

Numeric

Kiu s vi chnh xc c nh.

Decimal

Tng t kiu Numeric

Float

S thc c gi tr t -1.79E+308 n 1.79E+308

Real

S thc c gi tr t -3.40E + 38 n 3.40E + 38

Money

Kiu tin t

Bit

Kiu bit (c gi tr 0 hoc 1)

Datetime

Kiu ngy gi (chnh xc n phn trm ca giy)

Smalldatetime

Kiu ngy gi (chnh xc n pht)

Binary

D liu nh phn vi di c nh (ti a 8000 bytes)

Varbinary

D liu nh phn vi di chnh xc (ti a 8000 bytes)

Image

D liu nh phn vi di chnh xc (ti a 2,147,483,647


bytes)

Text

D liu kiu chui vi di ln (ti a 2,147,483,647 k t)

Ntext

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)

NOT NULL,

HOTENNVARCHAR(30)

NOT NULL,

GIOITINH

BIT,

NGAYSINH

SMALLDATETIME,

NOISINH

NCHAR(50),

HSLUONG

DECIMAL(4,2),

MADV INT
)

2.3.6 Bin (Variables)


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

26

V d: V d di y khai bo mt bin c 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

Operators

* (Multiply), / (Division), % (Modulo)

+ (Positive), - (Negative), + (Add), (+ Concatenate), - (Subtract),


27

=, >, <, >=, <=, <>, !=, !>, !< (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

ngha

variable BETWEEN a AND b

a <= variable <=b

variable NOT BETWEEN a AND b

variable <a hoc variable > b

V d: v d ny tng t v d trn nhng iu kin l tui nm trong khong t 20


n 30 tui.
select

CUSTOMERNAME,

convert (varchar, BIRTHDAY, 103) as BIRTHDAY, ADDRESS


from Customers
where Customername = 'Le Thi Hoa'
and year(getdate()) - year(BIRTHDAY) between 20 and 30
35

Ton t lm vic trn tp hp (IN/ NOT IN)


T kho IN/ NOT IN c s dng khi ta cn ch nh iu kin 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

ct_sp_xp]

[COMPUTE

danh_sch_hm_gp [BY danh_sch_ct]]


38

Trong
Cu_lnh_1 c dng
SELECT danh_sch_ct
[INTO tn_bng_mi]
[FROM danh_sch_bng|khung_nhn]
[WHERE iu_kin]
[GROUP BY danh_sch_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

Chc nng

SUM([ALL| DISTINCT] biu_thc)

Tnh tng cc gi tr.

AVG([ALL| DISTINCT] biu_thc)

Tnh trung bnh ca cc gi tr

COUNT([ALL|DISTINCT] biu_thc)

m s cc gi tr trong biu thc.


47

COUNT(*)

m s cc dng c chn.

MAX(biu_thc)

Tnh gi tr ln nht

MIN(biu_thc)

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)

as

money),1)

as

SUMTOTAL
from

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


inner join orderdetail od on o.orderid = od.orderid
inner join items i on i.itemid = od.itemid

group by c.customerid, c.customername


48

Nu mun hin s tin khch 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

money),1)

as

SUMTOTAL
from

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


inner join orderdetail od on o.orderid = od.orderid
inner join items i on i.itemid = od.itemid

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

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

money),1)

as

SUMTOTAL
from

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


inner join orderdetail od on o.orderid = od.orderid

inner join items i on i.itemid = od.itemid


group by c.customerid, c.customername
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

when customerid < 2 then 'Nguyen Trung Truc'


else 'Nguyen Thi Minh Khai'

end

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

kiu_d_liu [NULL | NOT NULL]

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

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

gi_tr_mc_nh

V d:
create procedure sp_TestDefault
@customerid int = 3
as
begin
select * from customers
where customerid = @customerid
end
Thc thi th tc lu tr theo gi tr mc nh ca tham s.
sp_TestDefault
71

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


sp_TestDefault 4

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

FUNCTION tn_hm

([danh_sch_tham_s]) RETURNS (kiu_tr_v_ca_hm)


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

73

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

5.2.2 Hm ni tuyn - Inline UDF


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

74

Trong phn thn ca hm ch c duy nht mt cu lnh RETURN xc nh gi tr tr v


ca hm thng qua duy nht mt cu lnh SELECT. Ngoi ra, khng s dng bt k cu lnh
no khc trong phn thn ca hm.
V d: V d di y ly ra cc khch 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

Bng INSERTED

Bng DELETED

INSERT

d liu c insert

khng c d liu

DELETE

khng c d liu

d liu b xa

UPDATE

d liu c cp nht

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

Ch vit tt

Nm

yy, yyyy

Qu

qq,q

Thng

mm,m

S ngy qua trong nm

dy,y

Ngy

dd,d

Tun

wk,ww

S ngy qua trong tun

dw

Gi

hh

Pht

mi,n

Giy

ss,s

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

datepart(m, orderdate) as MONTHOFORDERDATE,


datepart(wk, orderdate) as WEEKOFORDERDATE,
datepart(d, orderdate) as 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

Nm 4 ch s

Output

0 hoc 100

mon dd yyyy hh:mi AM (PM)

101

mm/dd/yy

102

yy.mm.dd
99

103

dd/mm/yy

104

dd.mm.yy

105

dd-mm-yy

106

dd mon yy

107

Mon dd, yy

108

hh:mm:ss

9 hoc 109

mon dd yyyy hh:mi:ss:mmmAM (PM)

10

110

mm-dd-yy

11

111

yy/mm/dd

12

112

yymmdd

13 hoc 113

dd mon yyyy hh:mm:ss:mmm(24h)

114

hh:mi:ss:mmm(24h)

14
V1 d:
select

CUSTOMERNAME,

convert (varchar, BIRTHDAY, 103) as BIRTHDAY, ADDRESS


from Customers
where Customername = 'Le Thi Hoa'
and year(getdate()) - year(BIRTHDAY) > 20
Hm CONVERT v hm CAST c th s dng kt hp vi nhau cho kt qua nh
mong mun.
V d:
select c.CUSTOMERID, c.CUSTOMERNAME,
convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY)
SUMTOTAL
from

as

money),1)

as

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


inner join orderdetail od on o.orderid = od.orderid
inner join items i on i.itemid = od.itemid

group by c.customerid, c.customername

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