Professional Documents
Culture Documents
SQL Server 2005
SQL Server 2005
Mc lc .................................................................................................................................1 1 Gii thiu v SQL Server 2005 ......................................................................................5 1.1 Ci t SQL Server 2005 Express Edition..............................................................5 1.1.1 1.1.2 Cc yu cu cho h thng 32bit .......................................................................5 Cc bc ci t SQL Server 2005 Express Edition .......................................7
1.2 Mt s thao tc c bn trn SQL Server 2005 Express Edition. ..........................16 1.2.1 To mt CSDL mi .......................................................................................16 1.2.2 1.2.3 1.2.4 2 2.1 2.2 2.3 To bng mi .................................................................................................17 Xa bng, xa CSDL .....................................................................................19 M mt query editor vit cu lnh SQL ...................................................19
Structured Query Language (SQL) ..............................................................................20 SQL l ngn ng ca c s d liu quan h .........................................................20 Vai tr ca SQL ....................................................................................................20 Gii thiu s lc v Transact SQL (T-SQL) ......................................................21 Ngn ng nh ngha d liu ( Data Definition Language DDL) ..............22 Ngn ng iu khin d liu (Data control language DCL) ......................22 Ngn ng thao tc d liu (Data manipulation language DML)................23 C php ca T-SQL .......................................................................................24 Cc kiu d liu .............................................................................................25 Bin (Variables).............................................................................................26 Hm (Function)..............................................................................................27 Cc ton t (Operators) .................................................................................27 Cc thnh phn iu khin (Control of flow) ................................................28
2.3.10 Ch thch (Comment) ...................................................................................28 2.3.11 Gi tr NULL ................................................................................................28 3 Ngn ng thao tc d liu DML ...............................................................................29 3.1 Cu lnh SELECT.................................................................................................29 Danh sch chn trong cu lnh SELECT ......................................................30 Mnh FROM .............................................................................................34 Mnh WHERE - iu kin truy vn d liu ............................................34 Php hp (UNION)........................................................................................38 Php ni .........................................................................................................41 Cc loi php ni ...........................................................................................43 1 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6
Php ni theo chun SQL-92.........................................................................45 Mnh GROUP BY ....................................................................................47 Truy vn con (Subquery) ...............................................................................50 Thm d liu..................................................................................................52 Cp nht d liu.............................................................................................53 Xa d liu.....................................................................................................54
Ngn ng nh ngha d liu DDL............................................................................56 To bng................................................................................................................56 Cc loi rng buc.................................................................................................58 Rng buc CHECK........................................................................................58 Rng buc PRIMARY KEY..........................................................................59 Rng buc FOREIGN KEY ..........................................................................60
Sa i nh ngha bng........................................................................................61 Xa bng ...............................................................................................................63 Khung nhn - VIEW ..............................................................................................63 Thm, cp nht, xa d liu trong VIEW .............................................................65 Thay i nh ngha khung nhn ...........................................................................65
4.8 Xa khung nhn .....................................................................................................66 5 Th tc lu tr, hm v trigger.....................................................................................67 5.1 Th tc lu tr (Stored procedure) .......................................................................67 To th tc lu tr .........................................................................................68 Li gi th tc................................................................................................69 Bin trong th tc lu tr ..............................................................................69 Gi tr tr v trong th tc lu tr.................................................................70 Tham s vi gi tr mc nh .........................................................................71 Sa i th tc ...............................................................................................72 Xa th tc.....................................................................................................72 Hm v hng - Scalar UDF .........................................................................73 Hm ni tuyn - Inline UDF..........................................................................74 Hm bao gm nhiu cu lnh bn trong Multi statement UDF..................75 Thay i hm .................................................................................................76 Xa hm.........................................................................................................77 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.2 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.3
Trigger...................................................................................................................77 2
5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.4 5.5 6 6.1 6.2
Cc c im ca trigger ...............................................................................77 Cc trng hp s dng trigger .....................................................................77 Kh nng sau ca trigger ...............................................................................78 nh ngha trigger..........................................................................................78 Kch hot trigger da trn s thay i d liu trn ct..................................82 S dng trigger v Giao tc (TRANSACTION) ...........................................83
DDL TRIGGER ....................................................................................................84 Enable/ Disable TRIGGER ...................................................................................85 Cc l do phi thc hin Backup ..........................................................................87 Cc loi Backup ....................................................................................................87 Full backup v Differential backup ...............................................................87 Transaction log backup..................................................................................88
Cc thao tc thc hin qu trnh Backup v Restore trong SQL Server 2005 Sao lu (Backup) ...........................................................................................89 Phc hi (Restore) .........................................................................................91
Cc hm quan trng trong T-SQL ................................................................................94 7.1 Cc hm lm vic vi kiu d liu s ...................................................................94 7.1.1 Hm ISNUMERIC.........................................................................................94 7.1.2 7.2 7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 7.2.6 7.2.7 7.2.8 7.3 7.3.1 7.3.2 7.3.3 7.3.4 Hm ROUND ................................................................................................94 Hm LEFT .....................................................................................................95 Hm RIGHT ..................................................................................................95 Hm SUBSTRING ........................................................................................95 Hm LEN.......................................................................................................96 Hm REPLACE.............................................................................................96 Hm STUFF...................................................................................................96 Hm LOWER/UPPER...................................................................................97 Hm LTRIM/RTRIM ....................................................................................97 Hm GETDATE ............................................................................................97 Hm DAY/ MONTH/ YEAR ........................................................................97 Hm DATEPART..........................................................................................98 Hm DATENAME ........................................................................................99 3 Cc hm lm vic vi kiu d liu chui..............................................................95
7.4 8
Kt ni vo SQL Server 2005 t cc ngn ng lp trnh xy dng cc ng dng 8.1 Cu hnh Microsoft SQL Server 2005 ................................................................101 Cho php tip nhn cc kt ni t xa trn th hin ca SQL Server ...........102 Kch hot dch v SQL Server Browser ......................................................102 To cc ngoi l trn Windows Firewall .....................................................103 C# v VB.NET.............................................................................................104 VB 6.............................................................................................................106
lin quan n CSDL ..................................................................................................................101 8.1.1 8.1.2 8.1.3 8.2 8.2.1 8.2.2
Chi tit yu cu h thng cho cc phin bn Microsoft SQL Server 2005 c th tham kho ti a ch: http://www.microsoft.com/sql/prodinfo/sysreqs/default.mspx Download v ci t Microsoft .NET Framework 2.0: ci t thnh cng SQL Server Express Edition hay cc phin bn SQL Server 2005 khc, Microsoft .NET Framework 2.0 phi c ci t trc. G b cc phin bn Beta, CTP hoc Tech Preview ca SQL Server 2005, Visual Studio 2005 v Microsoft .NET Framework 2.0. Download v ci t 6
Ci t SQL Server 2005 Express Edition: Microsoft SQL Server 2005 Express Edition l phin bn min ph, d s dng v nh ca Microsoft SQL Server 2005. Microsoft SQL Server 2005 Express Edition c tch hp trong Visual Studio 2005 to ra s d dng trong vic pht trin cc ng dng hng CSDL. SQL Server 2005 Express Edition c t do s dng trong cc ng dng thng mi v d dng cp nht ln cc phin bn cao hn khi cn thit. Ci t SQL Server Management Studio Express: SQL Server Management Studio Express cung cp giao din ngi dng d dng tng tc vi cc thnh phn ca Microsoft SQL Server 2005 Express Edition. Trc khi ci t SQL Server Management Studio Express, MSXML 6.0 phi c ci t Download ti a ch: http://www.microsoft.com/express/sql/download/default.aspx
Click Next:
10
11
12
Lu : SQL Server 2005 c hai kiu authentication (kim tra ngi dng). Windows authentication mode: Vic kim tra ngi dng ca SQL Server 2005 s ph thuc vo vic kim tra ngi dng ca Windows. Khi ngi dng c quyn ng nhp vo Windows, ngi dng s c quyn ng nhp vo SQL Server. Kiu kim tra ngi dng ny thng c s dng khi ng dng khai thc d liu v SQL Server c ci trn cng mt my tnh. SQL Server authentication mode: Vic kim tra ngi dng ca SQL Server 2005 s khng ph thuc vo vic kim tra ngi dng ca Windows. Khi ngi dng c quyn ng nhp vo Windows, ngi dng cha chc s c quyn ng nhp vo SQL Server. ng nhp vo SQL Server, ngi dng ny phi c mt b username v password do SQL Server qun l. Kiu kim tra ngi dng ny thng c s dng khi ng dng khai thc d liu v SQL Server khng c ci trn cng mt my tnh. Khi chn Mixed mode, SQL Server c th dng bt k kiu kim tra ngi dng no khi cn thit. y l mt thit lp thc s rt hu ch khi xy dng cc ng dng CSDL. Ngoi ra, ta cng phi nh password vo hai bn di c th ng nhp vo SQL Server khi ta xy dng mt ng dng truy xut vo CSDL my ny khi ta ang my khc. Click Next ba ln:
13
14
Ci t SQL Server Management Studio Express. Sau khi ci t, ng nhp vo SQL Server 2005 Express Edition nh sau:
Khi ng nhp c th chn Windows Authentication hoc SQL Server Authentication. Nu chn SQL Server Authentication th phi nhp password. Password ny c thit lp trong qu trnh ci t SQL Server 2005 Express Edition. Nu trong qu trnh ci t SQL Server 2005 Express Edition chng ta khng cho php SQL Server kch hot ngay khi khi ng my, bm nt Connect s gy ra li. khc phc vo Start->Run nh services.msc->Enter. Tm service SQL Server (SQLExpress), double click v trong comboxbox Startup type chn Automatic -> Apply - >Start -> OK. Giao din sau khi ng nhp thnh cng
15
1.2.1 To mt CSDL mi
16
1.2.2 To bng mi
17
Bng gm cc cc ct. Mi ct gm tn ct (Column Name), kiu d liu (Data Type) v mt gi tr cho bit ct c th cha gi tr NULL hay khng. Trong bng s c t nht mt ct lm kha chnh (primary key). Ct lm kha chnh s c biu tng cha kha trc tn ct. Sau khi to xong tt c cc ct ca bng, tin hnh Save -> OK
18
Cn ch l cu lnh SQL s c tc dng trn CSDL ang c chn trong ComboBox. Do cn ch la chn ng CSDL cn tng tc. 19
Trong hu ht cc h qun tr c s d liu quan h, SQL c nhng vai tr nh sau: SQL l ngn ng hi c tnh tng tc: Ngi s dng c th d dng thng qua cc trnh tin ch gi cc yu cu di dng cc cu lnh SQL n c s d liu v nhn kt qu tr v t c s d liu SQL l ngn ng lp trnh c s d liu: Cc lp trnh vin c th nhng cc cu lnh SQL vo trong cc ngn ng lp trnh xy dng nn cc chng trnh ng dng giao tip vi c s d liu SQL l ngn ng qun tr c s d liu: Thng qua SQL, ngi qun tr c s d liu c th qun l c c s d liu, nh ngha cc cu trc lu tr d liu, iu khin truy cp c s d liu,... SQL l ngn ng cho cc h thng khch/ch (client/server): Trong cc h thng c s d liu khch/ch, SQL c s dng nh l cng c giao tip gia cc trnh ng dng pha my khch vi my ch c s d liu. SQL l ngn ng truy cp d liu trn Internet: Cho n nay, hu ht cc my ch Web cng nh cc my ch trn Internet s dng SQL vi vai tr l ngn ng tng tc vi d liu trong cc c s d liu. SQL l ngn ng c s d liu phn tn: i vi cc h qun tr c s d liu phn tn, mi mt h thng s dng SQL giao tip vi cc h thng khc trn mng, gi v nhn cc yu cu truy xut d liu vi nhau. SQL l ngn ng s dng cho cc cng giao tip c s d liu: Trong mt h thng mng my tnh vi nhiu h qun tr c s d liu khc nhau, SQL thng c s dng nh l mt chun ngn ng giao tip gia cc h qun tr c s d liu.
21
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.
insert into Nhanvien values(1, N'Nguyn Vn An', N'22 Nguyn Thin Thut') Cu lnh sau s cp nht lai a ch ca nhn vin c manv l 1 update Nhanvien set diachi = N'22 Nguyn Th Minh Khai' where manv = 1 Cu lnh sau s xa thng tin ca nhn vin c manv l 1 trong bng Nhanvien delete Nhanvien where manv = 1
ln c cng tn trong cc bng khc nhau th bt buc phi ch nh thm tn bng trc tn ct; tn bng v tn ct c phn cch nhau bi du chm V d: Gi s chng ta c CSDL nh sau:
tm ra khch hng c tn Nguyn Vn An t hng vo ngy no, cu truy vn nh sau: Select orderid, orderdate from orders, customers where orders.customerid = customers.customerid and customername = N'Nguyn Vn An'
Bigint Numeric Decimal Float Real Money Bit Datetime Smalldatetime Binary Varbinary Image Text Ntext
S nguyn c gi tr t -263 n 263-1 Kiu s vi chnh xc c nh. Tng t kiu Numeric S thc c gi tr t -1.79E+308 n 1.79E+308 S thc c gi tr t -3.40E + 38 n 3.40E + 38 Kiu tin t Kiu bit (c gi tr 0 hoc 1) Kiu ngy gi (chnh xc n phn trm ca giy) Kiu ngy gi (chnh xc n pht) D liu nh phn vi di c nh (ti a 8000 bytes) D liu nh phn vi di chnh xc (ti a 8000 bytes) D liu nh phn vi di chnh xc (ti a 2,147,483,647 bytes) D liu kiu chui vi di ln (ti a 2,147,483,647 k t) D liu kiu chui vi di ln v h tr UNICODE (ti a 1,073,741,823 k t)
V d: Mi ct trong bng s cha nhng d liu thuc v duy nht mt kiu d liu trong SQL Server. Ct no cha nhng d liu thuc kiu no s c quy nh lc nh ngha bng. Create table Nhanvien ( MANV NVARCHAR(10) HOTENNVARCHAR(30) GIOITINH NGAYSINH NOISINH HSLUONG MADV INT ) BIT, SMALLDATETIME, NCHAR(50), DECIMAL(4,2), NOT NULL, NOT NULL,
26
V d: V d di y khai bo mt bin c tn @numberOfCustomers thng qua t kha declare. Bin ny lu s khch hng m c thng qua hm count. Sau in ra gi tr ca bin. declare @numberOfCustomers int select @numberOfCustomers = count(*) from Customers print @numberOfCustomers
2.3.7 Hm (Function)
C 2 loi hm: mt loi l c xy dng sn trong SQL Server 20005 Express Edition (built-in) v mt loi do ngi dng t nh ngha (user-defined) Cc hm Built-In c chia lm 3 nhm: Rowset Functions : Loi ny thng tr v mt object v c i x nh mt table. V d nh hm OPENQUERY s tr v mt recordset v c th ng v tr ca mt table trong cu lnh Select. Aggregate Functions : Loi ny lm vic trn mt s gi tr v tr v mt gi tr n hay l cc gi tr tng. V d nh hm AVG s tr v gi tr trung bnh ca mt ct. Scalar Functions : Loi ny lm vic trn mt gi tr n v tr v mt gi tr n. Trong loi ny li chia lm nhiu loi nh nh cc hm v ton hc, v thi gian, x l kiu d liu String....V d nh hm MONTH('2002-09-30') s tr v thng 9. Cc hm User-Defined (c to ra bi cu lnh CREATE FUNCTION v phn body thng c gi trong cp lnh BEGIN...END) cng c chia lm cc nhm nh sau: Scalar Functions : Loi ny cng tr v mt gi tr n bng cu lnh RETURNS. Table Functions : Loi ny tr v mt table
3 4 5 6 7
=, >, <, >=, <=, <>, !=, !>, !< (Comparison operators) NOT AND ALL, ANY, BETWEEN, IN, LIKE, OR, SOME = (Assignment)
2.3.11 Gi tr NULL
Mt c s d liu l s phn nh ca mt h thng trong th gii thc, do cc gi tr d liu tn ti trong c s d liu c th khng xc nh c. Mt gi tr khng xc nh c xut hin trong c s d liu c th do mt s nguyn nhn sau: Gi tr c tn ti nhng khng bit. Khng xc nh c gi tr c tn ti hay khng. Ti mt thi im no gi tr cha c nhng ri c th s c. Gi tr b li do tnh ton (trn s, chia cho khng,...) Nhng gi tr khng xc nh c biu din trong c s d liu quan h bi cc gi tr NULL. y l gi tr c bit v khng nn nhm ln vi chui rng (i vi d liu kiu chui) hay gi tr khng (i vi gi tr kiu s). Gi tr NULL ng mt vai tr quan trng trong cc c s d liu v hu ht cc h qun tr c s d liu quan h hin nay u h tr vic s dng gi tr ny.
28
Cu lnh SELECT c s dng tc ng ln cc bng d liu v kt qu ca cu lnh cng c hin th di dng bng, tc l mt tp hp cc dng v cc ct (ngoi tr trng hp s dng cu lnh SELECT vi mnh COMPUTE). V d:
V d di y hin th tn khch hng v a ch cc khch hng hin c. select customername, gender, address from customers
Chn tt c cc ct: Nh ni trong chng 1, chng ta dng du * trong cu lnh Select hm chn ht tt c cc ct. Trong trng hp ny, cc ct c hin th trong kt qu truy vn s tun theo th t m chng c to ra khi bng c nh ngha. V d: Select * from Customers
Chn mt s ct c th: Trong trng hp cn ch nh c th cc ct cn hin th trong kt qu truy vn, ta ch nh danh sch cc tn ct trong danh sch chn. Th t ca cc ct trong kt qu truy vn tun theo th t ca cc trng trong danh sch chn. V d: Select CUSTOMERNAME, ADDRESS From Customers
Lu : Nu truy vn c thc hin trn nhiu bng/khung nhn v trong cc bng/khung nhn c cc trng trng tn th tn ca nhng trng ny nu xut hin trong danh sch chn phi c vit di dng: tn_bng.tn_trng Thay i tiu cc ct: Trong kt qu truy vn, tiu ca cc ct mc nh s l tn ca cc trng tng ng trong bng. Tuy nhin, cc tiu tr nn thn thin hn, ta c th i tn cc tiu ca cc ct. t tiu cho mt ct no , ta s dng cch vit: tiu__ct = tn_trng hoc tn_trng AS tiu__ct hoc tn_trng tiu__ct 31
V d: select [M khch hng] = Customerid, customername as [Tn khch hng], address [a ch] from Customers
S dng cu trc CASEWHEN: Cu trc CASE c s dng trong danh sch chn nhm thay i kt qu ca truy vn tu thuc vo cc trng hp khc nhau. Cu trc ny c c php nh sau: CASE biu_thc WHEN biu_thc_kim_tra THEN kt_qu [ ... ] [ELSE kt_qu_ca_else] END hoc: CASE WHEN iu_kin THEN kt_qu [ ... ] [ELSE kt_qu_ca_else] END V d: Cu lnh SQL di y s hin th gii tnh ca khch hng ty theo gi tr thc c lu trong CSDL. Nu gi tr trong CSDL l FALSE-> hin th gii tnh N, nu gi tr l TRUE-> hin th gii tnh NAM. select CUSTOMERNAME, ADDRESS, case GENDER when 1 then 'NAM' else N'N' end as [GII TNH] from customers Cu lnh trn cng c th vit nh sau: 32
select CUSTOMERNAME, ADDRESS, case when GENDER = 1 then 'NAM' else N'N' end as [GII TNH] from customers
Loi b cc dng d liu trng nhau: T kha DISTINCT s loi b cc dng d liu ging nhau. Trong v d trn, c hai khch hng c tn Cao Van Trung. Nu ta ch truy vn tn khch hng, loi b s trng lp ta dng t kha DISTINCT select distinct CUSTOMERNAME from customers
La chn mt s lng gii hn cc dng: T kha TOP n s tr v ch n dng d liu V d: v d sau ch tr v duy nht hai dng d liu select top 2 Customername from customers
33
Trong mnh FROM c th s dng b danh (alias) nhm lm cho cu truy vn d nhn hn. V d: Select * from Customers c Where c.CustomerID = 1
Trong mnh WHERE thng s dng: Cc ton t kt hp iu kin (AND, OR) Cc ton t so snh Kim tra gii hn ca d liu (BETWEEN/ NOT BETWEEN) 34
Tp hp Kim tra khun dng d liu. Cc gi tr NULL Cc ton t so snh Ton t = > < >= <= <> !> !< ngha Bng Ln hn Nh hn Ln hn hoc bng Nh hn hoc bng Khc Khng ln hn Khng nh hn
V d: V d di y ly tn, ngy sinh theo nh dng dd/MM/yyyy v a ch ca nhng khch hng c tn Le Thi Hoa v tui cc khch hng ny ln hn 20. select CUSTOMERNAME, convert (varchar, BIRTHDAY, 103) as BIRTHDAY, ADDRESS from Customers where Customername = 'Le Thi Hoa' and year(getdate()) - year(BIRTHDAY) > 20
Kim tra gii hn ca d liu kim tra xem gi tr d liu nm trong (ngoi) mt khong no , ta s dng ton t BETWEEN/ NOT BETWEEN nh sau: Mnh variable BETWEEN a AND b variable NOT BETWEEN a AND b n 30 tui. select CUSTOMERNAME, convert (varchar, BIRTHDAY, 103) as BIRTHDAY, ADDRESS from Customers where Customername = 'Le Thi Hoa' and year(getdate()) - year(BIRTHDAY) between 20 and 30 35 ngha a <= variable <=b variable <a hoc variable > b
Ton t lm vic trn tp hp (IN/ NOT IN) T kho IN/ NOT IN c s dng khi ta cn ch nh iu kin tm kim d liu cho cu lnh SELECT l mt danh sch cc gi tr. Sau IN/ NOT IN c th l mt danh sch cc gi tr hoc l mt cu lnh SELECT khc. V d: Cu lnh di y ly ra cc thng tin ca khch hng c m l 5,6 hoc 7 select CUSTOMERID, CUSTOMERNAME, convert(varchar,BIRTHDAY, 103) as BIRTHDAY, ADDRESS from Customers where CUSTOMERID in (5,6,7)
V d: V d ny minh ha mt cu lnh SELECT khc ng sau mnh IN/ NOT IN select CUSTOMERID, CUSTOMERNAME, convert(varchar,BIRTHDAY, 103) as BIRTHDAY, ADDRESS from Customers where CUSTOMERID not in ( select CUSTOMERID from customers where customerid >= 7)
Ton t LIKE/ NOT LIKE v k t i din (WildCard) T kho LIKE (NOT LIKE) s dng trong cu lnh SELECT nhm m t khun dng ca d liu cn tm kim. Chng thng c kt hp vi cc k t i din sau y: K t i din % _ [] [^] ngha Chui k t bt k gm khng hoc nhiu k t Mt k t bt k Mt k t nm trong gii hn c ch nh. V d:[a-f] hm ch mt trong cc k t: a, b, c, d, e, f. Mt k t khng nm trong gii hn c ch nh. V d:[^a-f] hm ch mt k t khc tt c cc k t: a, b, c, d, e, f. V d: V d di y tm ra cc khch hng c tn bt u bng Nguyen 36
Gi tr NULL D liu trong mt ct cho php NULL s nhn gi tr NULL trong cc trng hp sau: Nu khng c d liu c nhp cho ct v khng c mc nh cho ct hay kiu d liu trn ct . Ngi s dng trc tip a gi tr NULL vo cho ct . Mt ct c kiu d liu l kiu s s cha gi tr NULL nu gi tr c ch nh gy trn s. Trong mnh WHERE, kim tra gi tr ca mt ct c gi tr NULL hay khng, ta s dng cch vit: WHERE tn_ct IS NULL hoc: WHERE tn_ct IS NOT NULL V d: select * from Customers where birthday is null
To mi bng d liu t cau lnh SELECT Cu lnh SELECT ... INTO c tc dng to mt bng mi c cu trc v d liu c xc nh t kt qu ca truy vn. Bng mi c to ra s c s ct bng s ct c ch nh trong danh sch chn v s dng s l s dng kt qu ca truy vn V d: select CUSTOMERNAME, convert(varchar,BIRTHDAY, 103) as BIRTHDAY, ADDRESS into NEWCUSTOMERS from Customers Lu : Nu trong danh sch chn c cc biu thc th nhng biu thc ny phi c t tiu 37
Sp xp kt qu truy vn Mc nh, cc dng d liu trong kt qu ca cu truy vn tun theo th t ca chng trong bng d liu hoc c sp xp theo ch mc (nu trn bng c ch mc). Trong trng hp mun d liu c sp xp theo chiu tng hoc gim ca gi tr ca mt hoc nhiu trng, ta s dng thm mnh ORDER BY trong cu lnh SELECT; Sau ORDER BY l danh sch cc ct cn sp xp (ti a l 16 ct). D liu c sp xp c th theo chiu tng (ASC) hoc gim (DESC), mc nh l sp xp theo chiu tng. Nu sau ORDER BY c nhiu ct th vic sp xp d liu s c u tin theo th t t tri qua phi. V d: V d i y sp xp thng tin cc khch hng theo th t tui gim dn. select CUSTOMERNAME, year(getdate())- year(BIRTHDAY) as AGE, ADDRESS from Customers order by AGE DESC
Ta c th ch nh s th t ca ct cn c sp xp. Cu lnh v d trn c th c vit li nh sau: select CUSTOMERNAME, year(getdate())- year(BIRTHDAY) as AGE, ADDRESS from Customers order by 2 DESC
Trong Cu_lnh_1 c dng SELECT danh_sch_ct [INTO tn_bng_mi] [FROM danh_sch_bng|khung_nhn] [WHERE iu_kin] [GROUP BY danh_sch_ct] [HAVING iu_kin] v Cu_lnh_i (i = 2,..,n) c dng SELECT danh_sch_ct [FROM danh_sch_bng|khung_nhn] [WHERE iu_kin] [GROUP BY danh_sch_ct] [HAVING iu_kin] V d: Php hp gia hai bng di y cho kt qu nh sau:
UNION select A,B from A union select F,G from B Mc nh, nu trong cc truy vn thnh phn ca php hp xut hin nhng dng d liu ging nhau th trong kt qu truy vn ch gi li mt dng. Nu mun gi li cc dng ny, ta phi s dng thm t kho ALL trong truy vn thnh phn.
39
UNION ALL Khi s dng ton t UNION thc hin php hp, ta cn ch cc nguyn tc sau: Danh sch ct trong cc truy vn thnh phn phi c cng s lng. Cc ct tng ng trong tt c cc bng, hoc tp con bt k cc ct c s dng trong bn thn mi truy vn thnh phn phi cng kiu d liu. Cc ct tng ng trong bn thn tng truy vn thnh phn ca mt cu lnh UNION phi xut hin theo th t nh nhau. Nguyn nhn l do php hp so snh cc ct tng ct mt theo th t c cho trong mi truy vn. Khi cc kiu d liu khc nhau c kt hp vi nhau trong cu lnh UNION, chng s c chuyn sang kiu d liu cao hn (nu c th c). Tiu ct trong kt qu ca php hp s l tiu ct c ch nh trong truy vn u tin. Mnh ORDER BY v COMPUTE dng sp xp kt qu truy vn hoc tnh ton cc gi tr thng k ch c s dng cui cu lnh UNION. Chng khng c s dng trong bt k truy vn thnh phn no. Mnh GROUP BY v HAVING ch c th c s dng trong bn thn tng truy vn thnh phn. Chng khng c php s dng tc ng ln kt qu chung ca php hp. Php ton UNION c th c s dng bn trong cu lnh INSERT. Php ton UNION khng c s dng trong cu lnh CREATE VIEW.
40
3.1.5 Php ni
Khi cn thc hin mt yu cu truy vn d liu t hai hay nhiu bng, ta phi s dng n php ni. Mt cu lnh ni kt hp cc dng d liu trong cc bng khc nhau li theo mt hoc nhiu iu kin no v hin th chng trong kt qu truy vn. V d: tm ra khch hng c m l 3 t hng trong nhng ngy no th cu truy vn nh sau: select c.CUSTOMERNAME, o.ORDERDATE from customers c, orders o where c.customerid = o.customerid and c.customerid = 3
Bng Order
Trc tin vo bng Customers tm ra dng c c m khch hng l 3. Tm kim trong bng Orders cc dng c gi tr trng CUSTOMERID l 3 v cho cc dng ny vo kt qu truy vn. Nh vy thc hin yu cu truy vn, chng ta phi thc hin php kt ni gia hai bng Customers v Orders vi iu kin kt ni l CUSTOMERID ca bng CUSTOMERS bng vi CUSTOMERID ca bng ORDERS. Php ni l c s thc hin cc yu cu truy vn d liu lin quan n nhiu bng. Mt cu lnh ni thc hin ly cc dng d liu trong cc bng tham gia truy vn, so snh gi tr ca cc dng ny trn mt hoc nhiu ct c ch nh trong iu kin ni v kt hp cc dng tho mn iu kin thnh nhng dng trong kt qu truy vn. thc hin c mt php ni, cn phi xc nh c nhng yu t sau: 41
Nhng ct no cn hin th trong kt qu truy vn Nhng bng no c tham gia vo truy vn. iu kin thc hin php ni gia cc bng d liu l g Trong cc yu t k trn, vic xc nh chnh xc iu kin thc hin php ni gia cc bng ng vai tr quan trng nht. Trong a s cc trng hp, iu kin ca php ni c xc nh nh vo mi quan h gia cc bng cn phi truy xut d liu. Thng thng, l iu kin bng nhau gia kho chnh v kho ngoi ca hai bng c mi quan h vi nhau. Nh vy, c th a ra mt cu lnh ni thc hin chnh xc yu cu truy vn d liu i hi phi hiu c mi quan h cng nh ngha ca chng gia cc bng d liu. Mt cu lnh ni cng c bt u vi t kha SELECT. Cc ct c ch nh tn sau t kho SELECT l cc ct c hin th trong kt qu truy vn. Vic s dng tn cc ct trong danh sch chn c th l: Tn ca mt s ct no trong cc bng c tham gia vo truy vn. Nu tn ct trong cc bng trng tn nhau th tn ct phi c vit di dng tn_bng.tn_ct Du sao (*) c s dng trong danh sch chn khi cn hin th tt c cc ct ca cc bng tham gia truy vn. Trong trng hp cn hin th tt c cc ct ca mt bng no , ta s dng cch vit: tn_bng.* Mnh FROM trong php ni Sau mnh FROM ca cu lnh ni l danh sch tn cc bng (hay khung nhn) tham gia vo truy vn. Nu ta s dng du * trong danh sch chn th th t ca cc bng lit k sau FROM s nh hng n th t cc ct c hin th trong kt qu truy vn. Mnh WHERE trong php ni Khi hai hay nhiu bng c ni vi nhau, ta phi ch nh iu kin thc hin php ni ngay sau mnh WHERE. iu kin ni c biu din di dng biu thc logic so snh gi tr d liu gia cc ct ca cc bng tham gia truy vn. Cc ton t so snh di y c s dng xc nh iu kin ni Php ton = > >= < ngha Bng Ln hn Ln hn hoc bng Nh hn 42
V d php kt ni t nhin: select c.CUSTOMERID, c.CUSTOMERNAME, c.BIRTHDAY, c.GENDER, c.ADDRESS, o.ORDERDATE from Customers c, Orders o where c.customerid = o.customerid hoc vit gn: select c.*, o.ORDERDATE from Customers c, Orders o where c.customerid = o.customerid
Trong php kt ni bng, trng CUSTOMERID xut hin hai ln. S d tha c loi b bng cch s dng php kt ni t nhin v vic ch nh r cc ct ct cn truy xut.
43
Trong cc cu lnh ni, ngoi iu kin ca php ni c ch nh trong mnh WHERE cn c th ch nh cc iu kin tm kim d liu khc (iu kin chn). Thng thng, cc iu kin ny c kt hp vi iu kin ni thng qua ton t AND. V d: select c.*, o.ORDERDATE from Customers c, Orders o where c.customerid = o.customerid and c.customerid = 3 Php t ni Php t ni l php ni m trong iu kin ni c ch nh lin quan n cc ct ca cng mt bng. Trong trng hp ny, s c s xut hin tn ca cng mt bng nhiu ln trong mnh FROM v do cc bng cn phi c t b danh. V d: Gi s c yu cu tm ra cc khch hng c nhiu hn mt n t hng trong cng ngy select c1.CUSTOMERID, c1.CUSTOMERNAME from customers c1, customers c2, orders o1, orders o2 where c1.customerid = o1.customerid and c2.customerid = o2.customerid and c1.customerid = c2.customerid and o1.orderdate = o2.orderdate and o1.orderid <> o2.orderid Cu truy vn c gii thch nh sau: Ln lt ly ra cc m khch hng, m ha n v ngy t hng t bng c1, o1 em so snh ln lt vi cc m khch hng, m ha n v ngy t hng t bng c2, o2. Nu vic so snh hai tp hp ny tha iu kin sau y: m khch hng trng nhau, ngy t hng trng nhau v c m ha n khc nhau th thng tin khch hng ny c cho vo kt qua truy vn. Php ni ngoi Trong cc php ni cp trn, ch nhng dng c gi tr trong cc ct c ch nh tho mn iu kin kt ni mi c hin th trong kt qu truy vn, v c gi l php ni trong (inner join) Theo mt ngha no , nhng php ni ny loi b thng tin cha trong nhng dng khng tho mn iu kin ni. Tuy nhin, i khi ta cng cn gi li nhng thng tin ny bng cch cho php nhng dng khng tho mn iu kin ni c mt trong kt qu ca php ni. lm iu ny, ta c th s dng php ni ngoi. SQL cung cp cc loi php ni ngoi sau y: 44
Php ni ngoi tri (k hiu: *=): Php ni ny hin th trong kt qu truy vn tt c cc dng d liu ca bng nm bn tri trong iu kin ni cho d nhng dng ny khng tho mn iu kin ca php ni Php ni ngoi phi (k hiu: =*): Php ni ny hin th trong kt qu truy vn tt c cc dng d liu ca bng nm bn phi trong iu kin ni cho d nhng dng ny khng tho iu kin ca php ni. Tuy nhin trong SQL Server 2005 Express Edition khng h tr trc tip cc php ni *= v =*. Mt khc trong cc phin bn SQL Server sp ti cc php ni ny s hon ton khng c h tr. Do Microsoft khuyn co ngi s dng dng cc php ni LEFT JOIN, RIGHT JOIN. Cc php ni ny s c ni r trong phn di y.
Ta c th s dng cu truy vn sau: select * from customers c inner join orders o on c.customerid = o.customerid
Nu php ni ngoi tri hin th trong kt qu truy vn c nhng dng d liu khng tho iu kin ni ca bng bn tri trong php ni th php ni ngoi y hin th trong kt qu truy vn c nhng dng d liu khng tho iu kin ni ca c hai bng tham gia vo php ni. V d: Gi s c CSDL nh sau:
Thc hin php ni ngoi tri, ni ngoi phi v ni ngoi y cho kt qu nh sau: Php ni ngoi tri: select * from faculty f left join class c on f.facultyid = c.facultyid
Php ni ngoi phi: select * from faculty f right join class c on f.facultyid = c.facultyid
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
Hm SUM v AVG ch lm vic vi cc biu thc s. Hm SUM, AVG, COUNT, MIN v MAX b qua cc gi tr NULL khi tnh ton. Hm COUNT(*) khng b qua cc gi tr NULL. Mc nh, cc hm gp thc hin tnh ton thng k trn ton b d liu. Trong trng hp cn loi b bt cc gi tr trng nhau (ch gi li mt gi tr), ta ch nh thm t kho DISTINCT trc biu thc l i s ca hm. Thng k trn ton b d liu Khi cn tnh ton gi tr thng k trn ton b d liu, ta s dng cc hm gp trong danh sch chn ca cu lnh SELECT. Trong trng hp ny, trong danh sch chn khng c s dng bt k mt tn ct hay biu thc no ngoi cc hm gp. V d: Tnh tui trung bnh, tui nh nht v ln nht ca cc khch hng select min(year(getdate())-year(BIRTHDAY)) as MINAGE, max(year(getdate())-year(BIRTHDAY)) as MAXAGE, avg(year(getdate())-year(BIRTHDAY)) as AVGAGE from customers
Thng k trn nhm Trong trng hp cn thc hin tnh ton cc gi tr thng k trn cc nhm d liu, ta s dng mnh GROUP BY phn hoch d liu vo trong cc nhm. Cc hm gp c s dng s thc hin thao tc tnh ton trn mi nhm v cho bit gi tr thng k theo cc nhm d liu. V d: Cu truy vn sau cho bit s tng s tin khch hng phi tr cho tt c cc ln t hng select c.CUSTOMERID, c.CUSTOMERNAME, convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY) SUMTOTAL from customers c inner join orders o on o.customerid = c.customerid inner join orderdetail od on o.orderid = od.orderid inner join items i on i.itemid = od.itemid group by c.customerid, c.customername 48 as money),1) as
Nu mun hin s tin khch hng phi tr cho tng n t hng, ch cn thm trng ORDERID vo mnh group by. select c.CUSTOMERID, c.CUSTOMERNAME, convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY)as SUMTOTAL from customers c inner join orders o on o.customerid = c.customerid inner join orderdetail od on o.orderid = od.orderid inner join items i on i.itemid = od.itemid group by c.customerid, c.customername, o.orderid money),1) as
Lu : Trong trng hp danh sch chn ca cu lnh SELECT c c cc hm gp v nhng biu thc khng phi l hm gp th nhng biu thc ny phi c mt y trong mnh GROUP BY, nu khng cu lnh s khng hp l. Mnh HAVING ch nh iu kin trong hm gp Mnh HAVING c s dng nhm ch nh iu kin i vi cc gi tr thng k c sn sinh t cc hm gp tng t nh cch thc mnh WHERE thit lp cc iu kin cho cu lnh SELECT. Mnh HAVING thng khng thc s c ngha nu nh khng s dng kt hp vi mnh GROUP BY. Mt im khc bit gia HAVING v WHERE l trong iu kin ca WHERE khng c c cc hm gp trong khi HAVING li cho php s dng cc hm gp trong iu kin ca mnh. V d: Tm ra cc khch hng c tng s tin phi thanh ton cho tt c cc ln t hng ln hn 100 triu. select c.CUSTOMERID, c.CUSTOMERNAME, convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY)as SUMTOTAL from customers c inner join orders o on o.customerid = c.customerid inner join orderdetail od on o.orderid = od.orderid money),1) as
inner join items i on i.itemid = od.itemid group by c.customerid, c.customername having sum(i.UNITPRICE*od.QUANTITY) > 100000000 49
Nu truy vn con tr v nhiu hn mt gi tr, vic s dng php so snh nh trn s khng hp l. Trong trng hp ny, sau php ton so snh phi s dng thm lng t ALL hoc ANY. Lng t ALL c s dng khi cn so snh gi tr ca biu thc vi tt c cc gi tr tr v trong kt qu ca truy vn con; ngc lai, php so snh vi lng t ANY c kt qu ng khi ch cn mt gi tr bt k no trong kt qu ca truy vn con tho mn iu kin V d: Ton t IN/NOT IN Khi cn thc hin php kim tra gi tr ca mt biu thc c xut hin (khng xut hin) trong tp cc gi tr ca truy vn con hay khng, ta c th s dng ton t IN (NOT IN) nh sau: WHERE biu_thc [NOT] IN (truy_vn_con) V d: Truy vn con vi EXISTS Lng t EXISTS c s dng kt hp vi truy vn con di dng: WHERE [NOT] EXISTS (truy_vn_con) Lng t EXISTS (tng ng NOT EXISTS) tr v gi tr True (tng ng False) nu kt qu ca truy vn con c t nht mt dng (tng ng khng c dng no). iu khc bit ca vic s dng EXISTS vi hai cch nu trn l trong danh sch chn ca truy vn con c th c nhiu hn hai ct. V d: Truy vn con v mnh HAVING Mt truy vn con c th c s dng trong mnh HAVING ca mt truy vn khc. Trong trng hp ny, kt qu ca truy vn con c s dng to nn iu kin i vi cc hm gp. V d:
Mt cch s dng khc ca cu lnh INSERT c s dng b sung nhiu dng d liu vo mt bng, cc dng d liu ny c ly t mt bng khc thng qua cu lnh SELECT. cch ny, cc gi tr d liu c b sung vo bng khng c ch nh tng minh m thay vo l mt cu lnh SELECT truy vn d liu t bng khc. C php cu lnh INSERT c dng nh sau: INSERT INTO tn_bng[(danh_sch_ct)] cu_lnh_SELECT V d: insert into Customers_Backup select * from Customers Lu : Kt qu ca cu lnh SELECT phi c s ct bng vi s ct c ch nh trong bng ch v phi tng thch v kiu d liu.
update tmp1 set address = case end when customerid < 2 then 'Nguyen Trung Truc' else 'Nguyen Thi Minh Khai'
3.2.3 Xa d liu
xo d liu trong mt bng, ta s dng cu lnh DELETE. C php ca cu lnh ny nh sau: DELETE FROM tn_bng [FROM danh_sch_bng] [WHERE iu_kin] Trong cu lnh ny, tn ca bng cn xo d liu c ch nh sau DELETE FROM. Mnh WHERE trong cu lnh c s dng ch nh iu kin i vi cc dng d liu cn xo. Nu cu lnh DELETE khng c mnh WHERE th ton b cc dng d liu trong bng u b xo. V d: delete from Items where itemid = 3 Xo d liu khi iu kin lin quan n nhiu bng Nu iu kin trong cu lnh DELETE lin quan n cc bng khng phi l bng cn xa d liu, ta phi s dng thm mnh FROM v sau l danh sch tn cc bng . Trong trng hp ny, trong mnh WHERE ta ch nh thm iu kin ni gia cc bng V d: delete from orderdetail from items where items.itemid = orderdetail.itemid and items.itemname = 'LAPTOP' S dng truy vn con trong cu lnh DELETE Mt cu lnh SELECT c th c lng vo trong mnh WHERE trong cu lnh DELETE lm iu kin cho cu lnh tng t nh cu lnh UPDATE. V d: delete from orderdetail from items 54
where items.itemid = (select i.itemid from items i inner join orderdetail od on i.itemid = od.itemid WHERE itemname = 'LAPTOP') Xo ton b d liu trong bng Cu lnh DELETE khng ch nh iu kin i vi cc dng d liu cn xo trong mnh WHERE s xo ton b d liu trong bng. Thay v s dng cu lnh DELETE trong trng hp ny, ta c th s dng cu lnh TRUNCATE c c php nh sau: TRUNCATE TABLE tn_bng V d: truncate table tmp1
55
4.1 To bng
Cu lnh CREATE TABLE c s dng nh ngha mt bng d liu mi trong CSDL. Khi nh ngha mt bng d liu mi, ta cn phi xc nh c cc yu cu sau y: Bng mi c to ra s dng vi mc ch g v c vai tr nh th no trong c s d liu. Cu trc ca bng bao gm nhng trng (ct) no, mi mt trng c ngha nh th no trong vic biu din d liu, kiu d liu ca mi trng l g v trng c cho php nhn gi tr NULL hay khng. Nhng trng no s tham gia vo kha chnh ca bng. Bng c quan h vi nhng bng khc hay khng v nu c th quan h nh th no. Trn cc trng ca bng c tn ti nhng rng buc v khun dng, iu kin hp l ca d liu hay khng; nu c th s dng u v nh th no. Cu lnh CREATE TABLE c c php nh sau CREATE TABLE tn_bng ( tn_ct thuc_tnh_ct cc_rng_buc [,... ,tn_ct_n thuc_tnh_ct_n cc_rng_buc_ct_n] [,cc_rng_buc_trn_bng] ) Tn_bng: tun theo quy tc nh danh, khng vt qu 128 k t Tn_ct: cc ct trong bng, mi bng c t nht mt ct. Thuc_tnh_ct: bao gm kiu d liu ca ct, gi tr mc nh ca ct, ct c c thit lp thuc tnh identity, ct c chp nhn gi tr NULL hay khng. Trong kiu d liu l thuc tnh bt buc. 56
Cc_rng_buc: gm cc rng buc v khun dng d liu ( rng buc CHECK) hay cc rng buc v bo ton d liu (PRIMARY KEY, FOREIGN KEY, UNIQUE) V d: V d di y to mt bng c tn CUSTOMERS create table customers ( customerid int identity (1,1) primary key, customername nvarchar(50) not null, address nvarchar(100 ) null , birthday datetime null, gender bit default('true') not null ) Ct customerid c kiu d liu int, c ch nh thuc tnh identity(1,1) ngha l d liu ct ny c thm t ng bt u t 1 v mi ln c dng mi thm vo, gi tr ct ny c tng ln 1. Ct ny cng c ch nh lm kha chnh ca bng thng qua thuc tnh primary key Thuc tnh NULL/ NOT NULL ch ra rng ct c chp nhn/ khng chp nhn gi tr NULL. Ct gender c ch nh gi tr mc nh l true ngha l nu khng ch nh gi tr cho ct ny th ct ny c gi tr l true V d: Thm dng mi vo bng customers vi gi tr truyn vo y cho cc ct insert into customers values('Nguyen Van An', '22 Nguyen Thien Thuat', '5/5/1988', 'True') Thm dng mi vo bng customers s dng gi tr mc nh insert into customers (customername, address, birthday) values('Nguyen Van An', '22 Nguyen Thien Thuat', '5/5/1988') Thm dng mi vo bng customers v khng truyn gi tr cho cc ct cho php gi tr NULL insert into customers (customername ) values('Nguyen Van An')
57
C th gp chung cc rng buc CHECK li trong mt rng buc duy nht nh sau create table students ( studentid int identity(1,1) primary key, studentname nvarchar(50) not null, address nvarchar(100) not null, score1 tinyint not null , score2 tinyint not null, 58
score3 tinyint not null, constraint chk_score CHECK( (score1>= 0 and score1 <=10) and (score2 between 0 and 10) and (score3 in (1,2,3,4,5,6,7,8,9,10))) )
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) )
Cch thc x l i vi cc bn ghi trong bng c nh ngha trong trng hp cc bn ghi c tham chiu trong bng tham chiu b xo (ON DELETE) hay cp nht (ON UPDATE). SQL chun a ra 4 cch x l CASCADE: T ng xo (cp nht) nu bn ghi c tham chiu b xo (cp nht). NO ACTION: (Mc nh) Nu bn ghi trong bng tham chiu ang c tham chiu bi mt bn ghi bt k trong bng c nh ngha th bn ghi khng c php xo hoc cp nht (i vi ct c tham chiu). SET NULL: Cp nht li kho ngoi ca bn ghi thnh gi tr NULL (nu ct cho php nhn gi tr NULL). SET DEFAULT: Cp nht li kho ngoi ca bn ghi nhn gi tr mc nh (nu ct c qui nh gi tr mc nh). V d: drop table orderdetail create table orderdetail ( orderid int constraint fk_orderdetail_orders foreign key references orders(orderid) on delete cascade on update cascade, customerid int constraint fk_orderdetail_customer foreign key references customers(customerid) on delete cascade on update cascade, itemid int constraint fk_orderdetail_items foreign key references items(itemid) on delete cascade on update cascade, quantity decimal(18,2) not null, )
Xo mt ct khi bng. Thay i nh ngha ca mt ct trong bng. Xo b hoc b sung cc rng buc cho bng C php ca cu lnh ALTER TABLE nh sau: ALTER TABLE tn_bng ADD nh_ngha_ct | ALTER COLUMN tn_ct DROP COLUMN tn_ct | ADD CONSTRAINT tn_rng_buc nh_ngha_rng_buc DROP CONSTRAINT tn_rng_buc V d 1: Thm mt ct mi vo bng ORDERS alter table orders add description nvarchar(100) not null V d 2: Thay i nh ngha ct desciption alter table orders alter column description nvarchar(200) null V d 3: Thm rng buc CHECK vo ct decription alter table orders add constraint chk_descriptionlength CHECK (len(description) > 10) V d 4: Xa rng buc CHECK alter table orders drop chk_descriptionlength V d 5: Xa ct description alter table orders drop column description V d 6: Thm mt ct mi vo bng orders v thm rng buc cho ct ny alter table orders add description nvarchar(100) null, constraint chk_descriptionlength CHECK (len(description) > 0) Nu b sung thm mt ct vo bng v trong bng c t nht mt bn ghi th ct mi cn b sung phi cho php chp nhn gi tr NULL hoc phi c gi tr mc nh. Mun xo mt ct ang c rng buc bi mt rng buc hoc ang c tham chiu bi mt kho ngoi, ta phi xo rng buc hoc kho ngoi trc sao cho trn ct khng cn bt k mt rng buc v khng cn c tham chiu bi bt k kho ngoi no. 62 kiu_d_liu [NULL | NOT NULL]
Nu b sung thm rng buc cho mt bng c d liu v rng buc cn b sung khng c tho mn bi cc bn ghi c trong bng th cu lnh ALTER TABLE khng thc hin c.
4.4 Xa bng
Khi mt bng khng cn cn thit , ta c th xo n ra khi c s d liu bng cu lnh DROP TABLE. Cu lnh ny cng ng thi xo tt c nhng rng buc, ch mc, trigger lin quan n bng . Cu lnh c c php nh sau: DROP TABLE tn_bng Trong cc h qun tr c s d liu, khi xo mt bng bng lnh DROP TABLE, ta khng th khi phc li bng cng nh d liu ca n. Do , cn phi cn thn khi s dng cu lnh ny. Cu lnh DROP TABLE khng th thc hin c nu bng cn xo ang c tham chiu bi mt rng buc FOREIGN KEY. Trong trng hp ny, rng buc FOREIGN KEY ang tham chiu hoc bng ang tham chiu n bng cn xo phi c xo trc. Khi mt bng b xo, tt c cc rng buc, ch mc v trigger lin quan n bng cng ng thi b xa theo. Do , nu ta to li bng th cng phi to li cc i tng ny. V d: xa bng ORDERS trc tin ta phi xa rng buc FOREIGN KEY t bng ORDERDETAIL alter table orderdetail drop constraint fk_orderdetail_orders Sau xa bng ORDERS drop table orders
Nh vy, mt khung nhn trng ging nh mt bng vi mt tn khung nhn v l mt tp bao gm cc dng v cc ct. im khc bit gia khung nhn v bng l khung nhn khng c xem l mt cu trc lu tr d liu tn ti trong c s d liu. Thc cht d liu quan st c trong khung nhn c ly t cc bng thng qua cu lnh truy vn d liu. Cu lnh CREATE VIEW c s dng to ra khung nhn v c c php nh sau: CREATE VIEW tn_khung_nhn[(danh_sch_tn_ct)] AS cu_lnh_SELECT V d: create view CUSTOMERINFO as select CUSTOMERNAME, (year(getdate()) - year(BIRTHDAY)) as AGE, ADDRESS from customers Thc hin cu truy vn trn khung nhn va to ra: select * from customerinfo
Nu trong cu lnh CREATE VIEW, ta khng ch nh danh sch cc tn ct cho khung nhn, tn cc ct trong khung nhn s chnh l tiu cc ct trong kt qu ca cu lnh SELECT. Trong trng hp tn cc ct ca khung nhn c ch nh, chng phi c cng s lng vi s lng ct trong kt qu ca cu truy vn. V d: create view CUSTOMERINFO (CUSTOMERNAME, AGE, ADDRESS) as select CUSTOMERNAME, year(getdate()) - year(BIRTHDAY), ADDRESS from customers Lu : Phi t tn cho cc ct ca khung nhn trong cc trng hp sau y:
64
Trong kt qu ca cu lnh SELECT c t nht mt ct c sinh ra bi mt biu thc (tc l khng phi l mt tn ct trong bng c s) v ct khng c t tiu . Tn ti hai ct trong kt qu ca cu lnh SELECT c cng tiu ct.
66
5 Th tc lu tr, hm v trigger
5.1 Th tc lu tr (Stored procedure)
Th tc lu tr l mt i tng trong CSDL, bao gm nhiu cu lnh T-SQL c tp hp li vi nhau thnh mt nhm, v tt c cc lnh ny s c thc thi khi th tc lu tr c thc thi. Vi th tc lu tr, mt phn no kh nng ca ngn ng lp trnh c a vo trong ngn ng SQL. Th tc lu tr c th c cc thnh phn sau: Cc cu trc iu khin (IF, WHILE, FOR) c th c s dng trong th tc. Bn trong th tc lu tr c th s dng cc bin nh trong ngn ng lp trnh nhm lu gi cc gi tr tnh ton c, cc gi tr c truy xut c t c s d liu. Mt tp cc cu lnh SQL c kt hp li vi nhau thnh mt khi lnh bn trong mt th tc. Mt th tc c th nhn cc tham s truyn vo cng nh c th tr v cc gi tr thng qua cc tham s (nh trong cc ngn ng lp trnh). Khi mt th tc lu tr c nh ngha, n c th c gi thng qua tn th tc, nhn cc tham s truyn vo, thc thi cc cu lnh SQL bn trong th tc v c th tr v cc gi tr sau khi thc hin xong. Li ch ca vic s dng th tc lu tr: SQL Server ch bin dch cc th tc lu tr mt ln v s dng li kt qu bin dch ny trong cc ln tip theo tr khi ngi dng c nhng thit lp khc. Vic s dng li kt qu bin dch khng lm nh hng n hiu sut h thng khi th tc lu tr c gi lin tc nhiu ln. Th tc lu tr c phn tch, ti u khi to ra nn vic thc thi chng nhanh hn nhiu so vi vic phi thc hin mt tp ri rc cc cu lnh SQL tng ng theo cch thng thng. Th tc lu tr cho php chng ta thc hin cng mt yu cu bng mt cu lnh n gin thay v phi s dng nhiu dng lnh SQL. iu ny s lm gim thiu s lu thng trn mng. Thay v cp pht quyn trc tip cho ngi s dng trn cc cu lnh SQL v trn cc i tng c s d liu, ta c th cp pht quyn cho ngi s dng thng qua cc th tc lu tr, nh tng kh nng bo mt i vi h thng. Cc th tc lu tr tr v kt qu theo 4 cch: S dng cc tham s output S dng cc lnh tr v gi tr, cc lnh ny lun tr v gi tr s nguyn.
67
Tp cc gi tr tr v ca mi cu lnh SELECT c trong th tc lu tr hoc ca qu trnh gi mt th tc lu tr khc trong mt th tc lu tr. Mt bin con tr ton cc c th tham chiu t bn ngoi th tc.
5.1.1 To th tc lu tr
Th tc lu tr c to thng qua c.u lnh CREATE PROCEDURE. CREATE PROCEDURE tn_th_tc [(danh_sch_tham_s)] [WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS Cc_cu_lnh_ca_th_tc Trong : WITH RECOMPILE: yu cu SQL Server bin dch li th tc lu tr mi khi c gi. WITH ENCRYPTION: yu cu SQL Server m ha th tc lu tr. Cc_cu_lnh_ca_th_tc: Cc lnh T-SQL. Cc lnh ny c th nm trong cp BEGINEND hoc khng. V d: Gi s cn thc hin cc cng vic theo th t nh sau: Nhp mt n t hng mi ca khch hng c m khch hng l 3 Nhp cc chi tit n t hng cho n t hng trn. thc hin cc cng vic trn chng ta cn cc cu lnh nh sau: Trc tin nhp n t hng cho khch hng c m khch hng l 3 insert into orders values(3, '7/22/2008') Tip theo thm cc chi tit n t hng cho ha n ny. Gi s rng n t hng c m l 4 v khch hng t mt mt hng c m l 1. insert into orderdetail values(4, 1, 10) Cch vit nh trn c hn ch l: trong qu trnh lm vic s c rt nhiu n t hng mi, do ngi dng s phi vit i vit li nhng cu lnh tng t nhau cho cc khch hng khc nhau. Mt cch gii quyt vn ny l dng th tc lu tr v dng tham s nhn cc thng tin thay i. create procedure sp_InsertOrderAndOrderDetail @customerid int, @orderdate datetime, @orderid int, @itemid int, 68
@quantity decimal, as begin insert into orders values(@customerid, @orderdate) insert into orderdetail values(@orderid, @itemid, @quantity) end Thc hin th tc lu tr ny nh sau: sp_InsertOrderAndOrderDetail 3, 22/7/2008, 4, 1, 10)
5.1.2 Li gi th tc
Th tc lu tr c gi theo cu trc Tn_th_tc_lu _tr [danh_sch_tham_s] Cn lu l danh sch tham s truyn vo trong li gi phi theo ng th t khai bo cc tham s trong th tc lu tr. Nu th tc c gi t mt th tc khc, thc hin bn trong mt trigger hay phi hp vi cu lnh SELECT, cu trc nh sau; Exec Tn_th_tc_lu _tr [danh_sch_tham_s]
end
5.1.4 Gi tr tr v trong th tc lu tr
Trong cc v d trc, nu i s truyn cho th tc khi c li gi n th tc l bin, nhng thay i gi tr ca bin trong th tc s khng c gi li khi kt thc qu trnh thc hin th tc. V d: C th tc lu tr nh sau create procedure sp_TestOutput @a int, @b int, @c int as select @c = @a + @b Thc thi th tc: Declare @tong int set @tong = 0 sp_TestOutput 100, 200, @tong select @tong Kt qu l 0. S dng tham s OUTPUT Trong trng hp cn phi gi li gi tr ca i s sau khi kt thc th tc, ta phi khai bo tham s ca th tc theo c php nh sau: @tn_tham_s kiu_d_liu OUTPUT V d trn c vit li nh sau: create procedure sp_TestOutput @a int, @b int, @c int output as select @c = @a + @b Thc thi th tc: Declare @tong int set @tong = 0 sp_TestOutput 100, 100, @tong output select @tong 70
Kt qu l 200. S dng lnh RETURN Tng nh nh vic s dng tham s OUTPUT, cu lnh RETURN tr v gi tr cho i tng thc thi stored procedure. V d: create procedure sp_TestReturn as begin declare @out int select @out = count(*) from customers return @out end Thc thi th tc lu tr declare @a int exec @a = sp_TestReturn select @a
5.1.5 Tham s vi gi tr mc nh
Cc tham s c khai bo trong th tc c th nhn cc gi tr mc nh. Gi tr mc nh s c gn cho tham s trong trng hp khng truyn i s cho tham s khi c li gi n th tc. Tham s vi gi tr mc nh c khai bo theo c php nh sau: @tn_tham_s kiu_d_liu V d: create procedure sp_TestDefault @customerid int = 3 as begin select * from customers where customerid = @customerid end Thc thi th tc lu tr theo gi tr mc nh ca tham s. sp_TestDefault 71 = gi_tr_mc_nh
5.1.6 Sa i th tc
Khi mt th tc c to ra, ta c th tin hnh nh ngha li th tc bng cu lnh ALTER PROCEDURE c c php nh sau: ALTER PROCEDURE tn_th_tc [(danh_sch_tham_s)] [WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS Cc_cu_lnh_ca_th_tc Cu lnh ny s dng tng t nh cu lnh CREATE PROCEDURE. Vic sa i li mt th tc c khng lm thay i n cc quyn cp pht trn th tc cng nh khng tc ng n cc th tc khc hay trigger ph thuc vo th tc ny.
5.1.7 Xa th tc
xo mt th tc c, ta s dng cu lnh DROP PROCEDURE vi c php nh sau: DROP PROCEDURE tn_th_tc Khi xo mt th tc, tt c cc quyn cp cho ngi s dng trn th tc cng ng thi b xo b. Do , nu to li th tc, ta phi tin hnh cp pht li cc quyn trn th tc .
73
74
Trong phn thn ca hm ch c duy nht mt cu lnh RETURN xc nh gi tr tr v ca hm thng qua duy nht mt cu lnh SELECT. Ngoi ra, khng s dng bt k cu lnh no khc trong phn thn ca hm. V d: V d di y ly ra cc khch hng ty thuc vo gi tr m khch hng truyn vo cho tham s. create function f_SelectCustomer (@customerid int) returns table as return (select * from customers where customerid > @customerid) Vic gi cc hm ni tuyn cng tng t nh vic gi cc hm v hng. V d: select tmp.CUSTOMERNAME, o.ORDERDATE from orders o inner join dbo.f_SelectCustomer(3) as tmp on o.customerid = tmp.customerid
customername nvarchar(50), orderdate datetime ) as begin if @customerid = 0 insert into @myCustomers select c.customerid, c.customername, o.orderdate from customers c inner join orders o on o.customerid = c.customerid else insert into @myCustomers select c.customerid, c.customername, o.orderdate from customers c inner join orders o on c.customerid = o.customerid where c.customerid = @customerid return end Vic gi hm multi statement UDF cng tng t cc loi hm khc select * from f_SelectCustomer(0)
5.2.4 Thay i hm
Dng lnh ALTER FUNCTION thay i nh ngha hm. Cu trc ca cu lnh ALTER FUNCTION tng t nh CREATE FUNCTION V d: alter function f_SelectCustomer (@customerid int) returns table as return (select * from customers 76
5.2.5 Xa hm
Dng lnh DROP FUNCTION xa hm. Cu trc lnh DROP FUNCTION nh sau DROP FUNCTION tn_hm V d: drop function f_thu Tng t nh th tc lu tr, khi hm b xa cc quyn cp cho ngi dng trn hm cng b xa. Do khi nh ngha li hm ny, ta phi cp li quyn cho cc ngi dng.
5.3 Trigger
Trigger l mt dng c bit ca th tc lu tr, c thc thi mt cch t ng khi c s thay i d liu (do tc ng ca cu lnh INSERT, UPDATE, DELETE) trn mt bng no .
5.3.1 Cc c im ca trigger
Trigger ch thc thi t ng thng qua cc s kin m khng thc hin bng tay. Trigger s dng c vi khung nhn. Khi trigger thc thi theo cc s kin Insert hoc Delete th d liu khi thay i s c chuyn sang cc bng INSERTED v DELETED, l 2 bng tm thi ch cha trong b nh, cc bng ny ch c s dng vi cc lnh trong trigger. Cc bng ny thng c s dng khi phc li phn d liu thay i (roll back). Trigger chia thnh 2 loi INSTEAD OF v AFTER: INSTEAD OF l loi trigger m hot ng ca s kin gi trigger s b b qua v thay vo l cc lnh trong trigger c thc hin. AFTER trigger l loi ngm nh, khc vi loi INSTEAD OF th loi trigger ny s thc hin cc lnh bnh trong sau khi thc hin xong s kin kch hot trigger.
77
Khi xy ra thay i dy chuyn d liu gia cc bng vi nhau (khi d liu bng ny thay i th d liu trong bng khc cng c thay i theo).
V d 1: V d di y minh ha vic trigger c kch hot khi thm d liu vo bng CUSTOMERS if exists (select name from sysobjects where name = 't_CheckCustomerName' and type = 'TR') drop trigger t_CheckCustomerName go create trigger t_CheckCustomerName on customers for insert as declare @lengthOfName int select @lengthOfName = len(inserted.customername) from inserted if @lengthOfName <=1 print N'Tn khng hp l' rollback tran go Thm mt khch hng mi c tn l A insert into customers values('A', '5/5/1978', 'True', '35 Hung Vuong')
V d 2: V d di y minh ha trigger c kch hot khi c s thay i mang tnh y chuyn gia cc bng. Gi s c CSDL nh sau:
79
Gi s c mt khch hng mua 10 n v mt hng LAPTOP. Khi s lng LAPTOP trong bng ITEMFORSALE s gim xung cn 90. Trigger di y s thc hin cng vic . if exists (select name from sysobjects where name = 't_DecreaseQuantityOfItemForSale') drop trigger t_DecreaseQuantityOfItemForSale go create trigger t_DecreaseQuantityOfItemForSale on SALE for insert as update ITEMSFORSALE set itemsforsale.quantity = itemsforsale.quantity - inserted.salequantity from itemsforsale inner join inserted on itemsforsale.itemid = inserted.itemid go Thc hin thm dng vo bng SALE insert into sale values( 1, 10)
V d 3: V d ny minh ha cng minh ha trigger c kch hot khi c s thay i mang tnh dy chuyn gia cc bng nhng trong trng hp ny d liu thay i lin quan n nhiu dng. 80
Gi s ngi qun l mun thay i s lng bn mt hng LAPTOP trong bng SALE ln thm 5 n v. Nh vy t kt qu v d 2, ta thy cn phi gim s lng LAPTOP trong bng ITEMSFORSALE xung 10 n v. Tuy nhin, trong thc t khi s lng cc dng trong bng SALE rt ln, khi phi s dng trigger: if exists (select name from sysobjects where name = 't_DecreaseSumQuantityOfItemForSale') drop trigger t_DecreaseSumQuantityOfItemForSale go create trigger t_DecreaseSumQuantityOfItemForSale on SALE for update as if update(salequantity) update ITEMSFORSALE set itemsforsale.quantity = itemsforsale.quantity (select sum(inserted.salequantity - deleted.salequantity) from deleted inner join inserted on deleted.saleid = inserted.saleid where inserted.itemid = itemsforsale.itemid) where itemsforsale.itemid in (select inserted.itemid from inserted) Thc hin cp nht cho bng SALE: update sale set salequantity = salequantity + 10 where itemid = 1
V d 4: V d ny minh ha INSTEAD OF trigger. Trigger di y s khng cho thc hin thao tc xa trn bng CUSTOMERS. create trigger t_RollbackDelete on customers after delete as 81
rollback tran
84
V d 2: Cu lnh di y xy dng mt trigger c kch hot khi xy ra cc s kin cp Server. Trigger ny s ngn chn vic to ra mt account login mi IF EXISTS (SELECT * FROM sys.server_triggers WHERE name = 't_DoNotAllowCreateNewLogin') DROP TRIGGER t_DoNotAllowCreateNewLogin ON ALL SERVER GO CREATE TRIGGER t_DoNotAllowCreateNewLogin ON ALL SERVER FOR CREATE_LOGIN AS PRINT N'Phi DROP trigger t_DoNotAllowCreateNewLogin trc khi to account' rollback GO Tin hnh to mt account login mi: create login test with password = '123456'
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
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
91
Click OK hai ln
92
93
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
7.2.1 Hm LEFT
Hm LEFT tr v mt chui k t c chiu di c ch nh tnh t bn tri ca chui. V d: select left('Nha Trang', 5)
7.2.2 Hm RIGHT
Hm RIGHT tng t hm LEFT nhng tnh t bn phi ca chui V d: select right('Nha Trang', 5)
7.2.3 Hm SUBSTRING
Hm STRING trch xut mt chui con t mt chui cho trc. Cu trc hm SUBSTRING nh sau: SUBSTRING (chui_ban_u, v_tr_bt_u, chiu_di_chui_con) V d 1: select substring ('Nha Trang', 2, 5) 95
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)
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
7.2.7 Hm LOWER/UPPER
Hm LOWER chuyn cc k t hoa trong chui thnh cc k t thng. Hm UPPER chuyn cc chui k t thng trong chui thnh cc k t hoa. V d: select lower('Nha Trang'), upper('Nha Trang')
7.2.8 Hm LTRIM/RTRIM
Hm LTRIM ct cc khong trng bn tri ca chui, hm RTRIM ct khong trng bn phi chui. V d: declare @llen int declare @rlen int declare @len int select @llen = len(ltrim(' Nha Trang')), @rlen = len(rtrim('Nha Trang ')), @len = len('Nha Trang') select @llen, @rlen, @len
Hm YEAR tr v nm ca mt gi tr thuc kiu datetime. V d: select day(orderdate) as DAYOFORDER, month(orderdate) as MONTHOFORDER, year(orderdate) as YEAROFORDER from orders o inner join customers c on c.customerid = o.customerid where c.customerid = 3
7.3.3 Hm DATEPART
Trong qu trnh lm vic vi cc CSDL, i lc ta mun bit xem mt ngy no thuc qu my trong nm, hay thuc tun th my trong thng. Hm DATEPART gip gii quyt cc yu cu trn mt cch d dng. Cu trc hm DATEPART nh sau: DATEPART (yu_cu_trch_xut, gi_tr_trch_xut) gi_tr_trch_xut l mt gi tr thuc kiu datetime. yu_cu_trch_xut: ngy, thng, nm, qu,. Khi c mt yu cu trch xut no , chng ta s c cc ch vit tt tng ng vi cc yu cu . Bng di y m t cc yu ch vit tt v cc yu cu trch xut tng ng. ngha Nm Qu Thng S ngy qua trong nm Ngy Tun S ngy qua trong tun Gi Pht Giy V d: select datepart(yyyy, orderdate)as YEAROFORDERDATE, datepart(qq, orderdate)as QUARTEROFORDERDATE, 98 Ch vit tt yy, yyyy qq,q mm,m dy,y dd,d wk,ww dw hh mi,n ss,s
datepart(m, orderdate) as MONTHOFORDERDATE, datepart(wk, orderdate) as WEEKOFORDERDATE, datepart(d, orderdate) as DATEOFORDERDATE, datepart(dy, Orderdate), datepart(dw, orderdate) from orders
7.3.4 Hm DATENAME
Tng t hm DATEPART nhng hm DATENAME tr v mt chui k t V d: select datename(yyyy, orderdate)as YEAROFORDERDATE, datename(qq, orderdate)as QUARTEROFORDERDATE, datename(m, orderdate) as MONTHOFORDERDATE, datename(wk, orderdate) as WEEKOFORDERDATE, datename(d, orderdate) as DATEOFORDERDATE, datename(dy, Orderdate), datename(dw, orderdate) from orders
3 4 5 6 7 8 10 11 12 14 V1 d: select
103 104 105 106 107 108 9 hoc 109 110 111 112 13 hoc 113 114 CUSTOMERNAME,
dd/mm/yy dd.mm.yy dd-mm-yy dd mon yy Mon dd, yy hh:mm:ss mon dd yyyy hh:mi:ss:mmmAM (PM) mm-dd-yy yy/mm/dd yymmdd dd mon yyyy hh:mm:ss:mmm(24h) hh:mi:ss:mmm(24h)
convert (varchar, BIRTHDAY, 103) as BIRTHDAY, ADDRESS from Customers where Customername = 'Le Thi Hoa' and year(getdate()) - year(BIRTHDAY) > 20 Hm CONVERT v hm CAST c th s dng kt hp vi nhau cho kt qua nh mong mun. V d: select c.CUSTOMERID, c.CUSTOMERNAME, convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY) SUMTOTAL from inner join orderdetail od on o.orderid = od.orderid inner join items i on i.itemid = od.itemid group by c.customerid, c.customername as money),1) as
100
8 Kt ni vo SQL Server 2005 t cc ngn ng lp trnh xy dng cc ng dng lin quan n CSDL
Mc tiu cui cng ca vic hc h qun tr CSDL Microsoft SQL Server 2005 l ngi hc bit dng h qun tr ny trong vic xy dng cc CSDL cho cc ng dng qun l trong thc t. ng thi s dng cc cng c trong Microsoft SQL Server 2005 qun tr CSDL ca mnh.
101
102
th hin ca SQL Server 2005 ang c s dng (running). kch hot dch v SQL Server Browser, cn lm theo cc bc sau: Click Start -> Programs -> Microsoft SQL Server 2005 -> Configuration Tools, click SQL Server Surface Area Configuration. Trong trang SQL Server 2005 Surface Area Configuration, click Surface Area Configuration for Services and Connections. Trong trang Surface Area Configuration for Services and Connections, click SQL Server Browser, click Automatic for Startup type, click Apply. Lu : tng t nh dch v MSSQLSERVER, nu chn startup type l Automatic th dch v SQL Server Browser s c khi ng khi Windows khi ng Kim tra tnh trng dch v trong Service status. Sau click Start nu dch v ny ang b Stop. Lu : Thc hin cc bc trn lm tng cc nguy c cho h thng v h thng s hin th thng tin ca cc th hin ca SQL Server ng chy trn h thng. Cc nguy c ny c th c gim thiu bng cch khng kch hot dch v SQL Server Browser v kt ni vo th hin ca SQL Server thng qua mt port. Chi tit c th tham kho Microsoft Book Online theo cc ch sau: SQL Server Browser Service Connecting to the SQL Server Database Engine Client Network Configuration
Trong trang SQL Server Configuration Manager, click SQL Server Services, right-click tn th hin, v click Properties. Trong trang SQL Server Browser Properties, click tab Advanced, xc nh instanceID trong danh sch thuc tnh, v click OK. Lu : Chng ta c th c nhiu th hin SQL Server, do chng ta phi xc nh ng instanceID no chng tao mun to ngoi l. m Windows Firewall, click Start, click Run, nh firewall.cpl, v click OK. To ngoi l cho SQL Server 2005 trong Windows Firewall Trong Windows Firewall, click tab Exceptions, sau click Add Program. Trong ca s Add a Program window, click Browse. C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe, click Open, v click OK. Lu : ng dn c th khc nhau ty thuc vo th mc ci t ca SQL Server 2005. MSSQL.1 l ni lu tr cho instanceID chng ta thu c trong bc trn. Lp li cc bc trn cho mi th hin ca SQL Server 2005 cn thit lp ngoi l. To ngoi l cho dch v SQL Server Browser trong Windows Firewall Trong Windows Firewall, click tab Exceptions, v click Add Program. Trong ca s Add a Program, click Browse. C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe, click Open, v click OK. Lu : ng dn c th thay i ty thuc vo th mc ci t ca SQL Server 2005.
{ System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection (); // TODO Xy dng chui kt ni conn.ConnectionString = "integrated security=true;data source=tn_SQLSERVER;" + "persist security info=False;initial catalog=tn_CSDL"; try { conn.Open(); // Xy dng code tng tc vi CSDL y } catch (Exception ex) { MessageBox.Show("Failed to connect to data source"); } finally { conn.Close(); } } Trong VB.NET Public Sub ConnectToSql() Dim conn As New SqlClient.SqlConnection ' TODO Xy dng chui kt ni conn.ConnectionString = & _ "integrated security=true;data source=tn_SQL Server;" & _ "persist security info=False;initial catalog=tn_CSDL" Try conn.Open() ' Xy dng code tng tc vi CSDL y Catch ex As Exception 105
MessageBox.Show("Failed to connect to data source") Finally conn.Close() End Try End Sub Trong hai v d trn chng ta xy dng hm kt ni vo SQL Server 2005 m thnh phn quan trng nht l chui kt ni vo CSDL: Trong C#: "integrated security=true;data source=tn_SQLSERVER;" + "persist security info=False;initial catalog=tn_CSDL"; Trong VB.NET: "integrated security=true;data source=tn_SQL Server;" & _ "persist security info=False;initial catalog=tn_CSDL" Trong : Intergrated security = true: s dng Windows Authentication data source: ch nh tn th hin ca SQL Server 2005 m chng ta mun kt ni. persist security info: Thit lp mc nh cho t kha persist security info l false. Thit lp sang gi tr true s cho php cc d liu nhy cm bao gm UserID v password c th c truy xut khi kt ni c m initial catalog: Tn CSDL m chng ta mun tng tc. V d chui kt ni s dng Windows Authentication: "integrated security=true;data source=.\\SQLExpress" + "persist security info=False;initial catalog=myDB"; V d chui kt ni s dung SQL Server Authentication: "persist security info=False;User ID = *****; password = ***** + initial catalog=myDB; data source=.\\SQLExpress ";
8.2.2 VB 6
V d di y minh ha vic xy dng ng dng CSDL bng VB6. Gi s chng ta c CSDL tn l Test, SQL Server l .\\SQLExpress, User l sa, Password l 1234. Private Sub Command1_Click() Dim connectionString As String Dim commandString As String Dim sqlConnection As ADODB.Connection 106
connectionString = UID=sa; PWD=1234;DATABASE=Test" commandString = "select count(*) as count from Users where UserName = '" commandString = commandString & Text1.Text & "' and Password = '" commandString = commandString & Text2.Text & "'" Set sqlConnection = New ADODB.Connection sqlConnection.Open (connectionString) Set rs = New Recordset rs.Open commandString, sqlConnection If (rs("count") = 1) Then MsgBox "Login successfully" End If End Sub
107
108