You are on page 1of 101

Mc lc

Mc lc .................................................................................................................................1
1

Gii thiu v SQL Server 2005 ...................................................................................... 5


1.1 Ci t SQL Server 2005 Express Edition .............................................................. 5
1.1.1 Cc yu cu cho h thng 32bit .......................................................................5
1.1.2 Cc bc ci t SQL Server 2005 Express Edition .......................................7
1.2 Mt s thao tc c bn trn SQL Server 2005 Express Edition. .......................... 16
1.2.1 To mt CSDL mi ....................................................................................... 16
1.2.2
1.2.3

To bng mi .................................................................................................17
Xa bng, xa CSDL ..................................................................................... 19

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


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

3.1.7

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

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


3.1.9 Truy vn con (Subquery) ...............................................................................50
3.2 Thm, cp nht v xa d liu ..............................................................................51
3.2.1
3.2.2

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


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

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

5.3.1

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

5.3.2
5.3.3
5.3.4

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


Kh nng sau ca trigger ...............................................................................78
nh ngha trigger .......................................................................................... 78

5.3.5
5.3.6

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


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

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


5.5 Enable/ Disable TRIGGER ................................................................................... 85
6 Sao lu v phc hi d liu (Backup and Restore) ...................................................... 87
6.1
6.2

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


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

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


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

7.4

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

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

1 Gii thiu v SQL Server 2005


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

1.1 Ci t SQL Server 2005 Express Edition


1.1.1 Cc yu cu cho h thng 32bit
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 b n SQL Server 2005 khc, Microsoft .NET Framework 2.0
phi c ci t trc.
G b cc phin bn Beta, CTP hoc Tech Preview ca SQL Server 2005, Visual Studio
2005 v Microsoft .NET Framework 2.0.
Download v ci t
6

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

1.1.2 Cc bc ci t SQL Server 2005 Express Edition


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

Click Next:

10

11

12

Lu : SQL Server 2005 c hai ki u authentication (kim tra ngi dng).


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

13

14

Ci t SQL Server Management Studio Express . Sau khi ci t, ng nhp vo SQL


Server 2005 Express Edition nh sau:

Khi ng nhp c th chn Windows Authentication hoc SQL Server Authentication .


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

15

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


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

1.2.1 To mt CSDL mi

16

t tn Database trong Textbox Database Name, click OK .

1.2.2 To bng mi

17

Bng gm cc cc ct. Mi ct gm tn ct (Column Name), kiu d liu (Data Type) v


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

18

1.2.3 Xa bng, xa CSDL


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

1.2.4 M mt query editor vit cu lnh SQL

Cn ch l cu lnh SQL s c tc dng tr n CSDL ang c chn trong ComboBox.


Do cn ch la chn ng CSDL cn t ng tc.
19

2 Structured Query Language (SQL)


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

2.2 Vai tr ca SQL


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

Trong hu ht cc h qun tr c s d liu quan h, SQL c nhng vai tr nh sau:


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

2.3 Gii thiu s lc v Transact SQL (T-SQL)


Transact-SQL l ngn ng SQL m rng da trn SQL chun ca ISO (International
Organization for Standardization) v ANSI (American National Standards Institute) c s
dng trong SQL Server khc vi P -SQL (Procedural-SQL) dng trong Oracle.
SQL chun bao gm khong 40 cu lnh. Trong cc h qun tr c s d liu khc nhau,
mc d cc cu lnh u c cng dng v cng mc ch s dng song mi mt h qun tr c
s d liu c th c mt s thay i n o . iu ny i khi dn n c php chi tit ca cc
cu lnh c th s khc nhau trong cc h qun tr c c s d liu khc nhau.
T-SQL c chia lm 3 nhm:

21

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


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

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


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

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

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


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

insert into Nhanvien


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

2.3.4 C php ca T-SQL


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

ln c cng tn trong cc b ng khc nhau th bt buc phi ch nh th m tn bng trc tn


ct; tn bng v tn ct c phn cch nhau bi du chm
V d: Gi s chng ta c CSDL nh sau:

tm ra khch hng c tn Nguyn Vn An t hng vo ngy no, cu truy v n nh


