76
TRƢỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN HỆ THỐNG THÔNG TIN -----***----- BÀI GIẢNG HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU TÊN HỌC PHẦN : HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MÃ HỌC PHẦN : 17402 TRÌNH ĐỘ ĐÀO TẠO : ĐẠI HỌC CHÍNH QUY DÙNG CHO SV NGÀNH : CÔNG NGHỆ THÔNG TIN HẢI PHÒNG - 2011

BÀI GIẢNG HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆUtcnducpho.edu.vn/ADMIN/10-MODULE-TAI-LIEU/41-TAI-LIEU/HINHANH… · KHOA CÔNG NGHỆ THÔNG TIN ... Chương I. Giới thiệu

Embed Size (px)

Citation preview

TRƢỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM

KHOA CÔNG NGHỆ THÔNG TIN

BỘ MÔN HỆ THỐNG THÔNG TIN

-----***-----

BÀI GIẢNG

HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

TÊN HỌC PHẦN : HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

MÃ HỌC PHẦN : 17402

TRÌNH ĐỘ ĐÀO TẠO : ĐẠI HỌC CHÍNH QUY

DÙNG CHO SV NGÀNH : CÔNG NGHỆ THÔNG TIN

HẢI PHÒNG - 2011

2

MỤC LỤC

Chương I. Giới thiệu ................................................................................................................ 8

1.1. Giới thiệu về hệ quản trị. .............................................................................................. 8

1.2. Tổng quan SQL Server 2005 ...................................................................................... 10

1.3. Giới thiệu SQL Management Tool ............................................................................. 10

1.4. Ngôn ngữ vấn tin có cấu trúc ...................................................................................... 11

Chương II. Tạo và quản lý cơ sở dữ liệu ............................................................................... 12

2.1. Các tệp tin cơ sở dữ liệu (Database files) ................................................................... 12

2.2. Tạo cơ sở dữ liệu (Database) ...................................................................................... 12

2.3. Sửa cơ sở dữ liệu ......................................................................................................... 14

2.4. Xóa cơ sở dữ liệu ........................................................................................................ 15

2.5. Các system database đặc biệt ...................................................................................... 16

Chương III. Tạo và quản lý các bảng .................................................................................... 18

3.1. Tạo bảng (CREATE TABLE) .................................................................................... 18

3.2. Định nghĩa các cột (Columns) .................................................................................... 19

3.3. Định nghĩa các ràng buộc (Constrains)....................................................................... 20

3.4. Sửa bảng (ALTER TABLE) ....................................................................................... 21

3.5. Xóa bảng (DROP TABLE) ......................................................................................... 22

3.6. Thêm bản ghi mới (INSERT) ..................................................................................... 23

3.7. Cập nhật bản ghi (UPDATE) ...................................................................................... 25

3.8. Xóa bản ghi (DELETE) .............................................................................................. 25

Chương IV. Truy vấn dữ liệu ................................................................................................. 27

4.1. Truy vấn cơ bản .......................................................................................................... 27

4.2. Sử dụng biểu thức và hàm .......................................................................................... 30

4.3. Truy vấn từ nhiều bảng ............................................................................................... 33

4.4. Truy vấn lồng nhau ..................................................................................................... 37

Chương V. Tạo và quản lý các chỉ mục ................................................................................. 40

5.1. Các kiểu chỉ mục (Indexes) ........................................................................................ 40

5.2. Tạo các chỉ mục .......................................................................................................... 40

5.3. Quản lý và gỡ bỏ các chỉ mục ..................................................................................... 42

3

Chương VI. Tạo và quản lý khung nhìn ................................................................................ 45

6.1. Định nghĩa ................................................................................................................... 45

6.2.Mục đích sử dụng: ....................................................................................................... 45

6.3. Tạo các khung nhìn (Views) ....................................................................................... 46

6.4. Quản lý các khung nhìn .............................................................................................. 47

Chương VII. Tạo và quản lý các thủ tục thường trú .............................................................. 50

7.1. Giới thiệu. ................................................................................................................... 50

7.2. Tạo các thủ tục thường trú. ......................................................................................... 51

7.3. Thực thi thủ tục thường trú. ........................................................................................ 51

7.4. Quản lý các thủ tục thường trú.................................................................................... 52

7.5. Tham số vào và ra. ...................................................................................................... 53

7.6. Thủ tục thường trú hệ thống. ...................................................................................... 54

Chương VIII. Tạo và quản lý hàm người dùng định nghĩa ................................................... 56

8.1. Các kiểu hàm người dùng định nghĩa (User-defined functions)................................. 56

8.2. Tạo hàm người dùng định nghĩa ................................................................................. 56

8.3. Quản lý hàm người dùng định nghĩa .......................................................................... 57

Chương IX. Tạo và quản lý các Trigger ................................................................................ 60

9.1. Tạo các Trigger thao tác dữ liệu (DML Triggers) ...................................................... 60

9.2. DDL Trigger và DML Trigger .................................................................................... 62

9.3. Sử dụng các Trigger lồng nhau (Nested Triggers) ..................................................... 63

9.4. Sử dụng các Trigger đệ quy: ....................................................................................... 64

4

Tên học phần: Hệ quản trị Cơ sở dữ liệu Loại học phần: 4

Bộ môn phụ trách giảng dạy: Hệ thống Thông tin Khoa phụ trách: CNTT.

Mã học phần: 17402 Tổng số TC: 4

Tổng số

tiết

Lý thuyết Thực hành/ Xemina Tự học Bài tập lớn Đồ án môn

học

90 45 30 0 có không

Học phần học trƣớc: Không yêu cầu.

Học phần tiên quyết: Không yêu cầu.

Học phần song song: Không yêu cầu.

Mục tiêu của học phần:

Cung cấp cho sinh viên những kiến thức cơ bản về hệ quản trị cơ sở dữ liệu; Các chức năng

và công cụ cần thiết để quản trị cơ sở dữ liệu cho người phát triển hệ thống.

Nội dung chủ yếu:

Giới thiệu về hệ quản trị cơ sở dữ liệu; Tạo và quản lý cơ sở dữ liệu; Tạo và quản lý các

bảng; Truy vấn dữ liệu; Tạo và quản lý các chỉ mục; Tạo và quản lý các khung nhìn; Tạo và

quản lý các thủ tục thường trú; Tạo và quản lý các hàm người dùng định nghĩa; Tạo và quản

lý các Trigger.

Nội dung chi tiết:

TÊN CHƢƠNG MỤC

PHÂN PHỐI SỐ TIẾT

TS LT BT TH KT

Chƣơng 1. Giới thiệu 5 3 2

1.1. Hệ quản trị cơ sở dữ liệu Microsoft SQL Server

(2005)

1.2. Các thành phần cơ bản trong Microsoft SQL Server

(2005)

1.3. Ngôn ngữ truy vấn dữ liệu có cấu trúc (SQL)

Chƣơng 2. Tạo và quản lý cơ sở dữ liệu 10 6 4

2.1. Các tệp tin cơ sở dữ liệu (Database files)

2.2. Tạo cơ sở dữ liệu (Database)

2.3. Quản lý cơ sở dữ liệu

2.4. Xóa cơ sở dữ liệu

5

TÊN CHƢƠNG MỤC

PHÂN PHỐI SỐ TIẾT

TS LT BT TH KT

Chƣơng 3. Tạo và quản lý các bảng 15 9 6

3.1. Tạo bảng (Tables)

3.2. Định nghĩa các cột (Columns)

3.3. Định nghĩa các ràng buộc (Constrains)

3.4. Sửa bảng (ALTER TABLE)

3.5. Xóa bảng (DROP TABLE)

3.6. Thêm bản ghi mới (INSERT)

3.7. Cập nhật bản ghi (UPDATE)

3.8. Xóa bản ghi (DELETE)

Chƣơng 4. Truy vấn dữ liệu 20 12 8

4.1. Truy vấn cơ bản

4.1.1. Mệnh đề SELECT

4.1.2. Mệnh đề FROM

4.1.3. Mệnh đề WHERE

4.1.4. Mệnh đề GROUP BY và HAVING

4.1.5. Mệnh đề ORDER BY

4.1.6. Kết hợp kết quả từ nhiều truy vấn khác nhau

4.2. Truy vấn từ nhiều bảng

4.2.1. Inner Joins

4.2.2. Outer Joins

4.3. Truy vấn lồng nhau (Subqueries)

Chƣơng 5. Tạo và quản lý các chỉ mục 5 3 2

5.1. Các kiểu chỉ mục (Indexes)

5.2. Tạo các chỉ mục

5.3. Quản lý các chỉ mục

5.4. Xóa các chỉ mục

Chƣơng 6. Tạo và quản lý khung nhìn 5 3 2

6.1. Định nghĩa

6

TÊN CHƢƠNG MỤC

PHÂN PHỐI SỐ TIẾT

TS LT BT TH KT

6.2. Tạo các khung nhìn (Views)

6.3. Quản lý các khung nhìn

6.4. Xóa các khung nhìn

Chƣơng 7. Tạo và quản lý các thủ tục thƣờng trú 5 3 2

7.1. Tạo các thủ tục thường trú (Stored procedures)

7.2. Thực thi các thủ tục thường trú

7.3. Xem và sửa các thủ tục thường trú

7.4. Tham số vào và ra (Parameters)

7.5. Các thủ tục thường trú của hệ thống

Chƣơng 8. Tạo và quản lý hàm ngƣời dùng định nghĩa 5 3 2

8.1. Các kiểu hàm người dùng định nghĩa (User-defined

functions)

8.2. Tạo hàm người dùng định nghĩa

8.3. Quản lý hàm người dùng định nghĩa

Chƣơng 9. Tạo và quản lý các Trigger 5 3 2

9.1. Tạo các Trigger thao tác dữ liệu (DML Triggers)

9.2. Tạo các Trigger định nghĩa dữ liệu (DDL Triggers)

9.3. Sử dụng các Trigger lồng nhau (Nested Triggers)

9.4. Sử dụng các Trigger đệ quy (Recursive Triggers)

Nhiệm vụ của sinh viên:

Tham dự các buổi học lý thuyết và thực hành, làm các bài tập được giao, làm các bài thi

giữa học phần và bài thi kết thúc học phần theo đúng quy định.

Tài liệu học tập:

Dương Quang Thiện, SQL Server 2000: Lập trình T - SQL, NXB Văn hóa Sài Gòn, 2007.

Ray Rankins, Paul Bertucci, Chris Gallelli, Alex T.Silverstein, Microsoft SQL Server 2005

Unleashed, Sams Publishing, 2007.

Brian Knightet al, Professional SQL Server 2005 Administration, Wrox Press, 2007.

Paul Turley & Dan Wood, Beginning Transact-SQL with SQL Server 2000 and 2005, Wrox

Press, 2006.

Hình thức và tiêu chuẩn đánh giá sinh viên:

7

Hình thức thi: thi viết hoặc vấn đáp.

Tiêu chuẩn đánh giá sinh viên: căn cứ vào sự tham gia học tập của sinh viên trong các buổi

học lý thuyết và thực hành, kết quả làm các bài tập được giao, kết quả của các bài thi giữa

học phần và bài thi kết thúc học phần.

Thang điểm: Thang điểm chữ A, B, C, D, F.

Điểm đánh giá học phần: Z = 0,4X + 0,6Y.

Bài giảng này là tài liệu chính thức và thống nhất của Bộ môn Hệ thống Thông tin, Khoa

Công nghệ Thông tin và được dùng để giảng dạy cho sinh viên.

Ngày phê duyệt: / /

Trƣởng Bộ môn

8

Chƣơng I. Giới thiệu

1.1. Giới thiệu về hệ quản trị.

1.1.1. CSDL quan hệ là gì?

Dữ liệu có thể được hiểu như mọi thông tin nói chung.

Tập hợp các dữ liệu liên quan với nhau được tổ chức thành CSDL.

Các mô hình CSDL:

• Mô hình dữ liệu file: dữ liệu được lưu trữ 1 cách rời rạc trên các file. Thường dùng

cho các mô hình đơn giản chỉ có 1 bảng hay 1 file.

• Mô hình phân cấp: dữ liệu được tổ chức liên kết vật lý theo mô hình cây (quan hệ nút

cha nút con). 1 bản ghi cha có quyền có nhiều bản ghi con nhưng 1 bản ghi con chỉ

có duy nhất 1 bản ghi cha

• Mô hình mạng: Mô hình này tương tự mô hình phân cấp. Mô hình phân cấp là 1

trường hợp đặc biệt của mô hình mạng. Trong mô hình mạng dữ liệu được tổ chức

liên kết vật lý theo dạng tập hợp. 1 bản ghi cha có quyền có nhiều bản ghi con và 1

bản ghi con có quyền có nhiều bản ghi cha.

• Mô hình quan hệ. Mô hình quan hệ là mô hình dữ liệu được tổ chức dựa trên mô hình

của đại số quan hệ. Trong đó, dữ liệu được tổ chức thành các bảng dữ liệu. Mỗi bảng

dữ liệu gồm có các cột hay còn gọi là các trường và các dòng hay còn gọi là các bản

ghi. Mối liên hệ giữa các bản ghi được tổ chức theo dạng logic thông qua các cột giá

trị chung.

Cơ sở dữ liệu quan hệ là cơ sở dữ liệu được tổ chức theo mô hình quan hệ.

