Ị Ệ

ƯỜ

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  T­SQL. ữ - 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  T­SQL ạ - 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 T­SQL ,  ộ 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 T­SQL d ng truy v n d  li u ữ ệ ng 4: Phát bi u T­SQL 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à Ashton­Tate đ  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à Transact­SQL (T­SQL).

ữ ở ộ ẩ

SQL Server 2005

11

ự • Ngôn ng  T­SQL trong SQL Server  ự 2005 m  r ng d a trên chu n ANSI  SQL­99 trong khi SQL Server 2000 m  ở ẩ ộ r ng d a trên chu n ANSI SQL­92.

̀ ́ ơ ̣

ữ ủ

1.2 Gi i thiêu vê  SQL Server 2005 (3/4) • Ngôn ng  truy v n c a Microsoft SQL  ấ Server là Transact­SQL (T­SQL).

ữ ở ộ ẩ

SQL Server 2005

12

ự • Ngôn ng  T­SQL trong SQL Server  ự 2005 m  r ng d a trên chu n ANSI  SQL­99 trong khi SQL Server 2000 m  ở ẩ ộ r ng d a trên chu n ANSI SQL­92.

́ ̀ ơ ̣ 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 T­SQL

ườ

ườ

ể ứ

•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: •    T­SQL: 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 T­SQL 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 T­SQL 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ã T­SQL 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ã T­SQL 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 T­SQL 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

•User­Defined Data Types

•User­Defined 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 ữ ố ế  1038­1

ể ư

ả ề ệ •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.23E­308, giá tr  0 và t ế 2.23E­308 đ 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^31­1 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^31­1 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^31­1 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^30­1 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^31­1 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^31­1 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 T­SQL dang truy vâ n d  li u

3.1. Gi

ữ i thi u ngôn ng  T­SQL 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 T­SQL 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  T­SQL và SQL

ấ 3.1 Gi • T­SQL (Transact ­ Structured Query  ữ ệ ự Language) là th c hi n ngôn ng  truy v n  ủ có c u trúc (SQL) c a Microsoft.

ươ ượ ậ • T­SQL đ 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  T­SQL 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  T­SQL 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 SQL­86

ở SQL­87 Đ c công b  đ u tiên b i  ở ượ ANSI. Đ c phê chu n b i  ISO năm 1987.

1989 SQL­89

1992 SQL­92

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  T­SQL 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  SQL­92  (năm  đ 1992 ANSI SQL đ t  ớ v i tên là ISO ANSI SQL­92) và chúng  không  ặ ả ượ   c xem xét đ  làm phù h p theo các đ c t đ ủ c a ANSI SQL­99 hay ANSI SQL­2003.