sau:
Select orderid, orderdate
from orders, customers
where orders.customerid = customers.customerid
and customername = N'Nguy n Vn An'

2.3.5 Cc kiu d liu


Bng di y lit k mt s kiu d liu thng dng c s dng trong SQL.
Char(n)

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 d i chnh xc (ti a 2,147,483,647


bytes)

Text

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

Ntext

D liu kiu chui vi d i ln v h tr UNICODE


(ti a 1,073,741,823 k t)

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

2.3.6 Bin (Variables)


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

26

V d: V d di y khai bo mt bin c t n @numberOfCustomers thng qua t kha


declare. Bin ny lu s khch hng m c thng qua hm count. Sau in ra gi tr ca
bin.
declare @numberOfCustomers int
select @numberOfCustomers = count(*)
from Customers
print @numberOfCustomers

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

2.3.8 Cc ton t (Operators)


Trong SQL Server cc biu din (expression) c th xut hin nhiu ton t. u tin
ca ton t s quyt nh th t thc hin ca cc php tnh. Th t thc hin nh hng rt
ln n kt qu.
Bng di y m t cc ton t trong SQL Server 2005 Express Edititon v mc u
tin ca cc ton t .
Level

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, W HILE

2.3.10 Ch thch (Comment)


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

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

28

3 Ngn ng thao tc d liu DML


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

3.1 Cu lnh SELECT


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

Cu lnh SELECT c s dng tc ng l n cc bng d liu v kt qu ca cu lnh


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

V d di y hin th tn khch hng v a ch cc khch hng hin c.


select customername, gender, address
from customers

3.1.1 Danh sch chn trong cu lnh SELECT


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

Chn tt c cc ct: Nh ni trong chng 1, chng ta dng d u * trong cu lnh


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

Chn mt s ct c th: Trong trng hp cn ch nh c th cc ct cn hin th trong


kt qu truy vn, ta ch nh danh sch cc t n ct trong danh sch chn. Th t ca cc ct
trong kt qu truy vn tun theo th t ca cc trng trong danh sch chn.
V d:
Select CUSTOMERNAME, ADDRESS
From Customers

Lu : Nu truy vn c thc hin trn nhiu bng/khung nhn v trong cc


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

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

S dng cu trc CASEWHEN :


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

select CUSTOMERNAME, ADDRESS,


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

Loi b cc dng d liu trng nhau:


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

La chn mt s lng gii hn cc dng:


T kha TOP n s tr v ch n d ng d liu
V d: v d sau ch tr v duy nht hai dng d liu
select top 2 Customername
from customers

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

33

3.1.2 Mnh FROM


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

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

3.1.3 Mnh WHERE - iu kin truy vn d liu


Mnh WHERE trong cu lnh SELECT c s dng nhm xc nh cc iu
kin i vi vic truy xut d liu. Sau mnh WHERE l mt biu thc logic v ch nhng
dng d liu no tho mn iu kin c ch nh mi c hin th trong kt qu truy vn.
V d: Lc ra thng tin cc khch h ng c m
Select *
From Customers
Where CustomerID > 3

Trong mnh WHERE thng s dng:


Cc ton t kt hp iu kin (AND, OR)
Cc ton t so snh
Kim tra gii hn ca d liu (BETWEEN/ NOT BETWEEN)
34

Tp hp
Kim tra khun dng d liu.
Cc gi tr NULL
Cc ton t so snh
Ton t

ngha

Bng

>

Ln hn

<

Nh hn

>=

Ln hn hoc bng

<=

Nh hn hoc bng

<>

Khc

!>

Khng ln hn

!<

Khng nh hn

V d: V d di y ly tn, ngy sinh theo nh dng dd/MM/yyyy v a ch ca


nhng khch hng c tn Le Thi Hoa v tui cc khch hng ny ln hn 20.
select CUSTOMERNAME,
convert (varchar, BIRTHDAY, 103) as BIRTHDAY, ADDRESS
from Customers
where Customername = 'Le Thi Hoa'
and year(getdate()) - year(BIRTHDAY) > 20

Kim tra gii hn ca d liu