1.1.2. Hệ quản trị CSDL quan hệ là gì?

Hệ quản trị CSDL là một hệ thống bao gồm các CSDL và phần mềm cho phép tạo

lập CSDL và điều khiển mọi truy nhập đối với CSDL đó.

Hệ quản trị CSDL quan hệ là hệ quản trị CSDL dùng để quản lý CSDL quan hệ.

1.1.3. Các khả năng của hệ quản trị CSDL:

Khả năng quản lý dữ liệu tồn tại lâu dài: đặc điểm này chỉ ra rằng có một cơ sở dữ

liệu tồn tại trong một thời gian dài, nội dung của cơ sở dữ liệu này là các dữ liệu mà

hệ quản trị CSDL truy nhập và quản lý.

Khả năng truy nhập các khối lượng dữ liệu lớn một cách hiệu quả.

Hỗ trợ ít nhất một mô hình dữ liệu hay một sự trừu tượng toán học mà qua đó người

sử dụng có thể quan sát dữ liệu.

Đảm bảo tính độc lập dữ liệu hay tính bất biến của chương trình ứng dụng đối với

các thay đổi về cấu trúc trong mô hình dữ liệu.

9

Hỗ trợ các ngôn ngữ cao cấp nhất định cho phép người dùng định nghĩa cấu trúc dữ

liệu, truy cập và thao tác dữ liệu.

Quản lý giao dịch, có nghĩa là khả năng cung cấp các truy nhập đồng thời đúng đắn

với CSDL từ nhiều người sử dụng tại cùng một thời điểm.

Điều khiển truy nhập, có nghĩa khả năng hạn chế truy nhập đến các dữ liệu bởi các

người dùng không được cấp phép và khả năng kiểm tra tính đúng đắn của CSDL.

Phục hồi dữ liệu, có nghĩa khả năng khôi phục không làm mất mát dữ liệu với các lỗi

hệ thống.

1.1.4. Sơ đồ tổng quát của một hệ quản trị CSDL

1.1.5. Hoạt động của hệ quản trị CSDL

10

1.2. Tổng quan SQL Server 2005

Microsoft SQL Server 2005 là một hệ quản trị cơ sở dữ liệu quan hệ (Relation

Database Management System - RDBMS), cung cấp cách tổ chức dữ liệu bằng cách

lưu chúng vào các bảng. Dữ liệu quan hệ được lưu trữ trong các bảng và các quan hệ

đó được định nghĩa giữa các bảng với nhau.

Một số tính năng mới được đưa ra trong phiên bản này như dịch vụ thông báo, dịch

vụ, dịch vụ báo cáo, môi giới dịch vụ, sự cải tiến database engine.

Các phiên bản của Microsoft SQL Server 2005

• SQL Server 2005 Enterprise Edition.

• SQL Server 2005 Standard Edition.

• SQL Server 2005 Workgroup Edition.

• SQL Server 2005 Developer Edition.

• SQL Server 2005 Express Edition.

Các thành phần chính của SQL Server 2005

• Relational Database Engine.

• Analysis Services.

• Notification Services.

• Data Transformation Services.

• Reporting Services.

• Service Broker.

• Replication.

• Native HTTP Support.

• Full-Text Search.

1.3. Giới thiệu SQL Management Tool

Microsoft SQL SQL Server Management Studio (SSMS), là công cụ mới trên

Microsoft SQL Server 2005, nó là một môi trường được tích hợp cho việc truy xuất,

cấu hình, quản trị và phát triển tất cả các thành phần của SQL Server. SSMS kết hợp

các tính năng của Enterprise Manager, Query Analyzer, và Analysis Manager, được

bao hàm trong các phiên bản trước của SQL Server, thành một môi trường đơn mà

cung cấp truy xuất SQL Server để phát triển và quản trị tất cả các mức kỹ năng trên.

SQL Server Configuration Manager cung cấp các quản trị cấu hình cơ sở cho các

dịch vụ SQL Server (SQL Server services), các giao thức server (server protocols),

các giao thức client (client protocols) và các bí danh client (client aliases).

11

SQL Server Profiler cung cấp giao diện người dùng đồ họa cho việc giám sát thể

hiện của Database Engine hoặc thể hiện của Analysis Services.

Database Engine Tuning Advisor cố vấn, giúp tạo các tập tối ưu các chỉ số (indexes),

indexed views, và các phân vùng (partitions).

1.4. Ngôn ngữ vấn tin có cấu trúc

Mỗi hệ quản trị CSDL có một ngôn ngữ định nghĩa dữ liệu riêng (DDL - Data

Definition Languague). Đây là ngôn ngữ dùng để định nghĩa, khai báo cấu trúc của

CSDL.Những người thiết kế và quản trị CSDL thực hiện các công việc khai báo cấu

trúc CSDL. Các chương trình khai báo cấu trúc CSDL được viết bằng ngôn ngữ DDL

mà hệ quản trị CSDL cho phép.

Các chương trình ứng dụng được viết bằng các ngôn ngữ lập trình

C++/C#/Java/Delphi… kết hợp với các ngôn ngữ thao tác dữ liệu (DML - Data

Manipulation Language) thông qua các thư viện hoặc đối tượng kết nối CSDL được

ngôn ngữ lập trình hỗ trợ: ODBC, RDO, ADO,… Các hệ quản trị CSDL quan hệ

ngày nay phổ biến sử dụng các ngôn ngữ DDL và DML dựa trên ngôn ngữ SQL.

Đối với hệ quản trị CSDL SQL Server thì ngôn ngữ dùng để tương tác với cơ sở dữ

liệu là T – SQL. Đây là một phiên bản của ngôn ngữ SQL. Ngôn ngữ T – SQL trên

SQL Server bao gồm nhiều câu lệnh khác nhau, có thể chia thành 3 nhóm:

• Nhóm ngôn ngữ định nghĩa dữ liệu DDL: với các lệnh cho phép tạo, thay đổi cấu

trúc và xóa bỏ các đối tượng cơ sở dữ liệu như: view, table, database,…

• Nhóm ngôn ngữ thao tác dữ liệu DML: với các lệnh như SELECT /INSERT

/UPDATE /DELETE cho phép lấy về dữ liệu cụ thể, thay đổi giá trị của dữ liệu.

• Nhóm ngôn ngữ điều khiển dữ liệu DCL: với các lệnh cho phép hay ngăn chặn

người dùng thao tác dữ liệu.

Bài tập

Câu 1: Trình bày khái niệm về cơ sở dữ liệu quan hệ. Cơ sở dữ liệu quan hệ có những điểm

khác biệt gì so với hệ thống xử lý file truyền thống?

Câu 2: Trình bày khái niệm về hệ quản trị cơ sở dữ liệu quan hệ.

Câu 3: Nêu các thành phần cơ bản của hệ quản trị CSDL SQL Server.

Câu 4: Trình bày những đặc điểm cơ bản của ngôn ngữ vấn tin SQL.

12

Chƣơng II. Tạo và quản lý cơ sở dữ liệu

2.1. Các tệp tin cơ sở dữ liệu (Database files)

Một cơ sở dữ liệu có thể có tối đa 32726 file. Có thể chia làm 3 loại:

• Primary Files Mỗi database phải có ít nhất một tập tin Primary data file với phần mở

rộng là .MDF. Tập tin này ngoài nhiệm vụ cất trữ dữ liệu thuần túy còn nhiệm vụ lưu

trữ thông tin liên quan đến cấu trúc và đặc điểm của chính database đó (lưu trong các

system tables). Ta tuyệt đối không nên can thiệp vào các system tables này vì việc

này có thể phá hỏng database.

• Secondary Files Mỗi database có thể không có hoặc có nhiều Secondary Data File.

Các tập tin này chỉ thuần túy lưu trữ dữ liệu và có phần mở rộng là .NDF.

• Log Files Mỗi database phải có ít nhất một transaction log file (có phần mở rộng là

.LDF). Log file làm nhiệm vụ lưu trữ thông tin liên quan các giao dịch (transaction)

thực hiện trên database đó. Thông tin này một phần phục vụ cho thao tác Roll Back

khi có lỗi giao dịch xảy ra.

Các tập tin CSDL được tổ chức thành file group(nhóm)theo nguyên tắc:

Một CSDL có thể có một hay nhiều file group. Trong đó bắt buộc phải có một file

group chính gọi là PRIMARY.

Mỗi file group có thể chứa một hay nhiều file(.MDF, .NDF). Trong đó phải có ít nhất

1 tập tin Primary File (.MDF) nằm trong group chính PRIMARY.

Các tập tin Log không thuộc về một file group nào cả.

2.2. Tạo cơ sở dữ liệu (Database)

2.2.1. Sử dụng lệnh CREATE DATABASE

CREATE DATABASE <Tên CSDL>

[ON PRIMARY <Khai báo tập tin .MDF>, [<Khai báo tập tin .NDF>,]…]

[FILEGROUP <Tên file group>

<Khai báo tập tin .NDF>, [<Khai báo tập tin .NDF>,]…]...

[LOG ON <Khai báo tập tin .LDF>, [<Khai báo tập tin .LDF>,]…]

Mỗi tập tin trong CSDL (.MDF,.NDF,.LDF) đêu có 5 thuộc tính cơ bản:

• NAME: Tên logic của tập tin.

• FILENAME: Đường dẫn đầy đủ (tên vật lý).

• SIZE: Kích thước ban đầu của tập tin (KB, MB, GB, TB).

• MAXSIZE: Kích thước tối đa cho phép của tập tin (KB, MB, GB,TB).

• FILEGROWTH : Tốc độ gia tăng kích thước của tập tin (KB, MB, GB, TB,%).

13

Ví dụ: Khi khai báo chúng ta sẽ khai báo như sau:

(NAME = QLBHM, FILENAME = „C:\DB\QLBH.MDF‟,

SIZE = 2MB, MAXSIZE = UNLIMITED, FILEGROWTH = 10%) .

Ví dụ:

CREATE DATABASE QLBH

ON PRIMARY

(NAME = QLBHM, FILENAME = „C:\DB\QLBH.MDF‟, SIZE = 2MB, MAXSIZE =

UNLIMITED, FILEGROWTH = 10%),

(NAME = QLBHN1, FILENAME = „C:\DB\QLBH1.NDF‟, SIZE = 2MB, MAXSIZE =

UNLIMITED, FILEGROWTH = 10%)

FILEGROUP FG

(NAME = QLBHN2, FILENAME = „C:\DB\QLBH2.NDF‟, SIZE = 2MB, MAXSIZE =

UNLIMITED, FILEGROWTH = 10%),

(NAME = QLBHN3, FILENAME = „C:\DB\QLBH3.NDF‟, SIZE = 2MB, MAXSIZE =

UNLIMITED, FILEGROWTH = 10%)

LOG ON

(NAME = QLBHL, FILENAME = „C:\DB\QLBH.LDF‟, SIZE = 2MB, MAXSIZE =

UNLIMITED, FILEGROWTH = 10%)

2.2.2. Sử dụng Management Tool.

14

2.3. Sửa cơ sở dữ liệu

2.3.1. Sử dụng lệnh ALTER DATABSE

ALTER DATABASE <tên CSDL>

[ ADD FILE <Khai báo tập tin .MDF,.NDF> [, . . .] [ TO FILEGROUP <Tên File

Group>] ]

[ADD LOG FILE <Khai báo tập tin .LDF> [, . . .]]

[ADD FILEGROUP <Tên File Group>]

[REMOVE FILE <Tên logic của tập tin>]

[REMOVE FILEGROUP <Tên File Group>]

[MODIFY NAME = <Tên mới cho Database>]

[MODIFY FILE <Khai báo tập tin>]

[MODIFY FILEGROUP <Tên File Group> <Thuộc tính File Group>|NAME = <Tên

mới>]

[COLLATE <Tên collation>]

<Thuộc tính File Group> bao gồm:

• READONLY: Khi một file group bị đánh dấu READONLY thì mọi thao tác cập nhật

dữ liệu trên các tập tin thuộc file group này đều không thể thực hiện được. Không

được phép áp dụng thuộc tính này cho Primary Group.

• READWRITE: Ngược lại với READONLY

• DEFAULT: Đánh dấu file group như là file group mặc định của database hiện thời.

15

Ví dụ:

ALTER DATABASE QLBH

ADD FILE

(NAME = QLBHN4, FILENAME = „C:\DB\QLBH4.NDF‟,

SIZE = 2MB, MAXSIZE = UNLIMITED, FILEGROWTH = 10%)

TO FILEGROUP FG

ADD FILEGROUP FG1

2.3.2. Sửa đổi cơ sở dữ liệu bằng Management Tool

2.4. Xóa cơ sở dữ liệu

2.4.1. Sử dụng lệnh DROP DATABASE trên Query Analyzer

DROP DATABASE <tên CSDL>

Ví dụ: DROP DATABASE QLBH

16

2.4.2. Xóa CSDL sử dụng Management Tool:

2.5. Các system database đặc biệt

Ngay sau khi SQL Server mới được cài đặt xong, có 6 database tự động được cung

cấp. Người ta gọi những database này là các system database để phân biệt với các

database do người dùng tự tạo ra sau này (user database). Các system database bao

gồm:

• Model database

• Master database

• Msdb database

• Tempdb database

• Pubs database