ủ ệ 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  [^a­f] hay m t t p (ví d

Ký t ộ ậ (ví d  [a­f]) 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à dl01­001.

ụ ấ ủ ị ể ể

ầ • 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 T­SQL 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  ế (‘tm01­001’,‘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 (‘tm01­001’,‘ 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 T­SQL, 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 T­SQL. ượ ứ 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 T­SQL đ  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

5.5.2 Phát bi u Set

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.

ể ữ

ộ ủ ạ

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.

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

ế

ả K t qu  tong=0

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 C u trúc đi u khi n

ấ 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

5.7.1 C u trúc If...Else

ư ấ 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.

ế

5.7.1 C u trúc If...Else ộ

ư t th  t c đ a vào m t masv.

ụ Ví d  1: Vi ế ệ

ế

ị ứ

ấ ủ ụ 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”.

ế ư ầ ụ 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.

5.7.2 C u trúc While •C u trúc đi u khi n While cho phép  ể ế

ư ấ ề ậ ệ ặ ạ 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

ế

ủ ụ

ố ừ

ụ 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

SQL Server 2005

255

END

ể 5.7.3 Phát bi u Continue

ể ạ

•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.

ế

ủ ụ

ố ẻ ừ

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

SQL Server 2005

257

END

5.7.4 Phát bi u Break ể

ạ ỏ 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.

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

SQL Server 2005

259

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.

ủ ụ ử ụ

ị ươ 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]

ế

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 đó.

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

5.7.5 Phát bi u Return

ự ạ

ể •Sau khi đã t o th  t c

ủ ụ THILAI, b n th c  ệ ộ ậ ư ạ thi m t t p các câu l nh nh  sau:

Declare @dem int

Exec @dem=thilai 'dl01­002'

SQL Server 2005

262

ạ ố Print N'S  môn thi l i '+ Str(@dem)

5.7.6 C u trúc Try...Catch

ấ 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.

ấ ấ

5.7.6 C u trúc Try...Catch ư C u trúc Try… Catch có c u trúc nh

sau:

BEGIN TRY

ệ } { 

END TRY

BEGIN CATCH

ệ } { 

END CATCH

SQL Server 2005

264

[ ; ]

ộ ố

5.7.6 C u trúc Try...Catch ề ỗ i:

ả ề

ố ỗ

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

ể ỗ

ủ ụ

i trong th  t c chia hai s

ề Ví d : Đi u khi n l CREATE PROCEDURE phepchia(@sobichia float, @sochia

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

5.7.6 C u trúc Try...Catch

ủ ụ ự

ấ •Khi th c thi th  t c trên:

phepchia 3 , 0

ế ả •K t qu  trình bày trong ngăn Results và

SQL Server 2005

267

ư ngăn Messages nh  sau:

5.7.7 C u trúc Case •C u trúc này có cú pháp 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

5.7.7 C u trúc Case •C u trúc này có cú pháp nh  sau: ư

Ho c:ặ

CASE

ề ế ả ệ    WHEN đi u_ki n THEN k t_qu

[ ... ]

ả ủ ế [ELSE k t_qu _c a_else]

SQL Server 2005

269

END

5.7.7 Phát bi u Case

ể ể ặ ệ ử ụ ớ ị 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

5.7.7 C u trúc Case

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

ậ ộ

5.7.7 C u trúc Case Nh p vào m t masv,

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

ố ớ ị

ẽ ượ

ị ặ c gán cho tham

ố ố ố ng h p không truy n đ i s

5.8 Tham s  v i giá tr  m c đ nh •Giá tr  m c đ nh 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:

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)

SQL Server 2005

AND

tenlop=@tenlop

274

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 ụ

ư ủ ụ 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'

ị ặ

ố ớ 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

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'ẵ

ủ ụ ổ 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  ầ ấ

ủ ụ ệ

ả ổ i câu l nh T­SQL đ  s a đ i th  t c.

ệ ủ ụ

ộ ạ

ọ ạ ử 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

ổ ể ử ư i nh  sau:

ủ ụ   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

SQL Server 2005

277

ả ầ

•Kích nút ph i chu t lên th  t c c n xóa,  ọ ặ

5.10 Xoá th  t củ ụ ủ ụ ộ ể ử ụ ớ

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ủ ụ

i thi u Cursor

5.11.1 Gi ữ ệ Ki u d  li u Cursor đ ợ ườ

ử ụ ả

ạ ả

ệ ặ ộ

ừ ị  v  trí hi n  ả ế ậ

ệ   ượ ể 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

ậ ả ệ

ậ ạ ể

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.

5.11.1 Gi

ươ

i thi u Cursor ấ

ng

ể ọ

ươ ạ

ợ ử ụ ẩ

ươ

ng th c Database API  ng ADO, OLE

ớ   •SQL Server 2005 cung c p hai ph ứ th c đ  g i Cursor là T­SQL và hàm  Database API (Application Programming  ứ ng th c T­ Interface). Trong đó, lo i ph ỗ ữ SQL dùng ngôn ng  T­SQL có cú pháp h   tr  s  d ng Cursor theo các chu n sau  ứ ạ SQL­92. Lo i ph ố ượ ồ bao g m hàm trong đ i t DB, ODBC.

ẫ ộ ụ

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

5.11.2 Quá trình x  lý c a Cursor ặ M c dù Cursor lo i T­SQL và API có cú pháp

ư

khác nhau nh ng quá trình x  lý đ u theo quy  trình t ng quát sau:

ổ ế ợ

ớ ậ ặ

phát  bi u T­SQL 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 T­SQL đ  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

5.11.2.1 Khai báo Cursor •Khai báo Cursor s  d ng T­SQL có cú  ử ụ

ư 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]]} ]

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.

