Ộ
Ề
Ị Ệ
Ữ
Ẳ
ƯỜ
B THÔNG TIN & TRUY N THÔNG NG CAO Đ NG CNTT H U NGH VI T HÀN
TR
Ệ
Ả
Ệ
Ị Ơ Ở Ữ H QU N TR C S D LI U SQL SERVER
30LT+30TH
ạ
ễ
Biên so n: Nguy n Văn L iợ
SQL Server 2005
1
̣ ̉ ̣
ụ
ề ế
• M c tiêu v ki n th c:
ấ
ữ
ộ
ế
ủ ụ ố ượ
ủ
ng c a SQL Server.
ạ
̀
̣ ̉ ̣
Muc tiêu cua hoc phâ ǹ ứ Cung c p cho sinh viên nh ng n i dung: - Ki n trúc c a HQT CSDL SQL Server. - Các công c , đ i t - Cài đ t h qu n tr CSDL SQL Server. ị ả ặ ệ - T o và khai thác c s d li u. ơ ở ữ ệ - Ngôn ng TSQL. ữ - Lâp tri nh thu tuc, ha m và Trigger trong
̀ SQL Server. ư
ồ ữ ệ ườ
ụ ả
ả
ậ
- Sao l u và ph c h i d li u. - B o m t và qu n lý ng
i dùng.
SQL Server 2005
2
̣ ̉ ̣
Muc tiêu cua hoc phâ ǹ
ề ỹ ụ • M c tiêu v k năng:
Giúp sinh viên có th :ể
c CSDL trong SQL Server
ữ
ậ ớ
SQL Server 2005
3
ả ị - T o l p đ ượ ạ ậ - Thành th o ngôn ng TSQL ạ - L p trình v i CSDL trong SQL Server - Qu n tr SQL Server
Ả
Ệ
TÀI LI U THAM KH O
ệ
ợ
ễ
Giáo trình H qu n
• Nguy n Văn L i (2009),
ả ng Cao
̃
ườ , Tr t – Hàn. ươ
ng Lan
, NXB
ộ
̃
̀
•
̣ ̣
ư
̣ ̣
̃
̣
̃
̀
•
̣ ̣
ư
̀
̣ ̣
̀
̀
̃
ộ
̣ ̉ ̣
̣ ̣
ị ơ ở ữ ệ tr C s D li u SQL Server ị ệ ữ ẳ đ ng CNNT h u ngh Vi ̀ • Nguyê n Thiên Bă ng – Ph ́ ́ (2006), Kha m pha SQL Server 2005 ̃ Lao đông Xa hôi, Hà N i. Pham H u Khang – Đoa n Thiên Ngân ̀ (2007), SQL Server 2005 lâp tri nh TSQL , ộ NXB Lao Đông Xa Hôi, Hà N i. Pham H u Khang – Đoa n Thiên Ngân (2008), SQL Server 2005 lâp tri nh thu tuc va ha m , NXB Lao Đông Xa Hôi, Hà N i.
SQL Server 2005
4
Ả
Ệ
TÀI LI U THAM KH O
̀
́
•
(2007), Lâp tri nh ng
̣ ̣
ư , NXB
ộ
̣ ̣
̣ ̣
̃ ư Pham H u Khang dung chuyên nghiêp SQL Server 2000 ̃ Lao Đông Xa Hôi, Hà N i.
̀
̀
•
́ (2006), Gia o tri nh quan
́
̉ ư
ơ
̉
ự
̣ ̣
̣ ̣
Trâ n Đăng Công ́ tri và phát triên ng dung v i microsoft SQL Server, Hoc Viên Quân S
• Robin Dewson, Beginning SQL Server 2005
for Developer
•
SQL Server 2005 Books Online
SQL Server 2005
5
Ộ
Ề
Ị Ệ
Ữ
Ẳ
ƯỜ
B THÔNG TIN & TRUY N THÔNG NG CAO Đ NG CNTT H U NGH VI T HÀN
TR
ổ
ữ ệ
ấ
ể ể
ạ ạ
ử
ươ ươ ươ ươ ươ ươ ươ ươ
ườ
ả
• Ch • Ch • Ch • Ch • Ch • Ch • Ch • Ch
ề ng 1: T ng quan v SQL Server 2005 ng 2: CSDL trong SQL Server ng 3: Phát bi u TSQL d ng truy v n d li u ữ ệ ng 4: Phát bi u TSQL d ng x lý d li u ộ ạ (Stored Procedure) ủ ụ ng 5: Th t c n i t i ng 6: Hàm ng 7: Trigger ậ ng 8: B o m t và quan tri ng
i dùng
SQL Server 2005
6
̉ ̣
ng 1
̉ ươ Ch ̀ TÔNG QUAN VÊ SQL SERVER 2005
ủ ử ị ể 1.1 L ch s phát tri n c a SQL Server
́ ̀ ơ ̣ 1.2 Gi i thiêu vê SQL Server 2005
ấ ả 1.3 Các n b n SQL Server 2005
́ ơ ̣ ̣ 1.4 Gi ́ i thiêu ca c công cu
1.5 Cài đ tặ
SQL Server 2005
7
1.6 CSDL m uẫ
ớ
• Năm 1989, Microsoft h p tác v i công ty
ể
ị ử ủ
ượ
• Sybase SQL Server 3.0 đ ệ ề
ườ
ể ự ể c phát tri n đ th c ng h đi u hành UNIX và VMS.
thi trên môi tr
ượ
ớ
ệ
• Microsoft SQL Server 4.2 đ
c gi
i thi u năm
1992.
• Microsoft SQL Server 4.21 for Windows NT ờ
ượ
ờ
ớ
c ra đ i cùng th i gian v i Windows NT 3.1.
đ
SQL Server 2005
8
ể 1.1 L ch s phát tri n c a SQL Server (1/2) ợ Sybase và AshtonTate đ cho ra SQL Server 1.0 for OS/2.
ị ủ ử
ể 1.1 L ch s phát tri n c a SQL Server (2/2)
• Microsoft SQL Server 6.0 là phiên b n ả ộ ậ ể ầ
ự ợ ớ đ u tiên mà Microsoft phát tri n đ c l p không có s h p tác v i các hãng khác.
ả ế
ấ ớ
SQL Server 2005
9
• Các phiên b n SQL Server ti p theo là: 6.5, 7.0, 2000, 2005 và m i nh t là SQL Server 2008.
•
ở
ơ
ả
ệ
ạ
ữ tr c s d ộ
ờ
ồ
ủ
ế
ậ
ề ữ ệ ề
ườ ả ủ ừ
•
ả
ễ ử ụ
ơ
ơ
ả
c đó.
•
ử
ậ
ị
ế
ệ
ạ
ệ li u
́ơ ề ̣ 1.2 Gi
SQL Server 2005
10
i thiêu v SQL Server 2005 (1/4) ệ ị ộ li u Là m t h qu n ệ (HQTCSDL) quan h ho t đ ng theo mô hình khách ch cho phép đ ng th i nhi u ấ i dùng cùng truy xu t đ n d li u, ng ợ ệ ệ và các quy n qu n lý vi c truy nh p h p l ạ ườ i dùng trên m ng. c a t ng ng ậ ộ ệ Nâng cao hi u năng, đ tin c y, kh năng ớ ả ậ l p trình đ n gi n và d s d ng h n so v i ướ các phiên b n tr ả ự T p trung vào kh năng x lý giao d ch tr c ệ ươ ứ ộ ụ ng tuy n trên di n r ng, ng d ng vào th ữ ử m i đi n và kho d (Data t warehousing).
̀ ́ ơ ̣
ủ ữ
1.2 Gi i thiêu vê SQL Server 2005 (2/4) • Ngôn ng truy v n c a Microsoft SQL ấ Server là TransactSQL (TSQL).
ữ ở ộ ẩ
SQL Server 2005
11
ự • Ngôn ng TSQL trong SQL Server ự 2005 m r ng d a trên chu n ANSI SQL99 trong khi SQL Server 2000 m ở ẩ ộ r ng d a trên chu n ANSI SQL92.
̀ ́ ơ ̣
ữ ủ
1.2 Gi i thiêu vê SQL Server 2005 (3/4) • Ngôn ng truy v n c a Microsoft SQL ấ Server là TransactSQL (TSQL).
ữ ở ộ ẩ
SQL Server 2005
12
ự • Ngôn ng TSQL trong SQL Server ự 2005 m r ng d a trên chu n ANSI SQL99 trong khi SQL Server 2000 m ở ẩ ộ r ng d a trên chu n ANSI SQL92.
́ ̀ ơ ̣ i thiêu vê SQL Server 2005 (4/4)
1.2 Gi ữ
ớ ủ
Nh ng tính năng m i c a SQL Server
ớ
2005 so v i SQL Server 2000 là:
ả
•Nâng cao b o m t ậ
ở ộ
•M r ng TSQL
ườ
ườ
ể ứ
•Tăng c
ỗ ợ ng h tr ng
i phát tri n ng
d ngụ
ườ
ả
ả
ị
•Tăng c
ng kh năng qu n tr CSDL
ộ ẵ
ở ộ
ủ
•Nâng cao đ s n sàng và m r ng c a
CSDL
́
•Tăng c
̀ ươ ng kha năng khai tha c thông tin SQL Server 2005
13
̉
ấ
̉
1.3. Các n ban SQL Server 2005
•Microsoft SQL Server 2005 Enterprise
Edition
•Microsoft SQL Server 2005 Standard
Edition
•Microsoft SQL Server 2005 Workgroup
Edition
•Microsoft SQL Server 2005 Developer
Edition
•Microsoft SQL Server 2005 Express
Edition
SQL Server 2005
14
́
ơ
̣ ̣
1.4. Gi
́ i thiêu ca c công cu
1.4.1 SQL Server Configuration
Manager
SQL Server 2005
15
1.4.2 SQL Server Management Studio
1.4.1 Configuration Manager (1/2)
ổ ể ộ
ở ộ ề ấ
ỉ ả ấ
ự ệ •Đ thay đ i cách kh i đ ng m t th ể ặ ệ hi n SQL Server ho c đi u ch nh c u hình ạ ể SQL Server. Đ ch y trình qu n lý c u hình SQL Server ta th c hi n
•Start/ Programs/ Microsoft SQL Server
SQL Server 2005
16
2005/ Configuration Tools/ SQL Server Configuration Manager.
1.4.1 Configuration Manager (2/2)
SQL Server 2005
17
1.4.2 SQL Server Management Studio
ụ ể ả •Là công c chính dùng đ qu n tr ị
CSDL.
ụ ữ
•Nó tích h p nh ng tác v qu n lý c s ơ ở ữ ệ ả ộ
ợ ậ ệ
ư ự ng t
d li u và l p trình trong cùng m t màn ườ i dùng. Management hình giao di n ng ệ ươ nh Visual Studio có giao di n t Studio 2005.
ụ ế ộ •Nó thay th cho hai c ng c Enterprise
SQL Server 2005
18
Manager và Query Analyzer trong SQL Server 2000
1.4.2 SQL Server Management Studio
Enterprise Manager
SQL Server 2005
19
Query Analyzer
1.4.2 SQL Server Management Studio
SQL Server 2005
20
ự
1.4.2.1 Th c thi Management Studio
•Start/ Programs / Microsoft SQL Server
2005 / SQL Server Management Studio
ệ
ấ
ộ
•H p tho i
ạ Connect to Server xu t hi n.
SQL Server 2005
21
ự
1.4.2.1 Th c thi Management Studio ể ệ
ể ế ố ớ •Đ k t n i t
ộ ủ ộ
ộ ụ i th hi n c c b c a b máy CSDL SQL Server, trong h p danh sách Server type ch n ọ Database Engine.
ộ Server Name
ấ ặ
SQL Server 2005
22
ặ ặ •Trong h p danh sách ữ ấ ậ ọ ch n ho c nh p vào: d u ch m ho c ch ậ local ho c nh p tên Server.
ự ươ
ự ứ
1.4.2.1 Th c thi Management Studio ng pháp ch ng th c trong
ọ Ch n ph
h p ộ Authentication.
•Windows Authentication thì kích nút
ể ự ệ ế ố Connect đ th c hi n k t n i.
tên đăng nh p trong h p danh sách •SQL Server Authentication, cung c p ấ ộ Login
ầ ậ •N u ch n ọ Remember password thì ế ạ ể ừ ầ l n đăng nh p sau b n không c n
ấ ạ ậ
SQL Server 2005
23
ậ k t ữ ẩ ả i m t kh u n a. ph i cung c p l ể ế ố Kích nút Connect đ k t n i.
̃ ử ̣
ọ ể ị ́ 1.4.2.2 S dung ca c Server đa đăng ký Hi n th Registered Servers, ch n
SQL Server 2005
24
View/ Registered Servers.
̃ ử ̣
ượ ử ụ
́ 1.4.2.2 S dung ca c Server đa đăng ký Registered Servers đ
c s d ng cho
ụ
các m c đích sau:
ế ố
ể ệ
ư
•L u thông tin k t n i cho các th hi n
SQL Server trên m ng.ạ
ể ệ
ị ộ
ự
ể
•Hi n th m t th hi n đang th c thi hay
không
ế ố ớ
ộ
i m t th hi n trong Object
•K t n i t ặ
ể ệ Explorer ho c Query Editor.
ạ
•So n thông tin v m t Server đã đăng ề ộ
ký.
•Nhóm các Server.
SQL Server 2005
25
̃ ử ̣
ộ ́ 1.4.2.2 S dung ca c Server đa đăng ký •Đăng ký m t th hi n SQL Server ể ệ
i m t th hi n SQL Server •K t n i t
ế ố ớ ị ể ể ệ ổ ử
ộ và hi n th nó trong c a s Object Explorer
ể ệ ạ •K t n i t i th hi n SQL Server và t o
SQL Server 2005
26
ế ố ớ ấ ể ệ ớ ế truy v n m i đ n th hi n này
̣
1.4.2.3 Công cu Object Explorer
ặ
ị ổ ở ử • Khi m Management Studio thì m c ị ể
ư
ể
SQL Server 2005
27
đ nh c a s Object Explorer hi n th bên ế trái màn hình. N u Object Explorer ch a ọ View/ Object ị ạ hi n th b n ch n Explorer.
ự
ạ
ả
̣
1.4.2.3 Công cu Object Explorer ụ Object Explorer cho phép b n th c hi n các tác v ể ệ
ệ ộ
ạ
ọ
ổ
ư ả
ạ
qu n lý trong Management Studio tùy thu c vào th hi n b n đang ch n. •T o và qu n lý CSDL. ả ạ •Xem và thay đ i các thu c tính CSDL. ộ •T o vào qu n lý các đ i t ố ượ ả
ng CSDL nh b ng, view,
…
ồ
ề
ề
ấ ấ
ả
ủ
ậ
ả
•C p phát và thu h i các quy n và nhóm quy n •C u hình replication. •Qu n lý các gói Integration Services. •Xem các t p tin log c a Windows và SQL Server. •Qu n lý các SQL Server Agent
SQL Server 2005
28
ử ổ
1.4.2.4 C a s Summary
SQL Server 2005
29
ộ ố
ử
ổ
ặ
ị
ị
ỉ ượ
ử ổ 1.4.2.4 C a s Summary • Trong c a s Summary có m t s nút công c ụ ể ể ề đ đi u ch nh vi c hi n th thông tin. M c đ nh nút List đ
ệ ọ c ch n.
ể
• Ch n nút Report đ xem báo cáo v m t đ i ề ộ ố
ụ ể ủ
ự
ạ
ư
ọ ử ượ ng. Ví d đ xem báo cáo thông tin s t ệ ụ d ng đĩa c a CSDL DB_LOI b n th c hi n nh sau:
ọ
ụ
ủ
ử
ọ
ị
ổ ể ư
ủ
• Ch n CSDL DB_LOI • Kích vào m c Disk Usage trong danh sách ch n c a nút Report. C a s hi n th Disk Usage c a CSDL DB_LOI nh sau:
SQL Server 2005
30
ử ủ
ư
ử ổ 1.4.2.4 C a s Summary • C a s hi n th Disk Usage c a CSDL ị ổ ể DB_LOI nh sau:
SQL Server 2005
31
ấ
ỗ ợ
ể
ấ
ự
Management Studio h tr 5 ki u truy v n: • TSQL: D a trên b máy CSDL quan h . ệ ộ • MDX (Multi – Demensional Expression): D a ự
trên Analysis Services.
ự
• DMX (Data Mining Extensions): D a trên
Analysis Services.
ự
• XMLA (XML for Analysis): D a trên Analysis
Services.
ự
ả
ấ
• SQL Server Mobile Query: D a trên n b n
SQL Server 2005 Mobile.
SQL Server 2005
32
ử ổ ữ ệ 1.4.2.5 Truy v n d li u trong c a s Query
ấ
ể ự
ơ
ệ
ả
ữ ệ ệ ự
ư
ặ
ử ổ ữ ệ 1.4.2.5 Truy v n d li u trong c a s Query ấ Đ th c hi n truy v n d li u đ n gi n dùng TSQL trên CSDL, th c hi n nh sau:
•B c 1 ướ
ộ
ổ
ử
ở ổ
ớ ượ
ặ ử c thêm vào c a s Query
ậ
ể : Nh p phát bi u TSQL vào.
: Kích nút Execute (ho c nh n
: Kích nút New Query ho c Database ẻ Engine Query. C a s Query m ra ho c m t th Query m i đ •B c 2 ướ •B c 3 ướ ự
ế
ệ
ậ
c k t xu t
ặ ượ ặ
ả ấ ạ
ặ
ả
ấ F5) đ ể ấ ế ậ ạ ượ c
ả th c thi câu l nh. K t qu nh n đ ạ ả ạ theo d ng văn b n, d ng b ng ho c d ng t p tin ế ị ọ tùy ch n. M c đ nh k t xu t d ng b ng đ ch n. ọ
SQL Server 2005
33
̀
̣
́ 1.4.2.6 Ca c tu y chon
• Ch n ọ Tool/ Options.
ử ạ ở ổ
SQL Server 2005
34
ọ ọ • Trong c a s Options, b n m các nút ể tùy ch n bên trái đ xem các tùy ch n
̀
̣
́ 1.4.2.6 Ca c tu y chon
ế ậ Thi t l p tùy ch n ọ Startup
ạ ọ
• Trên nhóm Environment, b n ch n th ẻ ụ
ượ ổ ọ ị
c hi n th khi ử ị
ượ General. Trong m c At startup cho phép ử ự l a ch n c a s nào đ ở m Managerment Studio. M c đ nh c a ổ s Object Explorer đ ể ặ ở c m .
ổ
ể ặ ầ ị • Đ thay đ i cách b trí các c a s theo ổ ố ọ Window/
SQL Server 2005
35
ử ạ m c đ nh ban đ u, b n ch n reset window layout.
̀
̣
́ 1.4.2.6 Ca c tu y chon ị ế
ổ
ể
ả
ấ
ọ
ồ
ọ
Thay đ i cách hi n th k t qu truy v n • Ch n nút Query Results, r i ch n nút SQL
ộ
ế
ạ
ấ
ọ ấ
ặ
ị
Server. Trong h p danh sách Default ạ destination for result b n ch n d ng k t xu t ế m c đ nh cho k t qu truy v n: ả
ấ
ả • Results to grids: Xu t k t qu truy v n ra ấ ế
ạ
ả
d ng b ng
ấ ế
ả
ấ
• Results to text: Xu t k t qu truy v n ra
ả
ạ
d ng văn b n
ả
ạ
ấ
• Results to file: Xu t k t qu truy v n ra d ng ấ ế
ậ t p tin
• Default location for saving query results: ữ ế
ơ ư
ả
ặ
ấ
ị
M c đ nh n i l u tr k t qu truy v n. SQL Server 2005
36
ẫ
1.4.2.7 S d ng mã TSQL m u
ọ
ử ụ • Ch n View/ Template Explore.
ổ
ầ ể
SQL Server 2005
37
• Trong c a s Template Explorer, kích ử ạ ẫ ộ đôi chu t vào tên m u c n dùng, đo n ử ị ượ ẫ c hi n th trong c a mã TSQL m u đ ớ ổ s Query m i
ứ ầ ầ
1.5 Cài đ tặ 1.5.1 Yêu c u ph n c ng
ệ ề ầ 1.5.2 Yêu c u h đi u hành
SQL Server 2005
38
ướ 1.5.3 Các b ặ c cài đ t
ứ
ầ
ầ 1.5.1. Yêu c u ph n c ng
ộ ử
ặ
ố
ơ
ộ
B x lý có t c đ 700MHz ho c cao h n.
ầ
ể
ớ ố
B ộ x lýử B ộ nhớ
i thi u là 512 MB.
ớ ố
ầ
ộ
ể i thi u
ư
ộ • SQL Server 2005 Enterprise Edition yêu c u b nh t • SQL Server 2005 Standard Edition, Developer Edition và Express Edition yêu c u b nh t nh cài Windows.
ầ
ủ
ầ
ớ ừ
Đĩa c ngứ
ế ự
ế
ạ
ộ ặ ấ ả
ọ t c các thành ph n c a SQL Server thì ố
ể
ố
Cài các thành ph n c a Database yêu c u không ộ 95 đ n 300 MB, tuy nhiên nó còn gian b nh t ụ ể ụ ph thu c vào các l a ch n c th . N u b n cài ầ đ t t không gian đĩa còn tr ng t
ủ i thi u là 1GB.
SQL Server 2005
39
ầ
1.5.2. Yêu c u h đi u hành
ệ ề ữ
ả ươ ng thích gi a các phiên b n
B ng t ủ ệ ề
SQL Server 2005
40
ả c a SQL Server 2005 và h đi u hành Windows:
ặ c cài đ t
ệ
ặ ề ơ ả ươ
1.5.3. Các b •Vi c cài đ t các n b n SQL Server ấ ng t
ướ ả ự nhau
2005 v c b n t
ặ ượ ế c trình bày chi ti t
SQL Server 2005
41
ự •Các b ướ c cài đ t đ ầ trong ph n th c hành
ử
ụ ọ
ổ ệ ư
1.5.4. G bỡ ỏ •Start\ Settings \ Control Panel, c a s ổ ệ ấ Control Panel xu t hi n, ch n m c Add or ử Remove Programs. C a s Add or ấ Remove Programs xu t hi n nh sau:
SQL Server 2005
42
ng 2 Ch
̃ Ơ Ở Ư ̣ ươ C S D LIÊU TRONG SQL SERVER
ớ ệ 2.1. Gi i thi u CSDL trong SQL Server
̃ ơ ở ư ̣ ̣
̃ 2.2. Tao c s d liêu ơ ở ư ̣ 2.3. Sao chép c s d liêu
̃ ơ ở ư ̣
2.4. Gán và tách c s d liêu ấ ơ ở ữ ệ ậ 2.5. Nh p và xu t c s d li u
ể ữ ệ
2.6. Ki u d li u và cách khai báo 2.7. B ngả
SQL Server 2005
43
2.8. View
ớ
ệ
2.1. Gi
i thi u CSDL trong SQL Server
ẩ
ả
ộ
ệ
ầ
ườ
ợ ị
ế
ự
ử
ế
ả
ị
ọ SQL Server thu c h các s n ph m và ữ ệ ớ công ngh mà kho d li u phù h p v i các ự ử ng x lý giao d ch tr c yêu c u môi tr tuy n (Online Transaction Processing OLTP) và x lý phân tích tr c tuy n (Online Analytical Processing OLAP). SQL Server là ệ ớ HQTCSDL quan h v i các tính năng sau: •Qu n lý kho d li u cho các giao d ch ữ ệ (Transactions) và phân tích (Analysis).
ữ ệ
ể
ớ
ả ề
ư ị ộ
•Kh năng l u tr d li u v i các ki u d li u ữ ữ ệ ồ có mi n giá tr r ng, bao g m text, numeric, Extensible Markup Language (XML) và các đ i ố ượ t
ớ ng l n…
SQL Server 2005
44
ớ
2.1. Gi
i thi u CSDL trong SQL
ệ Server ầ ừ
ứ
ụ
ứ
•Đáp ng các yêu c u t
các ng d ng
Client.
ử ụ
ể ở
ầ
•S d ng TSQL và XML đ g i các yêu c u ữ ứ
ụ
gi a ng d ng client và Server.
ậ
ố ượ
ệ ữ
ố
•HQTCSDL SQL Server đáng tin c y đ i v i: ố ớ •Duy trì các m i quan h gi a các đ i t
ng
ữ ệ
ộ
d li u trong m t CSDL.
ả
ả
ượ ư
•B o đ m r ng d li u đ ằ ắ
ữ c l u tr đúng ệ ữ
ắ
ị ữ ệ
ố ượ
ạ
ị
ữ ệ đ n, các quy t c đ nh nghĩa các quan h gi a các đ i t
ng d li u là không b vi ph m.
ụ ấ ả ữ ệ
ệ ố
•Khôi ph c t
t c d li u khi h th ng b l
ị ỗ i.
SQL Server 2005
45
ị ử ơ ở ữ ệ
ế
2.1.1. Các c s d li u x lý giao d ch ự tr c tuy n (Online transaction processing – OLTP) ệ ổ ứ
ữ ệ ch c d li u ể ả ố ộ ậ
•Các table quan h t ộ ơ ở ữ ệ trong m t c s d li u OLTP đ gi m ư ừ ể thi u thông tin d th a và tăng t c đ c p nh t.ậ
•SQL Server cho phép s l ườ ố ượ ị ự
ờ
SQL Server 2005
46
ự ớ ng l n ự i dùng th c thi các giao d ch và s ng ờ ữ ệ ổ ồ thay đ i đ ng th i d li u theo th i gian ơ ở ữ ệ th c trong các c s d li u OLTP.
ử ơ ở ữ ệ
ế
ử ụ
2.1.2. Các c s d li u x lý phân tích ự tr c tuy n (online analytical processing OLAP) ượ ố ượ ợ
ể ổ c s d ng đ t ể ữ ệ ớ ng d li u l n đ ể
ệ Công ngh OLAP đ ổ ứ ch c và t ng h p s l ữ ườ ộ i phân tích có th đánh giá d m t ng ờ ộ ệ li u m t cách nhanh chóng và theo th i gian th c.ự
ứ ữ ệ ả i
Microsoft SQL Server Analysis Services ch c d li u này đ h tr các gi ấ ố ớ
SQL Server 2005
47
ể ỗ ợ ệ ớ ự ỗ ợ ế ị ữ ệ ổ t pháp đ i v i doanh nghi p l n, xu t phát ể ừ các báo cáo công ty và s phân tích đ t mô hình hóa d li u và h tr quy t đ nh.
ắ ị
ơ ở ữ ạ 2.1.3. Cân nh c khi ho ch đ nh c s d li u ệ
ụ •M c tiêu c a kho d li u ủ
ậ ầ
ữ ệ : Các CSDL ụ OLTP và OLAP có các m c tiêu khác nhau ẽ ế ế t k cũng s và vì v y các yêu c u thi khác nhau.
ấ ầ
ộ : M t thi ộ •T n su t giao d ch ệ ế
ấ ợ ủ ự
ự
ủ ầ ộ ấ ứ ấ
SQL Server 2005
48
ế ế ạ ị t k đ t ộ ứ hi u su t cao liên quan đ n m t m c đ ỉ ụ ẩ thích h p c a s chu n hóa, các ch m c, ể ạ ượ ữ ệ c và s phân chia d li u có th đ t đ ộ m t m c đ r t cao c a t n su t giao ị d ch.
ị ắ
ả
•Kh năng tăng tr ư ủ
ạ ề ữ ệ ớ
ứ
ầ
ậ ng v khía c nh v t ỏ ng d li u l n đòi h i ng
ớ ị ử
ứ
ả
ạ
ộ
ưở
ặ ề ệ
•File location: N i mà b n đ t các t p tin có ể
ế ả
ủ
ề
ượ
ệ
ề
ọ
49
ậ ế ố ữ ệ
ậ ơ ả ấ ự th có tác đ ng nh h ng v hi u su t th c ể ạ ề ổ ử ụ đĩa, thi. N u có th , b n nên s d ng nhi u ậ ạ ơ ở ữ ệ dàn tr i các t p tin c s d li u c a b n trên ề ộ ơ nhi u h n m t đĩa. Đi u này cho phép SQL ự ậ ợ ủ i c a vi c có c s thu n l Server nh n đ ệ ọ ầ ề nhi u k t n i và nhi u đ u đ c đĩa cho vi c đ c SQL Server 2005 ả ệ và ghi d li u hi u qu .
ơ ở ữ ạ 2.1.3. Cân nh c khi ho ch đ nh c s d li u ệ ưở ố ượ ữ: S l lý c a kho l u tr ố ớ ộ ượ ợ ph n c ng phù h p đ i v i b nh , dung l ơ ủ đĩa c ng, và kh năng c a đ n v x lý trung tâm.
ấ ả
ơ ở ữ ệ ế
ỗ
ấ
ẽ ị ơ ở ữ ệ
ệ
ả
2.1.4. C u trúc c s d li u ự SQL Server qu n lý tr c ti p các CSDL. M i ậ ả CSDL SQL Server s qu n lý các c u trúc v t lý ủ ộ ố c a nó. Vi c qu n tr c s d li u có m t s ể ặ đ c đi m sau: ể
ế
ả c h t ph i
ướ ả
ị
ế ố ế ệ
ệ ỉ ự
ớ
•Đ Client khai thác CSDL tr ự th c hi n k t n i đ n Server qu n tr CSDL đó. •Ch th c hi n khai thác v i các CSDL có tên
ả
ươ
ự
ứ
trong danh sách các CSDL mà Server qu n lý. ở ng th c m CSDL tr c
•Không có các ph
ế ừ ậ ti p t
ư t p tin nh Access. ế ố ế
ề
ị
ượ ẵ
ề
•Khi đã k t n i đ n Server, Client ch th c ỉ ự ệ hi n đ c quy n khai thác theo quy đ nh đã ị đ nh s n trong CSDL (phân quy n trong CSDL).
SQL Server 2005
50
ầ ồ
ắ ậ
ầ
ơ ở ữ ệ ấ 2.1.4. C u trúc c s d li u •C s d li u trong SQL Server l u tr ữ ư ơ ở ữ ệ ộ ậ ữ ệ ầ theo 2 ph n: ph n d li u (g m m t t p ụ ộ tin b t bu c *.mdf và các t p tin ph *.ndf) ậ và ph n nh t ký (*.ldf).
SQL Server 2005
51
ơ ồ ơ ở ữ ệ ạ
ữ ệ ườ
ị ơ ở ữ ệ ả 2.1.5. S đ qu n tr c s d li u •C s d li u trong SQL Server chia ệ ố ơ ở ữ ệ thành 2 lo i: C s d li u h th ng (do ở ở ặ SQL Server sinh ra khi cài đ t) và c s ạ ườ i dùng t o ta). i dùng (do ng d li u ng
SQL Server 2005
52
ư ặ ấ
ị ơ ở ữ ệ ả ơ ồ 2.1.5. S đ qu n tr c s d li u ệ ạ ấ ả •Master: Ghi l t c thông tin h i t ả ủ ố th ng c a SQL Server nh : tài kho n ệ ậ đăng nh p, các cài đ t c u hình h th ng.ố
ườ
ậ
ế i dùng truy c p đ n m t th hi n ư ủ ụ
ả
ể ệ ấ t i t m
ơ ơ ữ ệ •Tempdb: C s d li u này là tài ấ ả t c các nguyên dùng chung cho t ộ ng ữ ủ các t c a SQL Server. Nó l u gi ộ ạ ạ ả c các b ng và th t c n i t th iờ .
SQL Server 2005
53
ấ ả
ị ơ ở ữ ệ ả ơ ồ 2.1.5. S đ qu n tr c s d li u •Model: Đ c s d ng nh m t m u ẫ ư ộ ử ụ ượ ượ ạ c t o ra trong t c các CSDL đ cho t ủ ể ệ ộ m t th hi n c a SQL Server
.
ượ ử ụ •Msdb: đ
ữ ữ ệ ồ
SQL Server 2005
54
ệ ố ở c s d ng b i SQL Server, Management Studio và SQL Server Agent ể ư đ l u tr d li u, bao g m các thông tin ậ ị l p l ch và thông tin quá trình backup restore h th ng .
ấ
ả
ủ ả ậ
ậ
ậ ủ 2.1.6 C u trúc v t lý c a CSDL ị ệ ư ấ Nh c u trúc các CSDL h qu n tr ườ ng, SQL Server cũng CSDL thông th ở ạ ữ ệ qu n lý t p tin d li u c a CSDL d ng ạ v t lý theo trang (page) và phân đo n (extent).
SQL Server 2005
55
ấ
ủ
ậ 2.1.6 C u trúc v t lý c a CSDL Page
ộ
ả ư ậ
ứ ỗ
SQL Server 2005
56
ủ •SQL Server qu n lý m t page có kích ướ c là 8KB, nh v y 1MB có 128 page, th trong m i trang có 96 byte ch a thông tin c a trang
ấ
ủ ứ
ơ ị
ỗ
ể
ậ 2.1.6 C u trúc v t lý c a CSDL •Extent: là đ n v dùng ch a các Table và Index. M i extent có 8 page hay 64KB. SQL Server có 2 ki u extent:
ư ữ ỉ •Uniform: Ch dùng l u tr cho m t đ i ộ ố
t ngượ
ư ữ ể
SQL Server 2005
57
ượ •Mixform: Có th dùng l u tr 8 đ i ố ng. t
ấ
ư ấ
ủ ậ 2.1.6 C u trúc v t lý c a CSDL •C u trúc Extent nh sau:
SQL Server 2005
58
̃
ơ ở ư
̣ ̣
2.2. Tao c s d liêu
• Trong khung Object Explorer, kích nút
ả ụ ộ ạ ọ i m c Databases, ch n
ổ
SQL Server 2005
59
ư ệ ấ ph i chu t t ử New Database. C a s New Database xu t hi n nh sau:
̃
ơ ở ư
̣
2.3. Sao chép c s d liêu
ộ
ả
ố
ọ
ấ
Cách 1: • Kích chu t ph i vào CSDL mu n sao chép, ch n ọ Task/ Copy Database, ch n Next. ệ ạ
ứ
ầ
• C a s ổ Select a Source Server xu t hi n, ử - Ch n Server ngu n ch a database b n c n ọ
ồ sao chép trong m c ụ Source Server.
ọ
ươ
ự
ứ
ề
- Kích vào bi u t - Ch n ph ọ
ọ
ể ượ ể ự ng đ l a ch n Server. ng pháp ch ng th c quy n truy ậ c p Server là Use Windows Authentication hay Use SQL Server Authentication, kích ch n Next.
SQL Server 2005
60
̃
ơ ở ư
̣
2.3. Sao chép c s d liêu
Cách 1:
ư ử nh c a s ọ
ầ ạ i trong m c
ị
SQL Server 2005
61
ọ ộ • C a s ổ Select a Destination Server ử ổ Select a Source ự ươ t ng t ứ Server, ch n Server đích ch a database ụ Source ớ b n c n sao chép t ụ ặ Server. M c đ nh là local (Server c c b ), kích ch n Next.
̃
ơ ở ư
̣
2.3. Sao chép c s d liêu
ề
ươ
ươ
ứ
ụ
Cách 1: • C a s ổ Select the Trasfer Method yêu c u ầ ử ọ ạ ứ ng th c truy n. b n ch n ph - Use the detach and attach method: S ử ng th c truy n này nhanh h n,
ấ
ề ơ ế ộ ở ch đ offline. ấ ể t nh t đ nâng c p ấ ớ
ầ
ự
ử ụ ượ
ồ
d ng ph ầ ư nh ng yêu c u CSDL ố ứ ươ ng th c này t Ph ể CSDL hay di chuy n CSDL r t l n. Yêu c u ọ khi s d ng l a ch n này thì không có user ế ố ế nào đ
c phép k t n i đ n CSDL ngu n.
ươ
- Use the SQL Managerment Object ơ ng th c này ch m h n
ậ ồ
ế ộ
ở
ứ method: Ph ể ư nh ng cho phép database ngu n có th ẫ v n còn
ch đ online.
ọ Kích ch n Next.
SQL Server 2005
62
̃
ơ ở ư
̣
2.3. Sao chép c s d liêu
Cách 1:
ử
• Trong c a s ầ ọ
ổ Select Database, b n ạ ọ ch n CSDL c n sao chép, kích ch n Next.
• C a s ử
ấ ầ
ậ ớ ổ Configure Destination ạ ệ Database xu t hi n yêu c u b n : - Nh p tên Database m i vào m c ụ
ậ - Ch n th m c ch a các t p tin CSDL ứ
SQL Server 2005
63
Destination Database ư ụ ụ ọ ớ m i trong m c Destination Folder
̃
ơ ở ư
̣
2.3. Sao chép c s d liêu
Cách 1:
ử
• Trong c a s ạ
ụ
ớ
ị
ọ
ổ Configure the Package cho ị ộ ợ phép t o m t gói tích h p d ch v (Integration ỉ ượ c ch đ nh trong Services package) v i tên đ ể ế ụ m c ụ Package name. Ch n Next đ ti p t c.
ử
• Trong c a s
ổ Schedule the Package, b n ạ ệ
ế
ự ụ
ố ọ
ố ậ ị
ể
ế
ể ế ụ
ọ
ch n ọ Run immediately n u mu n th c hi n sao chép database ngay. Còn ch n m c Schedule n u mu n l p l ch trình đ sao chép database. Ch n Next đ ti p t c.
ử
• Trong c a s
ổ Complete the Wizard, ch n ọ SQL Server 2005
Finish.
64
̃
ơ ở ư
̣
2.3. Sao chép c s d liêu
ừ ụ ị D ng các d ch v SQL Server
ậ Truy c p vào th m c ch a t p Cách 2: • B c 1: ướ 2005 • B c 2: ướ
ư ụ ậ ầ
ườ ớ
ầ ở ộ ứ ậ tin CSDL c n sao chép (các t p tin này ng có ph n tên trùng v i tên CSDL th ầ và ph n m r ng là mdf và ldf).
ạ ụ ượ ị i các d ch v đ c
SQL Server 2005
65
• B c 3: ướ ở b ừ d ng ở ộ Kh i đ ng l ướ c 1.
̃
ơ ở ư
̣
2.4. Gán và tách c s d liêu ̃
ơ ở ư ̣ 2.4.1 Gán c s d liêu
ậ • Gán (Attach) c s d li u là k thu t
ỹ ể ệ
ố ậ ự ướ ư ơ ở ữ ệ ghép n i t p tin CSDL vào th hi n, Các b ệ c th c hi n nh sau:
ủ ử
ầ
ụ ử ọ
SQL Server 2005
66
ư ệ • Trong khung Object Explorer c a c a s ổ SQL Server Management Studio, Ch n ọ ả Instance c n Attach CSDL kích nút ph i ổ ạ i m c Databases, ch n Attach, c a s t ấ Attach Databases xu t hi n nh sau:
̃
ơ ở ư
̣
2.4.1 Gán c s d liêu
ế
ư ụ ọ Kích vào nút Add, ch n đ n th m c ch a ủ ơ ở ữ ệ
ầ
ọ
ọ
ế
ứ ậ t p tin có đuôi “mdf” c a c s d li u c n Attach, Ch n Ok, Ch n ti p OK.
SQL Server 2005
67
̃
̣
2.4.2 Tách c s d liêu
ơ ở ư ạ ỏ ệ ự ướ c th c hi n lo i b ể ệ ớ
ả
ứ ẫ ậ •Tách (Detach) là b ể ệ ỏ CSDL ra kh i th hi n, th hi n không ư qu n lý CSDL nh ng khác v i xóa CSDL là các t p tin ch a CSDL v n còn.
ầ ả ọ •Kích nút ph i lên CSDL c n tách, ch n
Tasks/ Detach
ử ấ ổ •Trong c a s Detach Database, Nh n
SQL Server 2005
68
Ok.
ấ ữ ệ
ậ
2.5 Nh p và xu t d li u
ữ ệ ậ 2.5.1 Nh p d li u
ậ ngoài vào
ữ ệ ừ Nh p (Import) d li u t ữ ệ ặ ể ừ ệ h ủ ả ị
CSDL SQL Server, d li u có th t qu n tr CSDL khác ho c CSDL khác c a SQL Server.
ầ
ộ ữ ệ ả ọ •Kích chu t ph i lên Databases c n Import d li u, ch n Tasks/ Import Data...
ử ổ
SQL Server 2005
69
ạ ọ •Trong c a s Welcome to SQL Server Import and Export Wizard, b n ch n Next.
ữ ệ
ử ổ ấ
ậ 2.5.1 Nh p d li u C a s Choose a Data Source xu t
SQL Server 2005
70
hi n:ệ
ữ ệ
ữ ệ ụ ồ ọ
ậ 2.5.1 Nh p d li u •Ch n ki u ngu n d li u trong m c ể
Data Source (SQL Server, Oracle, Access,...)
ọ ậ ụ •Ch n t p tin c s d li u trong m c ơ ở ữ ệ
file name
SQL Server 2005
71
ọ •Ch n Next
ữ ệ
•Trong c a s ổ Choose a Destiation
ậ 2.5.1 Nh p d li u ử ỉ
ầ ữ ệ
SQL Server 2005
72
ơ ầ ị ạ b n c n ch đ nh n i c n sao chép d li u ớ ằ i b ng cách: t
ậ 2.5.1 Nh p d li u
ọ
ữ ệ •Ch n tên Server trong m c
ụ Server
name
ọ ướ ằ ờ •Ch n tên CSDL trong m c ụ Database ể ặ ạ ạ i th i đi m này b ng c ho c t o t
(có tr cách ch n ọ New)
SQL Server 2005
73
•Ch n ọ Next.
ữ ệ
ậ 2.5.1 Nh p d li u
ổ ử
ề ể ạ ầ ọ
Trong c a s Specify Table Copy or ữ Query: y u c u b n ch n cách chuy n d li uệ
ữ ệ ừ ộ ề •Copy data from one or more tables or ặ m t ho c nhi u
ả views: Sao chép d li u t b ng hay view.
•Write a query to specify the data to ị ể ỉ ế ấ t m t câu truy v n đ ch đ nh
SQL Server 2005
74
ữ ệ ộ ể transfer: Vi ầ d li u c n chuy n.
ữ ệ
ậ 2.5.1 Nh p d li u ử
Trong c a s
ổ Select Source Tables and
Views
ọ
ầ
ậ
•Ch n các b ng, view c n Import và nh n
ả trong m c ụ Tables and Views.
•Ch n ọ Next.
ử
•Trong c a s
ổ Save and Execute Package,
ch n ọ Next
ử
•Trong c a s
ổ Complete the Wizard, ch n ọ
Finish
ử
ị ế
ể
ữ ệ
•C a s ổ Operation stopped cho hi n th k t ọ Close ể ả
qu chuy n d li u, ch n SQL Server 2005
75
ấ ữ ệ
ấ
2.5.2 Xu t d li u ể Dùng đ xu t (export) d li u t ộ ệ
ủ
ặ ữ ệ ừ ộ m t ả ủ
ị CSDL c a SQL Server ra m t h qu n tr ộ CSDL khác ho c m t CSDL khác c a SQL Server.
ệ ự ướ ữ ệ ươ
ư ệ c th c hi n Export d li u t Các b ng ự ư nh Import nh ng th c hi n Data Source
ệ
ủ ặ ị
SQL Server 2005
76
ự t ả là SQL Server, còn Destination là h qu n tr CSDL khác ho c CSDL khác c a SQL Server.
ể
ớ ượ ớ c gi
ữ ệ •M t s ki u d li u m i đ ữ ệ ơ ở ữ ệ
ộ ố ể ả
2.6 Ki u d li u và cách khai báo . ệ i thi u trong phiên b n c s d li u SQL Server 2005 là xml, char(max) và varchar(max).
ợ
ọ ế ớ ự
ủ ộ
•Vi c ch n ki u d li u ph i phù h p d ữ ả ữ ệ ể ệ ờ ụ ồ ủ ệ i th c, đ ng th i nó còn ph li u c a th gi ẵ ữ ệ ể thu c vào các ki u d li u có s n c a SQL Server 2005.
ọ ự ệ
ủ ẽ ề i ích v
ư ả ượ ệ ạ ợ i l ả c kh năng
SQL Server 2005
77
ụ ữ ệ ữ ậ ữ ệ •M c đích cu i cùng c a vi c ch n l a ố ể ki u d li u đúng là nó s đem l ư l u tr cũng nh c i thi n đ truy c p d li u khi thi hành.
ữ ệ
ể
2.6 Ki u d li u và cách khai báo .
ữ ệ ể •Các ki u d li u trong SQL Server 2005
ượ đ c phân thành 4 nhóm:
•System Data Types
•UserDefined Data Types
•UserDefined Types
SQL Server 2005
78
•Xml Schema Collections
ể
ữ ệ
ữ ệ ể
2.6 Ki u d li u và cách khai báo . Nhóm ki u d li u System Data Types
bao g m:ồ
SQL Server 2005
79
•Exact Numberics •Approximate Numerics •Date and Time •Character Strings •Unicode Character Strings •Binary Strings •Other Data Types
ố ể
ể ư ụ ị
ữ ớ
ư
2.6.1. Nhóm Exact Numberics •BIT: ki u s nguyên 1 byte đ l u tr ữ ể ộ ộ m t trong hai giá tr 0 hay 1. Ví d : C t th ượ ệ hi n gi c i tính là Nam (1) hay N (0) đ khai báo nh sau:
•Gioitinh bit not null default 1
ố
ừ ả ể ư ế 0 đ n
SQL Server 2005
80
•TINYINT: ki u s nguyên 1 byte đ l u ể ị ằ ữ tr các giá tr n m trong kho ng t 255
2.6.1. Nhóm Exact Numberics •SMALLINT: ki u s nguyên 1 byte đ ể ố
ữ ừ ả
ể ị ằ ư l u tr các giá tr n m trong kho ng t ế 32.768 đ n 32.767.
ể ư •INT: ki u s nguyên 4 byte đ l u tr ữ
ể ị ằ ả ừ
ố các giá tr n m trong kho ng t ế 2.147.483.648 đ n 2.147.483.647.
ố ể ư
•BIGINT: ki u s nguyên 8 byte đ l u ữ ể ị ằ ừ ả
SQL Server 2005
81
tr các giá tr n m trong kho ng t 9.223.372.036.854.775.808 đ n ế 9.223.372.036.854.775.807.
2.6.1. Nhóm Exact Numberics
DECIMAL ho cặ NUMERIC: ki u d li u
ử ụ ể ấ ể ư
ả ữ ệ ộ s d ng 9 byte đ l u tr s ch m đ ng trong kho ng 1038+1 đ n ữ ố ế 10381
ể ư
ả ề ệ •SMALLMONEY: dùng 4 byte đ l u tr ữ trong kho ng 214.748,3648
ố ể ế s ki u ti n t đ n 214.748,3647
ữ ố ể ể ư •MONEY: dùng 8 byte đ l u tr s ki u
trong kho ng
SQL Server 2005
82
ả ề ệ ti n t 922.337.203.685.477,5808 đ n ế 922.337.203.685.477,5807
ấ ấ ộ trong kho ng t
ể ư ả ị ừ
2.6.2. Nhóm Approximate Numberics. •FLOAT: dùng 4 hay 8 byte đ l u s ố ừ ợ ệ d u ch m đ ng h p l ế 1,79E+308 đ n 2.23E308, giá tr 0 và t ế 2.23E308 đ n 1.79E+308.
ố ấ
ợ ệ ể ư ừ trong kho ng t
ấ 3.40E + 38 ế ộ ế
SQL Server 2005
83
•REAL: dùng 4 byte đ l u s d u ch m ả đ ng h p l ị đ n 1.18E 38, giá tr 0 và 1.18E 38 đ n 3.40E + 38.
2.6.3 Nhóm Date and Time
ể ư ừ ả ả
•DATETIME: dùng 8 byte đ l u giá tr ị ờ 1/1/1753 ế th i gian x y ra trong kho ng t đ n 31/12/9999.
•SMALLDATETIME: dùng 4 byte đ l u
ị ờ ả ể ư ừ
SQL Server 2005
84
ả giá tr th i gian x y ra trong kho ng t ế 1/1/1900 đ n 6/6/2079.
ạ ư ỗ
2.6.4 Nhóm Character Strings •CHAR: cho phép b n l u chu i có chi u
ố ự ề ỗ không h i đa là 8000 ký t
ợ ố ị dài c đ nh t tr Unicode.
ụ
ạ ư
Ví d : SOCMND char(9) not null •VARCHAR: cho phép b n l u chu i có ề ự ỗ không
i đa là 8000 ký t ể
ố ị ạ ả ỏ ữ ệ
ố chi u dài c đ nh t ử ụ unicode, khi b n s d ng ki u này thì đòi ề h i d li u ph i có chi u dài không thay đ i.ổ
ề
ổ
85
ự ề •TEXT: khai báo chu i có chi u dài thay ỗ ỗ ợ ự không h tr Unicode và ỗ i đa c a chu i là 2^311 ký t đ i, các ký t ố chi u dài t . ủ SQL Server 2005
ạ ư ề
2.6.4 Nhóm Character Strings •CHAR: cho phép b n l u chu i có chi u
ố ự ỗ không i đa là 8000 ký t
ố ị dài c đ nh t unicode.
ụ
ạ ư
Ví d : SOCMND char(9) not null •VARCHAR: cho phép b n l u chu i có ề ự ỗ không
i đa là 8000 ký t ể
ố ị ạ ả ỏ ữ ệ
ố chi u dài c đ nh t ử ụ unicode, khi b n s d ng ki u này thì đòi ề h i d li u ph i có chi u dài không thay đ i.ổ
ề
ổ
86
ự ề •TEXT: khai báo chu i có chi u dài thay ỗ ỗ ợ ự không h tr Unicode và ỗ i đa c a chu i là 2^311 ký t đ i, các ký t ố chi u dài t . ủ SQL Server 2005
ự
ỗ
ề
2.6.5 Nhóm Character Strings •NCHAR [ ( n ) ]: khai báo chu i ký t
ố ị
ế
ả
ế
có chi u ộ h tr Unicode và có đ dài 1 đ n 4.000, n u
ị
ự ỗ ợ dài c đ nh, các ký t ị ừ là n byte. N ph i có giá tr t ặ không có khai báo n thì m c đ nh n=1.
ỗ
ổ
ộ
•NVARCHAR [ ( n | max ) ]: khai báo chu i có ự ỗ ợ ề h tr Unicode và có chi u dài thay đ i, các ký t ị ừ ố ế ả 1 đ n i đa là n byte. N ph i có giá tr t đ dài t ữ ố ướ ư ế i c l u tr t max thì kích th 4.000. N u khai báo đa là 2^311 byte.
ề
ỗ ợ
ề
ố
•NTEXT: khai báo chu i có chi u dài thay đ i ổ ỗ ự . h tr Unicode, chi u dài t
i đa là 2^301 ký t
SQL Server 2005
87
2.6.6 Nhóm Binary Strings
ữ ệ ị
ậ ộ
ế •BINARY [ ( n ) ]: Ki u d li u nh phân ể ị có đ dài c đ nh là n byte. N nh n giá tr ừ t ố ị 1 đ n 8000
ổ ộ
ế ế ể ậ t kích th
ữ ệ ị nh phân có đ dài thay đ i. N nh n giá tr ướ ừ t c ố t •VARBINARY [ ( n | max) ]: Ki u d li u ị 1 đ n. khai báo Max cho bi i đa là 2^311 bytes.
ư
ữ ệ ề ể ố ổ •IMAGE: Cho phép l u d li u ki u d ữ i đa là
SQL Server 2005
88
ị ệ li u nh phân thay đ i có chi u dài t 2^311 bytes.
2.6.7 Nhóm Orther Data Types
•SQL_VARIANT: Ki u d li u cho phép ể
ữ ị ớ ữ ệ ể
ữ ệ ề ư l u tr các giá tr v i nhi u ki u d li u ạ ừ ể text, ntext, khác nhau ngo i tr ki u image, timestamp và sql_variant.
ữ ệ ị
ể ạ
SQL Server 2005
89
•TIMESTAMP: Ki u d li u nh phân t ể ự ữ ấ ộ đ ng t o ra duy nh t trong CSDL. Ki u d ướ ệ li u này có kích th c 8 byte.
2.6.7 Nhóm Orther Data Types
ữ ệ
ạ •UNIQUEIDENTIFIER: Ki u d li u nh ị đ ng t o ra duy nh t trong CSDL.
ự ộ ữ ệ ể ấ ướ phân t ể Ki u d li u này có kích th c 16 byte.
ữ ệ ể ư ữ ể •XML: Ki u d li u dùng đ l u tr các
SQL Server 2005
90
ạ ủ ố tài li u hay đo n (fragment) XML, dung ể ượ l ữ ệ i đa c a ki u d li u này là 2 GB. ệ ng t
2.7 B ngả
̣ ̉ 2.7.1 Tao bang
ầ ạ ộ •Kích đôi chu t lên Database c n t o
b ngả
ả •Kích ph i chu t lên m c
ộ ộ ả ả ể ị
ả
SQL Server 2005
91
ứ ụ Tables và ch n ọ New Table. M t b ng Table – dbo.Table_1 hi n th bên ph i màn hình Management ọ Studio. B ng này g i là Table Designer, có ộ ch a các c t
ả
ạ 2.7.1 T o b ng
ộ ủ
ẽ ạ
ứ
ả
•Column Name: Ch a tên c t c a b ng s t o.
ữ ệ
ể
ộ
ỉ
•Data type: Ch ra ki u d li u cho c t.
ượ
ấ
ọ
ộ c ch n thì c t này ch p
ế ỗ
•Allow Nulls: N u đ ị ậ nh n giá tr null (r ng).
ữ ệ
ủ
ậ
ộ
•Nh p tên c t và ki u d li u c a nó. ể
ế ậ
ể
ộ ọ ể ượ chu t vào bi u t
•Ch n các c t khóa chính (Primary key), kích ộ ng đ thi
t l p.
ể ư
ấ
•Kích vào nút Save ho c nh n Ctrl + S đ l u. ặ
SQL Server 2005
92
́ ̣ ̣ ơ ở ữ 2.7.2 Thiê t lâp quan hê cho c s d
li uệ
Quan h giúp tránh đ
ệ ấ ế
ộ ả
ộ c t là khóa ọ ộ ẽ ộ ả
ạ . ơ ữ ệ ượ c nguy c d li u ệ ớ ả không nh t quán. N u b ng có quan h v i b ng khác, nó s có m t chính trong m t b ng khác. C t đó g i là khóa ngo i (Foreign key)
ấ ế ế ả Sau khi hoàn t
ế
ữ ệ ệ ữ ằ ng
SQL Server 2005
93
ệ t vi c thi t k các b ng ạ ạ d li u liên quan, b n ti n hành t o quan ố ượ ớ h gi a chúng v i nhau b ng đ i t Database Diagram.
́ ̣ ̣ ơ ở ữ 2.7.2 Thiê t lâp quan hê cho c s d
li uệ
ướ ư ạ ệ ế N u tr c đó b n ch a t o quan h cho
ọ
SQL Server 2005
94
ệ ấ ạ CSDL, khi ch n vào ngăn Database ư Diagram thì thông báo xu t hi n nh sau:
́ ̣ ̣ ơ ở ữ 2.7.2 Thiê t lâp quan hê cho c s d
li uệ
ả Kích nút ph i chu t lên m c ụ Database
SQL Server 2005
95
ử ư ệ ổ ộ Diagrams, ch n ọ New Database Diagram. ấ C a s Add Table xu t hi n nh sau:
́ ̣ ̣ ơ ở ữ 2.7.2 Thiê t lâp quan hê cho c s d
li uệ
ọ ả Ch n b ng c n t o quan h r i nh n nút
ệ ồ ổ ử ấ
ệ ấ ổ
SQL Server 2005
96
ầ ạ ấ ạ ể i. Add, nh n Close đ đóng c a s này l ư ử C a s Database Diagram xu t hi n nh sau:
́ ̣ ̣ ơ ở ữ 2.7.2 Thiê t lâp quan hê cho c s d
li uệ
ệ ữ ả Thi
ứ
ạ ở ả ử ổ
SQL Server 2005
97
ằ ế ậ t l p quan h gi a các b ng b ng ở ả ộ ữ ệ ọ b ng cách ch n c t d li u là khóa chính ớ ộ ữ ệ ứ ả ấ ồ th nh t r i kéo th vào c t d li u ng v i ứ b ng th hai. C a s Tables khóa ngo i ư ệ ấ and Columns xu t hi n nh sau:
́ ̣ ̣ ơ ở ữ 2.7.2 Thiê t lâp quan hê cho c s d
li uệ
ọ ộ ữ ệ
ử ạ ổ
ệ ạ ỉ
ấ ầ ố ộ •Ch n c t d li u làm khóa chính và khóa ngo i, kích OK. C a s Foreign Key ộ ệ Relationship xu t hi n. B n hi u ch nh m t ế ồ s thu c tính c n thi t r i kích OK
SQL Server 2005
98
ố ượ ư •L u đ i t ng Diagram
́ ̣ ̣ ơ ở ữ 2.7.2. Thiê t lâp quan hê cho c s d
li uệ
Chú ý:
ệ ữ ế ậ
•B n nên thi ướ ả ả ạ b ng tr t l p quan h gi a các ữ ệ c khi thêm d li u vào b ng.
ườ ồ ạ •Tr t
ể
ể i, đ thi ố ữ ệ ả
SQL Server 2005
99
ạ ế ữ ệ ng h p d li u đã t n t ậ l p quan h b n nên ki m tra tính th ng ấ ủ nh t c a d li u trong các b ng d li u mà ẽ b n s thi ợ ệ ạ ữ ệ ệ ế ậ t l p quan h .
̀ ̣ ̉
2.7.3. Thêm ra ng buôc cho bang
ị
ượ ượ ợ ủ
ể ộ ư
SQL Server 2005
100
ượ ạ SQL Server 2005 cho phép b n ràng ể ữ ị ộ ộ ộ bu c giá tr trong m t c t xác đ nh đ d ẽ ệ c thêm li u không thích h p s không đ ộ ữ ệ c phép vào. Ki u d li u c a c t cũng đ ộ ị ràng bu c giá tr trong c t, nh ng nó không ộ đ c xem là ràng bu c.
c ượ
ộ ắ
ạ
ị
ả
̀ ̣ ̉
ỉ
ch ra mi n giá
•CHECK: Ràng bu c ộ ki m tra
ề ả
ủ
ụ ộ ị
ậ
ầ tr đ THI ch nh n giá tr là 1 ho c 2.
ằ
ỉ
2.7.3. Thêm ra ng buôc cho bang •NOT NULL: Khi ràng bu c ộ không r ngỗ đ ả ộ ỉ ch ra, c t b t bu c ph i có giá tr khi b n thêm ữ ệ d li u vào b ng.
ể ị ượ c phép. Ví d : c t lan (l n thi) c a b ng ặ ỉ •UNIQUE: Ràng bu c ộ duy nh tấ ch ra r ng giá
ả
ấ
ậ
ị
ộ ộ tr nh p vào m t c t ph i duy nh t.
•PRIMARY KEY: Ràng bu c ộ khóa chính dùng
ữ ệ
ể
ộ
ị
ấ đ xác đ nh duy nh t m t dòng d li u.
ế
ế
ạ
ấ
ộ
ể ộ ả
•FOREIGN KEY: Ràng bu c ộ khóa ngo iạ dùng ậ đ tham chi u đ n m t nh n d ng duy nh t trong m t b ng khác trong CSDL.
SQL Server 2005
101
̀
̣ ̉
2.7.3 Thêm ra ng buôc cho bang
Ví d 1: ụ
ộ ọ
ủ ự ả
ư ộ Thêm ràng bu c UNIQUE cho ể c t TenMH (vì tên các môn h c không th ệ trùng nhau) c a b ng MONHOC th c hi n nh sau:
ả ộ
•Nh p ph i chu t lên b ng MONHOC ọ ả ấ ch n Modify.
ả ấ
ọ
SQL Server 2005
102
ệ ạ ấ ộ •Trong b ng Table Designer, nh p ph i ả ộ chu t lên dòng TenMH ch n Indexes/ Keys. H p tho i Indexes/ Keys xu t hi n.
̀
̣ ̉
2.7.3. Thêm ra ng buôc cho bang
ấ ị •Nh n nút Add, ch n giá tr cho dòng ọ
Type là Unique key.
SQL Server 2005
103
ộ ể ấ ạ •Nh n Close đ đóng h p tho i.
̀
ộ
̣ ̉
2.7.3. Thêm ra ng buôc cho bang ộ Ví d 2: ụ Thêm ràng bu c CHECK cho c t DIEM ả
ư
trong b ng THI nh sau:
ả
ả
ộ
ọ
•Nh p ph i chu t lên b ng MONHOC ch n
ấ Modify.
ả
ả
ấ
ộ
ạ
ộ
ọ ấ
ệ
•Trong b ng Table Designer, nh p ph i chu t lên dòng DIEM ch n Check Constraints. H p tho i Check Constraints xu t hi n.
ấ
ể ạ
ộ
ọ
ộ
ả
ọ
ể ộ
ạ ậ
ị ừ
•Nh n nút Add đ t o ràng bu c CHECK. Ch n ộ c t bên ph i dòng Expression và ch n nút (…). H p tho i Check Constraints Expression. Đ c t DIEM ậ ạ 0 đên 10 b n nh p: DIEM>=0 AND nh n giá tr t DIEM<=10.
104
ộ SQL Server 2005
ể
ấ
ạ
•Nh n Close đ đóng h p tho i Check Constraints
́
ư
̣ ̉
ử ế
ữ ệ
ử
ạ
N u b n thêm, s a, xóa d li u trong ộ
ế
ả
ạ
̃ 2.7.4. X ly d liêu trong bang ư L u ý: ả b ng ph i chú ý đ n ràng bu c khóa ngo i. Nghĩa là:
ế
ể
•B n không th thêm d li u n u không có
ứ
ươ
ữ ệ ả
ng ng trong b ng mà nó có quan
ạ
ị
ệ ớ
ậ i. Nghĩa là giá tr nh p vào c t khóa ngo i ộ
ộ ủ
ả
ộ
ả ồ ạ
i trong c t khóa chính c a b ng có c t
ạ khóa chính t h t ph i t n t đó là khóa chính.
ượ ạ ạ
ể
c l
•Ng
i b n không th xóa m t giá tr trong
ị
ế
ả
ứ
ộ ị ế ồ ạ ộ c t khóa chính n u giá tr đó đang t n t i trong ả ế ạ ủ ộ c t khóa ngo i c a b ng tham chi u đ n b ng ch a khóa chính.
SQL Server 2005
105
2.8 View
ớ
ệ
2.8.1. Gi
i thi u
ử
ầ
ằ ề
ể
ữ ả ấ ữ ệ ử ụ ạ ợ
ả
• Trong quá trình x lý d li u, ta c n k t n i ữ ệ ế ố ế ệ ớ nh ng b ng có quan h v i nhau nh m k t ố xu t d li u theo ý mu n. Đ làm đi u này, ụ ỗ ể b n s d ng phát bi u SQL hay công c h ả . (khung nhìn hay b ng o) tr View
ử ụ ẽ
ư
ấ ữ ấ ủ ng c a SQL
• N u s d ng phát bi u SQL khi truy v n tr c ự ể ế ạ ư ế ti p s không cho phép b n l u tr c u trúc ộ ố ượ ể phát bi u SQL nh là m t đ i t Server.
SQL Server 2005
106
ệ
i thi u
2.8.1. Gi ủ
ớ ệ ử ụ
ụ
ứ ạ
ữ ệ
ủ
ế
M c đích c a vi c s d ng View là: •H n ch tính ph c t p c a d li u đ n v i ớ ườ
ạ ế i dùng
ng
ế ố ữ ệ ừ
ề
ả
ạ ớ
•K t n i d li u t
nhi u b ng l
ễ i v i nhau d
dàng.
ươ
•K t h p m t s hàm và ph ộ ố
ứ ạ ng th c t o ra
ế ợ ớ ộ các c t m i.
ế
ệ t có nh ng câu l nh SQL dùng
ư
t ch
ể ạ
ệ
ụ
ậ
•Khi c n thi ữ ầ ươ ế trong quá trình vi ng trình nh Visual ể ạ Basic, Java,... B n có th dùng View đ t o các ể ử ạ câu l nh t o theo ý mình, sau đó copy đ s d ng trong l p trình.
SQL Server 2005
107
ạ
2.8.2 Cách t o View
ứ ố Ch n Database ch a đ i
ượ ọ ầ ạ t
ả ộ •B c 1: ướ ng View c n t o. •B c 2: ướ
ạ
ệ ấ Kích nút ph i chu t lên nút ộ ọ Views, ch n New View. H p tho i Add xu t hi n.
ọ ặ ữ ệ Ch n b ng d li u ho c View •B c 3: ướ
ấ
ể ạ ọ ấ ộ
SQL Server 2005
108
ạ ả ồ dùng đ t o View r i nh n nút Add. Sau khi ch n xong nh n nút Close đóng h p tho i này l ạ i.
2.8.2 Cách t o View
ử ổ ư
ạ ệ
SQL Server 2005
109
ấ C a s View xu t hi n nh sau:
ạ ế
ể
ầ
ạ
ế ằ
2.8.2 Cách t o View •B n có th thêm b ng n u c n thi
t b ng
ả ng
ặ
ụ
ố
ọ
ể ượ Add Table trên cách kích vào bi u t thanh công c ụ View Designer ho c kích vào vùng tr ng khung Show Diagram, ch n m c Add Table
ọ
ộ
ướ
ộ ữ ệ
ạ ộ ạ
ể mu n hi n th trong ẽ ượ ch n s đ
ể c c t d li u b n View. Khi đó tên c t b n Show Criteria.
ể
ạ
•Ch n vào h p ki m tr ị ố ọ c thêm vào khung •Trong khung Show Criteria b n có th thay
ằ
ố
ặ
ộ ị ủ ể đ i tên hi n th c a c t trong View b ng tên khác đ t trong c t
ủ
ể
ể
ạ
ị
ộ Alias (bí danh). •Trong c t ộ Output, ch n vào h p ki m c a ộ ọ ố ộ ữ ệ c t d li u mà b n mu n hi n th ra trong View.
SQL Server 2005
110
ạ
2.8.2 Cách t o View
ế
ạ
ộ
ọ
ố
•Trong c t Sort Order, b n ch n 1 n u mu n
ế
ế
ặ
ọ
ế
ắ
ắ s p x p và unsorted ho c không ch n n u ố không mu n s p x p.
ể
ạ
ắ
ộ
ọ
•C t Sort Type cho phép b n ch n ki u s p
ầ
ầ
ế x p: Ascending: tăng d n và Descending là ả gi m d n.
ể
ề
ể
ệ
•C t Filter dùng đ nh p đi u ki n hi n th ị ậ
ộ trong View.
ể
ề
ệ
ặ
ộ
•C t Or dùng đ nh p đi u ki n ho c cho ậ
c t.ộ
•Kích chu t vào bi u t ộ
ng Add Group by
ể
ộ
ể ượ đ thêm c t Group by vào khung Show Criteria.
SQL Server 2005
111
ạ
2.8.2 Cách t o View
ế
•B c 4: ướ ệ ự ẽ ượ
ể
ả ề ủ ả ữ ệ c hi n th trong khung Show
Kích vào nút Execute SQL đ ể th c hi n View. K t qu d li u tr v c a ị View s đ Results.
ạ
ạ
•B c 5: ướ
i câu ấ
ể ệ B n có th hi n ch nh l ớ
ỉ ầ
ợ
ủ
ộ
ể ể
ệ
Save
ộ Kích chu t vào bi u t ể ư
ể ượ ng ậ
ấ Ctrl + S đ l u View. Nh p tên
ệ l nh SQL cho phù h p v i yêu c u truy v n trong khung c a Show SQL. Kích chu t vào nút Verify SQL Syntax đ ki m tra cú pháp câu l nh SQL. •B c 6: ướ ặ ho c nh n ầ ư View c n l u.
SQL Server 2005
112
ạ
ộ ủ ị ả ể ầ
ọ
ọ ồ
2.8.2. Cách t o View ạ Ví d :ụ Trong CSDl QLDIEM t o View •Hi n th b ng đi m l n m t c a môn ể h c có mã môn h c là ‘Tinvp’ và ‘Tindc’ g m các thông tin sau: Masv, hodem, ten, mamonhoc,diemlan1.
ế ứ ự
SQL Server 2005
113
ế ầ ầ •K t qu tr v s p x p theo th t ả ả ề ắ ể ộ ủ tăng d n c a c t đi m l n 1.
ệ
ỉ
2.8.3. Hi u ch nh View
ố ộ •Kích ph i chu t lên View mu n thay
ổ ả đ i và ch n
SQL Server 2005
114
ư ạ ự ệ ệ ổ ọ Modify. •Th c hi n vi c s a đ i View và l u l ử i.
ng 3 Ch
́ ́ ̉ ̣ ươ ữ ệ Pha t biêu TSQL dang truy vâ n d li u
ớ
ệ
3.1. Gi
ữ i thi u ngôn ng TSQL và SQL
ệ
ủ 3.2. Cú pháp chung c a câu l nh SELECT
ề
ệ
3.3. M nh đ FROM
ọ
ệ
3.4. Danh sách ch n trong câu l nh SELECT
ữ ệ
ề
ệ
ấ
ỉ
ị
3.5. Ch đ nh đi u ki n truy v n d li u
ữ ệ ừ ế
ạ
ớ ả 3.6. T o m i b ng d li u t
ủ
ệ
ấ
ả k t qu truy
v n c a câu l nh SELECT
SQL Server 2005
115
ng 3 Ch
́ ́ ̉ ̣ ươ ữ ệ Pha t biêu TSQL dang truy vâ n d li u
ế ắ ấ ả ế 3.7. S p x p k t qu truy v n
ử 3.8. Toán t Union
3.9. Phép n iố
ố ớ ữ ệ 3.10. Th ng kê d li u v i GROUP BY
ấ 3.11. Truy v n con (Subquery)
SQL Server 2005
116
ấ 3.12. Truy v n con (Subquery)
ệ ớ ữ i thi u ngôn ng TSQL và SQL
ấ
ấ 3.1 Gi • TSQL (Transact Structured Query ữ ệ ự Language) là th c hi n ngôn ng truy v n ủ có c u trúc (SQL) c a Microsoft.
ươ ượ ậ • TSQL đ t k đ nh n, t c thi ng tác
SQL Server 2005
117
ữ ệ ế ế ể và thêm d li u vào CSDL SQL Server.
ế ậ
t l p ra
ộ
c g i là Structed Enghlish
c g i t
t là SEQUEL. ọ
ượ
ọ ọ ắ ượ t SEQUEL đ
c rút g n
3.1 Gi • Vào gi a nh ng năm 70, IBM đã thi
ữ
ổ ế ả
ấ
• SQL là m t lo i ngôn ng máy tính ph bi n ị m t h qu n tr
ộ ạ ử ể ạ đ t o, s a, và l y d li u t ơ ở ữ ệ c s d li u quan h
ữ ệ ừ ộ ệ ệ.
ượ
ủ
ừ
ậ
ẩ
• SQL đ
c th a nh n là tiêu chu n c a ANSI
(American National Standards Institute) vào năm 1986 và ISO (International Organization for Standardization) năm 1987
SQL Server 2005
118
ệ ữ ớ i thi u ngôn ng TSQL và SQL ữ ữ ượ ẩ m t chu n đ Query Language đ ế ắ Sau này, tên vi t t thành SQL.
ộ ố
ớ ệ
ữ i thi u ngôn ng TSQL và SQL 3.1 Gi • Tiêu chu n SQL đã tr i qua m t s phiên b n: ả ả ẩ
Năm Tên
Tên khác
Chú gi
iả
ượ
ố ầ
1986 SQL86
ẩ
ở SQL87 Đ c công b đ u tiên b i ở ượ ANSI. Đ c phê chu n b i ISO năm 1987.
1989 SQL89
1992 SQL92
SQL2
1999 SQL:1999 SQL3
2003 SQL:2003
SQL Server 2005
119
ả
ự
ế ậ
ẩ
ệ ớ
ượ
ượ
ế
ạ
c xem xét l
i và đ
c bi
ể
ợ
ữ i thi u ngôn ng TSQL và SQL ế c thi
ệ
• SQL Server 2000 th c hi n theo ANSI SQL ự
92.
ệ
• SQL Server 2005 th c hi n theo ANSI SQL ự
99.
SQL Server 2005
120
3.1 Gi • H u h t các s n ph m CSDL d a trên SQL ẩ ầ ượ t l p trên chu n ANSI SQL92 (năm đ 1992 ANSI SQL đ t ớ v i tên là ISO ANSI SQL92) và chúng không ặ ả ượ c xem xét đ làm phù h p theo các đ c t đ ủ c a ANSI SQL99 hay ANSI SQL2003.
ủ ệ 3.2 Cú pháp chung c a câu l nh Select
ượ c s d ng đ truy
ể ộ ủ ử ụ các dòng và các c t c a
• Câu l nh SELECT đ ấ ữ ệ ừ ộ ệ xu t d li u t ả ề m t hay nhi u b ng, khung nhìn.
ệ ấ
ự ả ấ
SQL Server 2005
121
ứ ạ ố • Ngoài ra, câu l nh này còn cung c p ệ kh năng th c hi n các thao tác truy v n ữ ệ và th ng kê d li u ph c t p khác.
ả
ọ
ủ ệ 3.2 Cú pháp chung c a câu l nh Select
SELECT [ALL | DISTINCT][TOP n] ớ danh_sách_ch n [INTO tên_b ng_m i]
ả
FROM danh_sách_b ng/khung_nhìn
ề
ệ
[WHERE đi u_ki n] [GROUP BY danh_sách_c t]ộ
ệ
ề
[HAVING đi u_ki n]
ế
ắ
ộ
[ORDER BY c t_s p_x p]
ộ
[COMPUTE danh_sách_hàm_g p [BY danh_sách_c t]]ộ
SQL Server 2005
122
ủ ệ 3.2 Cú pháp chung c a câu l nh Select
ệ ử ụ • Câu l nh SELECT đ
ả
ể
c hi n th d ợ ứ ả
ộ
ụ
SQL Server 2005
123
ể ượ c s d ng đ tác ả ế ộ ữ ệ đ ng lên các b ng d li u và k t qu ủ ị ướ ệ ượ c a câu l nh cũng đ i ộ ậ ạ d ng b ng, t c là m t t p h p các dòng ạ ừ ườ ử ợ và các c t (ngo i tr tr ng h p s ề ệ ớ ệ d ng câu l nh SELECT v i m nh đ COMPUTE).
ệ
ệ ọ
ườ ượ ị c s d ng đ ch đ nh các tr
ng, ộ ể ầ ị
ấ ọ 3.3 Danh sách ch n trong câu l nh SELECT • Danh sách ch n trong câu l nh SELECT ử ụ ỉ đ ể ể ứ các bi u th c c n hi n th trong các c t ả ế ủ c a k t qu truy v n.
ườ ượ ứ ị • Các tr ể ng, các bi u th c đ
ỉ c ch đ nh khoá SELECT và phân cách
ẩ ừ ngay sau t ở ấ nhau b i d u ph y.
ử ụ ệ • S d ng danh sách ch n trong câu l nh
SQL Server 2005
124
ườ ợ ồ ọ SELECT bao g m các tr ng h p sau:
ọ ấ ả ộ ả 3.3.1 Ch n t t c các c t trong b ng
ườ ng trong
ầ ả • Khi c n hi n th t ử ụ * trong danh
t kê danh sách
ị ấ ả ể t c các tr ự các b ng, s d ng ký t ả ệ sách ch n thay vì ph i li ộ ấ ả t ọ t c các c t.
ườ c
ợ ế
ộ ượ ng h p này, các c t đ ẽ ấ ả ượ ạ c t o ra khi
ả ị • Trong tr ị ể hi n th trong k t qu truy v n s tuân ứ ự theo th t mà chúng đã đ ượ b ng đ c đ nh nghĩa.
• Ví d :ụ Câu l nhệ
SQL Server 2005
125
SELECT * FROM LOP
ườ
ợ
ụ ể ấ
ộ ị
ỉ ả
ỉ
ầ ế ộ
ọ
• Trong tr ị ng h p c n ch đ nh c th các c t ị ể ầ c n hi n th trong k t qu truy v n, ta ch đ nh danh sách các tên c t trong danh sách ch n.
ả
ấ
ộ
• Th t
ế c a các c t trong k t qu truy v n tuân ứ ự ủ
ườ
ng trong danh sách
c a các tr
ứ ự ủ theo th t ch n. ọ
• Ví d :ụ Câu l nhệ
SELECT malop, tenlop, namnhaphoc FROM lop
SQL Server 2005
126
ọ ộ 3.3.2 Tên c t trong danh sách ch n
ộ ổ ề 3.3.3 Thay đ i tiêu đ các c t
ộ ộ ể ặ Đ đ t tiêu đ cho m t c t nào đó, ta
ử ụ ề ế s d ng cách vi t:
ườ ng
ườ ề ộ ng AS tiêu_đ _c t
SQL Server 2005
127
ườ •Tiêu_đ _c t = tên_tr ề ộ •Ho c ặ tên_tr •Ho c ặ tên_tr ề ộ ng tiêu_đ _c t
ộ
3.3.3 Thay đ i tiêu đ các c t ướ ệ ề i đây: ổ •Ví d :ụ Câu l nh d
ớ SELECT 'Mã l p'= malop, tenlop 'Tên
ọ ớ l p', khoahoc AS 'Khóa h c'
FROM lop
SQL Server 2005
128
ả ế Cho k t qu là:
ằ ể 3.3.4 H ng và bi u th c
ườ ứ ng, trong danh
ọ ể ử ụ ứ ể •Ngoài danh sách tr ệ ủ sách ch n c a câu l nh SELECT còn có th s d ng các bi u th c.
ộ ỗ ể
ế ả ở
•M i m t bi u th c trong danh sách ứ ộ ộ ọ ch n tr thành m t c t trong k t qu truy v n.ấ
ệ ướ ế t tên •Ví d :ụ Câu l nh d
ố ế ủ i đây cho bi ọ và s ti t c a các môn h c
SELECT tenhocphan,sotinchi*15 AS
SQL Server 2005
129
sotiet
FROM hocphan
ứ ể ằ 3.3.4 H ng và bi u th c
ế ự ấ ọ
ủ
ị ằ ộ ộ ủ ị ả ế
•N u trong danh sách ch n có s xu t ệ ẽ hi n c a giá tr h ng thì giá tr này s xuât ấ ở ệ hi n trong m t c t c a k t qu truy v n ấ ả t c các dòng t
•Ví d :ụ Câu l nhệ
ố ế SELECT tenhocphan,'S ti t: ',
sotinchi*15 AS sotiet
FROM hocphan
SQL Server 2005
130
ư ế ả ệ K t qu câu l nh nh sau:
SQL Server 2005
131
ứ ể ằ 3.3.4 H ng và bi u th c
ữ ệ ạ ỏ
ế ấ
ả ủ ữ ệ
ị khoá
SQL Server 2005
132
3.3.5 Lo i b các dòng d li u trùng nhau •Trong k t qu c a truy v n có th xu t ấ ể ể ạ ệ hi n các dòng d li u trùng nhau. Đ lo i ừ ỉ ỏ ớ b b t các dòng này, ta ch đ nh thêm t ừ khóa DISTINCT ngay sau t SELECT.
ạ ỏ ữ ệ
ệ
i đây
•Ví d :ụ Hai câu l nh d
SELECT khoahoc FROM lop
và:
SELECT DISTINCT khoahoc FROM lop
ả ầ ượ
ế
có k t qu l n l
ư t nh sau:
SQL Server 2005
133
3.3.5 Lo i b các dòng d li u trùng nhau ướ
ớ ạ ế 3.3.6 Gi i h n s l ng dòng trong k t
ố ượ ả ấ
ỉ ị
ệ
ấ
qu truy v n •Ta ch đ nh thêm m nh đ TOP ngay ề ệ ủ ọ ướ c danh sách ch n c a câu l nh ế ố ượ ng các dòng xu t ấ ả ế ệ tr ạ SELECT h n ch s l hi n trong k t qu truy v n.
ệ ướ ị ọ ể i đây hi n th h •Ví d :ụ Câu l nh d
ủ ầ
tên và ngày sinh c a 5 sinh viên đ u tiên trong danh sách
SELECT TOP 5 hodem,ten,ngaysinh
SQL Server 2005
134
FROM sinhvien
ớ ạ ế 3.3.6 Gi i h n s l ng dòng trong k t
ố ượ
ầ
ị ph n trăm b ng cách s d ng
ụ ướ
•Ta có th ch đ nh s l ể ỉ ỷ ệ ị ể hi n th theo t l ừ thêm t
ầ ng các dòng c n ử ụ i đây.
ằ ư ở ví d d
khoá PERCENT nh
ệ
ị ọ
ể
ướ ố ượ
ệ
i đây hi n th h tên và ng sinh viên hi n có
ả
•Ví d :ụ Câu l nh d ủ ngày sinh c a 10% s l trong b ng SINHVIEN
SELECT TOP 10 PERCENT hodem, ten,
ngaysinh
FROM sinhvien
SQL Server 2005
135
ố ượ ả ấ qu truy v n
ệ
ề
ệ
3.4 M nh đ FROM • M nh đ FROM trong câu l nh SELECT ề ử ụ
ệ ượ ỉ c s d ng nh m ch đ nh các b ng
ị ấ ữ ệ ầ ả ằ đ và khung nhìn c n truy xu t d li u.
ủ
ủ
ở ấ ẩ • Sau FROM là danh sách tên c a các ả b ng và khung nhìn tham gia vào truy ả ấ v n, tên c a các b ng và khung nhìn ượ c phân cách nhau b i d u ph y. đ
ệ ể ị • Ví d : ụ Câu l nh d
ướ sách các khoa trong tr i đây hi n th danh ngườ
SQL Server 2005
136
SELECT * FROM khoa
ề
ệ
ể ử ụ
3.4 M nh đ FROM •Ta có th s d ng các bí danh cho các
ả ệ
ượ c gán trong m nh
ề ằ ị ỉ
ả b ng hay khung nhìn trong câu l nh ệ SELECT. Bí danh đ đ FROM b ng cách ch đ nh bí danh ngay sau tên b ng.
ệ a •Ví d :ụ câu l nh sau gán bí danh là
khoa cho b ng ả
SQL Server 2005
137
SELECT * FROM khoa a
ị
ỉ
3.5 Ch đ nh đi u ki n
ề ượ •M nh đ WHERE đ
ề
ệ ề ử ụ c s d ng nh m ố ớ ệ
ệ ằ ị ệ xác đ nh các đi u ki n đ i v i vi c truy ấ ữ ệ xu t d li u.
ệ ể ộ •Sau m nh đ WHERE là m t bi u th c
ỉ
ớ ượ ệ ỉ ữ ệ ị c ch đ nh m i đ c
SQL Server 2005
138
ể ả ấ ề ứ ả ữ logic và ch nh ng dòng d li u nào tho ượ ề mãn đi u ki n đ ế ị hi n th trong k t qu truy v n.
ử
3.5.1 Các toán t
so sánh
ớ
ặ ặ
ằ ằ
Toán tử = > < >= <= <> !> !<
ý nghĩa B ngằ ơ ớ L n h n ỏ ơ Nh h n ơ L n h n ho c b ng ỏ ơ Nh h n ho c b ng Khác ơ ớ Không l n h n ỏ ơ Không nh h n
SQL Server 2005
139
ử
3.5.1 Các toán t
so sánh
ọ
•Ví d 1:ụ Hi n th danh sách các h c ầ ị ỉ ớ ơ ố ể ph n có s tín ch l n h n 3
ể ị ạ Hi n th mã sinh viên thi l i
SQL Server 2005
140
•Ví d 2: ụ ầ ọ h c ph n có mã là tinvp và tindc
ớ ạ
ữ ệ
ể 3.5.2 Ki m tra gi
ể ể
ử
ả
ộ
ủ i h n c a d li u ằ ị ữ ệ ử ụ ư
•Đ ki m tra xem giá tr d li u n m trong (ngoài) m t kho ng nào đó, ta s d ng toán t BETWEEN (NOT BETWEEN) nh sau:
ử ụ
Cách s d ng
Ý nghĩa
ị
giá_tr BETWEEN a AND b
a (cid:0)
giá_tr ị (cid:0)
b
ị
giá_tr NOT BETWEEN a AND
(giá_tr < a) AND ị
ị (giá_tr >b)
b
SQL Server 2005
141
ớ ạ
ữ ệ
ủ
ể 3.5.2 Ki m tra gi
i h n c a d li u
ị ể
•Ví d 1: ụ ầ ọ ầ ể ừ ế Hi n th mã sinh viên thi l n 1 8 đ n 10 đi m. h c ph n có mã là ‘Sql’ t
ể Hi n th mã sinh viên thi l n 1
•Ví d 2: ụ ầ ọ ể
SQL Server 2005
142
ể ặ ầ ị h c ph n có mã là ‘Tindc’ có đi m là 5 ặ ho c 6 ho c 7 đi m.
3.5.3 Danh sách (IN và NOT IN) ừ
ử ụ ượ ầ ỉ c s d ng khi ta c n ch
ữ ệ •T khoá ề IN đ ệ
ế ị đ nh đi u ki n tìm ki m d li u cho câu ị ộ ệ l nh SELECT là m t danh sách các giá tr .
ộ
ể ộ ặ
SQL Server 2005
143
•Sau IN (ho c ặ NOT IN) có th là m t ệ ị danh sách các giá tr ho c là m t câu l nh SELECT khác.
ể ầ ị
3.5.3 Danh sách (IN và NOT IN) •Ví d 1:ụ Hi n th mã sinh viên thi l n 1 ọ
ể
ầ h c ph n có mã là ‘SQL’ có đi m là 6, 8 ặ ho c 10
ư ể •Ví d 2:ụ Hi n th tên khoa ch a có ị
SQL Server 2005
144
ả (không qu n lý) sinh viên.
ừ
ử ụ
ằ
ữ ệ
ủ
ế
ầ
ạ
ả
ử ự ạ 3.5.4 Toán t LIKE và các ký t đ i
t
ượ
ế ợ
ớ
ự ạ
ệ
c k t h p v i các ký t
đ i di n :
di n ệ •T khoá LIKE (NOT LIKE) s d ng nh m mô khuôn d ng c a d li u c n tìm ki m.
ý nghĩa
ệ
ự ấ ỳ ồ
ề
ặ
•Chúng đ ự Ký t ạ đ i di n %
b t k g m không ho c nhi u ký
ự ơ
ấ ỳ
ỗ Chu i ký t tự Ký t
đ n b t k
_
ượ
ị
[]
ỉ c ch đ nh
ớ ạ i h n đ ụ
ớ ạ
ấ ỳ
[^]
i h n
đ n b t k không n m trong gi ộ ậ ụ
ị
ấ ỳ ự ơ đ n b t k trong gi ụ ự ơ ằ ụ ỉ c ch đ nh ( ví d [^af] hay m t t p (ví d
Ký t ộ ậ (ví d [af]) hay m t t p (ví d [abcdef]) Ký t ượ đ [^abcdef]).
SQL Server 2005
145
ử ự ạ 3.5.4 Toán t LIKE và các ký t đ i
ủ di n ệ ế t masv,hodem,ten c a •Ví d 1:ụ Cho bi
các sinh viên có h là ọ Nguy nễ
ế ủ Cho bi •Ví d 2: ụ
ự ồ t masv,hodem,ten c a và có ký
ố các sinh viên có tên g m ba ký t ự t
t h và tên c a các cu i cùng là N •Ví d 3:ụ Cho bi
ế ọ ắ ầ ằ ự ặ V ho c
SQL Server 2005
146
ủ sinh viên có tên b t đ u b ng ký t L
ị
3.5.5 Giá tr NULL
ệ
ể ể
ề
ộ ộ
ị
ế
•Trong m nh đ WHERE, đ ki m tra giá tr ị ủ ử c a m t c t có giá tr NULL hay không, ta s ụ d ng cách vi
t:
ộ
WHERE tên_c t IS NULL
ho c:ặ
ộ WHERE tên_c t IS NOT NULL
ữ ệ
ư
ể
ậ
ị
•Ví d :ụ Hi n th tên khoa ch a nh p d li u v ề ệ
ạ đi n tho i.
SQL Server 2005
147
ữ ệ ừ ế ạ ớ ả 3.6 T o m i b ng d li u t ả k t qu
ệ
ụ ượ
ữ ệ
ớ
•Câu l nh SELECT ... INTO có tác d ng t o ạ ộ ả c xác ị
ừ ế
ả ủ
ấ
ấ m t b ng m i có c u trúc và d li u đ k t qu c a truy v n. đ nh t
ớ ượ ạ ỉ ố
ố ộ ằ ọ ấ
ả ủ
•B ng m i đ ố ả ẽ c t o ra s có s c t b ng s ố ị ộ ượ c t đ c ch đ nh trong danh sách ch n và s ế ẽ dòng s là s dòng k t qu c a truy v n.
ữ ệ ừ ả
ấ
•Ví d :ụ truy v n d li u t
ộ ả
ườ
ồ
b ng SINHVIEN và ng
ạ t o m t b ng SINHVIENNU bao g m các tr MASV, HODEM, TEN và NGAYSINH.
SQL Server 2005
148
ủ ệ c a câu l nh SELECT
ả
ắ
ế
ấ
ế
ế 3.7 S p x p k t qu truy v n •M c đ nh, các dòng d li u trong k t qu c a ả ủ ữ ệ ặ ứ ự ủ ả ế
ỉ ụ
ế
ắ
c a chúng trong b ng c s p x p theo ch m c (n u trên
ị ấ ặ ỉ ụ
ữ ệ ả
câu truy v n tuân theo th t ượ d li u ho c đ b ng có ch m c).
ườ
ế
ắ
•Trong tr
c s p x p ặ ộ
ữ ệ ủ
ợ ặ ử ụ
ượ ị ủ ề
ề ườ
ệ
ố ng h p mu n d li u đ ả theo chi u tăng ho c gi m c a giá tr c a m t ho c ề nhi u tr ng, ta s d ng thêm m nh đ ORDER BY ệ trong câu l nh SELECT
ắ
ố
ắ
ặ
ượ ộ i đa là 16 c t). D li u đ ề ả ế
ề
ắ
•Sau ORDER BY là danh sách các c t c n s p ộ ầ ể ế ữ ệ ế c s p x p có th x p (t ị ặ theo chi u tăng (ASC) ho c gi m (DESC), m c đ nh là s p x p theo chi u tăng.
SQL Server 2005
149
ắ
ế
ấ
ả
ể
ọ
ị
ủ
ế
ề
ầ
ố
ế 3.7 S p x p k t qu truy v n •Ví d 1:ụ Hi n th danh sách các h c ph n và ầ ỉ ả ắ s p x p theo chi u gi m d n c a s tín ch .
Chú ý:
ề
ắ
ộ ứ ự ừ
ẽ ượ ư
c u tiên theo th t
ệ trái
t
•N u sau ORDER BY có nhi u c t thì vi c s p ế ữ ệ ế x p d li u s đ qua ph i.ả
ị
ộ ầ
ượ ể ượ
ụ
c a c t c n đ ví d trên có th đ
ắ c s p ế ạ t l c vi
i
ư
•Thay vì ch đ nh tên c t sau ORDER BY, ta có ộ ỉ ố ứ ự ủ ể ị ỉ th ch đ nh s th t ở ệ ế x p. Câu l nh nh sau:
SQL Server 2005
150
ắ
ế
ả
ấ
ể
ị
ế
ầ
ả ả ề ắ ồ
ế 3.7 S p x p k t qu truy v n •Ví d 1:ụ Hi n th danh sách sinh viên nam, ế ọ k t qu tr v s p x p tăng d n theo tên, h ệ đ m g m các thông tin: hodem, ten, ngaysinh
ủ
ể
ọ
Hi n th masv c a 2 sinh viên thi h c
•Ví d 2: ụ ầ
ể
ị ấ ph n có mã là tindc có đi m cao nh t.
SQL Server 2005
151
3.8 Toán t
Union,Except và
ử Intersect
ử
Union
3.8.1 Toán t
ử
Except
3.8.2 Toán t
ử
Intersect
3.8.3 Toán t
SQL Server 2005
152
ử Union c s d ng trong tr
ợ ng h p ta
ề
ườ ấ
ấ
•Toán t ộ ầ ộ ậ
3.8.1 Toán t ượ ử ụ ử Union đ ả ủ ế ế ả ể ự
ư
ợ
ệ
c n g p k t qu c a hai hay nhi u truy v n thành ử ấ m t t p k t qu duy nh t. SQL cung c p toán t . UNION đ th c hi n phép h p. Cú pháp nh sau
ệ Câu_l nh_1
ệ
UNION [ALL] Câu_l nh_2
ệ
[UNION [ALL] Câu_l nh_3
]
...
ệ
[UNION [ALL] Câu_l nh_n
]
ắ
ộ
[ORDER BY c t_s p_x p
ế ]
[COMPUTE danh_sách_hàm_g pộ [BY
danh_sách_c tộ ]]
SQL Server 2005
153
ử
3.8.1 Toán t ả ử
ầ ượ
Union ả s ta có hai b ng Table1 và ư t nh sau:
•Ví d :ụ Gi Table2 l n l
SQL Server 2005
154
ử
3.8.1 Toán t
Union
•Câu l nhệ
SELECT A,B FROM Table1
UNION
ế
SELECT D,E FROM table2 ư ả Cho k t qu nh sau:
SQL Server 2005
155
ử
3.8.1 Toán t
Union ấ
ị
ặ
ế
ầ
ợ
ấ
ấ
ỉ ữ ạ i
ế
ừ
•M c đ nh, n u trong các truy v n thành ph n ữ ữ ệ ệ ủ c a phép h p xu t hi n nh ng dòng d li u ả ế ố gi ng nhau thì trong k t qu truy v n ch gi l ữ ạ ố ộ i các dòng này, ta m t dòng. N u mu n gi l ấ ả ử ụ khoá ALL trong truy v n ph i s d ng thêm t thành ph n. ầ
•Ví d :ụ Câu l nhệ
SELECT A,B FROM Table1
UNION ALL
SELECT D,E FROM table2
SQL Server 2005
156
ử
3.8.1 Toán t
Union
ấ ộ
•Danh sách c t trong các truy v n thành ố ượ ầ ả ph n ph i có cùng s l ng.
ấ ả ng ng trong t
ộ ươ ặ ậ c
ả
ấ ỳ ỗ ữ ệ ể ả •Các c t t ứ t c các ộ ượ ả b ng, ho c t p con b t k các c t đ ử ụ ấ s d ng trong b n thân m i truy v n thành ầ ph n ph i cùng ki u d li u.
ộ ươ ả
•Các c t t ấ ng ng trong b n thân t ng ộ ủ
ứ ự ả
SQL Server 2005
157
ừ ứ ệ ầ truy v n thành ph n c a m t câu l nh ư ệ ấ nh UNION ph i xu t hi n theo th t nhau.
ử
3.8.1 Toán t
Union
ể ế c k t
ệ
ữ ệ ể c chuy n sang ki u d li u
•Khi các ki u d li u khác nhau đ ượ ữ ệ ớ ợ h p v i nhau trong câu l nh UNION, ể ẽ ượ chúng s đ ể ượ ế ơ cao h n (n u có th đ c).
ề ộ
ả ủ ị ề ộ ượ ỉ
SQL Server 2005
158
•Tiêu đ c t trong k t qu c a phép h p ợ ế ẽ s là tiêu đ c t đ c ch đ nh trong truy ầ ấ v n đ u tiên.
Except
ượ
ử ử ụ
ườ
3.8.2 Toán t ử Except đ ệ ầ
ữ
ứ
i trong
ứ
•Toán t ng c s d ng trong tr ạ ả ợ h p b n c n li t kê danh sách nh ng b n ghi ồ ạ ấ ả ồ ạ i bên b n th nh t mà không t n t t n t ả b ng th hai.
ụ
ộ ọ
ể
ể
ị
ư Ví d : Hi n th Masv ch a có đi m thi m t h c ầ
ph n nào
SELECT MASV FROM SINHVIEN
EXCEPT
SELECT MASV FROM DIEMTHI
SQL Server 2005
159
Except
ử ử ụ
ượ
ườ
3.8.2 Toán t ử Except đ ệ ầ
ữ
ứ
i trong
ứ
•Toán t ng c s d ng trong tr ạ ả ợ h p b n c n li t kê danh sách nh ng b n ghi ồ ạ ấ ả ồ ạ i bên b n th nh t mà không t n t t n t ả b ng th hai.
ụ
ộ ọ
ể
ể
ị
ư Ví d : Hi n th Masv ch a có đi m thi m t h c ầ
ph n nào
SELECT MASV FROM SINHVIEN
EXCEPT
SELECT MASV FROM DIEMTHI
SQL Server 2005
160
ử
3.8.3 Toán t
Intersect
ể ấ
ả
•Intersect dùng đ l y các b n ghi v a t n t ừ ồ ạ ả i ứ ả ấ ừ ồ ạ i trong b ng th
ứ trong b ng th nh t v a t n t hai.
ụ
ự
ể
ớ
ộ
ị
Ví d : Hi n th Makhoa có l p tr c thu c.
SELECT Makhoa FROM KHOA
INTERSECT
SELECT MAKHOA FROM LOP
ụ
ể
ị
ạ ả
ọ
i c hai h c
Ví d : Hi n th Mã sinh viên thi l ầ
ph n có mã là Tindc và Tinvp
SQL Server 2005
161
ể
•Đ truy v n d li u t ấ ả ử ụ ả
3.9 Phép n i ố ữ ệ ừ hai hay nhi u ế
ố ề b ng, ta ph i s d ng đ n phép n i.
ầ ố sau:
ộ ượ c m t phép n i, c n ế ố c nh ng y u t ị ể ộ •Đ th c hi n đ ả ữ ượ ị - Nh ng c t nào c n hi n th trong k t ế ầ
ấ qu truy v n
ả - Nh ng b ng nào có tham gia vào truy
ệ ể ự ph i xác đ nh đ ữ ả ữ v n.ấ ề ữ ệ ố - Đi u ki n đ th c hi n phép n i gi a
SQL Server 2005
162
ể ự ữ ệ ả ệ các b ng d li u là gì.
ố
ừ •Phép n i trong s d ng t
ượ ự ố
ệ ệ
3.9.1 Phép n i trong ử ụ ố khóa INNER ể ế ố ằ ệ ề JOIN là phép k t n i b ng. Đi u ki n đ ị ỉ c ch đ nh th c hi n phép n i trong đ ư ề trong m nh đ FROM theo cú pháp nh sau:
ả
SQL Server 2005
163
Tên_b ng_1 [INNER] JOIN ề ả ệ ố tên_b ng_2 ON đi u_ki n_n i
ố
3.9.1 Phép n i trong
ể ể
ị ọ
•Ví d :ụ Đ hi n th h tên và ngày sinh c a
ữ ệ
ử ụ
ủ ệ
các sinh viên l p ớ D li u 1
, ta s d ng câu l nh:
SELECT masv, hodem,ten,ngaysinh
FROM sinhvien s INNER JOIN lop l
ON s.malop=l.malop INNER JOIN
diemthi d on s.masv=d.masv
ữ ệ
WHERE tenlop=N'D li u 1'
SQL Server 2005
164
ố
3.9.2 Phép n i ngoài
ố
ố
ồ
Phép n i ngoài g m các phép n i sau đây:
ố
•Phép n i ngoài trái (LEFT OUTER JOIN)
ả
ố
•Phép n i ngoài ph i (RIGHT OUTER JOIN)
ầ
ố
•Phép n i ngoài đ y đ (FULL OUTER JOIN) ủ
SQL Server 2005
165
ố
3.9.2 Phép n i ngoài
ố
ồ
ố
Phép n i ngoài g m các phép n i sau đây:
ự
ư
ề
ệ
nh phép n i trong, đi u ki n ỉ
ượ
ệ
•Cũng t ươ ố ng t ị ố ủ c a phép n i ngoài cũng đ c ch đ nh ngay ề trong m nh đ FROM theo cú pháp:
ả
Tên_b ng_1 LEFT|RIGHT|FULL [OUTER]
JOIN
ề
ệ
ố
ON đi u_ki n_n i
ả tên_b ng_2
SQL Server 2005
166
ố
3.9.2 Phép n i ngoài
ả
ả
•Cho b ng NHANVIEN và B ng DONVI nh ư
sau:
SELECT *
FROM nhanvien LEFT OUTER JOIN donvi
ON nhanvien.madv=donvi.madv
SQL Server 2005
167
ố
ề
ả
3.9.3 phép n i trên nhi u b ng
ố
ệ
ự
ệ
ề ả
ượ
ượ
ứ ự ị c xác đ nh ử c s
•Khi th c hi n phép n i nhi u b ng, th t ữ ự ả ủ ố
ụ
ộ
ả ố th c hi n phép n i gi a các b ng đ ố ế theo nghĩa là k t qu c a phép n i này đ d ng trong m t phép n i khác.
ị ọ
ụ
•Ví d 1: Hi n th h tên và ngày sinh c a các
ọ
ể ộ
sinh viên thu c Khoa
ủ Khoa h c Máy tính
ể
ụ
ị ả
•Ví d 2: Hi n th b ng đi m h c ph n có tên
ể ủ ớ D li u 1
ồ
ọ ầ ữ ệ là HQTCSDL SQL Server c a l p g m các thông tin sau: masv, hodem, ten, ngaysinh, diem
SQL Server 2005
168
ệ
ề 3.10 M nh đ GROUP BY
ệ
ử ụ
•M nh đ ằ
ộ ữ ệ
ữ ệ ỗ ị ố
ự
ệ
ổ
ị
ệ ề GROUP BY s d ng trong câu l nh ả SELECT nh m g p các dòng d li u trong b ng ữ thành các nhóm d li u, và trên m i nhóm d ư ệ li u th c hi n tính toán các giá tr th ng kê nh tính t ng, tính giá tr trung bình,...
ộ
ị ể c s d ng đ tính giá tr
ử ụ ặ ử ụ
ỗ ư
ệ
ệ
ề
ấ ượ
ệ
ệ
ấ
ề c phép xu t hi n trong m nh đ
•Các hàm g p đ ượ ữ ả ố th ng kê cho toàn b ng ho c trên m i nhóm d ộ ể ượ ệ li u. Chúng có th đ c s d ng nh là các c t ủ ọ trong danh sách ch n c a câu l nh SELECT ư ệ ặ ho c xu t hi n trong m nh đ HAVING, nh ng không đ WHERE.
SQL Server 2005
169
ố ớ
ứ
ữ ệ 3.10 Th ng kê d li u v i GROUP BY Hàm g pộ
Ch c năng
ổ
ị Tính t ng các giá tr .
ể
ủ
SUM([ALL | DISTINCT] ứ ) bi u_th c AVG([ALL | DISTINCT] ứ
ể
bi u_th c)
ị
COUNT([ALL | DISTINCT]
ứ ) bi u_th c
ố ứ ố
ượ
ể COUNT(*)
c
ị ớ
Tính trung bình c a các giá trị ế Đ m s các giá tr trong ể bi u th c. ế Đ m s các dòng đ ch n.ọ ấ Tính giá tr l n nh t
ứ ) ể MAX(bi u_th c
ỏ
ấ ị Tính giá tr nh nh t
ứ ) ể MIN(bi u_th c
SQL Server 2005
170
ộ ữ ệ ố 3.10.1 Th ng kê trên toàn b d li u
ầ
• Khi c n tính toán giá tr th ng kê trên ạ ộ ữ ệ
ị ố ử ụ ọ ủ ệ ộ
toàn b d li u, b n s d ng các hàm g p trong danh sách ch n c a câu l nh SELECT.
ườ trong danh sách
• Trong tr ọ ấ ỳ ộ c s d ng b t k m t
ợ ượ ể ộ
ng h p này, ử ụ ch n không đ ứ tên c t hay bi u th c nào ngoài các hàm g pộ .
ủ ộ • Chú ý: mi n tác đ ng c a hàm g p lúc ộ
SQL Server 2005
171
ề này là trên toàn b ngả
ộ ữ ệ ố
ụ ể ầ 3.10.1 Th ng kê trên toàn b d li u • Ví d 1: Hi n th đi m trung bình l n 1 ị ể
ủ c a sinh viên có mã là dl01001.
ụ ấ ủ ị ể ể
ầ • Ví d 2: Hi n th đi m cao nh t c a h c ọ ph n có tên là HQTCSDL SQL Server.
ấ ủ ớ ụ • Ví d 3: Hi n th năm sinh l n nh t c a
SQL Server 2005
172
ị ữ ệ ể ớ l p có tên là d li u 1
ố
ữ ệ 3.10.2 Th ng kê d li u trên các nhóm • S d ng m nh đ GROUP BY đ phân
ử ụ ạ ệ ữ ệ ể ề ho ch d li u vào trong các nhóm.
ộ ượ ử ụ • Các hàm g p đ c s d ng s th c
ẽ ự ỗ
ị ố t giá tr th ng kê theo các nhóm
SQL Server 2005
173
ệ hi n thao tác tính toán trên m i nhóm và ế cho bi ữ ệ d li u.
ố
ể ớ ữ ệ 3.10.2 Th ng kê d li u trên các nhóm • Ví du 1: Hi n th mahocphan, đi m l n
ấ ứ ầ ị ể ớ ọ nh t ng v i h c ph n đó.
ụ t masv,hodem,ten, trung
ủ ầ ọ
SQL Server 2005
174
• Ví d 2: Cho bi ế ầ ể bình đi m thi l n 1 các h c ph n c a các sinh viên.
ố
ợ ng h p danh sách
ọ ả
ữ ệ 3.10.2 Th ng kê d li u trên các nhóm • L uư ý: Trong tr ườ ệ ủ ữ ộ ứ ả
ể ườ
ng trong danh ủ ệ
ệ
ch n c a câu l nh SELECT có c các hàm g p và nh ng bi u th c không ph i ộ là hàm g p thì các tr ề ặ ầ ả sách ph i có m t đ y đ trong m nh đ ẽ ế GROUP BY, n u không câu l nh s không h p l ợ ệ .
ố ị ụ • Ví d : Hi n th malop, tenlop, s sinh
SQL Server 2005
175
ừ ớ ể viên theo t ng l p.
ử
ả
Rollup 3.10.3 Toán t • Cho phép thêm b n ghi ng v i ứ ể
ứ
ượ ả ạ ớ hàm ư ng ng trong phát bi u Select nh ng c Group i trên b n ghi đã đ
SQL Server 2005
176
ươ t tính toán l by.
ử
3.10.4 Toán t
Cube
ồ ườ ợ • Bao g m tr ng h p Rollup
ươ ự ả ng t
• Cho phép thêm b n ghi t ộ ư nh ệ ứ
SQL Server 2005
177
ậ v y cho c t th hai khai báo sau m nh ề đ Group by.
3.10.5 Hàm Grouping
ộ ữ ệ • Cho phép thêm c t d li u.
ả ề ữ ệ ị và có giá tr
ự ế ượ ạ ở c t o ra b i
SQL Server 2005
178
ử • Tr v 0 cho d li u th c t ị ộ 1 cho giá tr c t là null đ Cube hay Rollup. toán t
ề ệ 3.10.6 M nh đ Having
ử ụ c s d ng cùng
• M nh đ HAVING đ ề ề ệ ệ ượ m nh đ GROUP BY.
ề ứ ệ
ể ề ứ
ả ộ
ừ ỉ
SQL Server 2005
179
ề ệ • Sau HAVING là bi u th c đi u ki n. ể ộ ệ Bi u th c đi u ki n này không tác đ ng ầ ượ ỉ t lên toàn b ng mà ch tác đ ng l n l ạ ả i lên t ng nhóm các b n ghi đã ch ra t m nh đ GROUP BY
ệ ề 3.10.6 M nh đ Having
ầ ừ hai
ể ở ọ • Ví d 1:ụ hi n th masv thi l n 1 t ị ầ h c ph n tr lên.
ể ớ ổ ố ị • Ví du 2: Hi n th tên l p có t ng s sinh
ớ viên l n 2.
ể ị
ể ầ
ể ặ ằ ớ • Ví d 3:ụ hi n th masv,hodem,ten, trung ủ bình đi m thi l n 1 c a các sinh viên có ơ đi m trung bình l n h n ho c b ng 5.
ể • Ví d 4:ụ Hi n th makhoa, tenkhoa, ị
SQL Server 2005
180
ủ solop c a khoa
ệ ề 3.10.6 M nh đ Having
ộ • M t truy v n con có th đ ấ
ể ượ ủ ử ụ c s d ng ộ ề
ả ủ
ơ ử ụ ề ế ng h p này, k t qu c a truy ể ạ ượ c s d ng đ t o nên đi u
SQL Server 2005
181
ố ớ ộ ệ trong m nh đ HAVING c a m t truy ấ v n khác. • Trong tr ườ ấ v n con đ ệ ki n đ i v i các hàm g p.
ụ
ệ ầ
• Ví d : Câu l nh d ướ ủ ể ể
ầ
ơ
ọ
SELECT d.mahocphan, tenhocphan, AVG(diem)
FROM diemthi d inner join hocphan h on
d.mahocphan=h.mahocphan
WHERE lanthi=1
GROUP BY d.mahocphan,tenhocphan
HAVING AVG(diem)>
(SELECT AVG(diem) FROM diemthi WHERE lanthi=1)
SQL Server 2005
182
ề ệ 3.10.6 M nh đ Having ế i đây cho bi t mã, tên và trung ớ ầ ọ bình đi m l n 1 c a các h c ph n có trung bình l n ầ ủ ấ ả t c các h c ph n h n trung bình đi m l n 1 c a t
ố ớ ữ ệ 3.11 Th ng kê d li u v i COMPUTE
ề ử ụ ế ợ
ộ
ệ ế
ủ
• M nh đ COMPUTE s d ng k t h p ệ ớ v i các hàm g p và ORDER BY trong ả câu l nh SELECT cũng cho các k t qu ộ ố th ng kê (c a hàm g p) trên các nhóm ữ ệ d li u.
ể ệ • Đi m khác bi
t gi a COMPUTE và ấ ế
ả ố ế ả i d ng m t dòng trong k t qu ế ề ữ ế ả t v d t c chi ti
SQL Server 2005
183
ỗ ữ GROUP BY là k t qu th ng kê xu t ộ ướ ạ ệ hi n d ấ truy v n và còn cho bi ệ li u trong m i nhóm.
ố
ớ
3.11 Th ng kê d li u v i
ữ ệ COMPUTE
ề
• M nh đ COMPUTE …BY có cú pháp nh ư
ệ sau:
ộ
ộ
ộ
COMPUTE hàm_g p (tên_c t) [,…, hàm_g p
(tên_c t)]ộ
BY danh_sách_c tộ
ộ
ồ
Trong đó: • Các hàm g p có th s d ng bao g m SUM, ể ử ụ
AVG, MIN, MAX và COUNT.
ộ ử ụ
• danh_sách_c tộ : là danh sách c t s d ng đ ể
ữ ệ
phân nhóm d li u
SQL Server 2005
184
ố
ớ
3.11 Th ng kê d li u v i
ữ ệ COMPUTE
ỗ
ủ
ớ
ố
ủ ớ Ví d :ụ danh sách các l p c a m i khoa và ỗ ổ t ng s các l p c a m i khoa
SELECT khoa.makhoa, tenkhoa, malop, tenlop
FROM khoa,lop
WHERE khoa.makhoa=lop.makhoa
ORDER BY khoa.makhoa
COMPUTE COUNT(malop) BY khoa.makhoa
SQL Server 2005
185
ố
ớ
3.11 Th ng kê d li u v i
ầ
ữ ệ COMPUTE ề ệ Khi s d ng m nh đ COMPUTE ... BY c n ướ ắ
ử ụ tuân theo các qui t c d
i đây:
ử ụ
ừ
•T khóa DISTINCT không cho phép s d ng
ộ
ớ v i các hàm g p
ượ
ử ụ
•Hàm COUNT(*) không đ
c s d ng trong
COMPUTE.
ể ử ụ
ề ở ấ
ả
ộ
•Sau COMPUTE có th s d ng nhi u hàm ẩ g p, các hàm ph i phân cách nhau b i d u ph y.
ệ
ấ
ộ ử ụ ề
ộ ặ
ệ
ả
•Các c t s d ng trong các hàm g p xu t hi n trong m nh đ COMPUTE ph i có m t trong danh sách ch n.ọ
SQL Server 2005
186
ố
ớ
3.11 Th ng kê d li u v i
ầ
ữ ệ COMPUTE ề ệ Khi s d ng m nh đ COMPUTE ... BY c n ướ ắ
ử ụ tuân theo các qui t c d
i đây:
ử ụ
ộ
•Không s d ng SELECT INTO trong m t câu
ử ụ
ệ l nh SELECT có s d ng COMPUTE.
ế
•N u s d ng m nh đ COMPUTE ... BY thì ề
ử ụ ả ử ụ
ệ
ề
ệ cũng ph i s d ng m nh đ ORDER BY.
ộ ệ
ộ ậ
ả
ả
ớ
ắ ầ trái qua ph i, b t đ u v i cùng m t ấ ỳ ộ
ứ
ể
ỏ
•Các c t li ả t kê trong COMPUTE … BY ph i ủ ố ệ gi ng h t hay là m t t p con c a danh sách các ộ ượ ệ t kê sau ORDER BY. Chúng ph i có c li c t đ ộ ứ ự ừ t cùng th t ứ ể bi u th c và không b qua b t k m t bi u th c nào.
SQL Server 2005
187
ớ
ố
3.11 Th ng kê d li u v i
ườ
•Trong tr
ng h p s d ng COMPUTE mà ầ
ể
ử ụ ộ
ủ
ữ ệ COMPUTE ử ụ ợ không có BY thì có th không c n s d ng ORDER ạ BY, khi đó ph m vi tính toán c a hàm g p là trên ộ ữ ệ toàn b d li u.
ướ
ụ
ể
•Ví d : Câu l nh d ệ ố ớ ổ ớ
ị i đây hi n th danh sách ệ
các l p và t ng s l p hi n có:
SELECT malop,tenlop,hedaotao
FROM lop
ORDER BY makhoa
COMPUTE COUNT(malop)
SQL Server 2005
188
ệ
ớ
ồ
ề
ệ
ộ ử ụ ộ
•Có th th c hi n vi c tính toán hàm g p dòng ề ằ trên các nhóm l ng nhau b ng cách s d ng nhi u m nh đ COMPUTE … BY trong cùng m t câu ệ l nh SELECT •Ví d :ụ SELECT khoa.makhoa, tenkhoa, malop, tenlop FROM khoa,lop WHERE khoa.makhoa=lop.makhoa ORDER BY khoa.makhoa COMPUTE COUNT(malop) BY khoa.makhoa COMPUTE COUNT(malop)
SQL Server 2005
189
ố ể ự ữ ệ 3.11 Th ng kê d li u v i COMPUTE ệ
Ấ 3.12 TRUY V N CON
ệ
ấ ượ ồ ệ ộ
ặ ấ • Truy v n con là m t câu l nh SELECT ộ c l ng vào bên trong m t câu l nh đ SELECT, INSERT, UPDATE, DELETE ộ ho c bên trong m t truy v n con khác.
ấ ượ ử ụ • Lo i truy v n này đ
ữ
c s d ng đ bi u ấ ầ
SQL Server 2005
190
ạ ễ ệ ế ấ ả ủ ế ể ể ề di n cho nh ng truy v n trong đó đi u ả ử ụ ữ ệ ki n truy v n d li u c n ph i s d ng ấ ộ đ n k t qu c a m t truy v n khác.
ả ượ
ế
ặ
c vi
t trong c p
ộ ấ
ặ
• M t truy v n con ph i đ ấ d u ngo c.
ườ
ộ
• Trong h u h t các tr ầ ả
ng h p, m t truy ả
ế
ế ợ ộ ộ ườ ng ph i có k t qu là m t c t
ấ v n con th
ề
ệ ượ
ử ụ
ấ
• M nh đ COMPUTE và ORDER BY không c phép s d ng trong truy v n con.
đ
ộ
ệ
ấ
ấ ộ ủ
ấ
ả
• Các tên c t xu t hi n trong truy v n con có ể th là các c t c a các b ng trong truy v n ngoài.
SQL Server 2005
191
Ấ 3.12.1 CÚ PHÁP TRUY V N CON
Ấ 3.12.1 CÚ PHÁP TRUY V N CON
ộ • M t truy v n con th ử ụ c s d ng
ề ượ ề ấ ệ
ủ ặ ấ ườ ng đ ệ ộ làm đi u ki n trong m nh đ WHERE ho c HAVING c a m t truy v n khác.
ế ộ ị • N u truy v n con tr v đúng m t giá tr ,
ấ ể ử ụ
ầ ộ ứ ẳ
ệ ấ ả ề ư ể ộ
SQL Server 2005
192
nó có th s d ng nh là m t thành ộ ph n bên trong m t bi u th c (ch ng ạ h n xu t hi n trong m t phép so sánh b ng)ằ
Ấ 3.12.1 CÚ PHÁP TRUY V N CON
ầ ể
ự ể ệ ứ ấ
ộ ệ ậ ấ
ệ ị ủ ể ử ụ ạ
ử ư • Khi c n th c hi n phép ki m tra giá tr ị ủ c a m t bi u th c có xu t hi n (không xu t hi n) trong t p các giá tr c a truy ấ v n con hay không, b n có th s d ng toán t IN (NOT IN) nh sau:
ứ ể • WHERE bi u_th c [NOT] IN
SQL Server 2005
193
ấ (truy_v n_con)
Ấ
ụ ể ả ớ ị
3.12.1 CÚ PHÁP TRUY V N CON Ví d 1: Hi n th tên khoa có qu n lý l p
ụ ể Ví d 2: Hi n th masv, h đ m, tên, tên
SQL Server 2005
194
ư ầ ọ ệ ị ọ ớ l p ch a thi h c ph n nào.
ấ
ả
ố ớ ế
3.12.2 Phép so sánh đ i v i k t qu truy v n con ấ
ể ượ
ố ọ
• K t qu c a truy v n con có th đ ệ ứ
ả ủ ể ự ể
ấ
ộ
ượ
ấ
ng h p này, truy v n con đ
ử c s
ợ ướ ạ
ế ử c s ụ d ng đ th c hi n phép so sánh s h c ủ ớ v i m t bi u th c c a truy v n cha. Trong ườ tr ụ d ng d
i d ng:
ố ọ
ứ
ể
WHERE bi u_th c phép_toán_s _h c ấ
[ANY|ALL] (truy_v n_con)
ế
ả
ả
• Trong đó truy v n con ph i có k t qu bao
ồ
ấ ộ ộ
g m đúng m t c t.
SQL Server 2005
195
ấ
ả
ố ớ ế
ầ • Ví d 1: Cho bi ụ ọ
ỉ ủ ơ ầ ặ ằ ố
3.12.2 Phép so sánh đ i v i k t qu truy v n con ề ế ấ ả t c thông tin v t t ỉ ớ ố các h c ph n có s tín ch l n h n ọ ho c b ng s tín ch c a h c ph n có mã là tindc • Ví d 2: Cho bi ế ụ ể
ể t masv, hodem, ten sinh viên có đi m thi môn có mã là ấ tinvp cao đi m nh t
ữ • Ví d 3: Cho bi ụ
ế ọ ồ ọ
ớ
SQL Server 2005
196
ữ ệ ủ t h tên c a nh ng sinh viên l p ớ Đ h a 1 có năm sinh ấ ỳ ộ ủ trùng v i năm sinh c a b t k m t sinh ủ ớ D li u 1 . viên nào đó c a l p
ử ụ
ừ
ế ợ
khóa EXISTS ớ ử ụ c s d ng k t h p v i
ướ ạ
3.12.3 S d ng t •T khóa EXISTS đ ượ i d ng:
ừ ấ truy v n con d
ấ
WHERE [NOT] EXISTS (truy_v n_con)
ả
ấ ừ ả ề
ng ng NOT EXISTS) tr v giá tr True n u
ể ể ế ứ ả ủ
ị ộ
ấ
ấ
•Đ ki m tra xem m t truy v n con có tr v ả ề ộ dòng k t qu nào hay không. T khóa EXISTS ế ươ (t ế k t qu c a truy v n con có ít nh t m t dòng.
ề
ử ụ
ệ
ớ ệ ủ t c a vi c s d ng EXISTS v i ở trên là trong danh sách ch n
ề
ấ
ơ
ộ
•Đi u khác bi ọ hai cách đã nêu ể ủ c a truy v n con có th có nhi u h n hai c t.
SQL Server 2005
197
ừ
ử ụ
ủ
3.12.3 S d ng t Ví d : Cho bi
khóa EXISTS ữ t h tên c a nh ng sinh ấ ỳ ộ ủ
SQL Server 2005
198
ọ ụ ế ọ ệ ể ư viên hi n ch a có đi m thi c a b t k m t ầ h c ph n nào.
ươ
ấ Truy v n con t
ng quan
•Cú pháp
SELECT column1, column2, ...
FROM table1 outer
WHERE column1 operator
(SELECT colum1, column2
FROM table2
SQL Server 2005
199
WHERE expr1 = outer.expr2)
ươ
ấ Truy v n con t
ng quan
́
̃
Y nghi a:
ượ
ng quan đ
́ •Truy vâ n con t
ươ ́
ử ̀
̣
́
ợ
̣ ̣ ̉ ̉ ̣
́
̃
̀
́ ư
̉ ̣ ̣ ̉
c s dung khi ́ môt câu lênh truy vâ n con phai tra vê môt kê t ́ qua hay môt tâp h p kê t qua kha c nhau cho mô i ha ng ng viên cua câu lênh chi nh.
́
ượ
̉ ̣
̃
ư
̣
ng quan đ ́ ̀
̃
̀
̉ ơ
̣ ̉
•Măt kha c, truy vâ n con t ̀ ̀ i phu thuôc va o gia tri mô i ha ng
́
́ ử ươ c s ̀ ̀ ̉ ơ i nh ng phâ n câu truy vâ n ma dung đê tra l câu tra l ư
́ ử
̣ ̣ ̣
́ ́ ng viên do câu lênh chi nh x ly .
ộ ộ
ế
ế
ệ
•Câu l nh con tham chi u đ n m t c t trong
ở
ệ
ả b ng
câu l nh chính.
SQL Server 2005
200
̣
ươ
ng quan
ấ Truy v n con t ́ ́ •Chu y :
́ ́ ́ ̉ ử ử ̣
̣
SQL Server 2005
201
́ ươ Chu ng ta co thê s dung toa n t ANY, ALL và Exists trong câu lênh truy vâ n con t ng quan.
ng quan
ượ
ợ
ộ ệ c th c hi n m t l n
ử
ấ ươ Truy v n con t ấ ử ụ ươ c s d ng Truy v n con t ng quan đ ỗ ườ ừ ử ng h p x lý t ng hàng. M i m t trong tr ộ ầ ự ượ ấ câu truy v n con đ ừ ệ ự khi th c hi n x lý t ng hàng trong câu ệ l nh chính.
ự ồ
ướ ự ệ ệ ệ Th c thi các câu l nh con l ng nhau •Câu l nh con th c hi n tr ả ề c và tr v
giá trị
ệ ệ
SQL Server 2005
202
•Câu l nh chính th c hi n m t l n, s ử ự ệ ộ ầ ả ề ụ ế ả d ng k t qu do câu l nh con tr v .
ươ
ấ Truy v n con t
ng quan
SQL Server 2005
203
ươ
ấ Truy v n con t
ự ệ
ng quan ươ
Th c thi câu l nh con t ng quan
ứ ộ ấ •L y m t hàng ng viên.
ự ử ụ
•Th c thi câu l nh con s d ng giá ị ủ ệ ứ tr c a các hàng ng viên.
ử ụ ế ả ừ ệ
•S d ng k t qu t ặ ể ạ câu l nh con ứ đ lo i ho c không các hàng ng viên.
ế i cho đ n khi không còn hàng
SQL Server 2005
204
ứ •L p l ặ ạ ng viên nào.
ng 4 Ch
́ ữ ệ ử ̉ ̣ ươ Pha t biêu TSQL dang x lý d li u
ữ ệ
4.1 Chèn d li u
ậ ữ ệ ậ
4.2 C p nh t d li u
ữ ệ
4.3 Xoá d li u
SQL Server 2005
205
ữ ệ ữ ệ
ớ
ệ
ườ
ụ
ặ
4.1 Chèn d li u •Chèn t ng dòng d li u v i m i ỗ ừ ử câu l nh INSERT. Đây là cách s ấ ng g p nh t trong SQL. d ng th
ữ ệ
•Chèn nhi u dòng d li u b ng ề ấ ữ ệ ừ
ằ ữ ả các b ng d
cách truy xu t d li u t ệ li u khác.
SQL Server 2005
206
ữ ệ ệ ả ớ
ữ ệ ừ 4.1.1 Chèn t ng dòng d li u •Đ chèn m t dòng d li u m i vào ộ ớ ể ử ụ ạ b ng, b n s d ng câu l nh INSERT v i ư cú pháp nh sau:
INSERT INTO tên_b ng ả
[(danh_sách_c tộ )]
SQL Server 2005
207
VALUES (danh_sách_trị)
ừ
ữ ệ
ộ
ầ
ả
ườ
ủ
ế ỉ
ị ầ
ị
ng c a c ch đ nh đ y đ trong danh
ị
ủ
ằ
ầ
ả các giá tr trong danh sách tr ph i ả ng c a b ng c n
ị ng các tr
ứ ự ớ ố ượ ữ ệ
ườ ả
ư ư
ườ
ượ
ả
c a các tr
ị c đ nh
4.1.1 Chèn t ng dòng d li u •Danh sách c t ngay sau tên b ng không c n ả ị ỉ ế t ph i ch đ nh n u giá tr các tr thi ủ ớ ượ ả b n ghi m i đ sách tr .ị •Th t b ng v i s l ứ chèn d li u cũng nh ph i tuân theo đúng th ự ủ t ng nh khi b ng đ nghĩa.
ướ
ộ
ữ i đây chèn thêm m t dòng d
•Câu l nh d ệ ả
ệ li u vào b ng HOCPHAN
INSERT INTO HOCPHAN
SQL Server 2005
ấ
VALUES(‘tcc’,’Toán cao c p’,3)
208
ữ ệ
ừ
4.1.1 Chèn t ng dòng d li u
ỉ ườ ị
•Trong tr ộ ố ộ ỉ ị
ợ ả ộ ầ ả ữ ệ ạ ậ
ậ ng h p ch nh p giá tr cho m t s c t trong b ng, b n ph i ch đ nh danh sách các c t c n nh p d li u ngay sau tên b ng.ả
ộ ượ ữ ậ c nh p d
ẽ ậ
•Khi đó, các c t không đ ị ế ế ộ
SQL Server 2005
209
ặ ấ ậ ậ ị ị ị ặ ệ li u s nh n giá tr m c đ nh (n u có) ho c nh n giá tr NULL (n u c t cho phép ch p nh n giá tr NULL).
ữ ệ
ừ
4.1.1 Chèn t ng dòng d li u
ớ
ộ ả i đây chèn m t b n ghi m i cho
ả
ướ ệ Câu l nh d b ng SINHVIEN
INSERT INTO sinhvien
(masv,hodem,ten,gioitinh,malop) VALUES ế (‘tm01001’,‘Châu Th ’,’Toàn’,1,’tm01’)
ể ượ
ệ
ế
Câu l nh trên còn có th đ
c vi
ư t nh sau:
INSERT INTO sinhvien
ế
VALUES (‘tm01001’,‘ Châu Th ’,’Toàn’,
NULL,1,NULL,’tm01’)
SQL Server 2005
210
ừ
ế
ạ ườ
ữ ệ 4.1.1 Chèn t ng dòng d li u ả ệ Ví d 1:ụ Vi t câu l nh SQL t o b ng ồ ng
LUUSINHVIEN bao g m các tr HODEM, TEN, NGAYSINH
ữ ệ ả Chèn 3 d li u cho b ng Ví d 2: ụ
SQL Server 2005
211
LUUSINHVIEN theo 3 cách khác nhau.
ề
ượ ấ ừ ộ ả
•Chèn nhi u dòng d li u vào m t b ng, các ữ ệ c l y t
ộ ả m t b ng khác
ệ
ữ ệ dòng d li u này đ thông qua câu l nh SELECT.
•
ượ
Ở cách này, các giá tr d li u đ ả
ượ
ườ
ị
ị ữ ệ ỉ c ch đ nh t ệ
ấ
ữ ệ ừ ả
c chèn ng minh mà vào b ng không đ ộ thay vào đó là m t câu l nh SELECT truy v n d li u t
b ng khác.
ư
ệ
ạ
•Cú pháp câu l nh INSERT có d ng nh sau:
ữ ệ ừ ả b ng khác ề 4.1.2 Chèn nhi u dòng d li u t
INSERT INTO tên_b ngả [(danh_sách_c tộ )]
ệ
câu_l nh_SELECT
SQL Server 2005
212
ả
ồ
ả ử ạ ườ
•Gi các tr
s b n có b ng LUUSINHVIEN bao g m ng HODEM, TEN, NGAYSINH.
•Câu l nh d ệ
ả
ả i đây chèn vào b ng ượ ừ c t
câu truy
ướ LUUSINHVIEN các b n ghi có đ ấ v n SELECT:
ữ ệ ừ ả b ng khác ề 4.1.2 Chèn nhi u dòng d li u t
INSERT INTO luusinhvien
SELECT hodem,ten,ngaysinh
FROM sinhvien
ả
WHERE noisinh like N‘%Qu ng Nam’
SQL Server 2005
213
ữ ệ ừ ả ề 4.1.2 Chèn nhi u dòng d li u t b ng
khác
ư L u ý:
ả
ớ ố ộ ượ
ả ươ •K t qu c a câu l nh SELECT ph i có ệ ị ỉ c ch đ nh trong ữ ề ể ng thích v ki u d
ế ả ủ ố ộ ằ s c t b ng v i s c t đ ả b ng đích và ph i t li u. ệ
ượ ử ụ c s d ng
SQL Server 2005
214
•Trong câu l nh SELECT đ ệ ệ ề m nh đ COMPUTE ... BY
ậ
ậ ữ ệ
ượ
4.2 C p nh t d li u Câu l nh UPDATE trong SQL đ
ệ ể ậ ụ
ư ệ ử c s ả ậ ữ ệ d ng đ c p nh t d li u trong các b ng. Câu l nh này có cú pháp nh sau:
UPDATE tên_b ngả
ứ ộ ể SET tên_c t = bi u_th c
ứ ộ ể [, ..., tên_c t_k = bi u_th c_k]
•[FROM danh_sách_b ng]ả
SQL Server 2005
215
ệ ề •[WHERE đi u_ki n]
ậ ữ ệ ậ
ậ ệ
4.2 C p nh t d li u Câu l nh sau c p nh t l
ậ ạ ố i s
Ví d 1: ụ ỉ ằ ầ ọ tín ch b ng 4 cho h c ph n có mã là SQL
UPDATE HOCPHAN
SET sotinchi = 4
WHERE mahocphan =N’SQL’
ệ ậ ế âu l nh c p nh t l ụ Ví d 2 : Vi t c
SQL Server 2005
216
ậ ạ i ngày sinh là 1/1/1990 cho sinh viên tên Bình.
ệ ấ 4.2.1 C u trúc CASE trong l nh UPDATE
ấ ể ượ C u trúc CASE có th đ
ả ư ứ
ể ế ị ị ủ ề
ử ụ c s d ng ầ trong bi u th c khi c n ph i đ a ra các ể quy t đ nh khác nhau v giá tr c a bi u th c.ứ
ả ử ạ ả s b n có b ng NHATKYPHONG
SQL Server 2005
217
Gi sau đây:
ệ ấ 4.2.1 C u trúc CASE trong l nh UPDATE
ệ ậ ậ Câu l nh c p nh t:
UPDATE NHATKYPHONG
SET tienphong=songay*
CASE WHEN loaiphong='A' THEN 100
WHEN loaiphong='B' THEN 70
ELSE 50
SQL Server 2005
218
END
ậ
ậ
ế
ề
ệ
ệ
ượ
ề
ị
4.2.3 ĐK C p nh t DL liên quan đ n nhi u b ng ả •M nh đ FROM trong câu l nh UPDATE ỉ c s d ng khi c n ch đ nh các đi u ki n
ớ ả
ầ ả
ầ
ề ử ụ ế ậ ữ ệ
ệ đ liên quan đ n các b ng khác v i b ng c n ậ c p nh t d li u.
ợ
ệ ữ
ố
•Trong tru ng h p này, trong m nh đ ề ờ ệ ề ườ ng có đi u ki n n i gi a các
ả
WHERE th b ng.
SQL Server 2005
219
ậ
ậ
ề
ế
ả ử ạ
•Gi
4.2.3 ĐK C p nh t DL liên quan đ n nhi u b ngả ả s b n có hai b ng MATHANG và ư
NHATKYBANHANG nh sau:
SQL Server 2005
220
ậ
ậ
ế
ề
ướ
ậ
ị i đây s c p nh t giá tr
ệ Câu l nh d
4.2.3 ĐK C p nh t DL liên quan đ n nhi u b ngả ẽ ậ ả
ườ
ủ
tr ng THANHTIEN c a b ng NHATKYBANHANG theo công th c ứ THANHTIEN = SOLUONG (cid:0)
GIA
UPDATE nhatkybanhang
SET thanhtien = soluong*gia
FROM mathang
WHERE nhatkybanhang.mahang =
mathang.mahang
SQL Server 2005
221
ớ ệ ấ 4.2.4 Câu l nh UPDATE v i truy v n con
ở
ụ ướ
ượ
ế
ệ Câu l nh
ví d tr
c đ
c vi
ư t nh
sau:
UPDATE nhatkybanhang
SET thanhtien = soluong*gia
FROM mathang
WHERE mathang.mahang =(SELECT
mathang.mahang FROM mathang
WHERE
mathang.mahang=nhatkybanhang.mahang)
SQL Server 2005
222
ữ ệ
4.3 Xoá d li u
ữ ệ
ộ ả
ể ử ụ ủ
ư
•Đ xoá d li u trong m t b ng, ệ ạ b n s d ng câu l nh DELETE. Cú ệ pháp c a câu l nh này nh sau:
DELETE FROM tên_b ngả
[FROM danh_sách_b ng]ả
ệ
ề
[WHERE đi u_ki n]
SQL Server 2005
223
ữ ệ
4.3 Xoá d li u
ệ ụ ướ Ví d 1: Câu l nh d
ả
ả ỏ i đây xoá kh i ạ ữ i b ng SINHVIEN nh ng sinh viên sinh t Qu ng Ngãi
DELETE FROM sinhvien
WHERE noisinh LIKE N‘%Qu ng ả
Ngãi’
ổ ừ ữ Ví d 1: Xóa nh ng sinh viên 19 tu i t
SQL Server 2005
224
ả ụ b ng SINHVIEN
ề
ả ệ ữ ệ 4.3.2 Xoá d li u khi đi u ki n liên quan ề ế đ n nhi u b ng
ệ ế ệ •N u đi u ki n trong câu l nh DELETE
ề ế
ả ạ
ầ ệ ề
ả ả ả liên quan đ n các b ng không ph i là ả ử ụ ữ ệ b ng c n xóa d li u, b n ph i s d ng thêm m nh đ FROM và sau đó là danh sách tên các b ng đó.
ệ ệ ợ ị ề ỉ
SQL Server 2005
225
•Trong tr ườ ạ ả ữ ề ng h p này, trong m nh đ ố WHERE b n ch đ nh thêm đi u ki n n i gi a các b ng
ề
ữ ệ ế ả ệ 4.3.2 Xoá d li u khi đi u ki n liên quan ề đ n nhi u b ng
ỏ ả i đây xoá ra kh i b ng ữ ệ ớ D li u 1 •Câu l nh d ướ ệ ữ SINHVIEN nh ng sinh viên l p
DELETE FROM sinhvien
FROM lop
WHERE lop.malop=sinhvien.malop
SQL Server 2005
226
ữ ệ AND tenlop=N'D li u 1'
ệ
ử ụ
ấ 4.3.3 S d ng truy v n con trong câu l nh Delete
ộ
ệ ệ
•M t câu l nh SELECT có th đ ề
ề
ệ
ệ
ể ượ ồ c l ng ệ vào trong m nh đ WHERE trong câu l nh ệ DELETE đ làm đi u ki n cho câu l nh ươ t
ướ
ệ
i đây xoá kh i b ng
ể ư ng t •Ví d 1: Câu l nh d ớ
ự nh câu l nh UPDATE. ụ ữ
ỏ ả ọ LOP nh ng l p không có sinh viên nào h c.
DELETE FROM lop WHERE malop NOT IN (SELECT
DISTINCT malop FROM sinhvien)
Ví d 2: ụ Xóa nh ng sinh viên trong b ng
ả
SQL Server 2005
227
ữ ả ữ LUUSINHVIEN có năm sinh trùng v i ớ nh ng sinh viên có trong b ng SINHVIEN
ộ ữ ệ
ả
4.3.4 Xoá toàn b d li u trong b ng
ị ề
ỉ ầ •Câu l nh DELETE không ch đ nh đi u ệ
ề ệ ố ớ ệ
ữ ệ ẽ ử ụ ả
ườ ạ ợ
ệ
ki n đ i v i các dòng d li u c n xoá ộ ữ trong m nh đ WHERE s xoá toàn b d ệ ệ li u trong b ng. Thay vì s d ng câu l nh ể ng h p này, b n có th DELETE trong tr ử ụ s d ng câu l nh TRUNCATE có cú pháp ư nh sau:
SQL Server 2005
228
TRUNCATE TABLE tên_b ngả
ộ ữ ệ
ả
4.3.4 Xoá toàn b d li u trong b ng
ộ ữ ệ ụ Ví d : Câu l nh sau xoá toàn b d li u
trong b ng ả ệ diemthi:
DELETE FROM diemthi
ụ ươ ự ớ ệ Có tác d ng t ng t v i câu l nh
SQL Server 2005
229
TRUNCATE TABLE diemthi
Ch ng 5
Ủ Ụ
ươ Ộ Ạ TH T C N I T I (STORED PROCEDURE)
ớ ệ 5.1 Gi i thi u
ủ ụ ạ 5.2 Phân lo i th t c
ủ ụ ạ 5.3 T o th t c
ờ ọ ủ ụ 5.4 L i g i th t c
SQL Server 2005
230
ử ụ ế 5.5 Khai báo và s d ng bi n
Ch ng 5
Ủ Ụ
ị ả ề ủ ố ươ Ộ Ạ TH T C N I T I (STORED PROCEDURE) ủ 5.6 Giá tr tr v c a tham s trong th
t c ụ
ể ề ể 5.7 Phát bi u đi u khi n
ố ớ ị ặ ị 5.8 Tham s v i giá tr m c đ nh
ủ ụ ử ổ 5.9 S a đ i th t c
SQL Server 2005
231
5.10 Xoá th t củ ụ
ớ
ủ ụ
ệ
5.1 Gi
i thi u th t c
ộ • M t th t c là m t đ i t
ộ ố ượ ề ộ ậ ệ
ng trong CSDL ượ ể ự c i v i nhau thành m t nhóm đ th c
ệ ủ ụ ồ bao g m m t t p nhi u câu l nh SQL đ ạ ớ ộ nhóm l ộ ệ hi n m t công vi c nào đó.
ủ ụ • Bên trong th t c n i t
ư ư
ị c, các giá tr
ế ữ ượ ể ử ụ ộ ạ i có th s d ng các ằ ữ ậ bi n nh trong ngôn ng l p trình nh m l u ượ gi CSDL. đ ị các giá tr tính toán đ ấ ượ ừ c truy xu t đ
ủ ụ ể ề ộ
ố ị ư
SQL Server 2005
232
c t • M t th t c có th nh n các tham s truy n ậ ể ả ề vào cũng nh có th tr v các giá tr thông qua các tham số
ủ ụ
i thi u th t c
ệ ủ ụ
ớ ủ
5.1 Gi ợ i ích c a th t c:
Các l
ượ
ủ ụ ộ ầ ừ
ệ ể ọ ừ ề ứ •L p trình theo module: Th t c đ ậ c ể ế ậ t l p trong t ng CSDL m t l n, có th thi ọ ề ầ ự g i th c hi n nhi u l n trong m t ng ụ d ng, có th g i t ộ ứ ụ nhi u ng d ng.
ơ ự
ố ư ạ ệ c phân tích, t
SQL Server 2005
233
ự ươ ươ •Th c hi n nhanh h n: Th t c n i t ộ ạ ủ ụ i ệ ượ i u khi t o ra nên vi c đ ớ ệ ề ự ơ th c thi chúng nhanh h n nhi u so v i vi c ệ ộ ậ ờ ạ ả ph i th c hi n m t t p r i r c các câu l nh ườ ng. SQL t ng theo cách thông th ệ ng đ
ệ
5.1 Gi ể
ủ ụ i thi u th t c ạ
Khi
•Gi m thi u s l u thông trên m ng:
ớ
ệ
ệ
ủ ng l n câu l nh TSQL, th
ự
ộ
ủ
ề ợ ệ
ề ầ
ủ ụ ủ ụ
ự
ộ ầ
ữ
ầ
ượ
ề
ạ ả ế
ự
ệ
ể ấ
ờ
ớ ả ự ư ộ ượ ự ầ c n th c hi n m t l ủ ơ ệ ộ ạ ụ i th c hi n nhanh h n vì khi máy ch t c n i t ề ầ ệ ả ượ ậ c nhi u c u l nh cùng m t lúc đ u ph i nh n đ ả ừ ề ể quy n c a tài kho n t ki m tra tính h p l máy ọ ầ ố khách và các tham s khác. Khi th t c c n g i nhi u l n trên các máy khách thì th t c th c ầ ệ hi n m t l n đ u tiên, nh ng l n sau máy khách ị ủ ụ ẽ c biên d ch. s ch y th t c đã đ •B o m t t ậ ố ơ : Thay vì c p phát quy n ấ t h n ườ ử ụ i s d ng trên các câu l nh tr c ti p cho ng ố ượ ạ SQL và trên các đ i t ng CSDL, b n có th c p ủ ườ ử ụ ề i s d ng thông qua các th phát quy n cho ng ậ ố ớ ả ả ộ ạ ụ i, nh đó tăng kh năng b o m t đ i v i t c n i t ệ ố h th ng.
SQL Server 2005
234
ủ ụ
5.2 Phân lo i th t c
ạ Trong SQL Server 2005 có 3 nhóm th ủ
ộ ạ ụ t c n i t i sau:
ứ ấ ườ •Nhóm th nh t là do ng ạ i dùng t o ra.
- ạ ồ Nó bao g m hai lo i: ạ ườ c ng
- ạ ạ c khai báo và t o ra
SQL Server 2005
235
ằ ộ ạ ượ ủ ụ i dùng Lo i th t c n i t i đ ứ ư ạ t o ra và l u vào CSDL. Chúng ch a ể các phát bi u TSQL. ượ ứ Lo i th hai đ ữ ậ b ng ngôn ng l p trình .NET.
ứ
ạ ủ ụ
i h th ng
ệ
ị ứ ủ ụ ng dùng. Các th t c này ch a trong
ủ ụ 5.2 Phân lo i th t c •Nhóm th hai là th t c n i t ộ ạ ệ ố ự ả ứ th c hi n các ch c năng qu n tr CSDL ườ th CSDL Resource.
ủ ụ - Danh sách các th t c n i t
ố ị
ộ ạ ệ i h ể th ng hi n th trong ngăn System Stored Procedure
ộ ạ - Th t c n i t ủ ụ i trong CSDL
ớ ề ố
ằ
236
Resource luôn có tên v i ti n t là ặ ạ sp_. Do đó b n không nên đ t tên ạ ộ ạ ủ ụ i do mình t o ra b ng th t c n i t ề ố ti n t này. SQL Server 2005
ạ
ự
ườ
ị
i h th ng th c ng dùng.
ủ ụ
ủ ụ
ủ ụ 5.2 Phân lo i th t c •Nhóm th hai là th t c n i t ủ ụ ứ ộ ạ ệ ố ả ệ ứ hi n các ch c năng qu n tr CSDL th ứ Các th t c này ch a trong CSDL Resource. - Danh sách các th t c n i t ộ ạ ệ ố
i h th ng
ị
ể
-
ộ ạ
ạ
i trong CSDL Resource luôn ạ là sp_. Do đó b n không i do mình t o ra
ề ố
ằ
hi n th trong ngăn System Stored Procedure ủ ụ ộ ạ Th t c n i t ớ ề ố có tên v i ti n t ặ nên đ t tên th t c n i t b ng ti n t
ủ ụ này.
ứ
•Nhóm th ba là th t c n i t
ở i h th ng m
ủ ụ ượ ư
ạ
ộ ạ ệ ố c l u trong CSDL ớ ắ ầ
ư
ộ r ng. Lo i này cũng đ Resouce nh ng có tên b t đ u v i xp_.
SQL Server 2005
237
ạ
ọ
ộ ạ ầ ạ
ọ
ủ ụ 5.3 T o th t c •Trong khung Object Explorer, ch n Database ứ i c n t o, ch n
ụ
ả
ộ
ạ
ạ ạ
ủ ụ
ổ ệ ộ ạ
ủ ụ ch a th t c n i t Programmability. Kích nút ph i chu t lên m c ọ Stored Procedures ch n New Stored Procedure, ệ ấ ử ả c a s Query xu t hi n cho phép b n so n th o ủ ể ạ câu l nh TSQL đ t o th t c. Cú pháp t o th ụ t c n i t
ư i nh sau:
ủ ụ
CREATE PROCEDURE tên_th _t c
[(danh_sách_tham_s )]ố
[WITH RECOMPILE |ENCRYPTION ]
AS
ủ ụ
ủ
ệ
Các_câu_l nh_c a_th _t c
SQL Server 2005
238
ạ ủ ụ
ữ ệ
ậ
ủ ụ 5.3 T o th t c ế t th t c nh p vào d li u cho
ả
Ví d 1:ụ Vi b ng HOCPHAN
ế
ủ ụ
ự
ệ
ệ t th t c th c hi n công vi c sau:
Ví d 2:ụ Vi
•Chèn thêm h c ph n ỉ
ề ầ công ngh ph n m m ệ ả
ọ ố
ầ có mã cnpm và s tín ch là 3 vào b ng HOCPHAN
ậ
ể
ọ ớ
ậ
ọ ớ
ể
ộ
•Lên danh sách nh p đi m thi môn công ngh ệ ầ ề cho các sinh viên h c l p có mã dl01 ph n m m ả ả ứ (t c là chèn thêm vào b ng DIEMTHI các b n ghi ậ ị cnpm, c t ộ ớ ộ v i c t MAHOCPHAN nh n giá tr ị ầ ượ t là mã các sinh viên MASV nh n giá tr l n l h c l p có mã
dl01 và các c t đi m là NULL). SQL Server 2005
239
ờ ọ 5.3 L i g i th t c ằ
ờ ọ ủ ụ
ủ ụ ủ ụ i g i th t c có
Th c thi th t c b ng l
ự d ng:ạ
•Tên_th _t c
ố ủ ụ ố [danh_sách_các_đ i_s ]
ượ ủ ụ ờ ọ ự
ệ ộ
ủ ụ ớ
L i g i th t c đ ộ ế ợ ụ c th c hi n bên trong m t th t c khác, bên trong m t trigger hay ử ệ k t h p v i các câu l nh SQL khác, s d ng cú pháp :
ủ ụ •EXECUTE|EXEC tên_th _t c
ố [danh_sách_các_đ i_s ]
240
ố SQL Server 2005
ờ ọ
ủ ụ
5.3 L i g i th t c
ứ ự ủ ề c truy n cho c a các đ i s đ
ể ố ố ượ ả
ư c a các tham s nh khi đ nh nghĩa
ế ấ ả ế ầ ố t c các đ i s đ ị ố ố ượ c vi t
Th t ủ ụ th t c có th không c n ph i tuân theo ứ ự ủ th t ủ ụ th t c n u t ướ ạ i d ng: d
SQL Server 2005
241
ố ị @tên_tham_s = giá_tr
ờ ọ
ủ ụ
5.4 L i g i th t c
Ví d :ụ •Cách 1: spLenDanhSachDiem 'cnpm','Công ngh ệ ầ
ề
ph m m m',3,'dl01'
•Cách 2:
spLenDanhSachDiem
@malop='dl01',
ệ
ề
ầ
@tenhocphan='Công ngh ph n m m',
@mahocphan='cnpm',
@sotinchi=3
SQL Server 2005
242
ử ụ
ế
5.5 Khai báo và s d ng bi n
5.5.1 Khai báo bi nế
ữ ệ ế ể DECLARE @tên_bi n ki u_d _li u
ế ở ự •Tên bi n ph i b t đ u b i ký t @ và
ả ắ ầ ề ị ắ tuân theo qui t c v đ nh danh.
ế ẽ •T t c các bi n sau khi khai báo s có
ấ ả ị ở ạ giá tr kh i t o là Null.
•Ví d :ụ
SQL Server 2005
243
DECLARE @hodem NVARCHAR(30)
ể ể
ị
ế ể
5.5.2 Phát bi u Set •Phát bi u Set dùng đ gán giá tr cho ể ư ủ các bi n. Cú pháp c a phát bi u Set nh sau:
ế ể ị SET <@tên_bi n>= SELECT>) ạ ề
ằ ụ ể ấ ấ •B n có th s d ng nhi u phát bi u
ể ử ụ
ể
ử
ộ
SET trên cùng m t dòng b ng cách s
ẩ
d ng d u ch m ph y đ phân cách. Set @Tong=0; Set @dem=0 Set @max=(Select max(diemlan1) from DIEMTHI where mahocphan='sql')
SQL Server 2005
244 Chú ý: ớ ể ế ử ụ ể ả
ị ơ ế ể ề ị SQL Server 2005 245 N u s d ng phát bi u SET v i phát
ả
ể
ạ
bi u SELECT, b n b o đ m phát bi u
ả ề
SELECT này tr v giá tr đ n. N u phát
ỗ ẽ
ả ề
i s
bi u SELECT tr v nhi u giá tr thì l
phát sinh. ộ ủ ạ ề Ví d :ụ •Select @max=10, @min=0, @tong=0 •Select @max= max(diemlan1), SQL Server 2005 246 @min=min(diemlan1) from DIEMTHI where
mahocphan='sql' ị ả ề ủ ố CREATE PROCEDURE sp_Conghaiso(@a INT,@b INT, @c INT) ủ
5.6 Giá tr tr v c a tham s trong th
t cụ
•Xét câu l nh sau đây
ệ AS SELECT @c=@a+@b
•Th c thi m t t p các câu l nh nh sau: DECLARE @tong INT SELECT @tong=0 EXECUTE sp_Conghaiso 100,200,@tong SELECT @tong SQL Server 2005 247 ố ố ị ủ ế ị ả ề ủ ố •N u mu n gi ả ố
ủ ụ ữ ạ
l
ạ ư ố
ế
k t thúc th t c, b n ph i khai báo tham s
theo cú pháp nh sau: ữ ệ ố ể
@tên_tham_s ki u_d _li u OUTPUT ho c:ặ ữ ệ ể ố @tên_tham_s ki u_d _li u OUT c i g i th t c, sau đ i s đ
ị ờ ọ
ủ ụ ừ ặ •Và trong l
ố ố ượ
ủ ụ
ỉ
ả
ạ
ề
truy n cho th t c, b n cũng ph i ch đ nh
khoá OUTPUT (ho c OUT)
thêm t SQL Server 2005 248 ủ
5.6 Giá tr tr v c a tham s trong th
t cụ
i giá tr c a đ i s sau khi ị ả ề ủ ố ụ ạ ủ
5.6 Giá tr tr v c a tham s trong th
t cụ
ủ ụ ở
i th t c ư
ví d trên nh Đ nh nghĩa l ị
sau: CREATE PROCEDURE sp_Conghaiso( @a INT, @b INT, @c INT OUTPUT) AS SQL Server 2005 249 SELECT @c=@a+@b ị ả ề ủ ố ủ
5.6 Giá tr tr v c a tham s trong th
t cụ ự ệ ờ ọ ộ i g i th t c trong m t ư ủ ụ
Th c hi n l
ệ
ậ
t p các câu l nh nh sau: DECLARE @tong INT SELECT @tong=0 EXECUTE sp_Conghaiso 100,200, @tong OUTPUT SELECT @tong ệ ẽ Thì câu l nh “SELECT @tong” s cho SQL Server 2005 250 ế ả
k t qu là: 300 ấ 5.7.1 C u trúc If...Else ấ 5.7.2 C u trúc While ể
5.7.3 Phát bi u Continue ể 5.7.4 Phát bi u Break ể 5.7.5 Phát bi u Return ấ 5.7.6 C u trúc Try...Catch SQL Server 2005 251 ấ 5.7.7 C u trúc Case ư ấ C u trúc nh sau : ề ệ ể ứ
IF ELSE ấ ế Trong C u trúc If...Else, n u có t
ừ ả ặ ữ ừ
hai
khóa SQL Server 2005 252 ở
ệ
l nh tr lên thì ph i đ t gi a hai t
Begin và End. ế ư t th t c đ a vào m t masv. ụ
Ví d 1: Vi
ế ệ ỏ ế ị ứ ế ư ầ ụ
Ví d 2: Vi t th t c yêu c u đ a vào c ướ SQL Server 2005 253 ơ ủ ụ
hai mã sinh viên và in ra câu ai sinh tr
h n ai. ấ ự ư ấ ề
ậ ệ
ặ ạ
i th c thi t p l nh cho đ n
chúng ta l p l
ứ
ấ
ệ
ề
ể
khi bi u th c đi u ki n là False. C u trúc
ể
ề
C u trúc đi u khi n While nh sau: ứ ệ ể ề WHILE SQL Server 2005 254 ệ
SQL Server 2005 255 ể ạ •Phát bi u Continue cho phép b n b
ỏ
qua các khai báo ngay sau nó trong vòng
ặ
l p While ườ ượ ử ụ ớ c s d ng v i SQL Server 2005 256 •Phát bi u này th
ể
ể
ề
ấ ng đ
C u trúc đi u khi n While. SQL Server 2005 257 ạ ỏ Phát bi u Break cho phép b n thoát kh i ẽ ặ vòng l p hay r nhánh. ế ể Ví d 1:ụ Vi ư ả ố SQL Server 2005 258 ộ ố
ủ ụ
t th t c ki m tra m t s
ố
nguyên đ a vào có ph i là s nguyên t
không. SQL Server 2005 259 ả ề ộ ị ặ ế
ẽ ế ử ể ủ ụ ử ụ ể ị ươ
ng t
ư ề
ể •Trong th t c đôi khi chúng ta s d ng
ả
ể
phát bi u Reture đ Strored Procedure tr
ư
ự
nh hàm. Cú pháp phát
v giá tr t
bi u này nh sau: SQL Server 2005 260 ị RETURN [Giá tr nguyên] CREATE PROCEDURE THILAI(@MASV NVARCHAR(10)) AS
BEGIN Declare @COUNT INT
Select @count = (Select count(*) from diemthi where diemlan1<5 and masv=@masv) Return @count END SQL Server 2005 261 ự ạ ủ ụ THILAI, b n th c
ệ ộ ậ ư ạ
thi m t t p các câu l nh nh sau: Declare @dem int Exec @dem=thilai 'dl01002' SQL Server 2005 262 ạ ố
Print N'S môn thi l i '+ Str(@dem) ấ C u trúc Try...Catch trong SQL Server ượ ể ắ ỗ ươ ự c dùng đ b t l i t ng t 2005 đ
ư
nh trong C# và C++. ặ ệ ộ ố ộ ệ ế ượ
c đ t trong
ệ
ấ
i xu t hi n bên
ở
ượ
c g i
ặ
c đ t SQL Server 2005 263 ộ M t nhóm các l nh đ
ộ ỗ
ế
ố
kh i Try, n u có m t l
ể
ề
trong kh i Try thì đi u khi n đ
ượ
đ n m t nhóm l nh khác đ
ố
trong m t kh i Catch. ấ ấ sau: BEGIN TRY ệ } { END TRY BEGIN CATCH ệ } { END CATCH SQL Server 2005 264 [ ; ] ộ ố ả ề ố ỗ i.
ộ ủ ỗ i. ả ề ứ
ạ ủ ỗ
i.
ủ ả ề M t s thông tin v l
•ERROR_NUMBER(): Tr v mã s l
•ERROR_SEVERITY(): Tr v m c đ c a l
•ERROR_STATE(): Mã tr ng thái c a l
•ERROR_PROCEDURE(): Tr v tên c a th
ủ ấ ụ
t c hay trigger xu t hi n l ấ th t c xu t hi n l ệ ỗ
i. ả ệ ỗ
i.
•ERROR_LINE(): Tr v s dòng bên trong
ả ề ố
ủ ụ
•ERROR_MESSAGE(): Tr v dòng văn b n
ầ ỗ ộ thông báo l ả ề
ủ
i m t cách đ y đ .
ế ượ ọ c g i bên ủ ố ả ề
Các hàm này tr v Null n u nó đ
ngoài c a kh i Catch. SQL Server 2005 265 float) AS
BEGIN declare @thuong float
begin try set @thuong=@sobichia/@sochia
print @thuong end try
begin catch SELECT ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
ố ằ Print N'S chia b ng không' SQL Server 2005 end catch 266 END ủ ụ ự phepchia 3 , 0 ế ả •K t qu trình bày trong ngăn Results và SQL Server 2005 267 ư ngăn Messages nh sau: ấ ứ ể
CASE bi u_th c ể ể ứ
WHEN bi u_th c_ki m_tra THEN ả ế
k t_qu [ ... ] ả ủ ế [ELSE k t_qu _c a_else] SQL Server 2005 268 END ấ Ho c:ặ CASE ề ế ả ệ
WHEN đi u_ki n THEN k t_qu [ ... ] ả ủ ế [ELSE k t_qu _c a_else] SQL Server 2005 269 END ọ ể ể
ặ
ệ ử ụ ớ
ị
Ví d 1:ụ Đ hi n th mã, h tên và gi
i
ạ
ữ ủ
tính (nam ho c n ) c a các sinh viên, b n
s d ng câu l nh SELECT masv,hodem,ten, CASE gioitinh WHEN 1 THEN N'Nam' ELSE N'N 'ữ END AS gioitinh SQL Server 2005 270 FROM sinhvien Ho c:ặ SELECT masv,hodem,ten, CASE WHEN gioitinh=1 THEN N'Nam' ELSE N'N 'ữ END AS gioitinh SQL Server 2005 271 FROM sinhvien ậ ộ Ví d 2: ụ
mahocphan ầ ế ể ể ị ọ ọ ạ
ọ ầ ầ •N u Đi m l n 1>=9 thì hi n th ra câu
ọ
thông báo: B n “ H ten sinh vien” h c h c
ấ ắ
ph n “ tên h c ph n” xu t s c ị ỏ ể ế ể •N u 9>Đi m >=8 hi n th gi i ể ế ể ị •N u 8>Đi m >=7 hi n th khá ế ể ể ị •N u 7>Đi m >=5 hi n th trung bình ể 272 •Đi m<5 hi n th y u
ị ế
ể
SQL Server 2005 ẽ ượ ố ố ố
ng h p không truy n đ i s ề
ủ ụ ờ ọ ế ợ
s trong tr
cho tham s khi có l i g i đ n th t c. •Cú pháp: ữ ệ ể @tên_tham_s ki u_d _li u = ặ ị ị ố
giá_tr _m c_đ nh ế t th t c ủ ụ sp_TestDefault SQL Server 2005 273 •Ví d : Vi
ụ
ư
nh sau: SQL Server 2005 274 ờ ọ ự ư ủ ụ
m c đích khác nhau nh sau: ế ọ ủ •Cho bi t h tên c a các sinh viên sinh t i ạ Huế: sp_testdefault ớ t h tên c a các sinh viên l p •Cho bi
ữ ệ
d li u 2 ế ọ
sinh t ủ
iạ Huế: SQL Server 2005 275 ữ ệ sp_testdefault @tenlop=N'd li u 2' t sp_testDefault @noisinh=N'Qu ng ả nam' ớ t h tên c a các sinh viên l p •Cho bi
ồ ọ
đ h a 3 ế ọ
sinh t ủ
i ạ Đà N ngẵ : ồ ọ sp_testdefault @tenlop=N'Đ h a SQL Server 2005 276 3',@noisinh=N'Đà N ng'ẵ ử ộ ủ ụ
ệ ệ ạ ỉ ả
ổ
i câu l nh TSQL đ s a đ i th t c. ệ
ủ ụ ộ ạ ổ
ể ử
ư
i nh sau: SQL Server 2005 277 ả ầ •Kích nút ph i chu t lên th t c c n xóa,
ọ ặ ch n Delete. Ho c có th s d ng câu
ư
ệ
l nh DROP PROCEDURE v i cú pháp nh
sau: SQL Server 2005 278 ủ ụ
DROP PROCEDURE tên_th _t c Ữ Ệ Ể Ỏ
5.11 KI U D LI U CURSOR (CON TR ) ớ ệ 5.11.1 Gi i thi u Cursor ử ủ 5.11.2 Quá trình x lý c a Cursor SQL Server 2005 279 5.11.3 Khai báo Cursor trong th t củ ụ ử ụ
ả ạ ả ệ ặ ộ ừ ị
v trí hi n
ả ế ậ ậ ậ ả
ệ ậ
ạ ể SQL Server 2005 280 ữ ệ ạ ị
ạ
ị ả ữ ệ ể ấ ậ •Cursor cũng cho phép c p nh t b n ghi
trong t p d li u t
i v trí Cursor hi n hành.
Bên c nh đó, b n cũng có th cho phép che
d u hay hi n th b n ghi trong t p d li u. ươ ng ể ọ ươ ạ ợ ử ụ ẩ ươ ng th c Database API
ng ADO, OLE ẫ ộ ụ SQL Server 2005 281 ộ ứ
ươ ứ •Chú ý: M t ng d ng không nên l n l n
ọ
ữ
ng th c g i Cursor. gi a hai ph ạ ư ử ề khác nhau nh ng quá trình x lý đ u theo quy
trình t ng quát sau: ổ
ế ợ ộ ả ừ ủ ớ ậ
ặ ả ầ phát
bi u TSQL và đ nh nghĩa đ c tính c a Cursor
ứ •K t h p m t Cursor v i t p b n ghi t
ị
ể
ng v i t p b n ghi c n c p nh t. ớ ậ
ự ậ
ể ỏ ế ữ ấ ạ ậ
•Th c thi phát bi u TSQL đ tr đ n Cursor.
•L y ra nh ng b n ghi trong Cursor b n mu n,
ố ọ ế ể ể
ả
ượ
ộ
c g i là fetch. Sau đó, di
hành đ ng này đ
ế ế
ả
ữ
chuy n đ n nh ng b n ghi k ti p.
ử ữ ệ ế ệ •Th c hi n các thao tác xóa, s a d li u (n u ự
ờ
ạ
i dòng hi n th i trong Cursor. ầ
c n) t ệ
•Đóng Cursor SQL Server 2005 282 ư pháp nh sau: DECLARE Tên_Cursor
[INSENSITIVE] [SCROLL] CURSOR FOR Câu_lệnh_Select [FOR {READ ONLY| UPDATE [ OF SQL Server 2005 283 tên_cột [,…n]]} ] SQL Server 2005 284 ế sau DECLARE Cursor_Hocphan CURSOR SQL Server 2005 285 FOR Select * from hocphan m Curosr theo cú pháp sau: •OPEN Tên_Cursor SQL Server 2005 286 •Ví d :ụ OPEN Cursor_Hocphan ể ể ử ụ ể ớ SQL Server 2005 287 ừ ả ỉ ệ
ả ệ ướ ả
c b n ấ
ị ả
ả ệ ệ ả •PRIOR: Cho phép l y b n ghi tr
ỉ
ghi hi n hành và ch đ nh b n ghi này là
b n ghi hi n hành. ả ầ •FIRST: Cho phép l y b n ghi đ u tiên và
ấ
ỉ ệ ả ả ị ch đ nh b n ghi này là b n ghi hi n hành. ả ố •LAST: Cho phép l y b n ghi cu i cùng
ấ ị ệ ả 288 ả
SQL Server 2005 ỉ
và ch đ nh b n ghi này là b n ghi hi n
hành. ế ả •ABSOLUTE {n| @nvar}:
- N u n ho c @nvar là s d
ố ươ
ặ
ứ
ấ
ầ ị ỉ ả ng thì
ớ
ả
cho phép l y ra b n ghi th n so v i
ả
ồ
b n ghi đ u tiên r i ch đ nh b n ghi
ừ
ệ
trên
này là b n ghi hi n hành tính t
xu ng.ố
ế ặ ố ả ấ
ố ứ
ị ồ SQL Server 2005 289 ả - N u n ho c @nvar là s âm thì cho
ớ ả
phép l y ra b n ghi th n so v i b n
ỉ
ghi cu i cùng r i ch đ nh b n ghi này
ệ
là b n ghi hi n hành tính t ả
ừ ướ
d i lên. ế ả •RELATIVE {n| @nvar}:
- N u n ho c @nvar là s d
ố ươ
ặ
ứ
ấ
ị
ệ ỉ ồ
ệ ả ng thì
ớ
ả
cho phép l y ra b n ghi th n so v i
ả
b n ghi hi n hành r i ch đ nh b n
ừ
ghi này là b n ghi hi n hành tính t
trên xu ng.ố
ặ ế ố ả ấ
ệ ứ
ị ồ SQL Server 2005 290 ả - N u n ho c @nvar là s âm thì cho
ớ ả
phép l y ra b n ghi th n so v i b n
ỉ
ghi hi n hành r i ch đ nh b n ghi này
ệ
là b n ghi hi n hành tính t
i lên. ả
ừ ướ
d ữ ệ ụ ế ộ SQL Server 2005 291 SQL Server 2005 292 ớ ệ ầ i ớ ộ
ư CLOSE Tên_Cursor DEALLOCATE Tên_Cursor Ví d :ụ SQL Server 2005 293 CLOSE Cursor_Hocphan DEALLOCATE Cursor_Hocphan SQL Server 2005 294 ủ ụ 5.11.2.4 Khai báo Cursor trong th t c và hàm ầ ẽ ủ ụ ừ ụ ể ấ SQL Server 2005 295 ả ầ Ph n này s trình bày các khai báo
ư ử
Cursor trong th t c và hàm cũng nh s
d ng các t
khóa NEXT| PRIOR | FIRST|
LAST| ABSOLUTE| RELATIVE đ l y ra
b n ghi theo yêu c u. ươ Ch ng 6: H ớ ệ 6.1. Gi i thi u ệ ố 6.2. Hàm h th ng SQL Server 2005 296 ườ 6.3. Hàm do ng ị
i dùng đ nh nghĩa • Hàm tr v m t giá tr thông qua tên ả ề ộ
ủ ụ
hàm còn th t c thì không. ộ • Hàm đ
ầ ượ
ủ ư
ử ụ
c s d ng nh là m t thành
ứ
ể
ộ
ph n c a m t bi u th c. ệ ố ạ • Hàm có hai lo i: Hàm h th ng và hàm SQL Server 2005 297 ườ ụ do ng ị
i d ng đ nh nghĩa ệ ố ị ơ 6.2.1 Hàm h th ng tr v giá tr đ n ả ề ị ổ ợ
6.2.2 Hàm tr v giá tr t ng h p ả ề ả ị
6.2.3 Hàm tr v kho ng giá tr SQL Server 2005 298 Ranking ể • Nhóm hàm Cursor (Ki u con tr )
ỏ • Nhóm hàm Date and Time • Nhóm hàm Mathematical (Toán h c)ọ ữ ệ • Nhóm hàm Metadata (Siêu d li u) ậ ả • Nhóm hàm Security (B o m t) • Nhóm hàm String (Chu i)ỗ • Nhóm hàm khác SQL Server 2005 299 ấ ề ấ ủ ệ ấ Nhóm hàm Configuration (C u hình)
• L y thông tin v c u hình hi n hành c a SQL Server 2005 300 SQL Server • Dùng đ t ng h p hay ữ ệ ố ơ ả • 5 Hàm c b n th ng ườ
ề ấ ượ ử ụ c s d ng nhi u nh t ề ớ SQL Server 2005 301 đ
khi khai báo phát bi u ể
ệ
Select v i m nh đ Group
by là Sum, Count, Avg,
Max, Min. ả ề ả ị 6.2.3 Hàm tr v kho ng giá tr Ranking ể ế ế ế ợ ộ
Hàm thu c nhóm Ranking dùng đ k t
ả
ạ ậ
h p x p lo i t p k t qu . ồ SQL Server 2005 302 Bao g m các hàm sau:
•Rank
•Ntile
•Dense_Rank
•Row_Number ộ ộ ự c s p x p d a vào giá tr c a m t c t ượ
ặ ế
ế ừ ắ
đ
ắ
ho c s p x p trên t ng nhóm
(PARTITION). ư ủ •Cú pháp c a hàm Rank nh sau: ộ ộ ắ ế SQL Server 2005 303 Rank() Over ([Partition By ụ ể ầ ả ả ề
ể ế
ị ứ ự ộ ế ầ ị SELECT DT.MASV, HODEM,TEN,GIOITINH, DIEM, FROM DIEMTHI DT INNER JOIN
SINHVIEN SV ON DT.MASV=SV.MASV
WHERE MAHOCPHAN='TINVP' AND LANTHI=1 SQL Server 2005 304 SQL Server 2005 305 ả •K t quế ể ụ ể ầ ị •Ví d : Hi n th danh sách đi m thi l n 1 h c ph n có ế ị ừ ể ớ ầ
ị ứ
mã là Tinvp. K t qu tr v hi n th thêm c t x p v th
ự
theo t ng nhóm gi ọ
ộ ế
ả ả ề ể
ầ
i tính d a vào đi m thi l n 1. SELECT DT.MASV, HODEM,TEN,GIOITINH,DIEM, FROM DIEMTHI DT INNER JOIN
SINHVIEN SV ON DT.MASV=SV.MASV
WHERE MAHOCPHAN='TINVP' AND LANTHI=1 SQL Server 2005 306 SQL Server 2005 307 ả •K t quế ươ •t ng t ộ ị ứ ị ị tr trên c t v th có giá tr liên t c. ụ Dense_Rank SQL Server 2005 308 ươ ng t ộ ị ứ ượ ị ỉ •Hàm này t
trên c t v th đ ố ượ ụ ề ỉ •Hàm NTILE ch có tác d ng chia đ u s l ng các ư ừ ả ố
b n ghi và đ a vào t ng nhóm s . •Ví d : ụ SELECT DT.MASV, HODEM,TEN,GIOITINH,DIEM, NTILE(2) OVER (ORDER BY DIEM DESC) AS [VI THU] FROM DIEMTHI DT INNER JOIN SINHVIEN SV ON DT.MASV=SV.MASV SQL Server 2005 309 ử ụ ẽ ư ả
ố ế ạ m t nhóm s đ a ra các x p lo i gi ng nhau. •Ví d :ụ HODEM,TEN,GIOITINH,DIEM, NTILE(3) OVER (PARTITION BY DESC) AS GIOITINH ORDER BY DIEM
[VI THU] FROM DIEMTHI DT INNER JOIN
SINHVIEN SV ON DT.MASV=SV.MASV SQL Server 2005 310 ả ậ • Tr v s th t c a cho b n ghi trong t p ả ề ả ề ố ứ ự ủ
ể
ả
b n ghi mà phát bi u SELECT tr v . • Ví d :ụ SELECT DT.MASV, HODEM, TEN, GIOITINH , DIEM, FROM DIEMTHI DT INNER JOIN SINHVIEN SV ON DT.MASV=SV.MASV SQL Server 2005 311 SQL Server 2005 312 6.3.2 Thay đ i hàmổ ụ ả ọ
ệ ả ấ ạ
ả ề ể ạ ị ơ ư ạ SQL Server 2005 313 ạ ị ơ
ộ ả ề
ầ 6.3.1.1 T o hàm tr v giá tr đ n
ứ
ụ
Ví d 1: Đ nh nghĩa hàm tính th trong tu n c a m t giá tr ki u CREATE FUNCTION thu(@ngay DATETIME)
RETURNS NVARCHAR(10)
AS BEGIN DECLARE @st NVARCHAR(10)
SELECT @st=CASE DATEPART(DW,@ngay) WHEN 1 THEN N'Chủ nhật'
WHEN 2 THEN N'Thứ hai'
WHEN 3 THEN N'Thứ ba'
WHEN 4 THEN N'Thứ tư'
WHEN 5 THEN N'Thứ năm'
WHEN 6 THEN N'Thứ sáu'
ELSE N'Thứ bảy'
END RETURN (@st) /* Trị trả về của hàm */ END SQL Server 2005 314 ạ ị ơ ả ề
ị ườ ạ ườ ở ữ ng tr
ủ ị c tên hàm, b n ph i
i s h u hàm) ệ ụ ướ ượ ị 6.3.1.1 T o hàm tr v giá tr đ n
•M t hàm khi đã đ
ể
ượ
ộ
c đ nh nghĩa có th
ử ụ
ư
s d ng nh các hàm do HQTCSDL cung
ả
ướ
ấ
c p (thông th
ỉ
ch đ nh thêm tên c a ng
•Ví d : Câu l nh d
ướ
ụ
ở
ví d tr
c đ nh nghĩa ử ụ
i đây s d ng hàm
c: đã đ SELECT masv, hodem, ten, dbo.thu(ngaysinh) as Thu,ngaysinh FROM sinhvien SQL Server 2005 315 WHERE malop='dl01' ả ề ữ ệ ể ả ề ữ ệ ạ
ộ ể ế ả
6.3.1.2 T o hàm tr v d li u ki u b ng
•Hàm n i tuy n tr v d li u ki u
ả
b ng (Inline Table valued Function): Cú pháp: CREATE FUNCTION tên_hàm ([danh_sách_tham_số]) RETURNS TABLE AS SQL Server 2005 316 RETURN (câu_lệnh_select) ể ả ả ề ữ ệ
ả ề ữ ệ ạ
ộ 6.3.1.2 T o hàm tr v d li u ki u b ng
•Hàm n i tuy n tr v d li u ki u b ng: SMALLINT) RETURNS TABLE
AS
RETURN(
SELECT masv,hodem,ten,ngaysinh FROM sinhvien INNER JOIN lop ON
sinhvien.malop=lop.malop WHERE khoahoc=@khoahoc) SQL Server 2005 317 ể ả ả ề ữ ệ
ả ề ữ ệ ạ
ộ 6.3.1.2 T o hàm tr v d li u ki u b ng
•Hàm n i tuy n tr v d li u ki u b ng: ể ế t danh sách các sinh viên khoá 1,
ư Đ bi
ạ ử ụ ệ b n s d ng câu l nh nh sau: SQL Server 2005 318 SELECT * FROM dbo.func_XemSV(1) ả ề ữ ệ ể
ả ề ữ ệ ả
ể ạ
ứ 6.3.1.2 T o hàm tr v d li u ki u b ng
•Hàm ch a nhi u l nh tr v d li u ki u
b ng (MultiStatement Tablevalued Function ): SQL Server 2005 319 ả ề ữ ệ ể
ả ề ữ ệ ả
ể ạ
ứ 6.3.1.2 T o hàm tr v d li u ki u b ng
•Hàm ch a nhi u l nh tr v d li u ki u
b ng (MultiStatement Tablevalued Function ): ụ ị Ví d : Đ nh nghĩa hàm func_TongSV
ư (@khoahoc SMALLINT) nh sau: ể ị - Hi n th makhoa, tenkhoa, tongsosv
- N u ế @khoahoc=0 thì cho bi
t t ng ấ ả ệ ế ổ
t c các khóa) ế ả ố i S cho k t qu th ng kê
@khoahoc 320 ố
s sinh viên hi n có (t
ỗ
ủ
c a m i khoa.
- Ng
ượ ạ ẽ
c l
ố
ổ
t ng s sinh viên khoá
ỗ
ủ
c a m i khoa
SQL Server 2005 ả ề ữ ệ ể
ả ề ữ ệ ả
ể ạ
ứ 6.3.1.2 T o hàm tr v d li u ki u b ng
•Hàm ch a nhi u l nh tr v d li u ki u
b ng (MultiStatement Tablevalued Function ): ự ệ ệ SQL Server 2005 321 •Th c hi n l nh:
SELECT * FROM dbo.func_TongSV(1)
Ho cặ
SELECT * FROM dbo.func_TongSV(0) • Trong khung Object Explorer, ch n ọ ử ầ ổ ọ ứ
Database ch a hàm c n s a đ i, ch n
Programmability/ Function. ử ầ ộ • Kích nút ph i chu t lên hàm c n s a đ i
ổ ả
ch n ọ Modify. ứ ệ ử ệ ổ • C a s Query xu t hi n ch a l nh
ấ SQL Server 2005 322 ALTER FUNCTION ươ
ng 7
Ch
TRIGGER 7.1 DML Trigger ớ ệ 7.1.1 Gi i thi u DML Trigger ạ 7.1.2 T o DML Trigger 7.2 DDL Trigger ớ ệ 7.2.1 Gi i thi u DDL Trigger ạ 7.2.2 T o DDL Trigger SQL Server 2005 323 7.2.3 Hàm Eventdata (Data Manipulation Language) ự ữ ệ ả ượ ề ớ ộ ả ắ c g n li n v i m t b ng nào Dùng đ ki m soát s d li u thay đ i.
ổ
ể ể
trigger lo i này ph i đ
ạ
đó trong CSDL. ữ ệ ả Khi d li u trong b ng b thay đ i (INSERT, UPDATE
ị ự hay DELETE) thì trigger s đ ạ .
đông kích ho t ổ
ẽ ượ t
c ượ ả DML Trigger đ ữ ệ ử ụ
ắ ả ị ử ụ ặ ữ ệ
ợ ấ ớ ẽ ộ ủ ệ ả
ệ
c s d ng trong vi c b o đ m toàn
ẹ
ượ
v n d li u theo quy t c xác đ nh, đ
c qu n lý theo
ả
b ng d li u ho c khung nhìn. S d ng DML trigger
ộ
m t cách h p lý trong CSDL s có tác đ ng r t l n
ệ
trong vi c tăng hi u năng c a CSDL. SQL Server 2005 324 ớ ệ 7.1.1 Gi i thi u DML Trigger ả ữ ệ ẹ ượ - B o đ m toàn v n d li u theo quy t c
ắ
ữ ệ
ả ả c qu n lý theo b ng d li u • Ý nghĩa:
ả
ị
xác đ nh, đ
ho c khung nhìn. ặ
ử ụ - S d ng DML trigger m t cách h p lý ẽ ộ
ộ ợ
ấ ớ SQL Server 2005 325 ủ ệ ệ trong CSDL s có tác đ ng r t l n trong
vi c tăng hi u năng c a CSDL. ự ữ ả ớ Th c s h u d ng v i nh ng kh năng: ậ ế • Nh n bi ữ
c nh ng ỷ ỏ ượ
ữ ệ ặ
ổ t, ngăn ch n và hu b đ
thao tác làm thay đ i trái phép d li u trong
CSDL. ệ • Các thao tác trên d li u có th đ
ể ượ
c trigger phát
ạ
ộ ự ộ ệ ả ả đ ng th c hi n m t lo t các thao
ợ ệ ữ ệ ữ ệ
ự
hi n ra và t
ằ
tác khác trên CSDL nh m đ m b o tính h p l
ủ
c a d li u. • ạ ể ạ
ứ ạ ể
ữ ữ ố ơ ượ
ả ộ Thông qua DML trigger, b n có th t o và ki m
ệ
c nh ng m i quan h ph c t p h n gi a
tra đ
ả
các b ng trong CSDL mà b n thân các ràng
ượ
bu c không th th c hi n đ c. ệ
ể ự
SQL Server 2005 326 SQL Server 2005 327 ả ị ể ử ụ ấ ươ ả •C u trúc c a hai b ng này t ư
nh ng t
ộ ủ
ả ủ ấ ự
c u trúc c a b ng mà trigger tác đ ng. ộ ữ ệ
ệ ả ườ ợ SQL Server 2005 328 •D li u trong hai b ng này tùy thu c
ả
ộ
vào câu l nh tác đ ng lên b ng làm kích
ụ ể
ạ
ho t trigger, c th trong các tr
ng h p
sau: ự ị ượ
ẽ ượ
ả ả ữ ệ ườ ợ ng h p này không có d li u. ả •D li u trong b ng INSERTED s là dòng d
ữ ữ ệ
ượ ạ ẽ
ự c chèn vào b ng gây nên s kích ho t ả ữ ệ ệ
ợ ườ ả
ệ
li u đ
ằ
ố ớ
đ i v i trigger b ng câu l nh INSERT. B ng
DELETED trong tr ng h p này không có d li u. ệ ự •Khi câu l nh UPDATE đ c th c thi trên ả ủ ộ ượ
ị ệ ẽ ượ ậ ậ ự
ữ ệ
b ng, các dòng d li u cũ ch u s tác đ ng c a
ả
ẽ ượ
c sao chép vào b ng DELETED,
câu l nh s đ
ả
còn trong b ng INSERTED s là các dòng sau khi
đã đ c c p nh t. SQL Server 2005 329 Ví d :ụ ự ệ ệ
ả ậ ạ
T o Trigger th c hi n công vi c, khi
ả
ườ
i dùng nh p b n ghi vào b ng
ng
LOP, N u c t d li u hedaotao là r ng thì ỗ
ị ủ ộ đ ng gán giá tr c a c t SQL Server 2005 330 ế
ộ ữ ệ
ệ ố
ự ộ
h th ng t
ị
ằ
này b ng giá tr là ‘Chính quy’. SQL Server 2005 331 ộ ậ ạ
ậ ả
c p nh t b n ghi: Ví d : ụ ự ệ ạ
T o Trigger th c hi n công vi c, khi
ườ ậ ệ
ể
i dùng c p nh t đi m l n 1 cho các ủ ầ
ậ
ng
ả
ả
b n ghi c a b ng DIEMTHI, ế ậ ộ ữ ệ ệ ố ị ủ SQL Server 2005 332 ọ ể
ậ
N u sau khi c p nh t c t d li u đi m
ự ộ
ầ
l n 1 có giá tr >=5 thì thì h th ng t
đ ng
ầ
ể
xóa dòng đi m thi l n 2 c a sinh viên thi
ầ
h c ph n đó. ạ CREATE TRIGGER Trg_Update_diemlan1
ON DIEMTHI
AFTER UPDATE
AS
BEGIN
DECLARE @diemlan1 numeric(5,2)
DECLARE @masv nvarchar(10)
DECLARE @mahocphan nvarchar(10)
SELECT @masv=masv, @mahocphan=mahocphan, @diemlan1=diem FROM INSERTED WHERE lanthi=1
IF @diemlan1>=5
DELETE FROM DIEMTHI WHERE masv=@masv and mahocphan=@mahocphan and
lanthi=2 END SQL Server 2005 333 CREATE TRIGGER Trg_Delete_DIEMTHI
ON DIEMTHI
AFTER DELETE
AS
BEGIN INSERT INTO DELETED_DIEMTHI
SELECT * FROM DELETED END SQL Server 2005 334 ử ụ
ế ượ ộ ỉ ệ
ố ộ ấ ị ủ ả c kích ho t khi
trigger n u mu n trigger đ
ế
vi c thay đ i d li u ch liên quan đ n m t
s c t nh t đ nh nào đó c a b ng. ử ụ ượ •IF UPDATE không s d ng đ ố ớ
c đ i v i SQL Server 2005 335 ệ câu l nh DELETE. ụ
Ví d 7.4:
•CREATE TRIGGER trg_nhatkybanhang_update_soluong SQL Server 2005 336 ế ệ M t trigger có kh năng nh n bi
ượ
ả ể ệ ỷ ỏ ả ả ữ ệ ậ
ổ ề ặ ữ ệ
ự
đ
ừ
ữ ệ
đó có th phát hi n và
b ng d li u, t
ữ
hu b nh ng thao tác không đ m b o
ẹ
tính toàn v n d li u. ộ ỷ ỏ ể •Trong m t trigger, đ hu b tác d ng ạ ệ ụ
ạ
ệ
ủ
c a câu l nh làm kích ho t trigger, b n
ử ụ
s d ng câu l nh: •ROLLBACK TRANSACTION SQL Server 2005 337 7.1.2.5 L nh ROLLBACK TRANSACTION
ả
ộ
t
c s thay đ i v m t d li u trên ụ
Ví d 7.7: ả ộ
ượ ạ ủ ố
ể ả
Ví d : T o Trigger đ đ m b o ràng bu c s
ộ
c i c a m t sinh viên không đ ụ ạ
ầ
ọ
h c ph n thi l
ượ
t quá 2.
v SQL Server 2005 338 ệ 7.1.2.5 L nh ROLLBACK TRANSACTION ệ ớ ng CSDL
ư ượ
ổ ấ
ằ ể ể ể ế ạ
đ
c kích ho t khi ng
đ i c u trúc CSDL hay đ i t
b ng các phát bi u SQL thu c DDL nh :
Create, Alter, Drop, Grant, Deny, Revoke,…
•N u DML Trigger dùng đ ki m soát d
ữ ể ượ ử ụ
ạ ứ
ớ ấ SQL Server 2005 339 ả
ệ ứ
ệ
li u ch a trong Table hay View thì DDL
c s d ng cho ch c năng
Trigger có th đ
ị
qu n tr CSDL. Đây là lo i Trigger m i xu t
hi n trong SQL Server 2005 ệ ớ ạ ế ế ể ể ử ụ •Sau khi giai đo n thi
t k CSDL hoàn
ổ ấ
ọ ự
ấ
t, đ ki m soát m i s thay đ i c u trúc
t
ạ
ầ
ủ
c a CSDL, chúng ta c n s d ng lo i
Trigger này. ụ ư ậ
ừ ữ SQL Server 2005 340 ộ
ụ •Nh v y, m c đích c a DDL Trigger là
ủ
ổ ấ
ự
ngăn ng a s thay đ i c u trúc CSDL.
ạ
ể
ạ
Ngoài ra, b n có th ghi l
i nh ng hành
ử
ổ ấ
đ ng làm thay đ i c u trúc CSDL khi s
d ng DDL Trigger. ệ ớ •M c đích c a DDL Trigger là ki m soát
ụ
ọ ự ủ
ổ ấ ủ ể
m i s thay đ i c u trúc c a CSDL. ạ ữ ộ i nh ng hành đ ng làm thay SQL Server 2005 341 ổ ấ •Có th ghi l
ể
đ i c u trúc CSDL. ạ ấ ạ T o DDL Trigger theo c u trúc sau: CREATE TRIGGER tên_trigger ON DATABASE|ALL SERVER FOR {[ Các sự kiện DDL] [nhóm các sự kiện]} AS SQL Server 2005 342 các_câu_lệnh_của_trigger ạ ụ
Ví d 7.8: ụ ạ ạ Ví d : T o Trigger không cho t o SQL Server 2005 343 Database ự ệ ữ ề ạ ượ ồ ồ ả ề
i trong trong hàm Eventdata. Hàm này tr v
c đ xml này bao g m các thông ờ ự ệ ị ử
ế ố ượ ủ ự ệ •Th i gian c a s ki n.
ủ
•Đ nh danh x lý h th ng (The System Process ID:
ệ ố
ự
c th c SPID) c a k t n i trong lúc trigger th c hi n đ
hi n.ệ ạ ể ự ệ ự ệ ộ ồ
c đ bao g m thêm
ố
ấ ư ệ ồ
ượ
ơ ự ệ
ệ
ấ ự ệ ệ ộ ị
ự ệ •Ki u s ki n đã kích ho t trigger
•Tùy thu c vào ki u s ki n, l
ể
ữ
nh ng thông tin nh : database n i s ki n xu t hi n, đ i
ượ
ng b tác đ ng khi s ki n xu t hi n và câu l nh TSQL
t
ủ
c a s ki n. SQL Server 2005 344 ươ Ch ng 8: Ả Ậ ƯỜ ̉ ̣ B O M T VÀ QUAN TRI NG I DÙNG ứ ự ườ 8.1 Ch ng th c ng i dùng ̀ ườ 8.2 Gán quyê n cho ng i dùng SQL Server 2005 345 ̃ ̀ ơ ở ư ̉ ̣ 8.3 Bao tri c s d liêu ứ ự ườ 8.1 Ch ng th c ng i dùng ằ Ch ng th c (Authentication) nh m đ m ả ườ ự ườ
ộ ệ ượ
ư ọ
ớ ượ ọ ộ SQL Server 2005 346 ự
ứ
ả
ế ượ
t đ
b o bi
c ng
i dùng là ai. Sau khi
ứ
ọ
SQL Server ch ng th c ng
i dùng, h có
ể ự
ấ ỳ
c phép
th th c hi n b t k hành đ ng đ
ữ
ủ
ậ
ớ
nào v i đăng nh p c a h cũng nh nh ng
c phép v i nhóm mà h là
hành đ ng đ
thành viên. ̉ ự ứ ể Có hai ki u ch ng th c: •SQL Server and Windows ự ứ ể
ỗ ợ ả ỗ ợ ậ Authentication: Đây là ki u ch ng th c
h n h p. SQL Server h tr trên c đăng
nh p SQL Server và Windows. ứ ể ỉ ỗ ợ ậ SQL Server 2005 347 •Windows Authentication: Ki u ch ng
ự
th c này SQL Server ch h tr đăng nh p
Windows. ̉ ổ ể ứ ử ổ ấ
ổ ể ạ ố ứ ự chu t lên Server b n mu n thay đ i ki u
ọ
ch ng th c, ch n Properties. Security ọ ạ
i •Ch n nút
ọ
•
Ở ầ Server Authentication ch n l
ph n
ự Windows
ể
ứ
ki u ch ng th c là
Authentication mode ho c ặ SQL Server
and Windows Authentication mode. SQL Server 2005 348 •Nh n OK.
ấ ̉ ặ ị •L u ýư ả ướ ự ầ Express Edition và phiên b n SQL Server 2005
ế ố ừ
Developer Edition không cho phép các k t n i t
ậ
ể ấ
xa. Đ c u hình SQL Server 2005 ch p nh n các
ệ
ế ố ừ
k t n i t xa c n th c hi n các b ấ
c sau: ế ậ ạ •Cho phép ti p nh n các k t n i t
ế ố ừ
ể
xa trên th
ủ
ụ
ứ
ệ
hi n c a SQL Server mà các ng d ng máytr m
ế ố
ầ
c n k t n i. ụ ạ ị ườ ấ ng l a cho phép các d li u
ị ụ ế ượ ư ạ •Kích ho t d ch v SQL Server Browser
•C u hình t
ữ ệ
ử
liên quan đ n SQL Server và d ch v SQL
Server Browser đ c l u thông trên m ng. SQL Server 2005 349 ̣ ̣ ạ ậ 8.1.2 Ca ch tao đăng nhâp
8.1.2.1 T o đăng nh p Windows ạ ậ SQL Server 2005 350 ớ ậ
8.1.2.2 Đăng nh p v i User sa ́
8.1.3 Nho m (Roles) ớ ệ i thi u ươ ng đ Roles trong SQL Server t ớ ươ
ọ ấ ườ ủ ệ ượ ưở ề i dùng cho
ủ
i dùng là thành viên c a
ấ
c c p
ng quy n đ SQL Server 2005 351 ng
v i Group trong Windows, g i chung là
ạ ạ
nhóm. B n t o nhóm, sau đó c p quan
h thành viên c a ng
ườ
nhóm. Ng
ẽ ừ
nhóm s th a h
cho nhóm. ́
8.1.3 Nho m (Roles) ớ ệ i thi u ạ SQL Server phân ra 4 lo i nhóm: •Nhóm quy n Server (Server Roles): ự ề
ượ
ườ ể ẵ
c xây d ng s n trong SQL
i dùng không th thay ổ ượ ử ặ ị ấ ự ả ở ề ạ SQL Server 2005 352 ấ Nhóm này đ
Server và ng
ổ
đ i đ
c (thêm, s a đ i ho c xóa).
ườ
i dùng thành
Nhóm này cho phép ng
ụ
ệ
viên th c hi n các tác v qu n tr c p
ấ
Server. B n tìm th y nhóm quy n này
nút Security c p Server ́
8.1.3 Nho m (Roles) ớ ệ i thi u ạ SQL Server phân ra 4 lo i nhóm: ề •Nhóm quy n CSDL (Database Roles): ề ở ấ ườ ề SQL Server 2005 353 ề ạ
Nhóm quy n CSDL cho phép b n gán
c p CSDL. Nó
quy n cho ng
i dùng
ế
ấ
cung c p các quy n liên quan đ n CSDL ́
8.1.3 Nho m (Roles)
ệ ị ạ ể ự ị ạ
ướ ề ạ c. B n có th t ề ạ Ở
ấ
c p CSDL, b n không b h n ch v i các nhóm quy n đã
ị
đ nh nghĩa tr
ạ
ủ
c a riêng b n. SQL Server phân ra 2 lo i nhóm quy n do
ng ị
i dùng đ nh nghĩa: ườ
- ề ụ ẩ ề ớ - i CSDL.
ề ứ ứ ụ ụ Nhóm quy n chu n: Dùng cho các tác v gán
quy n t
Nhóm quy n ng d ng: Dùng cho các ng d ng. ề ế Các quy n liên quan đ n ứ ụ
ng d ng. SQL Server 2005 354 ́
8.1.3 Nho m (Roles) ườ 8.1.3.2 Thêm ng i dùng vào nhóm ề quy n Server ườ 8.1.3.3 Thêm ng i dùng vào nhóm ề quy n CSDL ề ạ ườ i 8.1.3.4 Cách t o nhóm quy n do ng SQL Server 2005 355 ự ị dùng t đ nh nghĩa ̀ ườ 8.2 Gán quyê n cho ng i dùng ứ ườ ợ ệ ớ ả ự
ỉ i dùng là quá trình
m i ườ
i dùng h p l
ớ Ch ng th c ng
ả
đ m b o ch có ng
ệ
ượ
c phép làm vi c v i CSDL.
đ ậ Sau khi ng i dùng đ t đ ạ ượ
ọ ố ượ ớ ề SQL Server 2005 356 ườ
c truy c p
ọ
ề
vào CSDL, đi u quan tr ng là h có các
ụ ể
ng trong
quy n c th gì v i các đ i t
CSDL. ̀ ườ 8.2 Gán quyê n cho ng i dùng ạ ườ 8.2.1 T o ng i dùng CSDL ố ượ ề ả 8.2.2 Qu n lý quy n trên đ i t ng SQL Server 2005 357 ề ả 8.2.3 Qu n lý quy n trên đ i t ố ượ
ng ̉ ̣ 8.3.1 Sao l u d pho ng̀
ư SQL Server 2005 358 ̃ ơ ở ư ̣ ̣ 8.3.2 Khôi phuc c s d liêuể
5.5.2 Phát bi u Set
ể
ị
ể
ữ
5.5.3 Phát bi u Select đ gán giá tr
ể
M t trong nh ng đi m m nh c a phát
ể
ị
ử ụ
ể
bi u Select khi s d ng đ gán giá tr cho
ể ấ
ị ừ
ộ
ế
bi n là cùng m t lúc có th l y giá tr t
ế
CSDL và gán vào nhi u bi n.
ộ ậ
ư
ự
ệ
ế
ả
K t qu tong=0
ể
ề
ấ
5.7 C u trúc đi u khi n
ấ
5.7.1 C u trúc If...Else
5.7.1 C u trúc If...Else
ộ
ấ
ủ ụ
N u sinh viên đó là Nam thì hi n ra câu
ượ ạ
ứ
thông báo “Chúc anh s c kh e” ng
i
c l
ữ ệ
n u sinh viên đó là N hi n ra câu thông
ỏ
báo “Chúc ch s c kh e”.
ấ
5.7.2 C u trúc While
•C u trúc đi u khi n While cho phép
ể
ế
ế
ủ ụ
ố ừ
ủ
ụ
Ví d : Vi
ổ
t th t c in ra t ng c a các s t
1..n.
CREATE PROCEDURE Tinhtong(@n int)
AS
BEGIN
Declare @tong int
Declare @i int
set @tong=0
set @i=0
While @i<=@n
Begin
Set @tong=@tong+@i
Set @i=@i+1
End
Print @tong
END
ể
5.7.3 Phát bi u Continue
ế
ủ ụ
ố ẻ ừ
ự
ổ
ệ
t th t c th c hi n in ra t ng các s l
t
Vi
1..n.
CREATE PROCEDURE Tong_so_le(@n int)
AS
BEGIN
Declare @tong int
Declare @i int
Set @tong=0
Set @i=0
While @i<@n
Begin
Set @i=@i+1
If (@i%2=0) continue
Set @tong=@tong+@i
End
Print @tong
END
ể
5.7.4 Phát bi u Break
ể
CREATE PROCEDURE (@n int)
AS
BEGIN
declare @i int
set @i=2
declare @kiemtra bit
set @kiemtra=1
While @i<=sqrt(@n)
if (@n % @i=0)
begin
set @kiemtra=0
break
end
else set @i=@i+1
if (@kiemtra=1)
ố
ố
print Str(@n)+ N' là s nguyên t
'
else
ố
ả
ố
print Str(@n)+ N' Không ph i là s nguyên t
'
END
5.7.5 Phát bi u Return
ầ
ể
•Khi c n tr v m t giá tr nào đó. Chúng
ể
ử ụ
ta s d ng phát bi u Return. N u g p phát
bi u Return, quá trình x lý s k t thúc.
ế
t th t c đ a vào m t mã sinh
ộ
ủ ụ
ấ
ư
ố
ộ
ầ
ụ
Ví d : Vi
ủ ụ
ạ ủ
viên, th t c xu t ra s môn thi l n m t
không đ t c a sinh viên đó.
5.7.5 Phát bi u Return
ể
•Sau khi đã t o th t c
ấ
5.7.6 C u trúc Try...Catch
ấ
5.7.6 C u trúc Try...Catch
ư
C u trúc Try… Catch có c u trúc nh
ấ
5.7.6 C u trúc Try...Catch
ề ỗ
i:
ụ
ể ỗ
ủ ụ
ố
i trong th t c chia hai s
ề
Ví d : Đi u khi n l
CREATE PROCEDURE phepchia(@sobichia float, @sochia
5.7.6 C u trúc Try...Catch
ấ
•Khi th c thi th t c trên:
ấ
5.7.7 C u trúc Case
•C u trúc này có cú pháp nh sau:
ư
ấ
5.7.7 C u trúc Case
•C u trúc này có cú pháp nh sau:
ư
ể
5.7.7 Phát bi u Case
ấ
5.7.7 C u trúc Case
ấ
5.7.7 C u trúc Case
Nh p vào m t masv,
ị
ố ớ
ị
ị ặ
c gán cho tham
5.8 Tham s v i giá tr m c đ nh
•Giá tr m c đ nh s đ
ị ặ
ườ
ố
CREATE PROC sp_TestDefault(
@tenlop
NVARCHAR(30)=NULL,
@noisinh
NVARCHAR(100)='Hu 'ế
AS
BEGIN
IF @tenlop IS NULL
SELECT hodem,ten
FROM sinhvien INNER JOIN lop
ON sinhvien.malop=lop.malop
WHERE noisinh like ('%'+@noisinh)
ELSE
SELECT hodem,ten
FROM sinhvien INNER JOIN lop
ON sinhvien.malop=lop.malop
WHERE noisinh like ('%'+@noisinh)
AND
tenlop=@tenlop
END
ố ớ
ị ặ
ớ
ị
i g i th t c v i các
5.8 Tham s v i giá tr m c đ nh
ệ
Th c hi n các l
ụ
ị ặ
ị
ố ớ
5.8 Tham s v i giá tr m c đ nh
•Cho bi
ế ọ
ủ
t h tên c a các sinh viên sinh
ả
i ạ Qu ng nam
ử
ủ ụ
ổ
5.9 S a đ i th t c
•Kích nút ph i chu t lên th t c c n s a, ch n
ầ
ấ
ọ
ạ
ử
Modify, c a s Query xu t hi n cho phép b n
ủ ụ
hi u ch nh l
ổ
ử
Cú pháp s a đ i th t c n i t
ủ ụ
ALTER PROCEDURE tên_th _t c
[(danh_sách_tham_số)]
[WITH RECOMPILE | ENCRYPTION |
RECOMPILE, ENCRYPTION]
AS
ủ ụ
ủ
ệ
Các_câu_l nh_C a_th _t c
5.10 Xoá th t củ ụ
ủ ụ
ộ
ể ử ụ
ớ
ớ
i thi u Cursor
5.11.1 Gi
ữ ệ
Ki u d li u Cursor đ
ợ
ườ
ệ
ượ
ể
c s d ng trong
ậ
ng h p tính toán trên t p b n ghi, nên
tr
ầ
ị ượ
ị
c b n ghi c n
nó cho phép b n đ nh v đ
ể ấ
ạ
ữ ệ
ậ
ử
x lý trong t p d li u. B n cũng có th l y
ả
ề
ra m t ho c nhi u b n ghi t
ữ ệ
hành trong t p d li u k t qu
ệ
5.11.1 Gi
i thi u Cursor
ấ
ớ
•SQL Server 2005 cung c p hai ph
ứ
th c đ g i Cursor là TSQL và hàm
Database API (Application Programming
ứ
ng th c T
Interface). Trong đó, lo i ph
ỗ
ữ
SQL dùng ngôn ng TSQL có cú pháp h
tr s d ng Cursor theo các chu n sau
ứ
ạ
SQL92. Lo i ph
ố ượ
ồ
bao g m hàm trong đ i t
DB, ODBC.
ử
ủ
5.11.2 Quá trình x lý c a Cursor
ặ
M c dù Cursor lo i TSQL và API có cú pháp
5.11.2.1 Khai báo Cursor
•Khai báo Cursor s d ng TSQL có cú
ử ụ
ị
5.11.2.1 Khai báo Cursor
•INSENSITIVE: Cho phép b n đ nh nghĩa Cursor
ạ
ữ ệ ạ
ng v i b n sao t p d li u t m th i dùng cho
ớ ả
ọ
ề
ượ ấ ừ ậ
c l y t
t p
ữ ệ
ờ
ậ
ứ
ỏ ủ
Cursor. M i đòi h i c a Cursor đ u đ
d li u này trong CSDL tempdb.
ỉ
ị
ọ ấ
ả
•SCROLL: Ch đ nh tùy ch n l y b n ghi theo hình
ứ
ố ớ ườ
ợ
ng h p không khai báo tùy
ọ
ọ
ặ
ị
th c NEXT, PRIOR, FIRST, LAST, ABSOLUTE,
RELATIVE. Đ i v i tr
ch n này trong khai báo Cursor thì NEXT là tùy ch n
m c đ nh.
ừ ậ
ậ
•READ ONLY cho phép b n ngăn ng a c p nh t
ạ
ữ ệ
hay xóa d li u trên Cursor.
ộ
ộ
ậ
ỉ
ọ
ế
ạ
ỉ
ị
ậ ữ ệ
ữ
ộ
•UPDATE [ OF tên_c t [,…n]: C t cho phép c p
ậ
nh t. N u ch đ nh trong tùy ch n này thì b n ch có
ể ậ
th c p nh t d li u trong nh ng c t này.
5.11.2.1 Khai báo Cursor
•Khai báo bi n Cursor_Hocphan nh
ư
5.11.2.2 M Cursor
ế
ạ
ở
ể
Sau khi khai báo bi n Cursor, b n có th
ở
ữ ệ
5.11.2.3 L y d li u
ấ
ộ ữ ệ
ộ
Tùy thu c vào c t d li u mà phát bi u
ả ề ạ
SELECT tr v , b n có th s d ng phát bi u
ư
FETCH v i cú pháp nh sau:
FETCH
[[NEXT | PRIOR | FIRST| LAST
|ABSOLUTE {n| @nvar}|
RELATIVE {n| @nvar}]
FROM
]
{{[GLOBAL]Tên_Cursor}|
Tên_biến_Cursor}
[INTO Tên_biến [/...n]]
ữ ệ
5.11.2.3 L y d li u
ấ
•NEXT: Cho phép l y b n ghi ngay sau
ả
ấ
ị
ả
b n ghi hi n hành và ch đ nh b n ghi v a
ấ
l y ra là b n ghi hi n hành.
ữ ệ
5.11.2.3 L y d li u
ấ
ữ ệ
5.11.2.3 L y d li u
ấ
ữ ệ
ộ
ụ
5.11.2.3 L y d li u
ấ
•Ví d : Đ l y d li u c a các c t khai báo
ể ấ
ủ
ạ
ể
trong phát bi u SQL vào các bi n c c b thì b n
ư
khai báo nh sau
DECLARE @Mahocphan nvarchar(10)
DECLARE @Tenhocphan nvarchar(50)
DECLARE @Sotinchi smallint
FETCH NEXT FROM Cursor_Hocphan
INTO @Mahocphan, @Tenhocphan,
@Sotinchi
ệ ả
ừ
ạ
ả
ể
ể ử ụ
ể
ị ứ
ả ề
ớ ả
ấ
5.11.2.4 Duy t b n ghi
ệ
Đ duy t qua t ng b n ghi trong Cursor, b n có
th s d ng hàm @@FETCH_STATUS và phát bi u
WHILE. Hàm @@FETCH_STATUS tr v giá tr 0 ng
v i b n ghi l y ra h p l
ợ ệ
.
ộ ữ ệ
ế
ể
ẽ
Phát bi u sau s in toàn b d li u trong bi n
Cursor_Hocphan
WHILE @@FETCH_STATUS=0
BEGIN
PRINT @Mahocphan + ‘-’ + @Tenhocphan +
‘-’ +@Sotinchi
FETCH NEXT FROM Cursor_Hocphan
INTO @Mahocphan, @Tenhocphan, @Sotinchi
END
ả
ộ
ớ
i phóng b nh
5.11.2.5 Đóng và gi
ế
cho bi n Cursor
ế
Sau khi k t thúc làm vi c v i Cursor,
ả
ể
ạ
b n c n khai báo đ đóng Cursor và gi
ấ
ớ
phóng b nh đã c p cho nó v i cú
pháp nh sau:
ệ ả
ừ
ạ
ả
ể
ể ử ụ
ể
ị ứ
ả ề
ớ ả
ấ
5.11.2.4 Duy t b n ghi
ệ
Đ duy t qua t ng b n ghi trong Cursor, b n có
th s d ng hàm @@FETCH_STATUS và phát bi u
WHILE. Hàm @@FETCH_STATUS tr v giá tr 0 ng
v i b n ghi l y ra h p l
ợ ệ
.
ộ ữ ệ
ế
ể
ẽ
Phát bi u sau s in toàn b d li u trong bi n
Cursor_Hocphan
WHILE @@FETCH_STATUS=0
BEGIN
PRINT @Mahocphan + ‘-’ + @Tenhocphan +
‘-’ +@Sotinchi
FETCH NEXT FROM Cursor_Hocphan
INTO @Mahocphan, @Tenhocphan, @Sotinchi
END
ÀM
ớ
ệ
6.1. Gi
i thi u
ị
ệ ố
6.2 Hàm h th ng
ả ề
ị ơ
ả ề
ấ
ệ ố
6.2.1 Hàm h th ng tr v giá tr đ n
• Nhóm hàm Configuration (C u hình)
ị ổ
ợ
6.2.2 Hàm tr v giá tr t ng h p
ả ề
ợ
ể ổ
th ng kê d li u
Hàm Rank
•Hàm này dùng đ t o ra c t v th
ộ ị ứ
ể ạ
ị ủ
Hàm Rank
•Ví d : Hi n th danh sách đi m thi l n 1 h c
ọ
ể
ị
ầ
ph n có mã là Tinvp. Trong k t qu tr v có
ể
hi n th thêm c t x p v th d a vào đi m thi l n
1.
RANK() OVER (ORDER BY DIEM DESC)
AS [VI THU]
Hàm Rank
Hàm Rank
RANK() OVER (PARTITION BY
DESC) AS
GIOITINH ORDER BY DIEM
[VI THU]
Hàm Rank
Hàm Dense_Rank
ự
hàm Rank, tuy nhiên các giá
Rank
Hàm Ntile
ị
ự
hàm Rank, tuy nhiên các giá tr
ạ
ớ ạ
i h n trong ph m vi ch đ nh.
c gi
Hàm Ntile
•S d ng hàm NTILE cho t ng b n ghi trong
ừ
ộ
SELECT DT.MASV,
Hàm Row_Number
Row_Number () OVER (ORDER BY DIEM)
AS [SO MAU TIN]
ườ
ị
i dùng đ nh nghĩa
6.3 Hàm do ng
ạ
6.3.1 T o hàm
ạ
ạ
6.3.1 T o hàm
ị ơ
ả ề
6.3.1.1 T o hàm tr v giá tr đ n
•Kích nút ph i chu t lên m c Scalar valued
ộ
ử
ổ
Functions ch n New Scalar valued Function, c a s
ệ
ạ
Query xu t hi n cho phép b n so n th o câu l nh TSQL
đ t o hàm. Cú pháp t o hàm tr v giá tr đ n nh sau:
CREATE FUNCTION tên_hàm
([danh_sách_tham_s ]) ố
ể
ả ề ủ
ả ả ề
ế
ủ
ả ả ề ủ
ệ
ế
RETURNS (ki u_tr _v _c a_hàm)
AS
BEGIN
ế
Khai báo bi n k t qu tr v
các_câu_l nh_c a_hàm
RETURN k t qu tr v c a hàm
END
ị ể
ủ
ị
ngày
ể
ế
ả
ụ ị
func_XemSV:
Ví d : Đ nh nghĩa hàm
CREATE FUNCTION func_XemSV(@khoahoc
ể
ế
ả
ụ ị
Ví d : Đ nh nghĩa hàm
func_XemSV:
ề ệ
ả
CREATE FUNCTION
tên_hàm([danh_sách_tham_số])
RETURNS @biến_bảng TABLE
định_nghĩa_bảng
AS
BEGIN
các_câu_lệnh_trong_thân_hàm
RETURN
END
ề ệ
ả
ề ệ
ả
6.3.2 Thay đ i hàmổ
7.1 DML Trigger
ớ
ệ
7.1.1 Gi
i thi u DML
Trigger
7.1 DML Trigger
ệ
i thi u DML Trigger
ớ
7.1.1 Gi
ụ
ự ữ
7.1.2 T o DML Trigger
ạ
ấ
ạ
T o Trigger theo c u trúc sau:
CREATE TRIGGER tên_trigger
ON tên_bảng
FOR {[INSERT][,][UPDATE][,][DELETE]}
AS
[IF UPDATE(tên_cột)
[AND UPDATE(tên_cột)|OR
UPDATE(tên_cột)]
...]
các_câu_lệnh_của_trigger
ạ
ộ
ả
7.1.2.1 T o Trigger cho hành đ ng thêm b n
ghi
•SQL Server đ nh nghĩa hai b ng logic
INSERTED và DELETED đ s d ng trong
các trigger.
ạ
ộ
ả
7.1.2.1 T o Trigger cho hành đ ng thêm b n
ghi
•Khi câu l nh DELETE đ
ệ
ả
c th c thi trên b ng,
ữ ệ
c sao chép vào
các dòng d li u b xoá s đ
trong b ng DELETED. B ng INSERTED trong
tr
ộ
ạ
ả
7.1.2.1 T o Trigger cho hành đ ng thêm b n
ghi
ộ
ạ
ả
7.1.2.1 T o Trigger cho hành đ ng thêm b n
ghi
CREATE TRIGGER trg_insert_tblLOP
ON LOP
AFTER INSERT
AS
BEGIN
DECLARE @hedaotao nvarchar(25)
DECLARE @malop nvarchar(10)
SELECT @hedaotao=hedaotao, @malop= malop
FROM INSERTED
IF @hedaotao='' or @hedaotao is null
UPDATE LOP
SET hedaotao='Chính quy'
Where malop=@malop
END
ạ
7.1.2 T o DML Trigger
•7.1.2.2 T o Trigger cho hành đ ng
7.1.2 T o DML Trigger
ả
ạ
ụ ạ
ẫ
ộ
ệ ư
ả
ừ ả
7.1.2.3 T o Trigger cho hành đ ng xóa b n ghi
ự
Ví d : T o Trigger th c hi n l u các m u
b ng DIEMTHI vào b ng
ị
tin b xóa t
DELECTED_DIEMTHI).
ề
ệ
7.1.2.4 S d ng m nh đ IF UPDATE
ề
S d ng m nh đ IF UPDATE trong
ạ
ử ụ
ệ
ố
ổ ữ ệ
ử ụ
ề
ệ
7.1.2.4 S d ng m nh đ IF UPDATE
ON nhatkybanhang
FOR UPDATE
AS
IF UPDATE(soluong)
UPDATE mathang
SET mathang.soluong = mathang.soluong –
(inserted.soluong-deleted.soluong)
FROM (deleted INNER JOIN inserted ON
deleted.stt = inserted.stt) INNER JOIN
mathang
ON mathang.mahang = deleted.mahang
7.2 DDL Trigger
i thi u DDL Trigger
7.2.1 Gi
•DDL (Data Definition Language) Trigger
ườ ử ụ
i s d ng làm thay
ố ượ
ộ
7.2 DDL Trigger
i thi u DDL Trigger
7.2.1 Gi
7.2 DDL Trigger
i thi u DDL Trigger
7.2.1 Gi
7.2 DDL Trigger
7.2.2 T o DDL Trigger
7.2 DDL Trigger
7.2.2 T o DDL Trigger
7.2 DDL Trigger
7.2.3 Hàm Eventdata
•Thông tin v nh ng s ki n làm kích ho t DDL trigger
ượ ư ạ
c l u l
đ
ị ể
ộ
m t giá tr ki u xml. L
tin sau:
́
ứ
ự
8.1.1 Ca c kiêu ch ng th c
ự
8.1.1 Ca c kiêu ch ng th c
́
ứ
ự
Thay đ i ki u ch ng th c:
•Trong c a s Object Explorer, nh n ph i
ả
ộ
́
ự
8.1.1 Ca c kiêu ch ng th c
ứ
ả
: M c đ nh, phiên b n SQL Server 2005
́
8.1.2.2 T o đăng nh p SQL Server
8.1.3.1 Gi
8.1.3.1 Gi
8.1.3.1 Gi
ớ
8.1.3.1 Gi
i thi u
ạ
ề
SQL Server phân ra 4 lo i nhóm:
•Nhóm quy n CSDL do ng
ị
i dùng đ nh nghĩa:
ề
ườ
ế ớ
đ nh nghĩa nhóm quy n
ụ
•Nhóm quy n ng d ng:
ề ứ
̃
ơ ở ư
8.3 Bao tri c s d liêu
̀
ự