kim tra xem gi tr d liu nm trong (ngo i) mt khong no , ta s
dng ton t BETWEEN/ NOT BETWEEN nh sau:
Mnh

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 t m kim d liu cho cu
lnh SELECT l mt danh sch cc gi tr. Sau IN/ NOT IN c th l mt danh sch cc gi tr
hoc l mt cu lnh SELECT khc.
V d: Cu lnh di y ly ra cc thng tin ca khch hng c m l 5,6 hoc 7
select CUSTOMERID, CUSTOMERNAME,
convert(varchar,BIRTHDAY, 103) as BIRTHDAY, ADDRESS
from Customers
where CUSTOMERID in (5,6,7)

V d: V d ny minh ha mt cu lnh SELECT khc ng sau mnh IN/ NOT IN


select CUSTOMERID, CUSTOMERNAME,
convert(varchar,BIRTHDAY, 103) as BIRTHDAY, ADDRESS
from Customers
where CUSTOMERID not in
( select CUSTOMERID from customers where customerid >= 7)

Ton t LIKE/ NOT LIKE v k t i din (WildCard)


T kho LIKE (NOT LIKE) s dng trong cu lnh SELECT nhm m t khun
dng ca d liu cn tm kim. Chng thng c kt hp vi cc k t i din sau y:
K t i din

ngha

Chui k t bt k gm khng hoc nhiu k t

Mt k t bt k

[]

Mt k t nm trong gii hn c ch nh. V d:[a-f] hm


ch mt trong cc k t: a, b, c, d, e, f.

[^]

Mt k t khng nm trong gii hn c ch nh. V


d:[^a-f] hm ch mt k t khc tt c cc k t: a, b, c, d, e, f.

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


36

select *
from customers
where customername like 'Nguyen%'

Gi tr NULL
D liu trong mt ct cho php NULL s nhn gi tr NULL trong cc tr ng hp sau:
Nu khng c d liu c nhp cho ct v khng c mc nh cho ct hay kiu d liu
trn ct .
Ngi s dng trc tip a gi tr NULL vo cho ct .
Mt ct c kiu d liu l kiu s s cha gi tr NULL nu gi tr c ch nh gy trn
s.
Trong mnh WHERE, kim tra gi tr ca mt ct c gi tr NULL hay khng, ta s
dng cch vit:
WHERE tn_ct IS NULL
hoc:
WHERE tn_ct IS NOT NULL
V d:
select *
from Customers
where birthday is null

To mi bng d liu t cau lnh SELECT


Cu lnh SELECT ... INTO c tc dng to mt bng mi c cu trc v d liu c xc
nh t kt qu ca truy vn. Bng mi c to ra s c s ct bng s ct c ch nh trong
danh sch chn v s dng s l s dng kt qu ca truy vn
V d:
select CUSTOMERNAME,
convert(varchar,BIRTHDAY, 103) as BIRTHDAY, ADDRESS
into NEWCUSTOMERS
from Customers
Lu : Nu trong danh sch chn c cc biu thc th nhng biu thc ny phi c t
tiu
37

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

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

3.1.4 Php hp (UNION)


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

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

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

39

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

40

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

Gii thch cu truy vn:


Bng Customers

Bng Order

Trc tin vo bng Customers tm ra dng c c m khch hng l 3.


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

Nhng ct no cn hin th trong kt qu t ruy vn


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

ngha

Bng

>

Ln hn

>=

Ln hn hoc bng

<

Nh hn
42

<=

Nh hn hoc bng

<>

Khc

!>

Khng ln hn

!<

Khng nh hn

3.1.6 Cc loi php ni


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

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

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

43

Trong cc cu lnh ni, ngoi iu kin ca php ni c ch nh trong mnh


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

Php ni ngoi tri (k hiu: *=): Php ni ny hin th trong kt qu truy vn tt c cc


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

3.1.7 Php ni theo chun SQL-92


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

Ta c th s dng cu truy vn sau:


select *
from customers c inner join orders o
on c.customerid = o.customerid

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

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

Php ni ngoi phi:


select *
from faculty f right join class c
on f.facultyid = c.facultyid

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

on f.facultyid = c.facultyid