• Northwind database

Master database

Bao gồm tất cả các system table lưu trữ dữ liệu theo dõi việc cài đặt Server về mặt

tổng thể cũng như theo dõi tất cả các user database được tạo ra về sau. Cụ thể hơn,

Master database có chứa những system catalog lưu trữ thông tin liên quan đến:

• Khoảng trống đĩa (space disk).

• Cấp phát tập tin.

• Cài đặt để cấu hình toàn hệ thống.

• Tài khoản đăng nhập.

17

• Sự hiện hữu của các database khác.

• Sự hiện hữu của các SQL Server khác (trong các giao dịch phân tán).

Mỗi khi tạo một database mới, thay đổi cấu hình, tài khoản đăng nhập,… tất cả thông

tin đều được cập nhật vào Master database.

Model database

Đóng vai trò như một khuôn mẫu (template). Mỗi lần người dùng tạo mới một user

database thì SQL Server sẽ dùng Model database làm “khuôn mẫu” cho việc tạo mới

user database. Mỗi user database lúc mới tạo sẽ kế thừa các thuộc tính và có cấu trúc

giống như Model database. Nếu ta muốn mỗi user database lúc mới tạo ra đã có sẵn

một số đặc điểm nào đấy, ta có thể thiết lập các đặc điểm đó trên Model database.

Các user database được tạo ra sau này sẽ tự động được kế thừa các đặc điểm đó.

Tempdb database

Là một database để lưu trữ dữ liệu tạm thời (tempotary). Nó được dùng để lưu trữ:

Những dữ liệu tam thời (bảng tạm) do người dùng tạo ra

Những kết quả trung gian phục vụ cho quá trình xử lý của nội bộ SQL Server: xử lý

các câu truy vấn (Query), sắp xếp (Sorting),…

Mặc định mỗi khi SQL Server được khởi động thì Tempdb database được tái tạo lại,

mới hoàn toàn, mọi dữ liệu (bảng tạm) do người dùng lưu trữ lên Tempdb database

trước đó sẽ biến mất

Msdb Database

Là một database phục vụ cho hoạt động SQL Server Agent service. Nó lưu trữ thông

tin liên quan đến việc hoạch định tác vụ (Task Shedule) cho các hoạt động như:

backup dữ liệu, tạo thứ bản (replication),…

Bài tập:

Câu 1: Trình bày về tổ chức tập tin trong cơ sở dữ liệu SQL Server. Phân loại tập tin trong

SQL Server. Cách khai báo đặc tả tập tin trong SQL Server (5 thuộc tính).

Câu 2: Nêu chức năng các cơ sở dữ liệu hệ thống trong SQL Server.

Câu 3: Trình bày cú pháp đầy đủ của lệnh CREATE DATABASE và giải thích ý nghĩa các

tham số.

18

Chƣơng III. Tạo và quản lý các bảng

3.1. Tạo bảng (CREATE TABLE)

3.1.1. Sử dụng lệnh CREATE TABLE

CREATE TABLE <Tên bảng>

(

[<Khai báo cột>,]…]

[<Khai báo rằng buộc>,]…]

)

[ON <tên filegroup> | DEFAULT]

Đối với các cột cần khai báo các thuộc tính chính sau:

• Kiểu dữ liệu: Kiểu dữ liệu của các giá trị trong cột.

• Tên cột dữ liệu.

• Thuộc tính (nếu có): Các thuộc tính được định nghĩa trên cột.

• Một số kiểu dữ liệu thường gặp:

• Kiểu dữ liệu xâu chuỗi văn bản: char, varchar, text, nchar, nvarchar, ntext.

• Dữ liệu kiểu số: tinyint, smallint, int, bigint, decimal, numeric, smallmoney, money,

real, bit, binary.

• Dữ liệu kiểu thời gian: datetime, smalldatetime.

• Dữ liệu kiểu đặc biệt: image, Uniqueidentifier.

Một số kiểu thuộc tính thường gặp

Thuộc tính cho phép trống dữ liệu: Null, Not null.

Thuộc tính tự tăng: Identity.

Thuộc tính duy nhất toàn cục: UniqueIdentifier.

19

3.1.2. Sử dụng Management Tool:

3.2. Định nghĩa các cột (Columns)

3.2.1. Định nghĩa cột bằng lệnh

<Tên cột> <Kiểu dữ liệu> [Các thuộc tính]

Ví dụ:

CREATE TABLE NhaCungCap

(

20

MaNhaCungCap INT IDENTITY(1,1),

TenNhaCungCap NVARCHAR(50) Not Null,

TenNguoiLienHe NVARCHAR(50) Not Null,

DiaChi NVARCHAR(100) Not Null,

DienThoai VARCHAR(15) Not Null,

Fax VARCHAR(15) Null,

Website VARCHAR(100) Null,

CONSTRAINT PK_NhaCungCap PRIMARY KEY(MaNhaCungCap)

)

3.3. Định nghĩa các ràng buộc (Constrains)

3.3.1. Định nghĩa rằng buộc bằng câu lệnh:

CONSTRAINT <Tên rằng buộc> <Kiểu rằng buộc> [Thông tin rằng buộc]

Ví dụ:

CREATE TABLE HangHoa

(

MaHangHoa INT IDENTITY(1,1),

TenHangHoa NVARCHAR(50) Not Null,

MaNhaCungCap INT Not Null,

MaLoaiHang INT Not Null,

CONSTRAINT PK_HangHoa PRIMARY KEY(MaHangHoa),

CONSTRAINT FK_HHLH FOREIGN KEY(MaLoaiHang) REFERENCES

LoaiHang(MaLoaiHang),

CONSTRAINT FK_HHNCC FOREIGN KEY(MaNhaCungCap) REFERENCES

NhaCungCap(MaNhaCungCap)

)

Một số kiểu rằng buộc thường gặp

• Kiểu rằng buộc khóa: Primary Key, Foreign Key.

• Kiểu rằng buộc giá trị: Check, Default.

3.3.2. Định nghĩa rằng buộc bằng Management Tool:

21

3.4. Sửa bảng (ALTER TABLE)

3.4.1. Dùng lệnh ALTER TABLE

ALTER TABLE <Tên bảng>

ADD <Định nghĩa cột>

| ALTER COLUMN <Tên cột> <Kiểu dữ liệu> [<Các thuộc tính khác>]

| DROP COLUMN <Tên cột>

| ADD CONSTRAINT <Tên ràng buộc> <Định nghĩa ràng buộc>

| DROP CONSTRAINT <Tên ràng buộc>

Ví dụ:

ALTER TABLE HangHoa ADD COLUMN SoLuong INT;

ALTER TABLE HangHoa DROP COLUMN SoLuong;

3.4.2. Sửa đổi bảng dữ liệu sử dụng Management Tool

22

3.5. Xóa bảng (DROP TABLE)

3.5.1. Sử dụng lệnh DROP TABLE

DROP TABLE <Tên bảng dữ liệu>

Ví dụ:

DROP TABLE HangHoa;

DROP TABLE LoaiHang;

DROP TABLE NhaCungCap;

23

3.5.2. Sử dụng Management Tool

3.6. Thêm bản ghi mới (INSERT)

Dữ liệu trong các bảng được thể hiện dưới dạng các dòng (bản ghi). Để bổ sung thêm các

dòng dữ liệu vào một bảng, ta sử dụng câu lệnh INSERT. Hầu hết các hệ quản trị CSDL dựa

trên SQL cung cấp các cách dưới đây để thực hiện thao tác bổ sung dữ liệu cho bảng:

• Bổ sung từng dòng dữ liệu với mỗi câu lệnh INSERT. Đây là các sử dụng thường gặp nhất

trong giao tác SQL.

• Bổ sung nhiều dòng dữ liệu bằng cách truy xuất dữ liệu từ các bảng dữ liệu khác.

3.6.1. Bổ sung dữ liệu với lệnh INSERT

Để bổ sung một dòng dữ liệu mới vào bảng, ta sử dụng câu lệnh INSERT với cú pháp như

sau:

INSERT <Tên bảng>[(<Danh sách cột>)] VALUES(<danh sách giá trị>)

Ví dụ:

INSERT LoaiHang (TenLoaiHang,MoTa) VALUES (N„Bánh kem‟,N‟Hộp‟);

INSERT NhaCungCap (TenNhaCungCap,TenNguoiLienLac,DiaChi,DienThoai)

VALUES (N„Hải Châu‟,N‟Vũ Hải Châu‟,N‟Trần Phú – Hải Phòng‟,‟123456‟);

INSERT HangHoa (TenHangHoa,MaNhaCungCap,MaLoaiHang) VALUES (N„Bánh kem

Hải Châu‟,1,1);

Lƣu ý:

Khi Insert tất cả các trường đều có giá trị vào thì không cần danh sách cột và các giá

trị sẽ được điền vào theo đúng thứ tự các cột trong CSDL.

24

Ngược lại thì cần có danh sách cột và giá trị phải sắp xếp theo thứ tự danh sách cột

truyền vào.

Bổ sung nhiều dòng dữ liệu từ bảng khác

INSERT <Tên bảng>[(<Danh sách cột>)] <câu lệnh SELECT>

3.6.2. Bổ sung dữ liệu sử dụng Management Tool.

25

3.7. Cập nhật bản ghi (UPDATE)

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>=<Giá trị> [,<Tên cột>=<Giá trị>]

[FROM <Danh sách bảng>][WHERE <Điều kiện>]

Ví dụ:

UPDATE LoaiHang SET TenLoaiHang=N‟Kem tươi‟ WHERE MaLoaiHang=1;

UPDATE HangHoa SET TenHangHoa=N‟Kem tươi Hải Châu‟

FROM HangHoa

INNER JOIN LoaiHang ON HangHoa.MaLoaiHang = LoaiHang.MaLoaiHang

WHERE LoaiHang.TenLoaiHang=N‟Kem tươi‟;

Lƣu ý:

Khi không có điều kiện where thì câu lệnh sẽ thực hiện trên toàn bảng dữ liệu.

Sử dụng from để thực hiện update với điều kiện mở rộng hơn.

3.8. Xóa bản ghi (DELETE)

Để xoá dữ liệu trong một bảng, ta sử dụng câu lệnh DELETE. Cú pháp của câu lệnh này

như sau:

DELETE <Tên bảng>

[FROM <Danh sách bảng>][WHERE <Điều kiện>]

Ví dụ:

DELETE HangHoa

FROM HangHoa

INNER JOIN LoaiHang ON HangHoa.MaLoaiHang = LoaiHang.MaLoaiHang

WHERE LoaiHang.TenLoaiHang=N‟Kem tươi‟;

DELETE LoaiHang WHERE MaLoaiHang=1;

Lƣu ý:

Khi không có điều kiện where thì câu lệnh sẽ thực hiện trên toàn bảng dữ liệu.

Sử dụng from để thực hiện update với điều kiện mở rộng hơn.

Xoá toàn bộ dữ liệu trong bảng

26

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

trường hợp này, ta có thể sử dụng câu lệnh TRUNCATE có cú pháp như sau:

TRUNCATE TABLE <tên bảng>

Bài tập

Câu 1: Phân biệt user table và system table trong cơ sở dữ liệu SQL Server. Các system

table thường lưu trữ những thông tin gì?

Câu 2: Liệt kê và phân loại các kiểu dữ liệu mà SQL Server 2000 hỗ trợ.

Câu 3: Trình bày cú pháp đầy đủ của lệnh CREATE TABLE và giải thích chức năng của

từng tham số.

Câu 4: Tạo cơ sở dữ liệu với các bảng dữ liệu sau đây:

KhachHang(MaKH, TenKH, DiaChi)

NhaCungCap(MaNCC, TenNCC, DiaChi)

MatHang(MaMH,TenMH,DonViTinh, DonGia, MaNCC)

HoaDon(MaHD, MaKH, NgayGiaoDich)

ChiTietHoaDon(MaHD, MaMH, SoLuong)

(Sinh viên tự xác định kiểu dữ liệu và mối liên kết giữa các bảng)

27

Chƣơng IV. Truy vấn dữ liệu

4.1. Truy vấn cơ bản

4.1.1. Mệnh đề SELECT

Câu lệnh SELECT được sử dụng để truy xuất dữ liệu từ các dòng và các cột của một hay

nhiều bảng, khung nhìn. Câu lệnh này có thể dùng để thực hiện phép chọn (tức là truy xuất

một tập con các dòng trong một hay nhiều bảng), phép chiếu (tức là truy xuất một tập con

các cột trong một hay nhiều bảng) và phép nối (tức là liên kết các dòng trong hai hay nhiều

bảng để truy xuất dữ liệu). 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.

Cú pháp câu lệnh SELECT:

SELECT [ALL | DISTINCT] [TOP <số lượng>] <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>]]

Điều cần lưu ý đầu tiên đối với câu lệnh này là các thành phần trong câu lệnh SELECT nếu

được sử dụng phải tuân theo đúng thứ tự như trong cú pháp. Nếu không, câu lệnh sẽ được

xem là không hợp lệ. Câu lệnh SELECT đượ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 được hiển thị dướ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).

4.1.2. Mệnh đề FROM

Mệnh đề FROM trong câu lệnh SELECT được sử dung 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ụ

SELECT * FROM NhaCungCap

