Tài liệu môn hệ quản trị cơ sở dữ liệu
Trang 2DakLak, tháng 03 năm 2012
Trang 3MỤC LỤC 2
PHẦN 1 HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 3
I MỘT SỐ KHÁI NIỆM 3
II CÁC MÔ HÌNH DỮ LIỆU: 3
III CÁCH NHÌN VÀ TÍNH ĐỘC LẬP DỮ LIỆU 4
IV THÀNH PHẦN HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 5
V PHÂN LOẠI HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 5
VI NGÔN NGỮ CƠ SỞ DỮ LIỆU 5
PHẦN 2 HỆ QUẢN TRỊ CSDL SQL SERVER 2005 6
I TỔNG QUAN 6
II CÀI ĐẶT SQL SERVER 2005 6
III QUẢN LÝ CÁC DỊCH VỤ SQL SERVER 10
IV TẠO CƠ SỞ DỮ LIỆU 13
V TẠO BẢNG 15
VI TẠO VIEW 28
VII QUẢN LÝ STORED PROCEDURE 38
VIII QUẢN LÝ TRIGGER 41
IX SỬ DỤNG FUNCTION 44
X SAO LƯU VÀ KHÔI PHỤC DỮ LIỆU 49
XI QUẢN LÝ BẢO MẬT NGƯỜI DÙNG 52
PHẦN 3: BÀI THỰC HÀNH SQL SERVER 2005 57
Trang 4PHẦN 1 HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
I MỘT SỐ KHÁI NIỆM
1 Dữ liệu (data): là khả năng lượng hóa sự vật và hiện tượng để lưu trữ
2 Thông tin (information): là sự hiểu biết khi xử lý dữ liệu
3 Hệ thống file (file system): hay hệ thống quản lý file, là hệ thống đảm bảo quản lý các tậptin (chức năng của hệ điều hành) gồm các công việc: tạo, xóa, lưu trữ, quản lý tập tin Cácnhược điểm của hệ thống file:
Phụ thưộc vào dữ liệu và vào chương trình
Dữ liệu trùng lặp nhiều nơi
Hạn chế việc dùng chung và chia sẻ dữ liệu
Tốn thời gian để phát triển hệ thống (khó kế thừa khi có nhu cầu phát triển hệ thống)
Tính an toàn dữ liệu không cao và tốn kém
4 Cơ sở dữ liệu (CSDL/DB: DataBase): là tập hợp có tổ chức các dữ liệu liên quan với nhau
về mặt logic
5 Hệ thống cơ sở dữ liệu (DataBase System): là tập hợp các CSDL trong hệ thống
6 Hệ quản trị cơ sở dữ liệu (HQTCSDL/DBMS: DataBase Management System): là hệ thốngphần mềm ứng dụng dùng để tạo mới, bảo trì, và đảm bảo truy cập có điều khiển đến cácCSDL của người dùng Bao gồm các chức năng sau:
Quản lý người sử dụng: thêm, bớt, quản lý quyền truy cập CSDL
Quản lý CSDL: tạo, xóa, thay đổi CSDL
Đảm bảo tính an toàn CSDL: Lưu trữ, phục hồi CSDL khi có sự cố
Đảm bảo tính ràng buột toàn vẹn CSDL
7 Quản trị cơ sở dữ liệu (SA: System Administrator/DataBase Management): là người cóquyền phát triển cơ sở dữ liệu trong hệ thống
8 Dữ liệu meta (Metadata): là dữ liệu mô tả các thuộc tính hay các đặc tính của các dữ liệukhác
9 Kho dữ liệu (datawarehouse): là cơ sở dữ liệu trợ giúp quyết định tích hợp, bao gồm thôngtin trích từ các cơ sở dữ liệu khác
II CÁC MÔ HÌNH DỮ LIỆU:
Là khả năng mô tả và thể hiện CSDL bằng mô hình logic Gồm có các mô hình dữ liệusau:
Mô hình phân cấp: Thể hiện CSDL dưới dạng cây, trong đó các nút biểu diễn cáctập thực thể, giữa nút con và nút cha được liên hệ theo mối quan hệ xác định Mô hìnhnày phát triển vào những năm 1960-1970
Mô hình mạng: Mô hình mô tả CSDL dưới dạng đồ thị có hướng, phát triển nhữngnăm 1970-1980
Mô hình quan hệ: Mô hình này đựa trên cơ sở khái niệm lý thuyết tập hợp các quan
hệ CSDL quan hệ được xây dựng theo lý thuyết do E F Codd giới thiệu năm 1970,
và từ những năm 1980 đã trở thành mô hình được sử dụng rộng rãi để phát triển hệquản trị CSDL Theo mô hình quan hệ, dữ liệu được thể hiện trong bảng hai chiều,gồm các cột và dòng Các bảng gọi là các quan hệ, các cột gọi là các thuộc tính, cácdòng gọi là các bộ, hay là bản ghi, các thuộc tính cho biết ý nghĩa của bản ghi
Mô hình dữ liệu hướng đối tượng: thể hiện CSDL gồm tập các “lớp” Mỗi lớp cónhiều đối tượng (Mỗi đối tượng cụ thể gọi là thể hiện), mỗi lớp có các thuộc tính vàphương thức xử lý để có thể thay đổi các thuộc tính của lớp đó Hướng tiếp cận CSDLhướng đối tượng sẽ mô tả chân thực hơn về thế giới thực, phổ biến vào đầu nhữngnăm 1990, nhưng đến nay vẫn chưa có nhiều CSDL thuộc loại này
Trang 5III CÁCH NHÌN VÀ TÍNH ĐỘC LẬP DỮ LIỆU
Tính hiệu quả của hệ thống đòi hỏi phải thiết kế các cấu trúc dữ liệu phức tạp để biểudiễn dữ liệu trong CSDL Các nhà phát triển che dấu sự tphức tạp này thông qua các mức trừutượng nhằm đơn giản sự trao đổi giữa người dùng và hệ thống:
Mức vật lý (Physical level): Mức thấp nhất của sự trừu tượng, mô tả dữ liệu hiện tạiđược lưu trữ như thế nào Cấu trúc phức tạp được mô tả chi tiết
Mức logic (Logical level): Mức kế tiếp cao hơn về sự trừu tượng, mô tả loại dữ liệu
và mối quan hệ giữa các loại dữ liệu
Mức view (View level): Mức cao nhất của sự trừu tượng, mô tả một phần của dữ liệutổng thể Một CSDL có thể có nhiều mức view cho nhiều người sử dụng khác nhau.Người ta sử dụng CSDL để tạo nên môi trường cho phép nhiều người sử dụng cùng truycập vào các dữ liệu dùng chung Dữ liệu không gắn chặt vào một ứng dụng nào, cũngkhông bị một ứng dụng nào điều khiển Điều này đạt được là do người ta đã chia việcquản lý dữ liệu theo nhiều tầng độc lập, cụ thể là trách nhiệm tạo và bảo trì dữ liệu lưu trữ
do phần mềm đặt biệt quản lý, đó là hệ quản trị cơ sở dữ liệu
(Tên, vị trí, người dùng )
Table 1 (Vị trí, kích thước, )
Field 1 (Type1, size1 )
Field 2 (Type2, size2 )
Field 3 (Type3, size3 )
Table 2 (Vị trí, kích thước, )
Field 1 (Type1, size1 )
Field 2 (Type2, size2 )
Field 3 (Type3, size3 )
Table 2 (Vị trí, kích thước, )
Field 1 (Type1, size1 ) Field 2 (Type2, size2 ) Field 3 (Type3, size3 )
Mức vật lý
CSDL1
Table1 (Field1, field2)
Table2 (Field1, field2)
CSDL2
Table1 (Field1, field2)Table2 (Field1, field2)
Mức logic
View1CSDL1(Table1.Field1, Table2.field1) CSDL1(Table1.Field1, Table1.field2)View2
Trang 6Tính độc lập dữ liệu: Việc tách mô tả dữ liệu ra khỏi chương trình ứng dụng sử dụng
dữ liệu đó được gọi là tính độc lập dữ liệu Có 2 loại độc lập dữ liệu sau:
Độc lập dữ liệu vật lý: Là khả năng sửa đổi sơ đồ dữ liệu vật lý (nơi lưu trữ,phương thức truy xuất, ) mà không làm cho chương trình ứng dụng phải viết lại.tính độc lập dữ liệu vật lý phụ thuộc vào chất lượng của HQTCSDL
Độc lập dữ liệu logic: là khả năng sửa đổi sơ đồ dữ liệu luận lý (thêm bớt thuộctính, thay đổi kiểu dữ liệu ) không làm cho chương trình ứng dụng phải viết lại.Tính độc lập ở mức logic phụ thuộc vào thiết kế CSDL
IV THÀNH PHẦN HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
Dựa theo chức năng và có thể xem HQTCSDL được cấu tạo từ ba thành phần: Giaodiện dữ liệu, giao diện người sử dụng và giao diện lập trình
1 Giao diện dữ liệu: là tập các chương trình cấp thấp có nhiệm vụ tổ chức CSDL Hiệusuất của HQTCSDL hoàn toàn phụ thuộc vào giao diện dữ liệu
2 Giao diện người sử dụng: Cung cấp giao diện đơn giản, hiệu quả cho người sử dụng giao tiếp với CSDL
3 Giao diện người lập trình: Là sự tích hợp NNLT trong HQTCSDL
V PHÂN LOẠI HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
1 HQTCSDL cá nhân: phát triển trên nền máy tính cá nhân như Foxpro, Access
2 HQTCSDL tập trung: phát triển trên nền tảng mạng máy tính như DB2, Inter Base, SQL Server, Oracle
3 HQTCSDL phân tán: phát triển trên nền tảng mạng máy tính, CSDL được lưu trữ phân mãnh nhiều nơi nhưng dưới sự điều khiển của HQTCSDL phân tán thì đối với ứng dụng vẫn thấy được sự tập trung CSDL
VI NGÔN NGỮ CƠ SỞ DỮ LIỆU
Một HQTCSDL cung cấp hai kiểu ngôn ngữ khác nhau để tương tác với CSDL:
Một là ngôn ngữ định nghĩa dữ liệu (Data Definition Language: DDL) cho phép xác lập lược đồ dữ liệu (Tạo các Table )
Hai là ngôn ngữ thao tác dữ liệu (Data Manipulation Language: DML) là ngôn ngữ cho phép người sử dụng truy xuất hoặc thao tác CSDL
Trang 7PHẦN 2 HỆ QUẢN TRỊ CSDL SQL SERVER 2005
I TỔNG QUAN
Microsoft SQL Server 2005 là một HQTCSDL quan hệ, tổ chức dữ liệu bằng cách lưuchúng vào bảng, giữa các bảng có mối liên hệ với nhau Là HQTCSDL có khả năng lưu trữ sốlượng lớn dữ liệu và hỗ trợ việc cho phép nhiều người sử dụng truy cập đồng thời Hệ thốngSQL Server 2005 là hệ thống khách/chủ (client/server), có thể chạy tốt trên hệ thống mạngLAN (Windows) hay trên máy PC
1 Các thành phần chính của Server: Phần Server gồm các dịch vụ sau:
SQL Server: là cơ cấu CSDL chính, mặc nhiên thì dịch vụ này được chọn
SQL Server Agent: Điều khiển các tác vụ tự động
2 Các thành phần chính của Client:
Enterprise Manager: Công cụ quản trị CSDL server chính
SQL Query Analyzer: Công cụ quản lý T-SQL
II CÀI ĐẶT SQL SERVER 2005
1.Chạy tập tin \Setup.exe
Đánh dấu mục I accept the licensing terms and conditions rồi chọn Next để được hình
sau
2 Chọn Install
3 chọn Next
Trang 9Chọn Advanced
Tiếp tục chọn Next
Trang 10 Tiếp tục chọn Next sau khi đã nhập và ghi nhớ mật khẩu cho SA
(Windows Authentication Mode: Sử dụng quyền truy cập của Windows;
Mixed Mode: Dùng quyền truy cập của Windows hoặc của SQL Server)
Trang 11Chọn Next
Chọn Install
Trang 12Chọn Finish để hoàn tất việc cài đặt.
III QUẢN LÝ CÁC DỊCH VỤ SQL SERVER
Trước khi có thể đăng nhập và xây dựng CSDL, chúng ta cần phải khởi động dịch vụSQL Server Một số dịch vụ cần thiết đó là:
1 Khởi động SQL Server: (dịch vụ này nằm trên máy Server, các máy client không có)
Start/Programs/ Administrative Tools/Services
Trang 133 SQL Server Management Studio: Đây là dịch vụ Client dùng để kết nối và quản lý
điều khiển SQL Server SQL Server Management Studio là công cụ hoàn hảo để quản lý
SQL Server, với các tác vụ sau:
Trang 14Nhập các thông số để kết nối với Server:
Server Name: tên server cần kết nối
Authentication: Cơ chể kết nối, của Winserver hay của SQL Server
Login: Tên đăng nhập
Password: mật khẩu đăng nhập
Chọn Connect để kết nối
Thành công ta có được như hình sau:
Trang 15IV TẠO CƠ SỞ DỮ LIỆU
Giao diện SQL Server 2005 khi thực hiện trình quản lý SQL Server Management Studio
Databases: Tập hợp các CSDL, trong đó System Databases là tập các CSDL hệ thống
và danh sách các CSDL hiện có của Server
Security: Bảo mật của Server, có Logins là tập hợp tất cả những người sử dụng của
server
Kích phải chuột lên mục Databases rồi chọn New Database
Trang 16Nhập tên CSDL mới vào hộp Name (12345)
Chọn OK để kết thúc
Ta có được CSDL mới chỉ có tên như sau:
CSDL mới tạo có đầy đủ các thành phần quan trọng như sau:
Diagrams: Là lược đồ mô hình dữ liệu của CSDL Là cái nhìn trực quan giữa các Table và
mối quan hệ giữa chúng
Tables: Tập hợp tất cả các Table (Bảng; quan hệ) của CSDL
Views: Tập hợp tất cả các View (khung nhìn) của CSDL
Programmability: Tập hợp các chương trình gồm có 2 loại quan trọng:
Trang 17Stored Procedures: Tập hợp các thủ tục (đoạn chương trình con) của CSDL.
Functions: Tập hợp các hàm gồm có:
valued Funtions: Hàm trả về một Table có 2 loại Inline valued Function (hàm chọn Table) và Multi-statement Table-valued Functions(Hàm tạo Table)
Table- Scalar-valued Functions: Hàm trả về 1 giá trị do người dùng định
nghĩa
System Functions: Tập các hàm của hệ thống.
Security: Bảo mật của CSDL có: Users: Tập hợp tất cảc những người sử dụng của CSDL;
Roles: Tập các nhóm người dùng của CSDL có chung một tập hợp các quyền truy cập giống
nhau trong Database Roles
V TẠO BẢNG
Bảng hay Table là đối tượng quan trọng trong CSDL,là nơi lưu trữ dữ liệu theo lýthuyết CSDL quan hệ Theo mô hình quan hệ, dữ liệu được thể hiện trong bảng hai chiều,gồm các cột và dòng Các bảng gọi là các quan hệ, các cột gọi là các thuộc tính, các dòng gọi
là các bộ, hay là bản ghi, các thuộc tính cho biết ý nghĩa của bản ghi
Xét ví dụ CSDL quản lý điểm như mô hình sau:
Mô hình CSDL trên gồm có 9 Table: Khoa, NganhHoc, Lop, LLSV, HocPhan,
ChuongTrinhDaoTao, KeHoachHT, BangDiem và DiemRL (Để có được mô hình này ta cần kiến thức trong các học phần: CSDL và Phân tích thiết kế hệ thống thông tin), nhiệm vụ của
chúng ta là phải xây dụng được các Table cụ thể của mô hình trên
1 Xác định Table cần tạo: Phân tích ta thấy: Table đơn giản nhất có tên Khoa với 3trường dữ liệu là MaKhoa , TenKhoa và KyTu Tiếp tục phân tích sâu hơn ta cần phải biết
MaKhoa có miền xác định như thế nào? (Lưu trữ cái gì?) Từ đó suy ra có loại dữ liệu gì? độ
dài bao nhiêu? có cho phép null hay không? có duy nhất hay không? có ràng buộc (Qui tắc)nào không?
Tóm lại: Trước khi thiết kế một Table ta cần xác định một số kiến thức sau:
Mục đích Table lưu trữ cái gì?
Tên Table là gì?
Có các trường (field, cột) nào?
Trường này dùng lưu trữ cái gì? Thuộc loại dữ liệu nào?độ dài bao nhiêu? Chophép null hay không? Có duy nhất hay không? Có ràng buộc nào không?
Trang 18Trong SQL Server 2005 có các kiểu dữ liệu thường được sử dụng (Tùy mục đích) như sau:
bigint Integer (whole number) data from -2^63 (-9223372036854775808) through
2^63-1 (9223372036854775807)
int Integer (whole number) data from -2^31 (-2,147,483,648) through 2^31 - 1
(2,147,483,647)
smallint Integer data from 2^15 (-32,768) through 2^15 - 1 (32,767)
bit Integer data with either a 1 or 0 value
decimal Fixed precision and scale numeric data from -10^38 +1 through 10^38 –1
numeric Functionally equivalent to decimal.
money Monetary data values from 2^63 (922,337,203,685,477.5808) through 2^63
-1 (+922,337,203,685,477.5807), with accuracy to a ten-thousandth of amonetary unit
smallmoney Monetary data values from -214,748.3648 through +214,748.3647, with
accuracy to a ten-thousandth of a monetary unit
float Floating precision number data from -1.79E + 308 through 1.79E + 308
real Floating precision number data from -3.40E + 38 through 3.40E + 38
datetime Date and time data from January 1, 1753, through December 31, 9999, with an
accuracy of three-hundredths of a second, or 3.33 milliseconds
smalldatetime Date and time data from January 1, 1900, through June 6, 2079, with an
accuracy of one minute
char Fixed-length non-Unicode character data with a maximum length of 8,000
characters
varchar Variable-length non-Unicode data with a maximum of 8,000 characters
text Variable-length non-Unicode data with a maximum length of 2^31 - 1
(2,147,483,647) characters
nchar Fixed-length Unicode data with a maximum length of 4,000 characters
nvarchar Variable-length Unicode data with a maximum length of 4,000 characters
sysname is a system-supplied user-defined data type that is functionally
equivalent to nvarchar(128) and is used to reference database object names.
ntext Variable-length Unicode data with a maximum length of 2^30 - 1
(1,073,741,823) characters
binary Fixed-length binary data with a maximum length of 8,000 bytes
varbinary Variable-length binary data with a maximum length of 8,000 bytes
image Variable-length binary data with a maximum length of 2^31 - 1
(2,147,483,647) bytes
cursor A reference to a cursor
sql_variant A data type that stores values of various SQL Server-supported data types,
except text, ntext, timestamp, and sql_variant.
table A special data type used to store a result set for later processing
timestamp A database-wide unique number that gets updated every time a row gets
updated
uniqueidentifier A globally unique identifier (GUID)
Trang 192 Tạo mới Table:
- Kích phải chuột tại mục Tables
- Chọn lệnh New Table
- Lần lượt thiết kế các cột của Table
- Column Name: Tên cột hay tên trường
- Data Type: Kiểu dữ liệu và độ dài
- Allow Nulls: Nếu đánh dấu thì trường này cho phép Null (Không có dữ liệu)
- Default Value: Giá trị mặc nhiên của trường khi Insert một mẫu tin mới.
- Computed Column Sspeccification: Trường tính toán từ các trường khác
- Description: Mô tả ý nghĩa của trường
- Identity Specification: Trường tự động tăng,
Identity Increment: Khởi đầu; Identity Seed: bước tăng
Trang 20Sau khi thiết kế xong,đóng cửa sổ thiết kế
sẽ gặp cảnh báo-Yes: Lưu Table
- No: Không lưu
-Nhập tên Table mới cần lưu và OK
Lệnh SQL tương ứng:
CREATETABLE [dbo].[Khoa](
[MaKhoa] [smallint] NOTNULL,
[TenKhoa] [nvarchar](50)COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[KyTu] [varchar](2)COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
CONSTRAINT [PK_Khoa] PRIMARYKEYCLUSTERED
(
[MaKhoa] ASC
)WITH(IGNORE_DUP_KEY =OFF)ON [PRIMARY]
)ON [PRIMARY]
3 Thay đổi thiết kế Table đã có: Nếu thấy cần thiết phải thay đổi thiết kế của Table đã
có, ta kích phải chuột tại Table cần thay đổi, gặp một menu đối tượng như sau:
- New Table : Tạo mới Table khác
- Modify: Thiết kế lại Table đang chọn
- Open Table: Mở table đang chọn
- Delete: Xóa Table
- Rename: Đổi tên Table
- Properties: Thay đổi thuộc tính.
- Script Table as >Create To: Xem
lệnh tạo Table
Trang 214 Nhập dữ liệu: Khi cần thiết phải nhập liệu vào Table, ta chọn lệnh Open Table ở trên
Nhập bảng số liệu Khoa như trên
Tiếp tục thiết kế các Table còn lại như sau:
Table Lop
Lệnh SQL tương ứng:
CREATETABLE [dbo].[Lop](
[MaLop] [nvarchar](6)COLLATE SQL_Latin1_General_CP1_CI_AS NOTNULL,
[TenLop] [nvarchar](50)COLLATE SQL_Latin1_General_CP1_CI_AS NOTNULL,
[MaNganh] [nvarchar](3)COLLATE SQL_Latin1_General_CP1_CI_AS NOT
NULL,
[ChuongTrinh] [tinyint] NOTNULL,
[MaKhoa] [smallint] NOTNULL,
CONSTRAINT [PK_Lop] PRIMARYKEYCLUSTERED
(
[MaLop] ASC
)WITH(IGNORE_DUP_KEY =OFF)ON [PRIMARY]
)ON [PRIMARY]
Trang 22Table LLSV
CREATETABLE [dbo].[LLSV](
[MaHSSV] [bigint] IDENTITY(1,1)NOTNULL,
[MaLop] [nvarchar](6)COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[MaSV] [nvarchar](8)COLLATE SQL_Latin1_General_CP1_CI_AS NOTNULL,
[HoLot] [nvarchar](100)COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Ten] [nvarchar](20)COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[NgaySinh] [nvarchar](10)COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Nu] [bit] NOTNULL,
[DoiTuong] [nvarchar](2)COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[KhuVuc] [nvarchar](6)COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[NoiSinh] [nvarchar](30)COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[TrangThai] [tinyint] NOTNULL,
[XepLoaiHT] [tinyint] NOTNULL,
CONSTRAINT [PK_LLSV] PRIMARYKEYCLUSTERED
(
[MaSV] ASC
)WITH(IGNORE_DUP_KEY =OFF)ON [PRIMARY]
)ON [PRIMARY]
Trang 23Table HocPhan
Có lệnh SQL như sau:
CREATETABLE [dbo].[HocPhan](
[ID] [bigint] IDENTITY(1,1)NOTNULL,
[MaHP] [nvarchar](8)COLLATE SQL_Latin1_General_CP1_CI_AS NOTNULL,
[TenHP] [nvarchar](120)COLLATE SQL_Latin1_General_CP1_CI_AS NOTNULL,
[TinChi] [real] NOTNULL,
[TinChiTH] [real] NOTNULL,
[TinChiLT] AS([TinChi]-[TinChiTH]),
[US] [nchar](20)COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[TietLT] [int] NOTNULL,
[TietTH] [int] NOTNULL,
CONSTRAINT [PK_HocPhan] PRIMARYKEYCLUSTERED
(
[MaHP] ASC
)WITH(IGNORE_DUP_KEY =OFF)ON [PRIMARY]
)ON [PRIMARY]
Trang 24Table NganhHoc
Lệnh SQL tương ứng:
CREATETABLE [dbo].[NganhHoc](
[MaNganh] [nvarchar](3)COLLATE SQL_Latin1_General_CP1_CI_AS NOT
NULL,
[TenNganh] [nvarchar](50)COLLATE SQL_Latin1_General_CP1_CI_AS NOTNULL,
[MaKhoa] [smallint] NOTNULL,
[BacHoc] [nchar](2)COLLATE SQL_Latin1_General_CP1_CI_AS NOTNULL,
[SoNam] [decimal](3, 1)NOTNULL,
[SoNamMax] AS([SoNam]*(2)),
[DonChi] [int] NULL,
[DonChi2] [int] NULL,
CONSTRAINT [PK_NganhHoc] PRIMARYKEYCLUSTERED
Trang 25Table ChuongTrinhdaoTao
Lệnh SQL tương ứng:
CREATETABLE [dbo].[ChuongTrinhDaoTao](
[ID] [bigint] IDENTITY(1,1)NOTNULL,
[MaNganh] [nvarchar](3)COLLATE SQL_Latin1_General_CP1_CI_AS NOTNULL,
[MaHP] [nvarchar](8)COLLATE SQL_Latin1_General_CP1_CI_AS NOTNULL,
[KhoiNganh] [tinyint] NOTNULL,
[TuChon] [bit] NOTNULL,
[HocKy] [tinyint] NOTNULL,
[ChuongTrinh] [tinyint] NOTNULL,
CONSTRAINT [PK_ChuongTrinhDaoTao] PRIMARYKEYCLUSTERED
Trang 26Table DiemRL
Lệnh SQL tương ứng:
CREATETABLE [dbo].[DiemRL](
[ID] [bigint] IDENTITY(1,1)NOTNULL,
[NamHoc] [int] NOTNULL,
[HocKy] [tinyint] NOTNULL,
[MaKhoa] [tinyint] NOTNULL,
[MaLop] [nvarchar](6)COLLATE SQL_Latin1_General_CP1_CI_AS NOTNULL,
[MaSV] [nvarchar](8)COLLATE SQL_Latin1_General_CP1_CI_AS NOTNULL,
[DiemRL] [decimal](18, 1)NULL,
[DiemQD] AS(casewhen [DiemRL]>=(90)then(1)when [DiemRL]>=(80)then(0.8)when [DiemRL]>=(70)then(0.6)when [DiemRL]>=(60)then(0.4)when
[diemrl]>=(50)then(0)when [diemrl]>=(30)then(-0.5)when [diemrl]>=(0)then(-1)when
[diemrl] ISNULLthenNULL end),
[XepLoai] AS(casewhen [DiemRL]>=(90)then N'Xuất sắc' when [DiemRL]>=(80)then N'Tốt' when [DiemRL]>=(70)then N'Khá' when [DiemRL]>=(60)then N'TB khá' when
[diemrl]>=(50)then N'Trung bình' when [diemrl]>=(30)then N'Yếu' when [diemrl]>=(0)then
N'Kém' when [diemrl] ISNULLthenNULL end),
[GhiChu] [nvarchar](50)COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[US] [nchar](20)COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
CONSTRAINT [PK_DiemRL] PRIMARYKEYCLUSTERED
(
[ID] ASC
)WITH(IGNORE_DUP_KEY =OFF)ON [PRIMARY]
)ON [PRIMARY]
Trang 27Table KeHoachHT
Lện SQL:
CREATE TABLE [dbo] [KeHoachHT] (
[KeHoachID] [bigint] NOT NULL,
[MaHP] [nvarchar] ( ) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [HocKy] [tinyint] NOT NULL,
[NamHoc] [smallint] NOT NULL,
[MaLop] [nvarchar] ( ) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [BoPhan] [tinyint] NOT NULL,
[Thi] AS (( 100 )- [BoPhan] ),
[XNBP] [bit] NOT NULL,
[XN1] [bit] NOT NULL,
[XN2] [bit] NOT NULL,
[Tong1] [decimal] ( 18 , 2 ) NULL,
[Tong2] [decimal] ( 18 , 2 ) NULL,
[TongBP] [decimal] ( 18 , 2 ) NULL,
[Ngay1] [smalldatetime] NULL,
[Ngay2] [smalldatetime] NULL,
[Buoi1] [tinyint] NULL,
[Buoi2] [tinyint] NULL,
[NgayInsert] [smalldatetime] NULL,
[GhiChu] [nvarchar] ( 250 ) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [TenLopHP] AS (( [MaHP] + '_' )+ ltrim ( str ( [KeHoachID] ))),
[TrangThai] [tinyint] NOT NULL,
[HT1] [tinyint] NOT NULL,
[HT2] [tinyint] NOT NULL,
[US] [nchar] ( 20 ) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
CONSTRAINT [PK_KeHoachHT] PRIMARY KEY CLUSTERED
(
[KeHoachID] ASC
) WITH IGNORE_DUP_KEY = OFF ) ON [PRIMARY]
) ON [PRIMARY]
Trang 28Table BangDiem
Lệnh SQL:
CREATE TABLE [dbo] [BangDiem] (
[BangDiemID] [bigint] NOT NULL,
[KeHoachID] [bigint] NOT NULL,
[MaSV] [nvarchar] ( ) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [MaHP] [nvarchar] ( ) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [BoPhan] [decimal] ( 18 , 1 ) NULL,
[XLBP] [tinyint] NOT NULL,
[XL1] [tinyint] NOT NULL,
[XL2] [tinyint] NOT NULL,
[Thi1] [decimal] ( 18 , 1 ) NULL,
[Thi2] [decimal] ( 18 , 1 ) NULL,
[Diem1] [decimal] ( 18 , 1 ) NULL,
[Diem2] [decimal] ( 18 , 1 ) NULL,
[DiemL1] AS case when [Diem1] IS NULL AND [XL1] =( 7 then
isnull ( [Diem2] ,( 0 )) else isnull ( [Diem1] ,( 0 )) end ),
Trang 29[DiemMax] AS case when isnull ( [Diem2] ,( 0 ))> isnull ( [Diem1] ,( 0 )) then
[Diem2] else [Diem1] end ),
[DiemChu] AS case when case when isnull ( [Diem2] ,
( ))> isnull ( [Diem1] ,( 0 )) then [Diem2] else [Diem1] end >=( 8.5 ) then 'A' when case when isnull ( [Diem2] ,( 0 ))> isnull ( [Diem1] ,( 0 )) then [Diem2] else [Diem1]
end >=( 7 then 'B' when case when isnull ( [Diem2] ,( 0 ))> isnull ( [Diem1] ,( 0 )) then [Diem2] else [Diem1] end >=( 5.5 ) then 'C' when case when
isnull ( [Diem2] ,( 0 ))> isnull ( [Diem1] ,( 0 )) then [Diem2] else [Diem1] end >=( 4
then 'D' else 'F' end ),
[DiemSo] AS case when case when isnull ( [Diem2] ,( 0 ))> isnull ( [Diem1] , ( )) then [Diem2] else [Diem1] end >=( 8.5 ) then 4 when case when
isnull ( [Diem2] ,( 0 ))> isnull ( [Diem1] ,( 0 )) then [Diem2] else [Diem1] end >=( 7
then 3 when case when isnull ( [Diem2] ,( 0 ))> isnull ( [Diem1] ,( 0 )) then
[Diem2] else [Diem1] end >=( 5.5 ) then 2 when case when isnull ( [Diem2] , ( ))> isnull ( [Diem1] ,( 0 )) then [Diem2] else [Diem1] end >=( 4 then 1 else ( ) end ),
[USBP] [nvarchar] ( 20 ) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [US1] [nvarchar] ( 20 ) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[US2] [nvarchar] ( 20 ) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[NgayInsert] [smalldatetime] NULL,
[LanHoc] [smallint] NULL,
[HocPhi] [int] NULL,
[DaNop] [bit] NOT NULL,
[USThuHP] [nvarchar] ( 20 ) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [HuyBo] [bit] NOT NULL,
[USHuy] [nvarchar] ( 50 ) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [ThiLai] [bit] NULL,
[NgayCapNhat] [smalldatetime] NULL,
CONSTRAINT [PK_BangDiem] PRIMARY KEY CLUSTERED
, @level0type = 'SCHEMA' , @level0name = 'dbo' , @level1type = 'TABLE' ,
@level1name = 'BangDiem' , @level2type = 'COLUMN' , @level2name = 'DiemL1'
Trang 30VI TẠO VIEW
1 Giới thiệu T-SQL:
SQL là ngôn ngữ truy vấn CSDL dùng để truy cập,cập nhật thông tin SQL đượcchia làm 2 nhóm: DDL : ngôn ngữ định nghĩa dữ liệu, DML : ngôn ngữ tương tác dữ liệu
DDL: gồm các phát biểu: CREATE TABLE, DROP TABLE, ALTER TABLE
DML: gồm có các phát biểu cập nhật dữ liệu: INSERT, UPDATE, DELETE và phátbiểu truy vấn dữ liệu: SELECT
T-SQL: (Transact-SQL) là sự nâng cao của ngôn ngữ SQL chuẩn Là ngôn ngữ cơbản dùng để giao tiếp giữa ứng dụng và SQL Server T-SQL cung cấp khả năng DDL vàDML chuẩn cùng với một số hàm mở rộng, các stored procedure hệ thống và cấu trúc lậptrình như IF, WHILE cho phép lập trình linh động hơn
T-SQL tuy không phải là một ngôn ngữ lập trình theo đúng nghĩa của nó nhưng nócũng hỗ trợ người dùng một số khả năng lập trình căn bản Để phát huy hết sức mạnh của hệquản trị CSDL SQL Server, bạn không thể không biết lập trình với T-SQL
1.1 Biến và khai báo biến trong T-SQL:
Biến là một vùng nhớ được cấp phát, dùng để lưu trữ tạm thời dữ liệu của chương trìnhtrong quá trình tính toán Có hai loại biến trong T-SQL, đó là biến cục bộ (local variable) vàbiến toàn cục (global variable) Khác biệt chủ yếu giữa hai loại biến này là phạm vi hoạt động(scope) Phạm vi của biến cục bộ chỉ giới hạn trong một bó lệnh (batch) hoặc trong thân củamột chương trình con Chương trình con này không thể truy cập vào các biến cục bộ đượckhai báo trong thân của chương trình con khác Trong khi làm việc với T-SQL ta chủ yếu làmviệc với biến cục bộ và trong phần này ta chủ yếu giới thiệu về biến cục bộ
a Khai báo biến:
Để khai báo biến trong T-SQL ta sử dụng từ khoá Declare và theo sau nó là danh sáchcác biến Mỗi biến được khai báo gồm có tên biến và kiểu dữ liệu tương ứng Tên biến bắt đầubởi ký hiệu @ và phải tuân thủ quy tắc đặt tên của T-SQL
Ví dụ:
Declare @Lastname varchar(20)
hoặc nhiều biến trên một dòng
Declare @a int, @b int, @c int
b Gán giá trị cho biến:
Để gán giá trị cho biến ta có thể sử dụng từ khoá Set
Select @a=1, @b=2, @Lastname='Nguyen'
Đặc biệt từ khoá Select cho phép gán các giá trị trên các cột trả về từ một câu truy vấnvào biến
Ví dụ: Cho bảng HangHoa(MaHH, TenHH, SoLuong, DonGia, NgayNhap) Nếumuốn tính tổng số lượng hàng hoá được nhập về vào năm 2012 và gán vào một biến, ta khaibáo như sau:
Declare @SL int
Select @SL=Sum(SoLuong) From HangHoa Where Year(NgayNhap) = 2012Câu lệnh Select sẽ gán giá trị trả về của hàm Sum() cho biến @SL
Trang 31Chú ý: Nếu câu lệnh Select trả về nhiều hơn một bản ghi thì giá trị thuộc bản ghi cuốicùng (cái này còn phụ thuộc index) được gán vào biến tương ứng Tốt nhất ta nên giới hạncâu lệnh Select chỉ trả về 1 bản ghi thôi.
1.2 Một số cấu trúc điều khiển:
T-SQL cũng như hầu hết các ngôn ngữ lập trình khác cung cấp 3 loại cấu trúc điềukhiển cơ bản:
<1 lệnh hoặc 1 khối BEGIN END>
Các lệnh IF ELSE có thể lồng nhau nhiều cấp hoặc liên tiếp nhau
Ví dụ
Declare @a int, @b int
Set @a=1
Set @b=5
If (@a<@b) Print 'So a nho hon'
Else Print 'So b nho hon'
1.3 Biểu thức lựa chọn CASE
Khác với ngôn ngữ lập trình PASCAL, CASE ở trong T-SQL không phải là một cấutrúc rẽ nhánh mà nó là một biểu thức lựa chọn làm nhiệm vụ trả về một giá trị phù hợp đượcchọn (chức năng gần giống với hàm IF trong Excel, nhưng khác với hàm IF ở chỗ biểu thức CASE ở đây cho phép chọn 1 trong nhiều giá trị)
CASE biểu thức lựa chọn
WHEN giá trị 1 THEN giá trị trả về 1
WHEN giá trị 2 THEN giá trị trả về 2
WHEN giá trị 3 THEN giá trị trả về 3
WHEN giá trị n THEN giá trị trả về n
[ESLE giá trị trả về khác]
END
Trang 32Khi biểu thức lựa chọn được so khớp bằng với giá trị i thì giá trị trả về i tương ứng sẽ
được trả về như là kết quả biểu thức CASE
Ví dụ: Với bảng LLSV(MaSV,TenSV,MaXepLoai)
Select MaSV,TenSV, XepLoai=CASE MaXepLoai
WHEN 1 THEN 'GIOI'
WHEN 2 THEN 'KHA'
WHEN 3 THEN 'TRUNG BINH'
WHEN biểu thức logic 1 THEN giá trị trả về 1
WHEN biểu thức logic 2 THEN giá trị trả về 2
Trang 33- Hàm MAX trả về giá trị lớn nhất trong cột Các giá trị NULL sẽ không được xét đến.
Hàm MIN(column) - Hàm MIN trả về giá trị nhỏ nhất trong cột Các giá trị NULL sẽ không
được xét đến
Lưu ý: Hàm MIN và MAX cũng có thể áp dụng cho các cột có dữ liệu là chuỗi văn bản Dữ
liệu trong cột sẽ được so sánh theo thứ tự tăng dần của từ điển
Hàm SUM(column) - Hàm SUM trả về tổng giá trị của cột Các giá trị NULL sẽ không được
xét đến
Hàm Count(*) :
Đếm số lượng trong bảng thoả mãn điều kiện
b/ Hàm Conversion - Hàm chuyển đổi : Dùng chuyển giá trị từ một kiểu dữ liệu sang kiểu
dữ liệu khác Nó còn được dùng để định dạng ngày tháng SQL cung cấp hàm chuyển đổi duy nhất là CONVERT()
Convert (datatype (length) , expression , style)
Ví dụ : Selectconvert(Smalldatetime,'20120311',112) kết quả 2012-03-11 00:00:00
Selectconvert(varchar(10),getdate(),112) kết quả 20120311
Ngoài ra còn có thể sử dụng hàm Cast trong nhiều trường hợp chuyển đổi đơn giản hơn:
CAST ( expression AS data_type [ (length ) ])
Hour = hh ( 0 - 23 ) , Minute = Mi ( 0 - 59 ) , Second = Ss ( 0 - 59 ), Millisecond = Ms ( 0 -
999 ) , Day of year = Dy ( 1 - 366 ) , Day = Dd ( 1 - 31) , Year = yy ( 1753 - 9999 )
getdate : Ngày hiện tại
Ví dụ : select getdate()
dateadd ( datepart , number , date ) : Giá trị ngày cộng với một số
Ví dụ : select dateadd ( mm, 4 , ' 01/01/99 ' )
Thêm vào trường mm (tháng) với giá trị 4 Kết quả sẽ là : 05/01/99
datediff (datepart , date 1 ,date 2) : Giá trị chênh lệch giữa hai ngày
Ví dụ : select datediff ( mm , ' 01/01/99 ' , ' 05/01/99 ' )
Trả về kết quả là : 4 So sánh giữa hai trường tháng
datename (datepart , date ) : Giá trị ngày định dạng tương ứng
Ví dụ : select datename (dw , ' 01/01/2000 ' )
Kết quả sẽ trả về Saturday
datepart ( datepart , date )
Ví dụ : select datepart ( day , ' 01/15/2000 ' )
Trả về kết quả giá trị ngày là 15