SQL Server 2005

284

ế

5.11.2.1 Khai báo Cursor •Khai báo bi n Cursor_Hocphan nh   ư

sau

DECLARE Cursor_Hocphan CURSOR

SQL Server 2005

285

FOR Select * from hocphan

5.11.2.2 M  Cursor ế

ở ể Sau khi khai báo bi n Cursor, b n có th   ở

m  Curosr theo cú pháp sau:

•OPEN Tên_Cursor

SQL Server 2005

286

•Ví d :ụ OPEN Cursor_Hocphan

ữ ệ

ể ử ụ

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]]

SQL Server 2005

287

ữ ệ

ừ ả ỉ

ệ ả ệ

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.

ướ ả 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.

ữ ệ

5.11.2.3 L y d  li u ấ

ế

ả •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.

ữ ệ

5.11.2.3 L y d  li u ấ

ế

ả •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

ữ ệ

ữ ệ ộ ụ

ế

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

SQL Server 2005

291

ệ ả

ể ể ử ụ

ể ị ứ

ả ề

ớ ả

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

SQL Server 2005

292

ớ i phóng b  nh

5.11.2.5 Đóng và gi

ế

ớ ệ

ầ i

ộ ư

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:

CLOSE Tên_Cursor

DEALLOCATE Tên_Cursor

Ví d :ụ

SQL Server 2005

293

CLOSE Cursor_Hocphan

DEALLOCATE Cursor_Hocphan

ệ ả

ể ể ử ụ

ể ị ứ

ả ề

ớ ả

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

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

ÀM

ớ ệ 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

6.1. Gi

i thi u ị

• 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 Hàm h  th ng ả ề

ệ ố ị ơ 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

ị ơ

ả ề ấ

ệ ố 6.2.1 Hàm h  th ng tr  v  giá tr  đ n • Nhóm hàm Configuration (C u hình)

• 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

ị ổ

6.2.2 Hàm tr  v  giá tr  t ng h p

• Dùng đ  t ng h p hay

ữ ệ ố

ả ề ợ ể ổ th ng kê d  li u

ơ ả • 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

Hàm Rank •Hàm này dùng đ  t o ra c t v  th   ộ ị ứ ể ạ ị ủ

ộ ộ ự 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 ] Order By  [DESC| ASC])

ả ả ề ể

ế ị ứ ự

ộ ế

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.

SELECT DT.MASV,

HODEM,TEN,GIOITINH, DIEM,

RANK() OVER (ORDER BY DIEM DESC)

AS [VI THU]

FROM DIEMTHI DT INNER JOIN SINHVIEN SV ON DT.MASV=SV.MASV WHERE MAHOCPHAN='TINVP' AND

LANTHI=1

SQL Server 2005

304

Hàm Rank

SQL Server 2005

305

ả •K t quế

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. 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,

RANK() OVER (PARTITION BY

DESC) AS

GIOITINH ORDER BY DIEM [VI THU]

FROM DIEMTHI DT INNER JOIN SINHVIEN SV ON DT.MASV=SV.MASV WHERE MAHOCPHAN='TINVP' AND

LANTHI=1

SQL Server 2005

306

Hàm Rank

SQL Server 2005

307

ả •K t quế

ươ

Hàm Dense_Rank ự  hàm Rank, tuy nhiên các giá

•t ng t

ộ ị ứ ị ị tr  trên c t v  th  có giá tr  liên t c. ụ Dense_Rank

Rank

SQL Server 2005

308

ươ

ng t

ộ ị ứ ượ

•Hàm này t trên c t v  th  đ

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 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

ử ụ

Hàm Ntile •S  d ng hàm NTILE cho t ng b n ghi trong  ừ ộ

ẽ ư

ả ố

ế

m t nhóm s  đ a ra các x p lo i gi ng nhau.

•Ví d :ụ

SELECT DT.MASV,

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

Hàm Row_Number

• 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,

Row_Number () OVER (ORDER BY DIEM) AS [SO MAU TIN]

FROM DIEMTHI DT INNER JOIN SINHVIEN

SV ON DT.MASV=SV.MASV

SQL Server 2005

311

ườ