Lƣu ý: Ta có thể sử dụng các bí danh cho các bảng hay khung nhìn trong câu lệnh

SELECT. Bí danh được gán trong mệnh đề FROM bằng cách chỉ định bí danh ngay sau tên

bảng.

SELECT * FROM NhaCungCap AS NCC

28

4.1.3. Mệnh đề WHERE

Mệnh đề WHERE trong câu lệnh SELECT đượ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 logic và chỉ những dòng

dữ liệu nào thoả mãn điều kiện được chỉ định mới được hiển thị trong kết quả truy vấn.

Ví dụ

SELECT * FROM NhaCungCap WHERE MaNhaCungCap=1

SELECT * FROM NhaCungCap WHERE MaNhaCungCap>1 AND MaNhaCungCap<5

SELECT * FROM NhaCungCap WHERE MaNhaCungCap BETWEEN 1 AND 5

SELECT * FROM NhaCungCap WHERE MaNhaCungCap IN (2, 3, 4)

SELECT * FROM NhaCungCap WHERE TenNhaCungCap LIKE N‟LÊ%‟

SELECT * FROM NhaCungCap WHERE Fax IS NULL

Lƣu ý: Trong mệnh đề WHERE thường sử dụng

Các toán tử logic. (AND, OR, NOT)

Các toán tử so sánh. (>, <, =,>=,<=,<>,!>,!<)

Kiểm tra giới hạn của dữ liệu. (BETWEEN, NOT BETWEEN)

Kiểm tra danh sách. (IN, NOT IN)

Kiểm tra khuôn dạng dữ liệu. (LIKE)

• Chuỗi ký tự bất kỳ gồm 0 hoặc nhiều ký tự %

• Ký tự đơn bất kỳ _

• Ký tự đơn bất kỳ trong giới hạn [] ([a-f] hoặc [abcdef])

• Ký tự đơn bất kỳ không trong giới hạn [^] ([^a-f] hoặc [^abcdef])

Kiểm tra giá trị NULL.

4.1.4. Mệnh đề ORDER BY

Mặc định, các dòng dữ liệu trong kết quả của câu truy vấn tuân theo thứ tự của chúng trong

bảng dữ liệu hoặc được sắp xếp theo chỉ mục (nếu trên bảng có chỉ mục). Trong trường hợp

muốn dữ liệu được sắp xếp 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.

Ví dụ

SELECT * FROM NhaCungCap ORDER BY TenNhaCungCap

SELECT * FROM NhaCungCap ORDER BY TenNhaCungCap DESC, MaNhaCungCap

ASC

29

Lƣu ý: Sau ORDER BY là danh sách các cột cần sắp xếp (tối đa là 16 cột) sắp xếp ưu

tiên theo thứ tự từ trái qua phải. Dữ liệu được sắp xếp có thể theo chiều tăng (ASC) hoặc

giảm (DESC), mặc định là sắp xếp theo chiều tăng.

4.1.5. Mệnh đề GROUP BY và HAVING

Giới thiệu về mệnh đề GROUP BY trong câu lệnh select

Ngoài khả năng thực hiện các yêu cầu truy vấn dữ liệu thông thường (chiếu, chọn, nối,…)

như đã đề cập như ở các phần trước, câu lệnh SELECT còn cho phép thực hiện các thao tác

truy vấn và tính toán thống kê trên dữ liệu như: cho biết tổng số tiết dạy của mỗi giáo viên,

điểm trung bình các môn học của mỗi sinh viên,…

Mệnh đề GROUP BY sử dụng trong câu lệnh SELECT nhằm phân hoạch 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ác hàm gộp được sử dụng để tính giá trị 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 được phép xuất hiện trong mệnh đề

WHERE

Giới thiệu về mệnh đề HAVING trong câu lệnh select

Mệnh đề HAVING được sử dụng nhằm chỉ định điều kiện đối với các giá trị thống kê được

sản sinh từ các hàm gộp tương tự như cách thức mệnh đề WHERE thiết lập các điều kiện

cho câu lệnh SELECT. Mệnh đề HAVING thường không thực sự có nghĩa nếu như không

sử dụng kết hợp với mệnh đề GROUP BY. Một điểm khác biệt giữa HAVING và WHERE

là trong điều kiện của WHERE không được có các hàm gộp trong khi HAVING lại cho

phép sử dụng các hàm gộp trong điều kiện của mình.

Ví dụ

SELECT NCC.MaNhaCungCap, TenNhaCungCap, Count(MaSanPham)

FROM NhaCungCap AS NCC, SanPham AS SP

WHERE SP.MaNhaCungCap = NCC.MaNhaCungCap

GROUP BY NCC.MaNhaCungCap, TenNhaCungCap

HAVING NOT(Fax IS NULL)

Lƣu ý: Các hàm gộp thường sử dụng

SUM ([ALL | DISTINCT] <biểu thức>) Tính tổng.

AVG ([ALL | DISTINCT] <biểu thức>) Tính trung bình.

COUNT ([ALL | DISTINCT] <biểu thức>) Đếm số giá trị biểu thức.

MAX (<biểu thức>) Tìm giá trị lớn nhất.

MIN (<biểu thức>) Tìm giá trị nhỏ nhất.

30

4.2. Sử dụng biểu thức và hàm

4.2.1. Một số hàm xử lý chuỗi và ký tự

Hàm Chức năng

ASCII(<chuỗi ký tự>) Trả về mã ASCII của ký tự ngoài cùng bên trái chuỗi.

Char(<mã ASCII>) Trả về ký tự có mã ASCII tương ứng

NChar(<mã Unicode>) Trả về ký tự có mã Unicode tương ứng

Upper(<chuỗi ký tự>) Trả về chuỗi với tất cả các ký tự biến thành chữ hoa

Lower(<chuỗi ký tự>) Trả về chuỗi với tất cả các ký tự bị biến thành chữ thường

Len(<chuỗi ký tự>) Trả về chiều dài chuỗi

Ltrim(<chuỗi ký tự>) Loại bỏ các dấu cách trống ở đầu bên trái chuỗi.

Rtrim(<chuỗi ký tự>) Loại bỏ các dấu cách trống ở đầu bên phải chuỗi.

Replace(<chuỗi 1>,

<chuỗi 2>,<chuỗi 3>)

Thay thế các chuỗi 2 trong chuỗi 1 bởi chuỗi 3

Reverse(<chuỗi ký tự>) Trả về chuỗi đảo ngược của chuỗi ký tự

Space(n) Trả về chuỗi với n khoảng trắng

Str(number) Chuyển kiểu số number thành chuỗi

Unicode(<chuỗi ký tự>) Trả về mã Unicode của ký tự ngoài cùng bên trái chuỗi.

Left(<chuỗi ký tự>, n) Trả về phần chuỗi bên trái tính từ đầu đến vị trí thứ n.

Right(<chuỗi ký tự>, n) Trả về phần chuỗi bên phải tính từ đầu đến vị trí thứ n

Charindex(<chuỗi con>,

<chuỗi cha>)

Trả về vị trí bắt đầu của chuỗi con trong chuỗi cha

Substring(<chuỗi ký

tự>, p , length)

Trả về chuỗi con bắt đầu ở vị trí p có chiều dài length

31

4.2.2. Một số hàm xử lý ngày tháng và chuyển đổi thông dụng

Hàm Chức năng

Dateadd(<thành phần>, n, <ngày

tháng>)

Cộng n vào thành phần của ngày tháng

Datediff(<thành phần>, <ngày

tháng bắt đầu>, <ngày tháng kết

thúc>)

Trả về khoảng ngày tháng giữa thành phần ngày

của ngày tháng bắt đầu và ngày tháng kết thúc

Getdate() Trả về ngày tháng hiện tại

Day(<ngày tháng>) Trả về ngày của ngày tháng

Month(<ngày tháng>) Trả về tháng của ngày tháng

Year(<ngày tháng>) Trả về năm của ngày tháng

Cast(<biểu thức> as <kiểu dữ

liệu>)

Chuyển đổi biểu thức sang kiểu dữ liệu được chỉ

định

Convert(<kiểu dữ liệu>, <biểu

thức> [,<kiểu chuyển đổi>])

Trả về phần chuỗi bên trái tính từ đầu đến vị trí thứ

n.

Ví dụ

SELECT UPPER(TenNhaCungCap) FROM NhaCungCap

SELECT GETDATE()

SELECT STR(DAY(GETDATE()),2)+ ‟/‟ +STR(MONTH(GETDATE()),2) + ‟/‟ +

STR(YEAR(GETDATE()),2)

SELECT CONVERT(VARCHAR(10),GETDATE(),103)

SELECT CONVERT(VARCHAR(10), DATEADD(dd,3,GETDATE()),103)

32

Lƣu ý: Các kiểu định dạng của thành phần thời gian

Thành phần Ký hiệu

Năm yy, yyyy

Tháng mm, m

Ngày dd, d

Tuần wk, ww

Ngày trong năm dy, y

Giờ Hh

Phút mi, n

Giây ss, s

Mili giây ms

Lƣu ý: Các kiểu định dạng của thời gian khi convert

Định dạng Ký hiệu

mm/dd/yyyy 101

yyyy.mm.dd 102

dd/mm/yyyy 103

dd.mm.yyyy 104

dd-mm-yyyy 105

dd mon yyyy 106

mon dd, yyyy 107

hh:mm:ss 108

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

33

mm-dd-yyyy 110

yyyy/mm/dd 111

yyyymmdd 112

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

hh:mi:ss:mmm(24h) 114

yyyy-mm-dd hh:mi:ss(24h) 120

yyyy-mm-dd hh:mi:ss.mmm(24h) 121

yyyy-mm-dd Thh:mm:ss:mmm 126

dd mon yyyy hh:mi:ss:mmmAM 130

dd/mm/yy hh:mi:ss:mmmAM 131

4.3. Truy vấn từ nhiều bảng

4.3.1. Truy vấn dữ liệu với JOIN

Khi cần thực hiện một yêu cầu truy vấn dữ liệu từ hai hay nhiều bảng, ta phải sử dụng đến

phép nối. Phép nối là cơ sở để thực hiện các yêu cầu truy vấn dữ liệu liên quan đến nhiều

bảng. Một câu lệnh nối thực hiện lấy các dòng dữ liệu trong các bảng tham gia truy vấn, so

sánh giá trị của các dòng này trên một hoặc nhiều cột được chỉ định trong điều kiện nối và

kết hợp các dòng thoả mãn điều kiện thành những dòng trong kết quả truy vấn.

Để thực hiện được một phép nối, cần phải xác định được những yếu tố sau:

• 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 vấn.

• Điều kiện để thực hiện phép nối giữa các bảng dữ liệu là gì

Các loại truy vấn sử dụng phép nối

Phép nối trong INNER JOIN

Phép nối ngoài OUTER JOIN

• 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

34

4.3.1.1. Phép nối trong INNER JOIN

Phép nối thực hiện nối nhiều bảng trong đó những dòng có giá trị trong các cột được chỉ

định thoả mãn điều kiện kết nối mới được hiển thị trong kết quả truy vấn, phép nối này loại

bỏ thông tin chứa trong những dòng không thoả mãn điều kiện nối. Cú pháp nối trong:

<Bảng 1> INNER JOIN <Bảng 2> ON <Điều kiện nối>

Ví dụ:

SELECT TenSanPham, TenNhaCungCap

FROM SanPham AS SP

INNER JOIN NhaCungCap AS NCC

ON NCC.MaNhaCungCap=SanPham.MaNhaCungCap

4.3.1.2. Phép nối ngoài trái LEFT OUTER JOIN

Phép nối này thực hiện nối nhiều bảng trong đó chứa tất cả các dòng dữ liệu của bảng nằm

bên trái trong phép nối cho dù những dòng này không thoả mãn điều kiện của phép nối. Cú

pháp nối ngoài trái:

<Bảng trái> LEFT OUTER JOIN <Bảng phải> ON <Điều kiện nối>

Ví dụ:

SELECT TenSanPham, TenNhaCungCap

FROM NhaCungCap AS NCC

LEFT OUTER JOIN SanPham AS SP

ON NCC.MaNhaCungCap=SanPham.MaNhaCungCap

4.3.1.3. Phép nối ngoài phải RIGHT OUTER JOIN

Phép nối này thực hiện nối nhiều bảng trong đó chứa tất cả các dòng dữ liệu của bảng nằm

bên phải trong phép nối cho dù những dòng này không thoả mãn điều kiện của phép nối. Cú

pháp nối ngoài phải:

<Bảng trái> RIGHT OUTER JOIN <Bảng phải> ON <Điều kiện nối>

Ví dụ:

SELECT TenSanPham, TenNhaCungCap

FROM SanPham AS SP

RIGHT OUTER JOIN NhaCungCap AS NCC

ON NCC.MaNhaCungCap=SanPham.MaNhaCungCap

4.3.1.4. Phép nối ngoài đầy đủ FULL OUTER JOIN

35

Phép nối này thực hiện nối nhiều bảng trong đó chứa tất cả các dòng dữ liệu của bảng

nằm trong phép nối cho dù những dòng này không thoả mãn điều kiện của phép nối. Cú

pháp nối ngoài đầy đủ:

<Bảng 1> FULL OUTER JOIN <Bảng 2> ON <Điều kiện nối>

Ví dụ:

SELECT TenSanPham, TenNhaCungCap