Mt c im ni bt ca SQL2 l cho php biu din php ni trn nhiu bng


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

3.1.8 Mnh GROUP BY


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

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 tr ng nhau (ch gi li mt gi tr), ta ch nh th m t kho
DISTINCT trc biu thc l i s ca hm.
Thng k trn ton b d liu
Khi cn tnh ton gi tr thng k trn ton b d liu, ta s dng cc h m gp trong danh
sch chn ca cu lnh SELECT. Trong tr ng hp ny, trong danh sch chn khng c s
dng bt k mt tn ct hay biu thc no ngoi cc hm gp.
V d: Tnh tui trung bnh, tui nh nht v ln nht ca cc khch h ng
select min(year(getdate())-year(BIRTHDAY)) as MINAGE,
max(year(getdate())-year(BIRTHDAY)) as MAXAGE,
avg(year(getdate())-year(BIRTHDAY)) as AVGAGE
from customers

Thng k trn nhm


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

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

money),1)

as

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


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

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

Lu : Trong trng hp danh sch chn ca cu lnh SELECT c c cc h m gp v


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

3.1.9 Truy vn con (Subquery)


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

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


from customers)

Nu truy vn con tr v nhiu h n mt gi tr, vic s dng php so snh nh trn s


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

3.2 Thm, cp nht v xa d liu


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

Lnh INSERT
Lnh UPDATE
Lnh DELETE

3.2.1 Thm d liu


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

Mt cch s dng khc ca cu lnh INSERT c s dng b sung nhiu d ng d


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

3.2.2 Cp nht d liu


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

update tmp1
set address = case

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