ị i dùng đ nh nghĩa

6.3 Hàm do ng ạ 6.3.1 T o hàm

SQL Server 2005

312

6.3.2 Thay đ i 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 T­SQL  đ  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

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

ngày

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:

ụ ị

func_XemSV:

Ví d : Đ nh nghĩa hàm   CREATE FUNCTION func_XemSV(@khoahoc

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:

ụ ị

Ví d : Đ nh nghĩa hàm

func_XemSV:

ể ế

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 (Multi­Statement Table­valued Function ):

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

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 (Multi­Statement Table­valued 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 (Multi­Statement Table­valued 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)

6.3.2 Thay đ i hàmổ

• 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

7.1 DML Trigger

(Data Manipulation Language)

7.1.1 Gi

i thi u DML

Trigger

ự ữ ệ

ả ượ

ộ ả

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 DML Trigger

ớ ệ 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.

i thi u DML Trigger

ớ 7.1.1 Gi ụ ự ữ

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

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

SQL Server 2005

327

ả ị

ể ử ụ

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.

ấ ươ ả •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:

ượ ẽ ượ ả

ữ ệ

ườ

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

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

7.1.2.1 T o Trigger cho hành đ ng thêm b n  ghi

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’.

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

SQL Server 2005

331

7.1.2 T o DML Trigger •7.1.2.2 T o Trigger cho hành đ ng

ậ ạ ậ ả 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 đó.

7.1.2 T o DML Trigger

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

ạ ụ ạ

ộ ệ ư ả

ừ ả

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).

CREATE TRIGGER Trg_Delete_DIEMTHI ON DIEMTHI AFTER DELETE AS BEGIN

INSERT INTO DELETED_DIEMTHI SELECT * FROM DELETED

END

SQL Server 2005

334

ử ụ ế

ệ 7.1.2.4 S  d ng m nh đ  IF UPDATE ề S  d ng m nh đ  IF UPDATE trong  ạ

ượ

ử ụ ệ ố ổ ữ ệ

ộ ỉ

ệ ố ộ ấ ị ủ ả 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.

ử ụ

ệ 7.1.2.4 S  d ng m nh đ  IF UPDATE

ụ Ví d  7.4: •CREATE TRIGGER trg_nhatkybanhang_update_soluong

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

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

ệ ớ

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  ố ượ ộ

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

ệ ớ

7.2 DDL Trigger  i thi u DDL Trigger

7.2.1 Gi

ạ ế ế

ể ể

ử ụ

•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.

ệ ớ

7.2 DDL Trigger  i thi u DDL Trigger

7.2.1 Gi

•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.

7.2 DDL Trigger

7.2.2 T o DDL Trigger

ấ ạ 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

7.2 DDL Trigger

7.2.2 T o DDL Trigger

ụ Ví d  7.8:

ụ ạ ạ Ví d : T o Trigger không cho t o

SQL Server 2005

343

Database

7.2 DDL Trigger

ự ệ

ượ

ả ề i trong trong hàm Eventdata. Hàm này tr  v   c đ  xml này bao g m các thông

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:

ự ệ

ử ế ố

ượ

•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 T­SQL  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.

́

̉

ự   8.1.1 Ca c kiêu ch ng th c

ự ứ ể 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.

̉

ự   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  ả ộ

ấ ổ ể ạ ố

ứ ự 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. ấ

́

̉

ự   8.1.1 Ca c kiêu ch ng th c

ứ ả : M c đ nh, phiên b n SQL Server 2005

•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

ạ ậ

8.1.2.2 T o đăng nh p SQL Server

SQL Server 2005

350

ớ ậ 8.1.2.2 Đăng nh p v i User sa

́ 8.1.3 Nho m (Roles)

ớ ệ

8.1.3.1 Gi

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)

ớ ệ

8.1.3.1 Gi

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)

ớ ệ

8.1.3.1 Gi

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) ệ

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

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

•Nhóm quy n  ng d ng: ề ứ

ụ 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 Bao tri  c  s  d  liêu

̀ ự

8.3.1 Sao l u d  pho ng̀ ư

SQL Server 2005

358

̃ ơ ở ư ̣ ̣ 8.3.2 Khôi phuc c  s  d  liêu