FROM SanPham AS SP

FULL OUTER JOIN NhaCungCap AS NCC

ON NCC.MaNhaCungCap=SanPham.MaNhaCungCap

4.3.2. Truy vấn dữ liệu với UNION

Phép hợp được sử dụng trong trường hợp ta 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 SELECT 1>

UNION [ALL] <Câu lệnh SELECT 2>

[UNION [ALL] <Câu lệnh SELECT 3>]

...

[UNION [ALL] <Câu lệnh SELECT n>]

[ORDER BY <Danh sách cột sắp xếp>]

[COMPUTE <Danh sách hàm gộp> [BY <Danh sách cột>]]

Ví dụ:

SELECT MaSanPham AS Ma, TenSanPham AS Ten FROM SanPham

UNION

SELECT MaNhaCungCap, TenNhaCungCap FROM TenNhaCungCap

UNION

SELECT MaLoaiSanPham, TenLoaiSanPham FROM LoaiSanPham

ORDER BY Ma

COMPUTE Count(TenSanPham) BY Ma

Lƣu ý của UNION:

• Danh sách cột trong các truy vấn thành phần phải có cùng số lượng.

• Các cột tương ứng trong tất cả các bảng, hoặc tập con bất kỳ các cột được 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.

36

• Các cột tương ứng trong bản thân từng truy vấn thành phần của một câu lệnh

UNION phải xuất hiện theo thứ tự như nhau. Nguyên nhân là do phép hợp so sánh

các cột từng cột một theo thứ tự được cho trong mỗi truy vấn.

• Khi các kiểu dữ liệu khác nhau được kết hợp với nhau trong câu lệnh UNION,

chúng sẽ được chuyển sang kiểu dữ liệu cao hơn (nếu có thể được).

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

• Truy vấn thành phần đầu tiên có thể có INTO để tạo mới một bảng từ kết quả của

chính phép hợp.

• Mệnh đề ORDER BY và COMPUTE dùng để sắp xếp kết quả truy vấn hoặc tính

toán các giá trị thống kê chỉ được sử dụng ở cuối câu lệnh UNION. Chúng không

được sử dụng ở trong bất kỳ truy vấn thành phần nào.

• Mệnh đề GROUP BY và HAVING chỉ có thể được sử dụng trong bản thân từng truy

vấn thành phần. Chúng không được phép sử dụng để tác động lên kết quả chung của

phép hợp.

• Phép toán UNION có thể được sử dụng bên trong câu lệnh INSERT.

• Phép toán UNION không được sử dụng trong câu lệnh CREATE VIEW.

Lƣu ý về hàm compute:

Nếu sử dụng mệnh đề COMPUTE ... BY thì cũng phải sử dụng mệnh đề ORDER BY. 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 những gì được

liệt kê sau ORDER BY. Chúng phải có cùng thứ tự từ trái qua phải, bắt đầu với cùng một

biểu thức và không bỏ qua bất kỳ một biểu thức nào.

Chẳng hạn nếu mệnh đề ORDER BY có dạng:

ORDER BY a, b, c

Thì mệnh đề COMPUTE BY với hàm gộp F trên cột X theo một trong các cách dưới đây là

hợp lệ:

COMPUTE F(X) BY a, b, c

COMPUTE F(X) BY a, b

COMPUTE F(X) BY a

Và các cách sử dụng dưới đây là sai:

COMPUTE F(X) BY b, c

COMPUTE F(X) BY a, c

COMPUTE F(X) BY c

Phải sử dụng một tên cột hoặc một biểu thức trong mệnh đề ORDER BY, việc sắp xếp

không được thực hiện dựa trên tiêu đề cột.

37

4.4. Truy vấn lồng nhau

4.4.1. Truy vấn lồng nhau Subquery

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 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ú pháp của truy vấn con như sau:

(SELECT [ALL | DISTINCT] <Danh sách chọn>

FROM <Danh sách bảng>

[WHERE <Điều kiện>]

[GROUP BY <Danh sách cột> [HAVING <Điều kiện>]])

4.4.2. Khi sử dụng truy vấn con cần lƣu ý một số quy tắc sau

• Một truy vấn con phải được viết trong cặp dấu ngoặc. Trong hầu hết các trường hợp,

một truy vấn con thường phải có kết quả là một cột (tức là chỉ có duy nhất một cột

trong danh sách chọn).

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

• Một truy vấn con thường được sử dụ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ị, 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)

4.4.3. Ví dụ sử dụng truy vấn lồng nhau

Sử dụng ALL

SELECT SP.TenSanPham, SP.TenNhaCungCap FROM SanPham AS SP

WHERE SP.MaNhaCungCap>ALL (SELECT MaNhaCungCap FROM NhaCungCap

WHERE Fax IS NULL)

Sử dụng ANY

SELECT SP.TenSanPham, SP.TenNhaCungCap FROM SanPham AS SP

WHERE SP.MaNhaCungCap>ANY(SELECT MaNhaCungCap FROM NhaCungCap

WHERE Fax IS NULL)

Sử dụng IN

SELECT SP.TenSanPham, SP.TenNhaCungCap FROM SanPham AS SP

38

WHERE SP.MaNhaCungCap IN (SELECT MaNhaCungCap FROM NhaCungCap

WHERE Fax IS NULL)

Sử dụng EXIST

SELECT TenNhaCungCap FROM NhaCungCap AS NCC

WHERE EXIST

(SELECT MaSanPham FROM SanPham AS SP WHERE SP.MaNhaCungCap =

NCC.MaNhaCungCap)

* THIẾT KẾ TRUY VẤN VỚI DEGISN QUERY

39

Bài tập

Câu 1: Trình bày cú pháp chung của câu lệnh truy vấn SELECT. Chỉ ra sự tương đương

giữa câu lệnh SELECT và biểu thức đại số quan hệ.

Câu 2: Phân biệt các phép kết nối bảng dữ liệu: các dạng Join (Inner Join, Outer Join, Cross

Join).

Câu 3: Trình bày về phép toán Union. Điều kiện để thực hiện được phép toán này là gì?

Câu 4: Trình bày chức năng các hàm thống kê: COUNT, SUM, MAX, MIN, AVG đi kèm

với GROUP BY.

40

Chƣơng V. Tạo và quản lý các chỉ mục

5.1. Các kiểu chỉ mục (Indexes)

5.1.1. Giới thiệu về chỉ mục.

Chỉ mục là một trong những công cụ mạnh có sẵn đối với người thiết kế CSDL. Một chỉ

mục là một cấu trúc phụ cho phép cải thiện hiệu suất thực thi các truy vấn bằng cách giảm

thiểu các hoạt động nhập/xuất dữ liệu cần thiết để được dữ liệu yêu cầu. Tùy thuộc vào kiểu

của nó, mà chỉ mục được lưu với dữ liệu hoặc tách biệt với dữ liệu.

• Chỉ mục khóa (NON UNIQUIE): Một giá trị khoá của chỉ mục sẽ tương ứng với

một nhóm các dòng dữ liệu của bảng. Chỉ mục khóa chỉ rõ cột hoặc các cột được

dùng để sinh ra chỉ mục. Nó cho phép tìm nhanh chóng dòng dữ liệu muốn tìm.

• Chỉ mục duy nhất (UNIQUIE) : Là chỉ mục chỉ chứa một dòng dữ liệu cho mỗi khóa

chỉ mục. Một chỉ mục là duy nhất nếu bản thân dữ liệu là duy nhất, nếu không duy

nhất ta có thể tạo chỉ mục kết hợp trên nhiều cột để đạt được chỉ mục duy nhất.

5.1.2. Các kiểu chỉ mục

Các chỉ mục được lưu trữ dữ liệu dưới dạng cây nhị phân B-Tree. Có hai kiểu chỉ mục:

• Chỉ mục liên cung (CLUSTERD): Là chỉ mục lưu trữ các dòng dữ liệu thực sự của

bảng trong nút lá, theo thứ tự đã được sắp xếp. Mỗi bảng có duy nhất 1 chỉ mục liên

cung.

• Chỉ mục phi liên cung (NONCLUSTERD): Không chứa dữ liệu trong nút lá, mà nó

chứa thông tin về vị trí của dòng dữ liệu: nếu không có chỉ mục liên cung trên bảng

thì nó chứa số nhận dạng dòng (Row ID); nếu có chỉ mục liên cung thì trong nút lá

này sẽ chứa giá trị khóa chỉ mục liên cung cho dữ liệu đó. Mỗi bảng được phép có

nhiều chỉ mục phi liên cung.

5.2. Tạo các chỉ mục

5.2.1. Tạo chỉ mục bằng câu lệnh

CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED]

INDEX <tên chỉ mục>

ON <đối tượng tạo chỉ mục> (<cột [ASC|DESC]>)

[WITH(<tùy chỉnh INDEX>)]

Giải thích

UNIQUE: Chỉ định tạo một unique index trên bảng hoặc trên view. Một clustered

index trên view buộc phải là unique.

CLUSTERED: Chỉ định tạo chỉ mục liên cung.

NONCLUSTERED: Chỉ định tạo chỉ mục phi liên cung.(mặc định)

ASC: Chiều tăng. (mặc định)

41

DESC: Chiều giảm.

Ví dụ:

CREATE NONCLUSTERED INDEX NID_TenNhaCungCap

ON NhaCungCap (TenNhaCungCap ASC)

CREATE INDEX NID_TenLoaiSanPham

ON LoaiSanPham (LoaiSanPham,ThuTu)

Lƣu ý:

Chỉ mục liên cung duy nhất (UNIQUIE CLUSTERED INDEX) thường được tạo tự

động khi các ràng buộc PRIMARY KEY và UNIQUE được định nghĩa trên các cột

của bảng.

Chỉ mục phi liên cung được tạo tối đa là 249. Và số trường tạo phải < 16 và dữ liệu

chỉ mục trong 1 dòng phải < 900 byte.

5.2.2. Tạo chỉ mục bằng công cụ

42

5.3. Quản lý và gỡ bỏ các chỉ mục

5.3.1. Quản lý chỉ mục bằng câu lệnh

5.3.1.1. Cú pháp sửa đổi chỉ mục

ALTER INDEX <tên chỉ mục> | ALL ON <tên bảng | tên khung nhìn>

REBUILD [WITH(<tùy chỉnh INDEX>)]

43

| REORGANIZE [WITH(LOB_COMPACTION = ON | OFF)]

| DISABLE | SET (<tùy chỉnh INDEX>)

5.3.1.2. Cú pháp xóa bỏ chỉ mục

DROP INDEX <tên bảng>.<tên chỉ mục>

Ví dụ: ALTER INDEX NID_TenNhaCungCap ON NhaCungCap

REORGANIZE WITH( LOB_COMPACTION = ON )

DROP INDEX NhaCungCap.NID_TenNhaCungCap

5.3.2. Quản lý chỉ mục bằng công cụ

44

Bài tập

Câu 1: Trình bày khái niệm và vai trò của chỉ mục trong cơ sở dữ liệu.

Câu 2: Khái niệm về B-Tree và tổ chức chỉ mục trong SQL Server 2000.

Câu 3: Trình bày cú pháp đầy đủ của lệnh tạo chỉ mục và giải thích ý nghĩa từng tham số.

45

Chƣơng VI. Tạo và quản lý khung nhìn

6.1. Định nghĩa

Các bảng trong cơ sở dữ liệu đóng vai trò là các đối tượng tổ chức và lưu trữ dữ liệu.

Như vậy, ta có thể quan sát được dữ liệu trong cơ sở dữ liệu bằng cách thực hiện các

truy vấn trên bảng dữ liệu. Ngoài ra, SQL còn cho phép chúng ta quan sát được dữ

liệu thông qua việc định nghĩa các khung nhìn.

Một khung nhìn (view) có thể được xem như là một bảng “ảo” trong cơ sở dữ liệu có

nội dung được định nghĩa thông qua một truy vấn (câu lệnh SELECT). Như vậy, một

khung nhìn trông giống như một bảng với một tên khung nhìn và là một tập bao gồm

các dòng và các cột. Điểm khác biệt giữa khung nhìn và bảng là khung nhìn không

được xem là một cấu trúc lưu trữ dữ liệu tồn tại trong cơ sở dữ liệu. Thực chất dữ

liệu quan sát được trong khung nhìn được lấy từ các bảng thông qua câu lệnh truy

vấn dữ liệu.

6.2.Mục đích sử dụng:

Mục đích sử dụng khung nhìn nhằm

• Bảo mật dữ liệu: Người sử dụng được cấp phát quyền trên các khung nhìn với những

phần dữ liệu mà người sử dụng được phép. Điều này giúp hạn chế được phần nào

việc người sử dụng truy cập trực tiếp dữ liệu.

• Đơn giản hoá các thao tác truy vấn dữ liệu: Một khung nhìn đóng vai trò như là một

đối tượng tập hợp dữ liệu từ nhiều bảng khác nhau vào trong một “bảng”. Thông qua

đó giúp người sử dụng có thể thực hiện các yêu cầu truy vấn dữ liệu một cách đơn

giản từ khung nhìn thay vì phải đưa ra những câu truy vấn phức tạp.

• Tập trung và đơn giản hoá dữ liệu: Thông qua khung nhìn ta có thể cung cấp cho