where items.itemid = (select i.itemid


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

55

4 Ngn ng nh ngha d liu DDL


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

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

Cc_rng_buc: gm cc rng buc v khun dng d liu ( r ng buc CHECK) hay cc


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

57

4.2 Cc loi rng buc


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

C th gp chung cc rng buc CHECK li trong mt r ng buc duy nht nh sau


create table students
(
studentid int identity(1,1) primary key,
studentname nvarchar(50) not null,
address nvarchar(100) not null,
score1 tinyint not null ,
score2 tinyint not null,
58

score3 tinyint not null,


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

4.2.2 Rng buc PRIMARY KEY


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

address nvarchar(100) not null,


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

4.2.3 Rng buc FOREIGN KEY


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

Cch thc x l i vi cc bn ghi trong bng c nh ngha trong trng hp cc


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

4.3 Sa i nh ngha bng


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

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

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

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

4.5 Khung nhn - VIEW


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

Nh vy, mt khung nhn trng ging nh mt bng vi mt tn khung nhn v l mt tp


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

Nu trong cu lnh CREATE VIEW, ta khng ch nh danh sch cc t n ct cho khung


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

64

Trong kt qu ca cu lnh SELECT c t nht mt ct c sinh ra bi mt biu th c


(tc l khng phi l mt tn ct trong bng c s) v ct khng c t tiu .
Tn ti hai ct trong kt qu ca cu lnh SELECT c c ng tiu ct.

4.6 Thm, cp nht, xa d liu trong VIEW


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

4.7 Thay i nh ngha khung nh n


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

4.8 Xa khung nhn


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

66

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

67

Tp cc gi tr tr v ca mi cu lnh SELECT c trong th tc l u tr hoc ca qu


trnh gi mt th tc lu tr khc trong mt th tc l u tr.
Mt bin con tr ton cc c th tham chiu t b n ngoi th tc.

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

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

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

5.1.3 Bin trong th tc lu tr


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

end

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

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

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

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


sp_TestDefault 4

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

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

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


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

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


nhiu cu lnh SQL.

5.2.1 Hm v hng - Scalar UDF


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

73

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

5.2.2 Hm ni tuyn - Inline UDF


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

74

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


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

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


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

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

select * from f_SelectCustomer(3)

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

where customerid > @customerid)

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

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

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

5.3.2 Cc trng hp s dng trigger


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

77

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

5.3.3 Kh nng sau ca trigger


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

5.3.4 nh ngha trigger


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

Hot ng

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 t nh y


chuyn gia cc bng.
Gi s c CSDL nh sau:

79

Vi d liu trong tng bng l :

Gi s c mt khch hng mua 10 n v mt hng LAPTOP. Khi s lng LAPTOP


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

V d 3: V d ny minh ha cng minh ha trigger c kch hot khi c s thay i


mang tnh dy chuyn gia cc bng nhng trong trng hp ny d liu thay i lin quan
n nhiu dng.
80

Gi s ngi qun l mun thay i s l ng bn mt hng LAPTOP trong bng SALE


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

V d 4: V d ny minh ha INSTEAD OF trigger. Trigger di y s khng cho thc


hin thao tc xa trn bng CUSTOMERS.
create trigger t_RollbackDelete
on customers
after delete
as
81

rollback tran

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


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

5.3.6 S dng trigger v Giao tc (TRANSACTION)


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

5.4 DDL TRIGGER


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

84

V d 2: Cu lnh di y xy dng mt trigger c kch hot khi xy ra cc s kin


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

5.5 Enable/ Disable TRIGGER


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

85

V d 2: V d ny s khi phc li trigger t_ DoNotAllowCreateNewLogin


enable trigger t_DoNotAllowCreateNewLogin
on all server
Tin hnh to mt account login mi:
create login newLogin1 with password = '12345'

86

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


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

6.1 Cc l do phi thc hin Backup


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

6.2 Cc loi Backup


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

6.2.1 Full backup v Differential backup


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

6.2.2 Transaction log backup


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

88

6.3 Cc thao tc thc hin qu trnh Backup v Restore trong


SQL Server 2005 Express Edition
6.3.1 Sao lu (Backup)

Click OK

89

90

Click OK. Qu trnh sao lu hon tt

6.3.2 Phc hi (Restore)

91

Click OK hai ln

92

Click OK. Qu trnh phc hi hon tt

93

7 Cc hm quan trng trong T-SQL


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

7.1 Cc hm lm vic vi kiu d liu s


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

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

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

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

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

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

7.2 Cc hm lm vic vi kiu d liu chui


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

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

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

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

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

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

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

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

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

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

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

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

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


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

7.3.2 Hm DAY/ MONTH/ YEAR


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

Hm YEAR tr v nm ca mt gi tr thuc kiu datetime.


V d:
select day(orderdate) as DAYOFORDER,
month(orderdate) as MONTHOFORDER,
year(orderdate) as YEAROFORDER
from orders o inner join customers c on c.cus tomerid = o.customerid
where c.customerid = 3

7.3.3 Hm DATEPART
Trong qu trnh lm vic vi cc CSDL, i lc ta mun bit xem mt ng y no thuc
qu my trong nm, hay thuc tun th my trong thng . Hm DATEPART gip gii quyt cc
yu cu trn mt cch d dng.
Cu trc hm DATEPART nh sau:
DATEPART (yu_cu_trch_xut, gi_tr_trch_xut )
gi_tr_trch_xut l mt gi tr thuc kiu datetime.
yu_cu_trch_xut: ngy, thng, nm, qu,.
Khi c mt yu cu trch xut no , chng ta s c cc ch vit tt tng ng vi cc
yu cu . Bng di y m t cc yu ch vit tt v cc yu cu trch xut tng ng.
ngha

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 D ATEOFORDERDATE,
datepart(dy, Orderdate), datepart(dw, orderdate)
from orders

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

7.4 Hm CAST v CONVERTER


Chuyn i mt gi tr thuc kiu d liu ny sang mt kiu d liu khc. Hm CAST v
CONVERTER cung cp cng mt chc nng. Mt im thun li khi dng CONVERTER l
khi chuyn i, hm ny cng cho php ngi dng s nh dng li gi tri kt qu theo
mun.
Cu trc hm CAST v CONVERTER nh sau:
CAST (biu_thc/gi_ tr AS kiu_d liu [_di_kiu_d_liu ] )
CONVERT ( kiu_d liu [_di_kiu_d_liu ] , biu_thc/gi_ tr [ ,kiu_nh_dng] )
Nm 2 ch s

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

100

Ti liu tham kho


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

101

You might also like