người sử dụng những cấu trúc đơn giản, dễ hiểu hơn về dữ liệu trong cơ sở dữ liệu

đồng thời giúp cho người sử dụng tập trung hơn trên những phần dữ liệu cần thiết.

• Độc lập dữ liệu: Một khung nhìn có thể cho phép người sử dụng có được cái nhìn về

dữ liệu độc lập với cấu trúc của các bảng trong cơ sở dữ liệu cho dù các bảng cơ sở

có bị thay đổi phần nào về cấu trúc.

Một số hạn chế khi sử dụng khung nhìn

• Do hệ quản trị cơ sở dữ liệu thực hiện việc chuyển đổi các truy vấn trên khung nhìn

thành những truy vấn trên các bảng cơ sở nên nếu một khung nhìn được định nghĩa

bởi một truy vấn phức tạp thì sẽ dẫn đến chi phí về mặt thời gian khi thực hiện truy

vấn liên quan đến khung nhìn sẽ lớn.

• Mặc dù thông qua khung nhìn có thể thực hiện được thao tác bổ sung và cập nhật dữ

liệu cho bảng cơ sở nhưng chỉ hạn chế đối với những khung nhìn đơn giản. Đối với

những khung nhìn phức tạp thì thường không thực hiện được, hay nói cách khác là

dữ liệu trong khung nhìn là chỉ đọc.

46

6.3. Tạo các khung nhìn (Views)

6.3.1. Tạo khung nhìn bằng câu lệnh

CREATE VIEW <tên khung nhìn>[(<danh sách tên cột>)]

AS <câu lệnh SELECT>

Ví dụ:

CREATE VIEW ViewCungCapHangHoa

AS SELECT MaHangHoa,TenHangHoa,TenNhaCungCap

FROM HangHoa INNER JOIN NhaCungCap ON

HangHoa.MaNhaCungCap=NhaCungCap.MaNhaCungCap

CREATE VIEW ViewHangHoa

AS SELECT MaHangHoa,TenHangHoa,TenNhaCungCap,TenLoaiHang

FROM HangHoa

INNER JOIN LoaiHang ON HangHoa.MaLoaiHang=LoaiHang.MaLoaiHang

INNER JOIN NhaCungCap

ON HangHoa.MaNhaCungCap=NhaCungCap.MaNhaCungCap

6.3.2. Tạo khung nhìn bằng công cụ

47

6.4. Quản lý các khung nhìn

6.4.1. Quản lý khung nhìn bằng câu lệnh

6.4.1.1. Cú pháp sửa đổi khung nhìn

48

ALTER VIEW <tên khung nhìn>[(<danh sách tên cột>)]

AS <câu lệnh SELECT>

6.4.1.2. Cú pháp xóa bỏ khung nhìn

Ví dụ:

ALTER VIEW ViewHangHoa

AS SELECT MaHangHoa, TenHangHoa, TenNhaCungCap, TenLoaiHang, SoLuongTon,

SoLuongDatHang,DonViTinh

FROM HangHoa

INNER JOIN NhaCungCap

ON HangHoa.MaNhaCungCap = NhaCungCap.MaNhaCungCap

INNER JOIN LoaiHang ON HangHoa.MaLoaiHang=LoaiHang.MaLoaiHang

DROP VIEW ViewHangHoa

6.4.2. Quản lý khung nhìn bằng công cụ

49

Bài tập

Câu 1:Trình bày khái niệm về view (bảng ảo). View giúp tăng tính bảo mật cho cơ sở dữ

liệu như thế nào?

Câu 2: Trình bày các lệnh tạo, sửa đổi và xóa view.

Câu 3: Cập nhật dữ liệu thông qua view như thế nào?

Câu 4: Nếu ý nghĩa của tùy chọn WITH ENCRYPTION trong cú pháp lệnh tạo view.

50

Chƣơng VII. Tạo và quản lý các thủ tục thƣờng trú

7.1. Giới thiệu.

7.1.1. Giới thiệu

Như đã đề cập ở các chương trước, SQL được thiết kế và cài đặt như là một ngôn

ngữ để thực hiện các thao tác trên cơ sở dữ liệu như tạo lập các cấu trúc trong cơ sở

dữ liệu, bổ sung, cập nhật, xoá và truy vấn dữ liệu trong cơ sở dữ liệu. Các câu lệnh

SQL được người sử dụng viết và yêu cầu hệ quản trị cơ sở dữ liệu thực hiện theo chế

độ tương tác.

Các câu lệnh SQL có thể được nhúng vào trong các ngôn ngữ lập trình, thông qua đó

chuỗi các thao tác trên cơ sở dữ liệu được xác định và thực thi nhờ vào các câu lệnh,

các cấu trúc điều khiển của bản thân ngôn ngữ lập trình được sử dụng.

Với thủ tục thường trú, một phần nào đó khả năng của ngôn ngữ lập trình được đưa

vào trong ngôn ngữ SQL.

7.1.2. Một số định nghĩa

Một thủ tục là một đối tượng trong cơ sở dữ liệu bao gồm một tập nhiều câu lệnh SQL được

nhóm lại với nhau thành một nhóm với những khả năng sau:

Các cấu trúc điều khiển (IF, WHILE, FOR) có thể được sử dụng trong thủ tục.

Bên trong thủ tục thường trú có thể sử dụng các biến như trong ngôn ngữ lập trình

nhằm lưu giữ các giá trị tính toán được, các giá trị được truy xuất được từ cơ sở dữ

liệu.

Một tập các câu lệnh SQL được kết hợp lại với nhau thành một khối lệnh bên trong

một thủ tục. 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ố (như trong các ngôn ngữ lập trình). Khi một thủ tục

thường trú đã được định nghĩa, nó có thể được gọi thông qua tên thủ tục, nhận các

tham số truyền vào, thực thi các câu lệnh SQL bên trong thủ tục và có thể trả về các

giá trị sau khi thực hiện xong.

Sử dụng các thủ tục thường trú trong cơ sở dữ liệu sẽ giúp tăng hiệu năng của cơ sở dữ liệu,

mang lại các lợi ích sau:

Đơn giản hoá các thao tác trên cơ sở dữ liệu nhờ vào khả năng module hoá các thao

tác này.

Thủ tục thường trú được phân tích, tố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 SQL tương đương

theo cách thông thường.

Thủ tục thường trú cho phép chúng ta thực hiện cùng một yêu cầu bằng một câu lệnh

đơn giản thay vì phải sử dụng nhiều dòng lệnh SQL. Điều này sẽ làm giảm thiểu sự

lưu thông trên mạng.

51

Thay vì cấp phát quyền trực tiếp cho người sử dụng trên các câu lệnh SQL và trên

các đối tượng cơ sở dữ liệu, ta có thể cấp phát quyền cho người sử dụng thông qua

các thủ tục thường trú, nhờ đó tăng khả năng bảo mật đối với hệ thống.

7.2. Tạo các thủ tục thƣờng trú.

7.2.1. Cú pháp tạo thủ tục thƣờng trú

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>

Trong đó

• Thông thường, thủ tục sẽ được phân tích, tối ưu và dịch sẵn ở lần gọi đầu tiên. Nếu

tuỳ chọn WITH RECOMPILE được chỉ định, thủ tục sẽ được dịch lại mỗi khi được

gọi.

• Thủ tục sẽ được mã hoá nếu tuỳ chọn WITH ENCRYPTION được chỉ định. Nếu thủ

tục đã được mã hoá, ta không thể xem được nội dung của thủ tục.

Ví dụ:

CREATE PROCEDURE ThemHangHoa

(

@MaHangHoa VARCHAR(5), @TenHangHoa NVARCHAR(50),

@DonViTinh NVARCHAR(50), @MaNhaCungCap INT,

@MaLoaiHang INT, @DonGia INT,

@SoLuongTon INT, @SoLuongDatHang INT, @KhongSuDung INT

)

AS

BEGIN

INSERT HangHoa VALUES(@MaHangHoa, @MaNhaCungCap, @MaLoaiHang,

@DonViTinh, @DonGia, @SoLuongTon, @SoLuongDatHang, @KhongSuDung,

@TenHangHoa)

END

7.3. Thực thi thủ tục thƣờng trú.

7.3.1. Cú pháp thực thi thủ tục thƣờng trú

C1: <Tên thủ tục> [Danh sách tham số]

C2: EXECUTE <Tên thủ tục> [Danh sách tham số]

52

Lƣu ý:

Cách 2 thường sử dụng khi gọi thủ tục trong thủ tục hoặc hàm khác.

Thứ tự tham số không nhất thiết phải theo khai báo

Ví dụ:

CREATE PROCEDURE CongHaiSo (@a INT, @b INT) AS BEGIN

DECLARE @c INT

SET @c=@a+@b

SELECT @C

END

CongHaiSo @b=1,@a=2

7.3.2. Thực thi thủ tục thƣờng trú bằng công cụ

7.4. Quản lý các thủ tục thƣờng trú.

7.4.1. Quản lý thủ tục thƣờng trú bằng câu lệnh

7.4.1.1. Cú pháp sửa thủ tục thƣờng trú

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

7.4.1.2. Cú pháp xóa thủ tục thƣờng trú

53

DROP PROCEDURE <Tên thủ tục>

Ví dụ:

ALTER PROCEDURE CongHaiSo (@a INT, @b INT, @c INT OUTPUT) AS SET

@c=@a+@b

ALTER PROCEDURE ThemHangHoa

(

@MaHangHoa VARCHAR(5), @TenHangHoa NVARCHAR(50),

@DonViTinh NVARCHAR(50), @MaNhaCungCap INT,

@MaLoaiHang INT, @DonGia INT,

@SoLuongTon INT = 0, @SoLuongDatHang INT = 0,

@KhongSuDung INT = 0

) AS BEGIN

INSERT HangHoa VALUES(@MaHangHoa, @MaNhaCungCap, @MaLoaiHang,

@DonViTinh, @DonGia, @SoLuongTon, @SoLuongDatHang, @KhongSuDung,

@TenHangHoa)

END

DROP PROCEDURE CongHaiSo

7.4.2. Quản lý thủ tục thƣờng trú bằng công cụ

7.5. Tham số vào và ra.

7.5.1. Giá trị trả về của tham số trong thủ tục thƣờng trú

54

Nếu đối số truyền cho thủ tục khi có lời gọi đến thủ tục là biến thông thường,

những thay đổi giá trị của biền trong thủ tục sẽ không được giữ lại khi kết thúc quá

trình thực hiện thủ tục.

Trong trường hợp cần phải giữ lại giá trị của đối số sau khi kết thúc thủ tục

• Ta phải khai báo tham số của thủ tục theo cú pháp 1 trong 2 cách sau:

• @<tên tham số> <kiểu dữ liệu> OUTPUT

• @<tên tham số> <kiểu dữ liệu> OUT

• Và trong lời gọi thủ tục, sau đối số được truyền cho thủ tục, ta cũng phải chỉ

định thêm từ khoá OUTPUT (hoặc OUT)

Ví dụ:

CREATE PROCEDURE CongHaiSo (@a INT, @b INT, @c INT OUTPUT) AS

SET @c=@a+@b

7.5.2. Giá trị mặc định của tham số trong thủ tục thƣờng trú

• Các tham số được khai báo trong thủ tục có thể nhận các giá trị mặc định. Giá trị mặc

định sẽ được gán cho tham số trong trường hợp không truyền đối số cho tham số khi

có lời gọi đến thủ tục.

• Tham số với giá trị mặc định được khai báo theo cú pháp như sau:

@<tên tham số> <kiểu dữ liệu> = <giá trị mặc định>

Ví dụ:

CREATE PROCEDURE cong(@a INT = 1,@b INT = 2) AS

BEGIN

DECLARE @c INT

SET @c=@a+@b

SELECT @c

END

cong

7.6. Thủ tục thƣờng trú hệ thống.

7.6.1. Giới thiệu:

• Các thủ tục được định nghĩa sẵn trong hệ thống.

• Thường nằm trong CSDL Master.

• Được dùng chủ yếu trong việc quản lý CSDL và bảo mật

55

7.6.2. Một số thủ tục thƣờng trú hệ thống hay sử dụng

Tên thủ tục Chức năng

sp_databases Danh sách các database có thể trên server

sp_server_info Chi tiết thông tin về server

sp_stored_procedures Danh sách các thủ tục hiện có trên môi trường hiện tại

sp_tables Danh sách các bảng hiện có trên môi trường hiện tại

sp_password Thay đổi password cho login account

sp_start_job Khởi động tất cả các automated task

sp_stop_job Tắt tất cả các automated task đang chạy

Bài tập

Câu 1: Trình bày khái niệm về thủ tục thường trú.

Câu 2: Cú pháp đầy đủ của lệnh tạo, sửa đổi và xóa thủ tục thường trú. Giải thích ý nghĩa

các tham số.

Câu 3: Ý nghĩa của tùy chọn WITH ENCRYPTION trong cú pháp lệnh tạo thủ tục.

Câu 4: Thực thi thủ tục như thế nào? Thủ tục trong SQL Server có thể được gọi từ các ngôn

ngữ lập trình ngoài không?

56

Chƣơng VIII. Tạo và quản lý hàm ngƣời dùng định nghĩa

8.1. Các kiểu hàm ngƣời dùng định nghĩa (User-defined functions)

Hàm là đối tượng cơ sở dữ liệu tương tự như thủ tục. Điểm khác biệt giữa hàm và thủ tục là

hàm trả về một giá trị thông qua tên hàm còn thủ tục thì không. Điều này cho phép ta sử

dụng hàm như là một thành phần của một biêu thức (chẳng hạn trong danh sách chọn của

câu lệnh SELECT).

Ngoài những hàm do hệ quản trị cơ sở dữ liệu cung cấp sẵn, người sử dụng có thể định

nghĩa thêm các hàm nhằm phục vụ cho mục đích riêng của mình.

8.2. Tạo hàm ngƣời dùng định nghĩa

CREATE FUNCTION <Tên hàm>

[(Danh sách tham số)]

RETURNS <Kiểu trả về>

AS

<Các câu lệnh của hàm>

Ví dụ: Câu lệnh dưới đây định nghĩa hàm tính ngày trong tuần (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 'Chu nhật'

WHEN 2 THEN 'Thứ hai'

WHEN 3 THEN 'Thứ ba'

WHEN 4 THEN 'Thứ tư'

WHEN 5 THEN 'Thứ năm'

WHEN 6 THEN 'Thứ sáu'

ELSE 'Thứ bảy'

END

RETURN (@st)

END

57

Viết hàm thực hiện công việc thêm hàng hóa vào bảng hàng hóa với các tham số đầu vào

là mã hàng, tên hàng, đơn vị tính, mã nhà cung cấp, mã loại hàng, đơn giá, số lượng tồn, số

lượng đặt hàng, số không sử dụng. Kết quả trả về là danh sách hàng hóa sau khi thêm.

CREATE FUNCTION ThemHangHoa

(

@MaHangHoa VARCHAR(5), @TenHangHoa NVARCHAR(50),

@DonViTinh NVARCHAR(50), @MaNhaCungCap INT,

@MaLoaiHang INT, @DonGia INT,

@SoLuongTon INT, @SoLuongDatHang INT, @KhongSuDung INT

)

RETURNS TABLE

AS

BEGIN

INSERT HangHoa

VALUES(@MaHangHoa, @MaNhaCungCap, @MaLoaiHang, @DonViTinh, @DonGia,

@SoLuongTon, @SoLuongDatHang, @KhongSuDung, @TenHangHoa)

RETURN SELECT * FROM HangHoa

END

Viết hàm cộng hai số trả về kết quả là tổng 2 số.

CREATE FUNCTION CongHaiSo (@a INT, @b INT) AS BEGIN

DECLARE @c INT

SET @c=@a+@b

RETURN @c

END

SELECT dbo.CongHaiSo(1,2)

8.3. Quản lý hàm ngƣời dùng định nghĩa

8.3.1. Quản lý thủ tục thƣờng trú bằng câu lệnh

8.3.1.1. Cú pháp sửa hàm ngƣời dùng định nghĩa

ALTER FUNCTION <Tên hàm>

[(Danh sách tham số)]

RETURNS <Kiểu trả về>

AS

58

<Các câu lệnh của hàm>

8.3.1.2. Cú pháp xóa thủ tục thƣờng trú

DROP FUNCTION <Tên hàm>

Ví dụ:

ALTER FUNCTION CongHaiSo (@a INT, @b INT) RETURNS INT AS

BEGIN RETURN @a+@b END

ALTER FUNCTION ThemHangHoa

(

@MaHangHoa VARCHAR(5),

@TenHangHoa NVARCHAR(50),

@DonViTinh NVARCHAR(50),

@MaNhaCungCap INT,@MaLoaiHang INT, @DonGia INT,

@SoLuongTon INT = 0, @SoLuongDatHang INT = 0,@KhongSuDung INT = 0

)

RETURNS TABLE

AS BEGIN

INSERT HangHoa

VALUES(@MaHangHoa, @MaNhaCungCap, @MaLoaiHang, @DonViTinh, @DonGia,

@SoLuongTon, @SoLuongDatHang, @KhongSuDung, @TenHangHoa)

RETURN SELECT * FROM HangHoa

END

DROP PROCEDURE CongHaiSo

59

8.3.2. Quản lý hàm ngƣời dùng định nghĩa bằng công cụ

Bài tập

Câu 1: Trình bày khái niệm về hàm người dùng.

Câu 2: Cú pháp đầy đủ của lệnh tạo, sửa đổi và xóa hàm người dùng. Giải thích ý nghĩa các

tham số.

Câu 3: Ý nghĩa của tùy chọn WITH ENCRYPTION trong cú pháp lệnh tạo hàm người

dùng.

Câu 4: Gọi hàm người dùng như thế nào? Hàm người dùng trong SQL Server có thể được

gọi từ các ngôn ngữ lập trình ngoài không?

60

Chƣơng IX. Tạo và quản lý các Trigger

9.1. Tạo các Trigger thao tác dữ liệu (DML Triggers)

9.1.1. Định nghĩa Trigger.

Một trigger là một đối tượng gắn liền với một đối tượng CSDL và được tự động kích hoạt

khi xảy ra những giao tác làm thay đổi đối tượng CSDL. Định nghĩa một trigger bao gồm

các yếu tố sau:

• Trigger sẽ được áp dụng đối với đối tượng CSDL nào?

• Trigger được kích hoạt khi có sự kiện gì?

• Trigger sẽ làm gì khi được kích hoạt?

Ví dụ: Ta định nghĩa các bảng như sau:

Bảng MATHANG lưu trữ dữ liệu về các mặt hàng:

CREATE TABLE mathang

(

mahang NVARCHAR(5) PRIMARY KEY, /*mã hàng*/

tenhang NVARCHAR(50) NOT NULL, /*tên hàng*/

soluong INT, /*số lượng hàng hiện có*/

)

Bảng NHATKYBANHANG lưu trữ thông tin về các lần bán hàng

CREATE TABLE nhatkybanhang

(

stt INT IDENTITY PRIMARY KEY,

ngay DATETIME, /*ngày bán hàng*/

nguoimua NVARCHAR(30), /*tên người mua hàng*/

mahang NVARCHAR(5) /*mã mặt hàng được bán*/

FOREIGN KEY REFERENCES mathang(mahang),

soluong INT, /*giá bán hàng*/

giaban MONEY /*số lượng hàng được bán*/

)

Câu lệnh dưới đây định nghĩa trigger trg_nhatkybanhang_insert. Trigger này có chức năng

tự động giảm số lượng hàng hiện có khi một mặt hàng nào đó được bán (tức là khi câu lệnh

INSERT được thực thi trên bảng NHATKYBANHANG).

CREATE TRIGGER trg_nhatkybanhang_insert

61

ON nhatkybanhang

FOR INSERT

AS

UPDATE mathang

SET mathang.soluong=mathang.soluong-inserted.soluong

FROM mathang INNER JOIN inserted

ON mathang.mahang=inserted.mahang

Với trigger vừa tạo ở trên, nếu dữ liệu trong bảng MATHANG là:

thì sau khi ta thực hiện câu lênh:

INSERT INTO nhatkybanhang

(ngay,nguoimua,mahang,soluong,giaban)

VALUES('5/5/2004','Tran Ngoc Thanh','H1',10,5200)

dữ liệu trong bảng MATHANG sẽ như sau:

Trong câu lệnh CREATE TRIGGER ở ví dụ trên, sau mệnh đề ON là tên của bảng mà

trigger cần tạo sẽ tác động đến. Mệnh đề tiếp theo chỉ định câu lệnh sẽ kích hoạt trigger

(FOR INSERT). Ngoài INSERT, ta còn có thể chỉ định UPDATE hoặc DELETE cho mệnh

đề này, hoặc có thể kết hợp chúng lại với nhau. Phần thân của trigger nằm sau từ khoá AS

bao gồm các câu lệnh mà trigger sẽ thực thi khi được kích hoạt.

9.1.2. Cú pháp tạo Trigger

CREATE TRIGGER <tên trigger>

ON <tên đối tượng>

<AFTER|FOR> <sự kiện>

AS

<Các câu lệnh SQL>

9.1.3. Cú pháp sửa Trigger

ALTER TRIGGER <tên trigger>

ON <tên đối tượng>

<AFTER|FOR> <sự kiện>

AS

62

<Các câu lệnh SQL>

9.1.4. Cú pháp xóa Trigger

DROP TRIGGER <tên trigger>

9.2. DDL Trigger và DML Trigger

9.2.1. DDL Trigger:

• Hay còn gọi là Trigger định nghĩa dữ liệu là loại trigger được kích hoạt khi có các sự

kiện liên quan đến việc định nghĩa dữ liệu. Sử dụng DDL Trigger nhằm 1 số mục

đích sau đây: Tránh sự thay đổi lược đồ database hoặc lưu giữ những sự thay đổi

lược đồ database.

• Một số sự kiện được dùng trong Trigger định nghĩa dữ liệu : ALTER_TABLE,

DROP_TABLE, CREATE_TABLE,…

Ví dụ:

CREATE TRIGGER CamSuaBang ON DATABASE FOR ALTER_TABLE

AS

BEGIN

PRINT 'khong dc sua bang'

ROOLBACK;

END

9.2.2. DML Trigger:

Hay còn gọi là Trigger thao tác dữ liệu là loại trigger được kích hoạt khi có các sự

kiện insert, update, delete dữ liệu trên các bảng.

Các sự kiện được dùng trong Trigger thao tác dữ liệu : INSERT, UPDATE,

DELETE.

VD:

Tạo Trigger cập nhật số lượng hàng hóa khi nhập:

CREATE TRIGGER ThemChiTietPhieuNhap

ON ChiTietPhieuNhap

FOR INSERT AS UPDATE HangHoa

SET TonKho=TonKho + inserted.SoLuong

FROM HangHoa

INNER JOIN inserted ON HangHoa.MaHangHoa=inserted.MaHangHoa

Sửa lại Trigger chỉ cho phép nhập khi số lượng nhỏ hơn 10

ALTER TRIGGER ThemChiTietPhieuNhap

63

ON ChiTietPhieuNhap

FOR INSERT

AS

IF((SELECT SoLuong from inserted)>=10) ROLLBACK TRANSACTION

UPDATE HangHoa

SET TonKho=TonKho + inserted.SoLuong

FROM HangHoa

INNER JOIN inserted ON HangHoa.MaHangHoa=inserted.MaHangHoa

Xóa bỏ Trigger

DROP TRIGGER ThemChiTietPhieuNhap

9.3. Sử dụng các Trigger lồng nhau (Nested Triggers)

Khái niệm trigger lồng nhau hoàn toàn giống khái niệm thủ tục lồng nhau. Bản thân bên

trong trigger, chúng ta được phép gọi thực hiện các lệnh INSERT, UPDATE, DELETE để

cập nhật dữ liệu của các bảng khác, chính các lệnh này sẽ làm kích hoạt các trigger liên

quan khác (nếu có) và cứ thế các trigger có thể gọi thực hiện lồng nhau.

Cấp độ lồng tối đa của các trigger không vượt quá 32 cấp. Chúng ta cũng có thể sử dụng

biến hệ thống @@NESTLEVEL để biết được cấp độ lồng hiện hành của trigger. Mặc định

các trigger được phép lồng nhau. Tuy nhiên chúng ta cũng có thể tạm thời tắt chế độ lồng

của trigger bằng lệnh.

Hoặc có thể bật trở lại chế độ lồng nhau của trigger bằng lệnh.

EXEC sp_configure „Nested Triggers‟,<giá trị 0 hoặc 1>

Ví dụ trigger lồng nhau:

Cho các bảng dữ liệu A(A1,A2) B(B1,B2) C(C1,C2)

Trong đó các cột A1,A2,B1,B2,C1,C2 có kiểu dữ liệu là int.

Viết Trigger cho hành động insert 1 bản ghi vào bảng A sẽ insert bản ghi đó vào bảng B.

Viết Trigger cho hành động insert 1 bản ghi vào bảng B sẽ insert bản ghi đó vào bảng C.

Như vậy khi thêm 1 bản ghi vào bảng A sẽ gọi Trigger thứ 1 để thêm dữ liệu vào bảng B.

Khi đó trigger thứ 2 được tự động gọi.

CREATE TRIGGER TG1 ON A FOR INSERT AS

BEGIN

DECLARE @A1 INT SET @A1=(SELECT A1 FROM INSERTED)

DECLARE @A2 INT SET @A2=(SELECT A2 FROM INSERTED)

INSERT INTO B(B1,B2) VALUES(@A1,@A2)

64

END

CREATE TRIGGER TG2 ON B FOR INSERT AS

BEGIN

DECLARE @B1 INT SET @B1=(SELECT B1 FROM INSERTED)

DECLARE @B2 INT SET @B2=(SELECT B2 FROM INSERTED)

INSERT INTO C(C1,C2) VALUES(@B1,@B2)

END

9.4. Sử dụng các Trigger đệ quy:

Khái niệm trigger đệ quy hoàn toàn giống khái niệm thủ tục đệ quy. Bản thân bên trong

trigger, chúng ta được phép gọi thực hiện các lệnh INSERT, UPDATE, DELETE để cập

nhật dữ liệu của các bảng khác, chính các lệnh này sẽ làm kích hoạt các trigger liên quan

khác (nếu có) và cứ thế các trigger có thể gọi thực hiện đệ quy.

Cấp độ đệ quy tối đa của các trigger không vượt quá 32 cấp giống như lồng nhau. Và có thể

coi trigger đệ quy là trường hợp đặc biệt của trigger lồng nhau.

Ví dụ trigger đệ quy:

Cho các bảng dữ liệu A(A1,A2) B(B1,B2)

Trong đó các cột A1,A2,B1,B2 có kiểu dữ liệu là int.

Viết Trigger cho hành động insert 1 bản ghi (X1,X2) vào bảng A sẽ insert bản ghi (X1+1,

X2+1) vào bảng B nếu trường X1+1<10 và X2+1<10

Viết Trigger cho hành động insert 1 bản ghi (X1,X2) vào bảng B sẽ insert bản ghi (X1+1,

X2+1) vào bảng A nếu trường X1+1<10 và X2+1<10

Như vậy khi thêm 1 bản ghi vào bảng A sẽ gọi Trigger thứ 1 để thêm dữ liệu vào bảng B và

lặp lại với A. Khi đó trigger đã được đệ quy.

CREATE TRIGGER TG1 ON A FOR INSERT AS

BEGIN

DECLARE @A1 INT SET @A1=(SELECT A1 FROM INSERTED)+1

DECLARE @A2 INT SET @A2=(SELECT A2 FROM INSERTED)+1

IF @A1<10 AND @A2<10

INSERT INTO B(B1,B2) VALUES(@A1,@A2)

END

CREATE TRIGGER TG2 ON B FOR INSERT AS

BEGIN

DECLARE @B1 INT SET @B1=(SELECT B1 FROM INSERTED)+1

65

DECLARE @B2 INT SET @B2=(SELECT B2 FROM INSERTED)+1

IF @B1<10 AND @B2<10

INSERT INTO A(A1,A2) VALUES(@B1,@B2)

END

Bài tập

Câu 1: Trình bày khái niệm về Trigger? So sánh sự khác biệt giữa Trigger và ràng buộc

(constraint)

Câu 2: Trình bày cú pháp đầy đủ của các lệnh tạo, sửa, xóa Trigger và giải thích ý nghĩa

của các tham số.

Câu 3: Thế nào là Trigger đệ quy? Hãy đưa ra một ví dụ cài đặt Trigger đệ quy.

66

MỘT SỐ ĐỀ THI MẪU

67

Trƣờng Đại Học Hàng Hải Việt Nam

Khoa Công nghệ Thông tin

BỘ MÔN HỆ THỐNG THÔNG TIN

-----***-----

THI KẾT THÚC HỌC PHẦN

Tên học phần : HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Năm học : 2009 - 2010

Đề thi số: Ký duyệt đề:

1

Thời gian: 60 phút

Câu 1: (3 điểm)

Viết các lệnh T-SQL để tạo cơ sở dữ liệu QLYBAIXE gồm các bảng dữ liệu sau đây:

ChuXe(MaCX, TenCX, DiaChi)

LoaiXe(MaLoai, TenLoai)

Xe(SoXe, MaCX, MaLoai)

NhatKyBai(SoXe, NgayVao, NgayRa)

Trong đó bảng NhatKyBai lưu giữ thông tin thời gian lưu bãi của xe. Một xe có thể vào bãi

nhiều lần. Xe nào chưa ra khỏi bãi thì có có trường NgayRa = NULL.

Câu 3: (4 điểm)

Viết các câu lệnh truy vấn trên cơ sở dữ liệu QLYBAIXE để thực hiện các nhiệm vụ sau:

Thống kê xem mỗi chủ xe sở hữu bao nhiêu loại xe khác nhau:

MaCX TenCX SoLoaiXe

Thống kê các xe hiện đang nằm trên bãi và số ngày lưu bãi tính từ lần vào gần nhất cho đến

thời điểm hiện tại

SoXe SoNgayLuu

Thống kê các xe ra khỏi bãi vào tháng 10/2009 và tổng số ngày lưu bãi của các xe này qua

các lần ra vào bãi (tính từ lần vào đầu tiên cho tới lần ra cuối cùng)

SoXe TongSoNgay

Thống kê số lần vào bãi của mỗi loại xe

68

Câu 4: (3 điểm)

Viết một thủ tục thường trú có tên sp_ThemXe làm nhiệm vụ thêm một bản ghi mới vào

bảng Xe trong cơ sở dữ liệu QLYBAIXE. Biết xe mới thêm vào phải thỏa mãn các điều

kiện:

Không có SoXe trùng với một xe nào đó đã có trên bảng.

Xe này phải thuộc sở hữu của một chủ xe có MaCX nằm trong bảng ChuXe

Xe này phải thuộc về một loại xe có MaLoai nằm trong bảng LoaiXe

MaLoai TenLoai SoLan

69

Trƣờng Đại Học Hàng Hải Việt Nam

Khoa Công nghệ Thông tin

BỘ MÔN HỆ THỐNG THÔNG TIN

-----***-----

THI KẾT THÚC HỌC PHẦN

Tên học phần : HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Năm học : 2009 - 2010

Đề thi số: Ký duyệt đề:

2

Thời gian: 75 phút

Câu 1: (3 điểm)

Hãy viết lệnh T-SQL tạo cơ sở dữ liệu có tên HDANDETAI gồm các bảng dữ liệu sau đây:

GiangVien(MaGV, TenGV)

DeTai(MaDT, TenDT)

SinhVien(MaSV, TenSV, Lop, MaDT, MaGVHD, MaGVPB)

Trong đó mỗi sinh viên chỉ được nhận một đề tài. Các sinh viên có thể nhận đề tài giống

nhau. Mỗi sinh viên có một giáo viên hướng dẫn và một giáo viên phản biện.

Câu 2: (4 điểm)

Viết các câu lệnh truy vấn trên cơ sở dữ liệu HDANDETAI thực hiện những công việc sau:

Hãy thống kê xem mỗi giáo viên đã hướng dẫn và phản biện bao nhiêu sinh viên:

MaGV TenGV SoSVHuongDan SoSVPhanBien

Hãy thống kê xem mỗi giáo viên đã hướng dẫn và phản biện bao nhiêu đề tài khác nhau:

MaGV TenGV SoDeTaiHD SoDeTaiPB

Hãy thống kê xem mỗi lớp nhận bao nhiêu đề tài khác nhau:

Lop SoDeTai

70

Hãy thống kê xem mỗi giáo viên hướng dẫn sinh viên đến từ bao nhiêu lớp khác nhau:

MaGV TenGV SoLopHuongDan

Câu 3: (3 điểm)

Hãy xây dựng một hàm người dùng UDF để tính tổng các giai thừa:

F(n) = 1! + 2! + 3! + ... + n!

71

Trƣờng Đại Học Hàng Hải Việt Nam

Khoa Công nghệ Thông tin

BỘ MÔN HỆ THỐNG THÔNG TIN

-----***-----

THI KẾT THÚC HỌC PHẦN

Tên học phần : HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Năm học : 2009 - 2010

Đề thi số: Ký duyệt đề:

3

Thời gian: 60 phút

Câu 1: (3 điểm)

Viết các lệnh T-SQL để cơ sở dữ liệu QLYNHANSU bao gồm các bảng dữ liệu sau:

PhongBan(MaPB, TenPB)

ChuyenMon(MaCM, TenCM)

NhanVien(MaNV, TenNV, MaPB, MaCM, LaTruongPhong)

Chú ý:

Mỗi phòng ban có một và chỉ một nhân viên giữ vị trí trưởng phòng. Nhân viên nào giữ vị

trí trưởng phòng thì trường LaTruongPhong = 1, còn bình thường mặc định LaTruongPhong

= 0.

Câu 3: (3 điểm)

Hãy viết các câu lệnh truy vấn làm nhiệm vụ:

Thống kê ra mã nhân viên và tên của các vị trưởng phòng của những phòng ban có ít nhân

viên nhất

MaNV TenNV TenPB

Thống kê xem ứng với mỗi một phòng ban thì nhân viên phòng ban đó có bao nhiêu chuyên

môn khác nhau:

MaPB TenPB SoLuongCMBiet

Thống kê xem ứng với mỗi loại chuyên môn thì có bao nhiêu phòng ban có nhân viên biết

chuyên môn đó:

72

MaCM TenCM SoLuongPB

Câu 4: (4 điểm)

Tạo một view làm nhiệm vụ thống kê số lượng nhân viên của mỗi phòng ban:

MaPB TenPB SoLuongNV

Tạo một Trigger làm nhiệm vụ kiểm soát quá trình Insert và Update trên bảng NhanVien

nhằm đảm bảo sao cho ứng với mỗi phòng ban chỉ có một nhân viên được thiết lập là trưởng

phòng (có trường LaTruongPhong = 1).

73

Trƣờng Đại Học Hàng Hải Việt Nam

Khoa Công nghệ Thông tin

BỘ MÔN HỆ THỐNG THÔNG TIN

-----***-----

THI KẾT THÚC HỌC PHẦN

Tên học phần : HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Năm học : 2009 - 2010

Đề thi số: Ký duyệt đề:

4

Thời gian: 60 phút

Câu 1: (3 điểm)

Viết các lệnh T-SQL tạo cơ sở dữ liệu QLYBANHANG gồm các bảng dữ liệu sau đây:

LoaiHang(MaLoai, TenLoai)

NhaCungCap(MaNCC, TenNCC, DiaChi, DienThoai)

HangNhap(MaHN, MaLoai, MaNCC, SoLuong, DonGia)

Câu 3: (3 điểm)

Thống kê xem mỗi nhà cung cấp đã cung cấp bao nhiêu loại hàng khác nhau:

MaNCC TenNCC SoLoaiHang

Thống kê xem mỗi loại hàng được cung cấp bởi bao nhiêu nhà cung cấp khác nhau:

MaNCC TenNCC SoLoaiHang

Thống kê số tiền phải thanh toán cho mỗi nhà cung cấp, biết số tiền phải thanh toán ứng với

mỗi MaHN là SoLuong * DonGia:

MaNCC TenNCC SoTien

Câu 4: (4 điểm)

Viết lệnh T-SQL định nghĩa một thủ tục thường trú có tên sp_AddHangNhap làm nhiệm vụ

thêm một bản ghi mới vào bảng hàng nhập. Dữ liệu nhập vào phải thỏa mãn tất cả các điều

kiện sau đây:

Có @MaHN không trùng với một MaHN nào đã có trong bảng

Có @MaLoai phải nằm trong số các MaLoai có mặt trong bảng LoaiHang

74

Có @MaNCC nằm trong số các MaNCC có mặt trong bảng NhaCungCap

Nếu thêm thành công, thủ tục trả về giá trị 1. Nếu dữ liệu không hợp lệ, thủ tục trả về giá trị

0.

Giả sử người ta không tạo ràng buộc khóa chính trên cột MaHN, hãy tạo một Trigger làm

nhiệm vụ kiểm soát việc Insert, Update trên bảng HangNhap để đảm bảo tính không trùng

lặp của dữ liệu nhập vào cột MaHN và dữ liệu điền vào cột SoLuong luôn phải thỏa mãn

điều kiện 10 < SoLuong < 30.

75

Trƣờng Đại Học Hàng Hải Việt Nam

Khoa Công nghệ Thông tin

BỘ MÔN HỆ THỐNG THÔNG TIN

-----***-----

THI KẾT THÚC HỌC PHẦN

Tên học phần : HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Năm học : 2009 - 2010

Đề thi số: Ký duyệt đề:

5

Thời gian: 60 phút

Câu 1: (3 điểm)

Viết các lệnh T-SQL tạo cơ sở dữ liệu CHOTHUEXE gồm các bảng dữ liệu sau đây:

LoaiXe(MaLoai, TenLoai, DonGiaTheoNgay)

KhachHang(MaKhach, TenKhach, DiaChi, DienThoai)

Xe(SoXe, MaLoai, TinhTrang)

NhatKyThue(SoXe, MaKhach, TuNgay, DenNgay)

Câu 3: (4 điểm)

Viết các câu lệnh truy vấn làm nhiệm vụ sau đây:

Thống kê xem mỗi khách hàng đã từng thuê bao nhiêu loại xe khác nhau:

MaKhach TenKhach SoLoaiXeDaThue

Thống kê xem mỗi khách hàng đã từng thuê bao nhiêu chiếc xe khác nhau:

MaKhach TenKhach SoLuongXeDaThue

Thống kê xem mỗi loại xe đã được bao nhiêu khách hàng khác nhau thuê:

MaLoai TenLoai SoKhachHang

Thống kê xem mỗi xe đã được bao nhiêu khách hàng khác nhau thuê:

SoXe SoKhachHang

Câu 4: (3 điểm)

76

Hãy viết lệnh T-SQL định nghĩa ra một view thống kê số tiền mà khách phải trả cho mỗi

lần thuê xe:

SoXe MaKhach TuNgay DenNgay SoNgayThue DonGiaTheoNgay ThanhTien

Biết SoNgayThue = DenNgay - TuNgay, ThanhTien = SoNgayThue * DonGiaTheoNgay

Hãy viết lệnh T-SQL để định nghĩa một Trigger kiểm soát việc Insert, Update trên bảng

NhatKyThue sao cho luôn đảm bảo trên các trường TuNgay và DenNgay thì ngày bắt đầu

luôn phải có giá trị nhỏ ngày kết thúc (TuNgay < DenNgay).