Upload
independent
View
1
Download
0
Embed Size (px)
Citation preview
Nội dung chương 0
• Mô hình dữ liệu quan hệ
• Thiết kế CSDL quan hệ
• Hệ quản trị cơ sở dữ liệu
• Khái niệm
• Lịch sử phát triển
• Chức năng
Bundoora
Bundoora
Balwyn
Glen
Norman
Mary
3936
8507
8452
KewRobert1108
SuburbName
StudentId Takes
298507
21
23
23
1108
1108
8507
SNOSID
Dept
CSCE
CSCE
Name
Systems
Database
No
21
23
Subject
Mô hình dữ liệu quan hệ
• Cơ sở dữ liệu quan hệ
Relational Database
Entitites
Attribute
Mô hình dữ liệu quan hệ - Các khái niệm
• Thuộc tính:
• đặc trưng của đối tượng.
• được phân biệt qua tên gọi
• thuộc một kdl nhất định (số, chuỗi, ngày tháng,
lôgic, hình ảnh…).
• mỗi thuộc tính chỉ chọn lấy giá trị trong một tập
con của kiểu dữ liệu và tập hợp đó gọi là miền giá
trị của thuộc tính đó.
• Ví dụ điểm thi của sinh viên chỉ là các số nguyên từ
Mô hình dữ liệu quan hệ - Các khái niệm(tt)
• Lược đồ quan hệ
• tập tất cả các thuộc tính cần quản lý của một đối
tượng cùng với những mối liên hệ giữa chúng.
• Ví dụ: ta có LĐQH sinh viên (đặt tên là SV) với
các thuộc tính như sau:
SV(maSoSV, hoTenSV, ngaySinh, diemTB,
mucHbg)
Mô hình dữ liệu quan hệ - Các khái niệm(tt)
• Nhiều lược đồ quan hệ cùng nằm trong một hệ
thống quản lý được gọi là một lược đồ CSDL .
• Ví dụ lược đồ CSDL để quản lý điểm của sinh viên có thể
gồm những lược đồ quan hệ sau:
SV(maSV, hotenSV, ngaySinh, maLop, tinh, hocBong)
Lop(maLop, tenLop, siSo, maKhoa)
Khoa(maKhoa, tenKhoa, soCB)
MonHoc(maMH, tenMH, soTiet)
KetQua(maSV, maMH, diemThi)
Mô hình dữ liệu quan hệ - Các khái niệm(tt)
• Định nghĩa quan hệ (relation):
• Sự thể hiện của lược đồ quan hệ ở một thời điểm
nào đó được gọi là quan hệ.
Mô hình dữ liệu quan hệ - Các khái niệm(tt)
• Primary keys (các khóa chính)
• là yếu tố chủ yếu cho các CSDL QH
• làm cho các dòng là duy nhất
Mô hình dữ liệu quan hệ - Các khái niệm(tt)
• Foreign keys (các khóa ngoại)
• là một hoặc nhiều cột tham chiếu đến các khóa
chính của bảng khác.
Mô hình dữ liệu quan hệ - Các khái niệm(tt)
• Định nghĩa quan hệ (relation):
• Sự thể hiện của lược đồ quan hệ ở một thời điểm
nào đó được gọi là quan hệ.
Mô hình dữ liệu quan hệ - Các khái niệm(tt)
• Primary keys (các khóa chính)
• là yếu tố chủ yếu cho các CSDL QH
• làm cho các dòng là duy nhất
Mô hình dữ liệu quan hệ - Các khái niệm(tt)
• Foreign keys (các khóa ngoại)
• là một hoặc nhiều cột tham chiếu đến các khóa
chính của bảng khác.
Thiết kế các CSDL quan hệ
• Các bước:
• Phân tích tình huống để tập hợp thông tin về csdl
dự kiến
• Quyết định các cột, kiểu dữ liệu và chiều dài dữ
liệu
• Chuẩn hóa dữ liệu bên trong các bảng
• Tạo csdl và các bảng
Thiết kế các CSDL quan hệ (tt)
• Xét ví dụ sau:
CungCapSP(maNCC, tenNCC, diaChi, sanPham, gia)
maNCC
S01
S01
S01
S02
S03
S03
M01
tenNCC
Sanyo
Sanyo
Sanyo
Sharp
Samsung
Samsung
Maytag
diaChi
Tokyo, Nhật Bản
Tokyo, Nhật Bản
Tokyo, Nhật Bản
Hiroshima, Nhật Bản
Hồng Kông, Đài Loan
Hồng Kông, Đài Loan
New York, Mỹ
sanPham
Tủ lạnh
Máy giặt
Máy lạnh
Tivi
LCD
Tivi
Tủ lạnh
gia
250
270
200
140
200
120
260
•
•
Sự trùng lắp thông tin sẽ làm tăng chi phí lưu trữ thông tin cũng nhưchi phí kiểm tra RBTV.
Cách giải quyết: tách thành hai lược đồ như sau:
– CungCap(maNCC, sanPham, gia) và NhaCC(maNCC, tenNCC,diaChi)
maNV
100
100
140
110
110
190
150
150
tenNV
Nguyễn Văn An
Nguyễn Văn An
Trần Thị Mỹ
Lê Văn Minh
Lê Văn Minh
Trần Văn Ban
Hồ Minh Nhật
Hồ Minh Nhật
donVi
P. Tiếp thị
P. Tiếp thị
P. Kế toán
P. Hệ thống thông tin
P. Hệ thống thông tin
P. Tài chính
P. Tiếp thị
P. Tiếp thị
luong
480
480
550
500
500
520
450
450
tenKH
Anh văn
NC thị trường
Luật thuế
Anh văn
C++
Anh văn
Java
ngayKTKH
31/12/2009
10/03/2010
15/04/2010
31/12/2009
31/01/2010
31/12/2009
10/01/2010
Hỏi: Khóa chính là gì?
Đáp: {maNV, tenKH}
Sự bất thường ở bảng này?
Thêm vào – không thể thêm vào 1 nhân viên mới mà không tham gia lớpnào
Xoá đi – nếu xoá bỏ nhân viên 140, ta sẽ mất thông tin về lớp Luật thuế
Hiệu chỉnh – để tăng lương cho nhân viên 100, đòi hỏi phải cập nhật 2
hàng
Thiết kế các CSDL quan hệ - Chuẩn hóa
• Có các dạng chuẩn sau:
•
•
•
•
Dạng chuẩn 1 (First Normal Form) – 1NF
Dạng chuẩn 2 (Second Normal Form) – 2NF
Dạng chuẩn 3 (Third Normal Form) – 3NF
Dạng chuẩn Boyce codd (Boyce codd Normal
Form) – BCNF
Thiết kế các CSDL quan hệ - Chuẩn hóa(tt)
• Dạng chuẩn 1 (First Normal Form) – 1NF
• Quy định rằng một cột không thể chứa nhiều giá trị
• Dạng chuẩn 2 (First Normal Form) – 2NF)
• Đạt 1NF
• Mọi cột không tham gia vào khóa phải phụ thuộc
vào toàn bộ khóa
• Dạng chuẩn 3 (Third Normal Form) – 3NF)
• Đạt 2NF
• Mọi cột không tham gia vào khóa không được phụ
thuộc vào cột khác (không phải khóa)
Hệ quản trị CSDL – khái niệm
• Hệ quản trị cơ sở dữ liệu (HQTCSDL, database
management system):
• Là một tập hợp các ctr cho phép người dùng định
nghĩa, tạo lập, bảo trì các CSDL và cung cấp các
truy cập có điều khiển đến các CSDL này.
• CSDL là một thành phần trong HQTCSDL.
• Các HQTCSDL thường gặp như: Oracle, SQL
Server, DB2, Paradox, MS Access, Sybase,
Foxpro….
Hệ quản trị CSDL – lịch sử phát triển
• Các hệ quản trị CSDL đầu tiên ra đời vàonhững năm 1960 dựa trên mô hình dữ liệu phân
cấp.
• IMS (Information Management System) của hãngIBM.
• Giữa những năm 60 của thế kỷ 20, IDS(Integrated Data Store) ra đời đánh dấu sự xuất
hiện đầu tiên của một hệ quản trị CSDL dựatrên mô hình dữ liệu mạng.
• Năm 1976, hệ quản trị CSDL đầu tiên dựa vàomô hình quan hệ của hãng IBM ra đời mang tên
System-R.
Hệ quản trị CSDL – lịch sử phát triển (tt)
• Từ 1980 đến nay:• hệ quản trị CSDL kiểu QH ra đời cho cả môi trường máy
tính lớn và máy tính cá nhân.
• Từ 1990, bắt đầu xây dựng các hệ quản trịCSDL kiểu hướng đối tượng và hướng đối
tượng – quan hệ. Những hệ quản trị CSDL nhưvậy được coi là thuộc vào thế hệ thứ ba.
Hệ quản trị CSDL – chức năng
• Các chức năng của hệ quản trị csdl:
• Cung cấp mô hình dữ liệu giúp user mô tả dữ liệu,
cho phép khai báo cấu trúc dữ liệu, mô tả các mối
liên hệ của dữ liêu cũng như các quy tắc quản lý
áp đặt lên dữ liệu đó.
• Cung cấp một giao diện giữa user và csdl và csdl
với các hệ thống khác.
• Cung cấp một ngôn ngữ bậc cao (phi thủ tục) giúp
user truy xuất và thao tác csdl
Hệ quản trị CSDL – chức năng (tt)
• Quản lý giao tác, phân quyền và an toàn dữ liệu
• Điều khiển được sự tương hợp, tính toàn vẹn khi
chuyển hóa dữ liệu và có sự cố của hệ thống
• Kiểm tra độ tin cậy của dữ liệu
Nội dung chương 1
•
•
•
•
•
•
Giới thiệu SQL Server
Lịch sử phát triển SQL Server
Các ấn bản SQL Server
Một số khái niệm của SQL Server
Các mô hình truy xuất dữ liệu
Transact-SQL
Giới thiệu SQL Server
SQL ServerClient
Results
Client Application
OLTP
OLAP
Relational Database
Management System
Query
8
Giới thiệu SQL Server
• SQL Server:
• là một hệ thống quản lý cơ sở dữ liệu (Relational
Database Management System (RDBMS) ) sử
dụng Transact-SQL để trao đổi dữ liệu giữa Client
computer và SQL Server computer.
• được tối ưu để có thể chạy trên môi trường cơ sở
dữ liệu rất lớn (Very Large Database
Environment) lên đến Tera-Byte và có thể phục vụ
cùng lúc cho hàng ngàn user.
• có thể kết hợp "ăn ý" với các server khác như
Microsoft Internet Information Server (IIS), E-
Commerce Server....
Lịch sử phát triển SQL
• Phiên bản gốc của SQL, ban đầu được gọi là
SEQUEL (Structured English Query
Languages),
• được thiết kế và cài đặt vào năm 1970 tại phòng
nghiên cứu San Jose của hãng IBM.
• Qua thời gian, ngôn ngữ được bổ sung để có
thể xây dựng CSDL và quản lý an toàn cho cơ
cấu CSDL.
• Các phương tiện CSDL ngày nay sử dụng các
phiên bản khác nhau của SQL. Microsoft SQL
Server sử dụng phiên bản gọi là Transact-SQL
Lịch sử phát triển SQL (tt)
• SQL Server đầu tiên là của Microsoft và tập
đoàn Sybase trên nền IBM OS/2
• SQL Server 7.0 là cái mốc để đánh dấu sự
chấm dứt sử dụng mã lệnh Sybase cho nhóm
cơ sở dữ liệu của Microsoft.
Lịch sử phát triển SQL (tt)
• SQL Server 2000:
• làm nổi bật dòng mã lệnh mới, bổ sung các tính
năng mới có ý nghĩa.
• tăng cường khả năng đánh giá, độ tin cậy và giá
trị của sản phẩm.
Giới thiệu SQL Server
SQL ServerClient
Results
Client Application
OLTP
OLAP
Relational Database
Management System
Query
8
Giới thiệu SQL Server
• SQL Server:
• là một hệ thống quản lý cơ sở dữ liệu (Relational
Database Management System (RDBMS) ) sử
dụng Transact-SQL để trao đổi dữ liệu giữa Client
computer và SQL Server computer.
• được tối ưu để có thể chạy trên môi trường cơ sở
dữ liệu rất lớn (Very Large Database
Environment) lên đến Tera-Byte và có thể phục vụ
cùng lúc cho hàng ngàn user.
• có thể kết hợp "ăn ý" với các server khác như
Microsoft Internet Information Server (IIS), E-
Commerce Server....
Lịch sử phát triển SQL
• Phiên bản gốc của SQL, ban đầu được gọi là
SEQUEL (Structured English Query
Languages),
• được thiết kế và cài đặt vào năm 1970 tại phòng
nghiên cứu San Jose của hãng IBM.
• Qua thời gian, ngôn ngữ được bổ sung để có
thể xây dựng CSDL và quản lý an toàn cho cơ
cấu CSDL.
• Các phương tiện CSDL ngày nay sử dụng các
phiên bản khác nhau của SQL. Microsoft SQL
Server sử dụng phiên bản gọi là Transact-SQL
Lịch sử phát triển SQL (tt)
• SQL Server đầu tiên là của Microsoft và tập
đoàn Sybase trên nền IBM OS/2
• SQL Server 7.0 là cái mốc để đánh dấu sự
chấm dứt sử dụng mã lệnh Sybase cho nhóm
cơ sở dữ liệu của Microsoft.
Lịch sử phát triển SQL (tt)
• SQL Server 2000:
• làm nổi bật dòng mã lệnh mới, bổ sung các tính
năng mới có ý nghĩa.
• tăng cường khả năng đánh giá, độ tin cậy và giá
trị của sản phẩm.
Lịch sử phát triển SQL (tt)
• SQL server 2005
•
•
•
•
•
•
•
Nâng cao bảo mật
Mở rộng T-SQL
Tăng cường hỗ trợ người phát triển
Tăng cường khả năng quản lý
Nâng cao độ sẵn sàng của CSDL
Nâng cao khả năng mở rộng CSDL
Tăng cường khả năng khai thác thông tin
Lịch sử phát triển SQL (tt)
• SQL server 2008
•
•
•
•
Nền tảng cho các nhiệm vụ then chốt
Sự phát triển động
Dữ liệu quan hệ mở rộng
Thông tin trong toàn bộ doanh nghiệp
Các ấn bản của SQL Server (Editions)
• Enterprise (Developer) Edition
• Standard Edition
• SQL Server Express Edition
Một số khái niệm của SQL Server
• Data Type (Kiểu dữ liệu):
• là các kiểu lưu trữ cơ bản về dữ liệu của bạn.Chúng ta có thể chọn ra các KDL khác nhau,
chẳng hạn như ký tự, số hoặc ngày.
• Stored procedure (thủ tục thường trú – thủ tụclưu trữ):
• mã lệnh Transact – SQL có thể được viết và lưutrữ mang một tên.
Một số khái niệm của SQL Server (tt)
• User – defined functions (các hàm do ngườidùng định nghĩa):
• là mã lệnh Transact – SQL rất giống các mã lệnhcủa thủ tục lưu trữ.
• có thể được gọi trong các truy vấn CSDL hoặc đểchỉnh sửa một cột dữ liệu hoặc đóng vai trò như
các bảng
• Vd có thể viết các hàm date cho riêng mình để
chỉnh sửa các cột dữ liệu có kiểu datetime.
Một số khái niệm của SQL Server (tt)
• Constraints (các ràng buộc)
• là các cơ chế được hệ thống cài đặt dựa trên máychủ nhằm bảo vệ tính toàn vẹn của dữ liệu.
Một số khái niệm của SQL Server (tt)
• Triggers (các bẫy lỗi – còn dịch là bộ kích khởi)
• là các thủ tục lưu trữ kích hoạt trước hoặc sau khi
bổ sung, sửa chữa hoặc xóa dữ liệu ra khỏi
CSDL.
• đảm bảo tuân theo các quy tắc kinh doanh hoặc
các quy tắc toàn vẹn dữ liệu khác trong CSDL.
• Ví dụ bộ kích khởi có thể đảm bảo rằng mỗi
quyển sách trong hiệu sách có một nhà xuất bản
hợp lệ gán cho nó.
Một số khái niệm của SQL Server (tt)
• Views (các khung nhìn – hay bảng ảo)
• là các truy vấn lưu trữ trong CSDL để có thể tham
chiếu tới một hoặc nhiều bảng.
• thường thể hiện hoặc không thể hiện các cột nào
đó trong bảng hoặc là liên kết hai hoặc nhiều
bảng với nhau
• Indexes (các chỉ mục)
• giúp tổ chức lại dữ liệu, nên các truy vấn chạy
nhanh hơn.
Các mô hình truy xuất dữ liệu
• Kiến trúc Client/ Server (Client / Server
architecture)
• Phía máy chủ: thường được cài đặt các hệ cơ sở
dữ liệu bao gồm các bảng biểu, các thủ tục lưu
trữ... và điều khiển các tiến trình sau:
• Quản lý dữ liệu.
• Bảo mật dữ liệu.
• Thực hiện truy vấn, ràng buộc và các thủ tục lưu
trữ.
• Điều khiển lỗi.
• Phía máy khách: Tạo giao diện người sử dụng
(User Inteface)
Các mô hình truy xuất dữ liệu (tt)
SQL ServerClient
Results
Client Application
OLTP
OLAP
Query
Relational Database
Management System
Client/Server Architecture
Các mô hình truy xuất dữ liệu (tt)
• Kiến trúc nhiều tầng (N-tier Architecture)
• Quá trình xử lý được phân tán trên các lớp khác
nhau với các chức năng riêng biệt phù hợp
cho việc tổ chức hệ thống thông tin trên mạng
Internet và mạng Intranet hay trong các mạng cục
bộ.
• Các tầng (lớp): nguồn dữ liệu, truy cập dữ liệu,
lớp giao dịch, lớp giao diện
Transact - SQL (T-SQL)
• Transact - SQL (T-SQL):
• Là ngôn ngữ SQL mở rộng dựa trên chuẩn ANSI
• T-SQL gồm các nhóm:
• Data Definition Language (DDL): ngôn ngữ định
nghĩa dữ liệu
• CREATE, ALTER, DROP
• Data Manipulation Language (DML): ngôn ngữ xử
lý dữ liệu
• SELECT, INSERT, UPDATE
• Data Control Language Statements (DCL): ngôn ngữđiều khiển dữ liệu
• DENY, GRANT, REVOKE
Tóm tắt chương 1
• Các ấn bản SQL Server
• Một số khái niệm của SQL Server:
• Data Type, Stored procedure, User – defined
functions, Constraints, Triggers, Views, Indexes
• Các mô hình truy xuất dữ liệu
• Kiến trúc Client/ Server (Client / Server
architecture)
• Kiến trúc nhiều tầng (N-tier Architecture)
• Transact-SQL:
• DDL, DML, DCL
Cấu trúc vật lý của CSDL SQL Server
Mỗi database trong SQL Server chứa ít nhất một
data file chính (primary), có thể có thêm một hay
nhiều data file phụ (Secondary) và một transaction
log file.
Cấu trúc vật lý của CSDL SQL Server (tt)
Primary data file:
file chính chứa data và những system tables (đuôi .mdf)
Secondary data file:
file phụ thường chỉ sử dụng khi database được phân chia
để chứa trên nhiều đĩa (đuôi .ndf)
Transaction log file:
file ghi lại tất cả những thay đổi diễn ra trong một
database và chứa đầy đủ thông tin để có thể roll back hay
roll forward khi cần (đuôi .ldf)
Về mặt logic, dữ liệu trong CSDL được tổ chức trong các
đối tượng của csdl
Về mặt vật lý, CSDL được lưu trữ trên 2 hoặc nhiều tập
tin
Data2.ndfData1.mdf
Log1.ldf
Cấu trúc vật lý của CSDL SQL Server (tt)
User view
Cơ sở dữ liệu
Physical Implementation
Mỗi CSDL chỉ có
một file .mdf
Cơ sở dữ liệu hệ thống
Trong SQL Server, tất cả thông tin hệ thống được
lưu trong CSDL hệ thống
Tất cả CSDL người dùng được quản lý bởi CSDL hệ
thống
SQL Server cung cấp và hỗ trợ CSDL hệ thống sau:
Cơ sở dữ liệu hệ thống (tt)
Database
master
msdb
model
resource
tempdb
Description
Lưu trữ tất cả thông tin hệ thống của Sql Server như các
thiết lập cấu hình hệ thống của SQL Server
Cơ sở dữ liệu được SQL Server Agent sử dụng để lập lịch
một số công việc thường nhật
CSDL mẫu để tạo ra các CSDL người dùng
CSDL chỉ đọc. Chứa các đối tượng hệ thống trong SQL
Server
CSDL lưu trữ các đối tượng tạo ra tạm thời trong quá trình
làm việc bởi user hay do bản thân SQL Server engine
Các đối tƣợng của cơ sở dữ liệu
Đối tƣợng
Table
Data Type
View
Stored
procedure
Mô tả
Đối tượng lưu trữ dữ liệu của CSDL
Kiểu dữ liệu
View là đối tượng CSDL chứa các câu lệnh SELECT
Là đối tượng chứa các tập lệnh T-SQL
Các đối tƣợng của cơ sở dữ liệu (tt)
Đối tƣợng
Function
Index
Constraint
Trigger
Mô tả
Hàm định nghĩa các logic xử lý
Đối tượng CSDL nhằm truy cập dữ liệu nhanh hơn
Ràng buộc dữ liệu, được thiết lập trên 1 cột hoặc nhiều
cột dữ liệu để thiết lập toàn vẹn dữ liệu
Là loại thủ tục lưu trữ đặc biệt, được thực thi khi dữ liệu
trong bảng thay đổi
Các đối tƣợng của cơ sở dữ liệu (tt)
Đối tƣợng
Logins
Users
Roles
Groups
Mô tả
Một người dùng được định danh bởi Login ID để
kết nối đến SQL Server. SQL Server hỗ trợ 2 cơ
chế chứng thực đó là Windows Authentication và
SQL Server Authentication.
Nhận diện mỗi người dùng trong mỗi CSDL.
Quyền truy cập của người dùng dựa trên đối
tượng này.
Vai trò, là nhóm người dùng cùng chức năng
Nhóm nhiều SQL Server lại thành một Groups
Kiến trúc vật lý cơ sở dữ liệu
Pages and Extents
Page:
Đơn vị lưu trữ dữ liệu cơ sở trong SQL Server
Không gian đĩa được cấp phát cho tập tin dữ liệu (.mdf
hoặc ndf) của một csdl được phân chia logic thành các
page và được đánh số liên tục từ 0 đến n.
SQL Server thực hiện đọc ghi dữ liệu trên các page này
Có kích thước là 8 Kbs (1MB có 128 pages).
96 byte đầu tiên của page (page header) lưu trữ các
thông tin hệ thống về page như: số trang, loại trang
(data, Index, text/image,..), chỉ số ID của trang
Kiến trúc vật lý cơ sở dữ liệu (tt)
Pages and Extents
Môt Extent là 8 page liên tiếp, tức là 64 KB. Có 16
Extent trên mỗi MB
Kiến trúc vật lý cơ sở dữ liệu (tt)
Database Files and Filegroups
Space Allocation and Reuse
SQL Server phân bổ vùng nhớ cho các đối tượng và
lấy lại vùng nhớ khi các hàng, đối tượng bị xóa
Table and Index Architecture
Mỗi bảng và chỉ mục, các hàng dữ liệu được lưu trữ
trên 8KB gọi là page
Kiến trúc vật lý cơ sở dữ liệu
Transaction Log Architecture
Mỗi cơ sở dữ liệu trong SQL Server đều bao gồm file
log để ghi lại tất cả các giao dịch và thao tác cơ sở dữ
liệu. Các thao tác hỗ trợ bởi giao dịch gồm:
Khôi phục lại từng giao dịch
Khôi phục lại tất cả các giao dịch chưa hoàn tất khi SQL
Server khởi động
Khôi phục dữ liệu về trước vị trí mà hệ thống bị lỗi
Kiến trúc cơ sở dữ liệu quan hệ
Relational database engine có hai phần chính:
relational engine và storage engine
Relational Engine
OLE DB
Storage Engine
Local
Database
Local
Database
Local
Database
Kiến trúc cơ sở dữ liệu quan hệ (tt)
Query Processor Architecture
Các câu lệnh gửi từ ứng dụng người dùng đến SQL
Server là các câu lệnh SQL.
Các câu lệnh SQL được SQL Server thực hiện theo
một trong những cách sau:
Single SQL Statement Processing
Xử lý lô/ tập lệnh
Thực thi Stored Procedure và Trigger
Execution Plan Caching and Reuse
Parallel Query Processing
Kiến trúc cơ sở dữ liệu quan hệ (tt)
Input/Output (I/O) Architecture
Việc đọc/ghi đĩa tốn nhiều tài nguyên và mất nhiều thời
gian để giải phóng tài nguyên.
SQL Server phân bố không gian bộ nhớ đệm lớn để
lưu trữ tạm và tránh việc đọc ghi đĩa thường
Distributed Query Architecture
Truy vấn phân tán có thể truy cập dữ liệu hỗn tạp trên
nhiều nguồn dữ liệu trên cùng hoặc các máy khác
nhau.
SQL Server hỗ trợ truy vấn phân tán bằng việc sử
dụng Microsoft OLE DB Provider.
Các CSDL đƣợc SQL Server hỗ trợ
Cơ sở dữ liệu hệ thống
Cơ sở dữ liệu người dùngđịnh nghĩa
Cơ sở dữ liệu ví dụ
• Người sử dụng SQL Server có thể tạo các
•
cơ sở dữ liệu người dùng định nghĩa
Mục đích của các cơ sở dữ liệu này là để
lưu dữ liệu của người sử dụng
•
•
SQL Server cung cấp các cơ sở dữ liệu
mẫu để người sử dụng làm việc
Cơ sở dữ liệu mẫu được giới thiệu trong
SQL Server 2008 như Advantureworks
SQL Server hỗ trợ ba loại cơ sở dữ liệu:
Được tạo ra bởi SQL Server. Các cơ sở dữ
liệu này được sử dụng để lưu thông tin về
SQL Server. Ngoài ra, còn được sử dụng để
quản lý các cơ sở dữ liệu người dùng .
Khái niệm về cơ sở dữ liệu
Database dùng để
Chứa các bảng, bảng ảo, thủ tục nội,…
Mỗi database có một danh sách các người dùng
Người dùng phải có quyền truy cập database
Có thể phân nhóm người dùng để cấp quyền
SQL Server 2000 hỗ trợ Application Role
Các database hệ thống
Master, Model, TempDB, msdb
Các database ví dụ (sql server 2008)
Advantureworks
Các tập tin vật lý lƣu trữ cơ sở dữ liệu
Một database bao gồm tối thiểu hai file
.mdf: lưu trữ các đối tượng trong database như table,view, …
Có thể bổ sung thêm các tập tin lưu trữ khác
Tổ chức tốt các tập tin lưu trữ giúp tăng tốc độ xử lý
.ldf: lưu trữ quá trình cập nhật/thay đổi dữ liệu
Hỗ trợ phục hồi dữ liệu
Hỗ trợ backup/restore dữ liệu
Các thông số về kích thước
Initial size
File growth
Maximum file size .mdf .ndf .ldf
Tạo một CSDL
Có thể tạo CSDL bằng:
Câu lệnh CREATE DATABASE
SQL Server Management Studio
Để tạo một cơ sở dữ liệu người dùng, các thông tin
sau được yêu cầu:
Tên của cơ sở dữ liệu
Người sở hữu hoặc người tạo cơ sở dữ liệu
Kích thước của cơ sở dữ liệu
Các tập tin và nhóm các tập tin được sử dụng để lưu trữ cơ sở
dữ liệu
Tạo CSDL – Câu lệnh Create database
CREATE DATABASE Tên_CSDLOn Primary
(
Name=logical_file_name , -- Tên file logicFileName='os_file_name ' -- Tên file vật lýSize=size [ KB | MB | GB | TB ] ] , -- Kích thước tập tin ban đầuMaxSize=max_size [ KB | MB | GB | TB ] | UNLIMITED], -- Kích thước tối đa
FileGrowth=growth_increment -- Kích thước tăng trưởng
)Log On
(Name= logical_file_name,FileName=‘os_file_name',
Size=size,
MaxSize=max_size,FileGrowth= growth_increment);
Cú pháp để tạo một cơ sở dữ liệu người dùng là:
Tạo CSDL – Câu lệnh Create database (tt)
Tham số:
Database_name: tham chiếu tới toàn bộ CSDL
name: chỉ định tên logic sẽ sử dụng bên trong SQL
Server để tham chiếu tới tập tin CSDL vật lý trên đĩacứng.
Filename: đường dẫn và tên tập tin gắn liền với vị trí
của dữ liệu trên đĩa cứng. Nó phải là ổ đĩa cứng cụcbộ.
Tạo CSDL – Câu lệnh Create database (tt)
Size: chỉ định tập tin CSDL sẽ lớn như thế nào
Maxsize: chỉ định kích thước lớn nhất mà CSDL có thể
phát triển tới đó
Filegrowth: chỉ định độ tăng nào được sử dụng đối với
việc tự động phát triển của tập tin CSDL.
Log on: mô tả nơi mà các tập tin nhật ký chuyển tác
được tim kiếm và kích thước của chúng là bao nhiêu.
Tạo CSDL – Câu lệnh Create database (tt)
Ví dụ 1:
Tạo một CSDL dành ra 20MB lúc đầu cho phần dữ liệu
và 5MB cho nhật ký chuyển tác. Các tập tin có thể phát
triển lên tới 100MB đối với dữ liệu và 15MB đối với
nhật ký chuyển tác.
Tạo CSDL – Câu lệnh Create database (tt)
CREATE DATABAE Frogger on primary (
NAME = FroggerData,
FILENAME = 'D:\BTSQL\FroggerData.mdf',
SIZE = 20MB,
MAXSIZE = 100mb,
FILEGROWTH = 10MB)
LOG ON (
NAME = FroggerLog,
FILENAME = 'D:\BTSQL\FroggerLog.ldf',
SIZE = 5MB,
MAXSIZE = 15MB,
FILEGROWTH = 1MB )
Tạo CSDL – Câu lệnh Create database (tt)
-
Ví dụ 2:CREATE DATABASE Products ON (
NAME = prods_dat,
FILENAME = ‘D:\BTSQL\prods.mdf',
SIZE = 4,
MAXSIZE = 10,
FILEGROWTH = 1)
Lưu y: Nếu không chỉ định một transaction log file thì
SQL sẽ tự động tạo ra 1 log file với kích thước ban đầu là
1 MB.
Tạo CSDL – Câu lệnh Create database (tt)
Ví dụ: Tạo csdl có tên là QLSV
CREATE DATABASE QLSV
On Primary(
Name = QLSV_data, -- Tên file logic: QLSV_data
FileName ='C:\QLSV.mdf',-- Tên file vật lý
Size = 50MB, -- size file ban đầu:50MB
MaxSize = Unlimited,-- size tối đa: Không giới hạn
-- size tăng trưởng: 10 MBFileGrowth = 10MB
)
Log On (
Name = QLSV_log,
FileName = 'C:\QLSV.ldf',
Size = 50MB,
MaxSize = 100MB,
FileGrowth = 10MB
) ;
Sử dụng thủ
tục sp_helpdb
để xem lại
thông tin csdl
đã được tạo ra
Tạo CSDL – Dùng SQL Server
Management Studio
Thực hiện theo các bước sau:
Mở SQL Server Management Studio
Right-click lên trên "database" và chọn "New
Database"
Nhập tên CSDL
Kích phải chuột vào tên CSDL vừa tạo và chọn
Properties hoặc (kích đúp chuột).
Ơ the General ta có các thông tin chung của CSDL
(tên, kích thước…)
Để thay đổi thuộc tính các tập tin CSDL, kích chuột vào
the và hộp thích hợp, thực hiện các thay đổi và nhấn
OK.
Tạo CSDL – Dùng SQL Server
Management Studio
Đường dẫn vật lý của file
dữ liệu
Tên file dữ
liệu
Tùy chọn file
tự động tăng
trưởng được
bật
Hiệu chỉnh thuộc tính của tập tin
Cú pháp:
ALTER DATABASE database_name
MODIFY FILE(
NAME = logical_file_name ,
FILENAME = ‘os_file_name’ ,
SIZE = size ,
MAXSIZE = max_size ,
FILEGROWTH = size
)
Thao tác với CSDL (tt)
Thao tác với CSDL (tt)
Ví dụ:
ALTER DATABASE QLSV
MODIFY FILE (NAME = QLSV_data,
SIZE = 60MB)
Ví dụ: Lệnh hủy khả năng tự tăng trưởng cho csdl
QLSV
ALTER DATABASE QLSV
MODIFY FILE (
NAME = QLSV_data,
FILEGROWTH = 0)
Thao tác với CSDL (tt)
Cú pháp giảm kích thước của csdl hiện hành:
USE database_name
DBCC SHRINKDATABASE (NAME =
database_name , target_percent)
Ví dụ:USE QLSV
DBCC SHRINKDATABASE (NAME = QLSV , 20);
Thao tác với CSDL (tt)
Cú pháp giảm kích thước tập tin của csdl hiện hành:
USE database_name
DBCC SHRINKFILE (NAME =
logical_file_name , target_size)
Ví dụ: Giảm kích thước tập tin dữ liệu của csdl QLSVxuống 20MB
USE QLSV
DBCC SHRINKFILE (NAME = QLSV_data ,
20)
Thao tác với CSDL (tt)
Bổ sung thêm tập tin dữ liệu và tập tin nhật ký cho
CSDLALTER DATABASE database_name
ADD FILE [TO FILEGROUP filegroup_name]|
LOG FILE (
NAME = logical_file_name ,
FILENAME = ‘os_file_name’ ,
SIZE = size ,
MAXSIZE = max_size ,
FILEGROWTH = max_size
)
Thao tác với CSDL (tt)
Ví dụ:
ALTER DATABASE QLSV
ADD FILE (
NAME = QLSV_data2,
filename = D:\qlsv_data2.ndf,
size = 2,
maxsize = 5,
filegrowth = 2)
Thao tác với CSDL (tt)
Gỡ bỏ một tập tin khỏi CSDL
Cú pháp:ALTER DATABASE database_name
REMOVE FILE logical_name
Lưu ý: Tập tin phải trống trước khi gỡ bỏ Sử dụng DBCC
SHRINKFILE với tùy chọn EMPTYFILE để làm trống
một tập tin.
Thao tác với CSDL (tt)
Ví dụ:
USE QLSV GO
DBCC SHRINKFILE (
QLSV_DATA, EMPTYFILE
)
GO
ALTER DATABASE QLSV
REMOVE FILE QLSV_DATA
Thao tác với CSDL (tt)
Đổi tên CSDL: có 2 cách
Cú pháp 1:
ALTER DATABASE database_name
MODIFY NAME = new_database_name
Ví dụ:
ALTER DATABASE baitap
MODIFY NAME = baitap1
Thao tác với CSDL (tt)
Cú pháp 2: Thực thi thủ tục lưu trữ hệ thống
sp_renamedb để đổi tên CSDL
sp_renamedb ‘old name’, ‘new name’
Ví dụ:
sp_renamedb 'baitap1‘ , 'baitap’
Lưu ý khi đổi tên:
CSDL phải ở chế độ một người dùng
Phải làm việc trong CSDL chính để thực thi thủ tục trên
Thao tác với CSDL (tt)
Gỡ bỏ (xóa) một CSDL:
Gỡ bỏ thông tin của CSDL từ các bảng hệ thống và gỡ
bỏ các tập tin nhật ký và dữ liệu từ hệ thống.
Một CSDL bị xóa chỉ có thể tạo lại bằng cách khôi phục
nó từ bản sao
Không một người dùng nào có thể ở trong CSDL tại
thời điểm nó bị xóa.
Phải là thành viên của db_owner (hoặc vai trò máy chủ
sysadmin) để xóa CSDL.
Thao tác với CSDL (tt)
Cú pháp:DROP DATABASE database_name
Có thể xóa nhiều CSDL một lúc
DROP DATABASE database_name,
database_name2…
Xóa bằng SQL Server Management Studio:
Chọn CSDL cần xóa
Kích chuột phải và chọn Delete, nhấn Yes cho thông
báo xác nhận
Các phƣơng pháp thay đổi CSDL
ThS. Lƣơng Thị Ngọc Khánh – K. CNTT - ĐH Tôn Đức Thắng
Các kiểu thay Các phƣơng pháp thay đổi
của CSDL
đổi
Tăng kích thước Sử dụng phát biểu ALTER DATABASE hoặc các
thuộc tính CSDL trong SQL Server Management
Studio.
Thay đổi vị trí vật Sử dụng phát biểu ALTER DATABASE
lý của CSDL
Thêm tập tin ghi Sử dụng phát biểu ALTER DATABASE hoặc các
vết dữ liệu và giao thuộc tính CSDL trong SQL Server Management
dịch
Co rút một CSDL
Studio
Sử dụng phát biểu DBCC SHRINKDATABASE hoặc
chọn lựa Shrink Database trong SQL Server
CSDL
Management Studio, chấp nhận lựa chọn này trong
mục CSDL cần co rút.
Co rút một tập tin Sử dụng phát biểu DBCC SHRINKFILE
Các phƣơng pháp thay đổi CSDL (tt)
Các kiểu thay Các phƣơng pháp thay đổi
tập tin vào CSDL
đổi
Xóa bỏ các tập tin Sử dụng phát biểu ALTER DATABASE hoặc các
dữ liệu hoặc tập thuộc tính CSDL trong Server Management Studio.
tin ghi vết
Thêm một nhóm Sử dụng phát biểu ALTER DATABASE hoặc các
thuộc tính CSDL trong Server Management Studio.
lựa CSDL
Thay đổi nhóm tập Sử dụng phát biểu ALTER DATABASE.
tin mặc định
Thay đổi các chọn Sử dụng phát biểu ALTER DATABASE hoặc các
thuộc tính CSDL trong Server Management Studio. .
Thay đổi người sở Sử dụng thủ tục lưu trữ hệ thống sp_changedbowner
hữu CSDL
Bản chụp CSDL (Database Snapshots)
• Bản chụp CSDL:
•
•
Là bản chỉ đọc, khung nhìn tĩnh của một CSDL SQL
Server.
Tính năng mới trong từ Microsoft SQL Server
2005/2008.
• Tạo một bản chụp CSDL:
CREATE DATABASE database_snapshot_name
ON(
NAME = logical_file_name,
FILENAME = ‘os_file_name’
) [ ,...n ]
AS SNAPSHOT OF source_database_name [;]
Bản chụp CSDL (tt)
Ƣu điểm
Bản chụp cung cấp một thuận
tiện, một bản copy chỉ đọc của
dữ liệu.
Khi một bản chụp được truy
vấn, không làm giảm hiệu suất
Các tập tin dữ liệu của bản
chụp là nhỏ và được tạo ra rất
nhanh. Nó chỉ lớn khi cơ sở
dữ liệu là chủ thể thay đổi
thường xuyên.
Nhƣợc điểm
Bản sao của bản chụp không
thể được tạo ra.
Bản chụp phải tồn tại trên
cùng máy chủ cơ sở dữ liệu
cùng với cơ sở dữ liệu gốc.
của đối tượng được quan sát.
Một người sử dụng mới không
thể được quyền truy cập vào
dữ liệu trong bản chụp. Quyền
được thừa kế từ cơ sở dữ liệu
gốc khi nó đã tồn tại tại thời
điểm tạo ra bản chụp.
Nhóm tập tin (file group)
Các tập tin:
Là một đơn vị lưu trữ vật lý
Có chứa các đối tượng CSDL
Có một file logic và file vật lý
Nhóm tập tin
Gồm nhiều tập tin được nhóm lại để thực hiện và quản
lý tốt hơn.
Một nhóm tập tin logic có thể chứa nhiều tập tin vật lý.
Nhóm tập tin (file group) (tt)
Nhóm tập tin
Primary
User-defined
Mô tả
Nhóm tập tin chứa tập tin chính. Các
bảng hệ thống được đặt trong nhóm tập
tin chính.
Bất kỳ nhóm tập tin được tạo bởi người
sử dụng tại thời điểm tạo hoặc thay đổi
cơ sở dữ liệu.
Nhóm tập tin (file group) (tt)
Lưu ý:
Nhóm tập tin có thể được tạo cùng lúc với tạo CSDL
hoặc thêm vào sau.
Một tập tin không thể thuộc nhiều hơn 1 nhóm tập tin
tại cùng thời điểm.
Các tập tin không thể di chuyển đến các nhóm tập tin
khác sau khi các tập tin được thêm vào trong csdl.
Nhóm tập tin có thể chỉ chứa các file dữ liệu và không
có các file giao dịch.
Nhóm tập tin (file group) (tt)
Thêm nhóm tập tin trong khi tạo CSDL.
Cú pháp:
CREATE DATABASE database_name
[ON
[PRIMARY] [<filespec> [ ,...n ]
[,<filegroup> [ ,...n ]]
[LOG ON { <filespec> [ ,...n ] }]
]
[COLLATE collation_name ]
]
[;]
Nhóm tập tin (file group) (tt)
CREATE DATABASE DB_Nhomtaptin
ON PRIMARY (
NAME = 'DB_Nhomtaptin',
FILENAME = 'd:\baitap\DB_Nhomtaptin.mdf' ,
SIZE = 2048KB , MAXSIZE = UNLIMITED,
FILEGROWTH = 1024KB
),
FILEGROUP group1 (
NAME = 'DB_Nhomtaptin1',
FILENAME = 'd:\baitap\DB_Nhomtaptin.ndf' ,
SIZE = 2048KB , MAXSIZE = UNLIMITED,
FILEGROWTH = 1024KB
)LOG ON (
NAME = 'DB_Nhomtaptin_log',
FILENAME ='d:\baitap\DB_Nhomtaptin_log.ldf' ,
SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%
)
Nhóm tập tin (file group) (tt)
Thêm nhóm tập tin vào CSDL đã có
Cú pháp:
ALTER DATABASE database_name{
<add_or_modify_files>
| <add_or_modify_filegroups>
| <set_database_options>
| MODIFY NAME = new_database_name
| COLLATE collation_name
}
[;]
Nhóm tập tin (file group) (tt)
Ví dụ:
Thêm nhóm tập tin group1 vào csdl QLSValter database QLSV
add filegroup group1
Thêm file vào nhóm tập tin group1alter database QLSV add file(
NAME = ‘QLSV_add',
FILENAME='d:\Bai tap\QLSV_add.ndf' ,
SIZE = 2048KB , MAXSIZE = UNLIMITED,
FILEGROWTH = 1024KB
) to filegroup group1
Nhóm tập tin (file group) (tt)
Bảng sau liệt kê một số hàm hệ thống, và các thủ
tục lưu trữ hệ thống trả về thông tin của các cơ sở
dữ liệu, các tập tin, và các nhóm tập tin:
Các hàm
DB_ID
DB_NAME
FILE_ID
FILE_NAME
Mô tả
Hàm này trả về số ID của cơ sở dữ liệu.
Hàm này trả về tên của cơ sở dữ liệu
Hàm này trả về số ID của tập tin theo tên
tập tin luận lý trong cơ sở dữ liệu hiện tại.
Hàm này trả về tên luận lý của tập tin theo
số ID của tập tin cho trước.
Sao lƣu CSDL (Backup database)
Các Loại Backup:
Full Database Backups:
Copy tất cả data files trong một database. Tất cả những
user data và database objects như system tables,
indexes, user-defined tables đều được backup.
Differential Database Backups:
Copy những thay đổi trong tất cả data files kể từ lần full
backup gần nhất.
Sao lƣu CSDL (Backup database)
File or File Group Backups:
Copy một data file đơn hay một file group.
Differential File or File Group Backups:
Tương tự như differential database backup nhưng chỉ
copy những thay đổi trong data file đơn hay một file
group.
Transaction Log Backups:
Ghi nhận tất cả các transactions chứa trong transaction
log file kể từ lần transaction log backup gần nhất. Loại
backup này cho phép phục hồi dữ liệu trở ngược lại vào
một thời điểm nào đó trong quá khứ.
Sao lƣu CSDL (Backup database) (tt)
Thuật Ngữ
Backup
Backup Device
Backup File
Backup Media
Backup Set
Giải Thích
Quá trình copy toàn bộ hay một phần của
database, transaction log, file hay file group hình
thành một backup set. Backup set được chứa trên
backup media (tape or disk) bằng cách sử dụng
một backup device (tape drive name hay physical
filename)
Một file vật lý (như C:\SQLBackups\Full.bak)
File chứa một backup set
Disk hay tape được sử dụng để chứa một backup
set. Backup media có thể chứa nhiều backup sets
Một bộ backup từ một lần backup đơn được chứa
trên backup media.
Sao lƣu CSDL (Backup database) (tt)
Sao lưu với SQL Server Management Studio
Click vào database muốn backup Right-click
Tasks Backup Database...
Tùy theo yêu cầu
của database mà
chọn các option
thích hợp.
Ngoài ra, có thể
schedule cho SQL
Server backup định
kỳ.
Bài tập
1. Lệnh sau làm gi?
Alter database Test
Add file (name = test_data2, filename =
‘C:\test_data2.ndf’, size = 10)
2. Tạo một csdl với tên gọi là Frog với các đặc điểm
sau:
Hai tập tin dữ liệu tên là Frogdata1 và Frogdata2, mới
khởi tạo ban đầu là 3MB, có thể phát triển tới 20MB,
mỗi lần phát triển 2MB
Hai tập tin nhật ký tên là Froglog1, Froglog2, mới khởi
tạo là 1MB, kích thước tối đa là 5MB, sử dụng chế độ
phát triển tự động.
Bài tập (tt)
3. Thêm tập tin dữ liệu khác tên là Frogdata3 với các
thuộc tính mặc nhiên cho tất cả các giá trị khác
4. Co csdl lại 20%
5. Làm rỗng tập tin Froglog2
6. Gỡ bỏ tập tin Froglog2
7. Đổi tên csdl là Treelog
8. Xóa csdl
Hệ quản trị CSDL SQL Server - page115
Nội dung chương 3
Các kiểu dữ liệu trong SQL
Câu lệnh định nghĩa dữ liệu
Tạo bảng
Câu lệnh cập nhật dữ liệu
Câu lệnh thay đổi cấu trúc bảng
Xóa bảng
Hệ quản trị CSDL SQL Server - page116
Các kiểu dữ liệu trongSQL
Kiểu dữ liệu là một thuộc tính, nó chỉ định kiểu của dữ liệu và dung lượng có thể lưu trữ của một đối tượng
SQL Server hỗ trợ một số kiểu dữ liệu được cài sẵn như sau:
Hệ quản trị CSDL SQL Server - page120
Kiểu dữ liệu Date/ Time mới trong SQL server 2012
Date: Kiểu ngày
Time: Kiểu giờ
Các kiểu dữ liệu trongSQL (tt)
Hệ quản trị CSDL SQL Server - page121
Tên bảng
Tên cột
Kiểu dữ liệu
Độ dài dữ liệu
Số ký số lưu trữ
Số số lẻ lưu trữ
Thuộc tính trên cột
Allow null
Identity
Default value
Tạo bảng – Khái niệmbảng
Hệ quản trị CSDL SQL Server - page124
Tạo bảng (tt)
Ví dụ: Tạo bảng với lược đồ quan hệ sau:
HANGHOA (MaHG, TenHG, DVT)
•Mã hàng hóa là khóa chính, tên hàng và đơn vị tính. Tất cả không được rỗng.
Create Table Hanghoa (
MaHG varchar(10) Not Null Primary key,
TenHG nvarchar(50) Not Null,
DVT varchar(5) Not Null
)
Hệ quản trị CSDL SQL Server - page125
Tạo bảng – cột được phép null
Đặc trưng về khả năng null của một cột quyết định các hàng trong bảng có thể chứa giá trị null cho cột đó.
Khả năng Null của một cột có thể được định nghĩa khi tạo một bảng.
Từ khóa NULL được sử dụng để chỉ ra rằng giá trị null là được phép trong cột
Từ khóa NOT NULL được sử dụng để chỉ ra rằng giá trị null là không được phép
Hệ quản trị CSDL SQL Server - page127
Tạo bảng – Định nghĩaDEFAULT
Ràng buộc default có thể được tạo ra tại thời điểm tạo bảng hoặc thêm sau khi bảng được tạo.
Với một cột, chỉ có thể tạo được một giá trị default.
Giá trị default có thể là một hằng, một hàm hệ thống, một biến toàn cục, hoặc một hàm do người dùng định nghĩa.
Tạo bảng - Định nghĩa DEFAULT (tt)
• Định nghĩa default đối với một bảng đã tồn tại:
ALTER TABLE <tên bảng>
ADD [CONSTRAINT <tên ràng buộc>] DEFAULT
<biểu thức> FOR <tên cột>
• Thuộc tính IDENTITY của SQL Server được sử
dụng để tạo ra các cột nhận dạng, chúng chứa các
giá trị tự động phát sinh tuần tự để nhận dạng duy
nhất mỗi hàng trong một bảng.
• Một thuộc tính nhận dạng có hai thành phần:
– Giá trị khởi đầu
– Giá trị tăng
Tạo bảng - Thuộc tính IDENTITY
• CREATE TABLE <table_name> (column_name
data_type [ IDENTITY [(seed_value,
increment_value)]] NOT NULL )
– Trong đó, - seed_value là giá trị khởi đầu .
– - increment_value là giá trị tăng.
• Ví dụ:
CREATE TABLE ContactPhone (
Person_ID int IDENTITY(500,1) NOT NULL,
MobileNumber bigint NOT NULL
)
Tạo bảng - Thuộc tính IDENTITY (tt)
• Cú pháp:
–
–
–
–
–
PRIMARY KEY
UNIQUE
FOREIGN KEY
CHECK
NOT NULL
Tạo bảng – Ràng buộc
• Ràng buộc là thuộc tính được chỉ định cho một cột
hoặc một tập hợp các cột trong bảng để ngăn ngừa
các giá trị không nhất quán được nhập vào.
• SQL Server hỗ trợ các loại ràng buộc sau:
Tạo bảng – Ràng buộc- Primary Key (Khoá chính)
• Ràng buộc PRIMARY KEY được sử dụng để tạo
một khóa chính và đảm bảo toàn vẹn thực thể bảng.
• Cú pháp để thêm một khóa chính trong khi tạo
bảng:
• CREATE TABLE <tên bảng> (
<tên cột> <kiểu dữ liệu> PRIMARY KEY [ds cột]
)
• CREATE TABLE <tên bảng> (
<tên cột> <kdl> [ds cột] CONSTRAINT <tên RB>
PRIMARY KEY)
Tạo bảng – Ràng buộc- Primary Key (Khoá chính) (tt)
• Ví dụ: Tạo bảng PhongBan với khóa chính là
maphong
CREATE TABLE PhongBan (
maphong int PRIMARY KEY,tenphong
navarchar(20),
trphong char(5), diadiem nvarchar(20) )
Hoặc có thể viết như sau:
CREATE TABLE PhongBan (
maphong int constraint pk_pb PRIMARY KEY,
tenphong nvarchar(20), trphong char(5), diadiem
nvarchar(20))
Tạo bảng – Ràng buộc- UNIQUE - Khóa duy nhất
• Ràng buộc khóa duy nhất:
– được sử dụng để bảo đảm rằng chỉ các giá trị duy
nhất được nhập vào trong cột hoặc một tập hợp các
cột ( cho phép nhà phát triển chắc chắn rằng không
có các giá trị trùng lặp được nhập vào)
– Được sử dụng trong câu lệnh create table để định
nghĩa khóa phụ cho bảng
– Ràng buộc UNIQUE cho phép null
Tạo bảng – Ràng buộc- UNIQUE - Khóa duy nhất (tt)
• Cú pháp:
– CREATE TABLE <tên bảng> ([ds cột, ] <tên
cột> <kdl> [CONSTRAINT <tên RB>]UNIQUE
[,ds cột])
• Ví dụ:
CREATE TABLE KhachHang (
makh int PRIMARY KEY,
tenkh nvarchar(30),
diachi nvarchar(30),
sodt char(10) UNIQUE )
Tạo bảng – Ràng buộc- Khóa ngoại (foreign key)
• Một khóa ngoại trong một bảng là một cột, nó chỉ
đến một khóa chính trong một bảng khác
• Ràng buộc khóa ngoại được sử dụng để đảm bảo
toàn vẹn tham chiếu
• Cú pháp:– CREATE TABLE <tên bảng 1>(
[ds cột,]
<tên<tên cột> <kdl> [CONSTRAINTRB>]FOREIGN KEY REFERENCES
<tên bảng 2>(cột làm khóa chính> [, dscột])
Tạo bảng – Ràng buộc- Khóa ngoại (foreign key)
• Ví dụ:
CREATE TABLE Nhanvien(
manv char(5) NOT NULL,
tennv nvarchar(30),
manqly char(5),
phong int foreign key references
PhongBan(maphong)
)
• Hoặc có thể viết như sau:
Tạo bảng – Ràng buộc- Khóa ngoại (foreign key)
• Ví dụ: (tt)
• Hoặc có thể viết như sau:CREATE TABLE Nhanvien(
manv char(5) NOT NULL,tennv
nvarchar(30),
manqly char(5), phong int
constraint fk_nv_pb foreign key(phong)
references PhongBan(maphong)
)
Tạo bảng – Ràng buộc- Ràng buộc kiểm tra (Check)
• Ràng buộc check
– Được sử dụng để chỉ định điều kiện hợp lệ đối với dữ
liệu
• Cú pháp:
– CREATE TABLE <Tên bảng>(
[CONSTRAINT[ds cột,] <tên cột> <kdl><tên RB>] CHECK (<điều kiện>)
• Ví dụ:Create table KetQua(
masv int, mamh char(4),
diem float,
lanthi int check(lanthi<3)
Nội dung chương 3
• Các kiểu dữ liệu trong SQL
• Câu lệnh định nghĩa dữ liệu
–
–
–
–
Tạo bảng
Câu lệnh cập nhật dữ liệu
Câu lệnh thay đổi cấu trúc bảng
Xóa bảng
Câu lệnh cập nhật dữ liệu
• Là câu lệnh dùng để cập nhật dữ liệu.
• Bao gồm các câu lệnh: INSERT, UPDATE,
DELETE.
– Lệnh thêm dữ liệu vào bảng:
INSERT INTO <Tên bảng> [(<DS các
trường>)] VALUES (<DS các giá trị tương
ứng>)
Câu lệnh cập nhật dữ liệu (tt)
– Lệnh thêm dữ liệu vào bảng: (tt)
– Vd: MON (MaMH, TenMH, DVHT)
Thêm vào bảng MON với mã môn TH345, tên môn
Cơ sở dữ liệu, đơn vị học trình là 5
VALUES ('TH345', 'Cơ sởINSERT INTO MON
dữ liệu',5)
Hoặc:
INSERT INTO MON (MaMH, TenMH, DVHT)
VALUES('TH345', 'Cơ sở dữ liệu',5)
Câu lệnh cập nhật dữ liệu (tt)
• Một số lưu ý:
– Thêm ký tự N trước chuỗi Unicode
• Ví dụ:
insert into NhanVien
văn Trường’,values(‘NV01’,N’Nguyễn
‘Nam’)
– Thuộc tính NOT NULL
• Nếu thuộc tính được khai báo là NOT NULL thì bắt buộc phải
có giá trị khi nhập 1 bộ vào bảng
Câu lệnh cập nhật dữ liệu (tt)
• Một số lưu ý (tt)
– Nhập dữ liệu khi đã có ràng buộc khóa ngoại
• Trường hợp 1:
– Cách 1:
• B1: Nhập PHONGBAN
• B2: Nhập DEAN
– Cách 2:
• B1: Nhập DEAN, nhập phong = null
• B2: Nhập PHONGBAN
• B3: Cập nhật DEAN
Câu lệnh cập nhật dữ liệu (tt)
• Một số lưu ý (tt)
– Nhập dữ liệu khi đã có ràng buộc khóa ngoại
• Trường hợp 2:
– Cách 1:
• B1: Nhập NHANVIEN, đặt phong = null
• B2: Nhập PHONGBAN
• B3: Cập nhật thuộc tính phong của
NHANVIEN
– Cách 2:
• B1: Nhập PHONGBAN, đặt trphong =
null
• B2: Nhập NHANVIEN
• B3: Cập nhật PHONGBAN
Câu lệnh cập nhật dữ liệu (tt)
• Một số lưu ý (tt)
– Nhập dữ liệu khi đã có ràng buộc khóa ngoại
• Trường hợp 3:
– Cách 1:
• Những nhân viên có manql là null thì
nhập trước
• Sau đó nhập những nhân viên mà
đã nhập thông tin người quản lý
nhân viên đó.
– Cách 2:
• B1: Nhập NHANVIEN đặt manql =
null
• B2: Cập nhật manql của NHANVIEN
Câu lệnh cập nhật dữ liệu (tt)
- Lệnh Update, Delete
• Lệnh cập nhật dữ liệu trong bảng:
UPDATE <Tên bảng> SET <Tên trường1> =
<GT1>,...., <Tên trườngN> =
<GTN> [WHERE <điều kiện>]
• Vd: Cập nhật số DVHT cho môn học 'TH345' tăng
1
UPDATE MON SET DVHT = DVHT + 1
WHERE MaMH = 'TH345'
Câu lệnh cập nhật dữ liệu (tt)
- Lệnh Update, Delete
• Lệnh xóa dữ liệu khỏi bảng:
DELETE FROM <Tên bảng> [WHERE <điều
kiện chọn>]
• Vd: Xóa các môn học có số DVHT nhỏ hơn 2
DELETE FROM MON WHERE DVHT < 2
• Lưu ý: Câu lệnh delete chỉ xóa dữ liệu của bảng, cấu
trúc bảng tạo bởi câu lệnh create table vẫn được giữ
nguyên.
Nội dung chương 3
• Các kiểu dữ liệu trong SQL
• Câu lệnh định nghĩa dữ liệu
–
–
–
–
Tạo bảng
Câu lệnh cập nhật dữ liệu
Câu lệnh thay đổi cấu trúc bảng
Xóa bảng
Các lệnh về thay đổi cấu trúc bảng- Thêm, xóa, sửa một cột (thuộc tính)
• Thêm một cột vào bảng có sẵn
– Cú pháp
ALTER TABLE <tên bảng> ADD <tên cột 1>
<kdl1>[,<tên cột 2> <kdl2>, ...]
– Ví dụ: Thêm cột ngaysinh vào bảng NhanVien
ALTER TABLE NhanVien ADD ngaysinh datetime
Các lệnh về thay đổi cấu trúc bảng- Thêm, xóa, sửa một cột (thuộc tính) (tt)
• Chỉnh sửa cột trong bảng
– Cú pháp
ALTER TABLE <table_name>
ALTER COLUMN <tên cột 1> <kdl1>
[,<tên cột 2> <kdl2> ...]
– Ví dụ: Sửa cột tennv trong bảng NhanVien thành cột
có kiểu dữ liệu là nvarchar(20)ALTER TABLE NhanVien ALTER column tennv
nvarchar(20)
Các lệnh về thay đổi cấu trúc bảng- Thêm, xóa, sửa một cột (thuộc tính) (tt)
• Xóa cột trong bảng
– Cú pháp
ALTER TABLE <table_name> DROP COLUMN
<column_name1> [,<column_name2>
– Ví dụ: Xóa cột diadiem trong bảng PhongBan
TABLE PhongBan DROP COLUMNALTERdiadiem
Thêm ràng buộc khóa chính
• Thêm RB khóa chính
– Cú pháp
ALTER TABLE <tên bảng> ADD CONSTRAINT
<tên RB> PRIMARY KEY (<DS các cột làm
khóa chính>)
- Ví dụ: Thêm khóa chính cho bảng KetQua
ALTER TABLE KetQua ADD CONSTRAINT pk_kq
PRIMARY KEY(masv,mamh)
Thêm ràng buộc khóa ngoại
• Thêm RB khóa ngoại
– Cú pháp
ALTER TABLE <tên bảng> ADD CONSTRAINT
<tên RB> FOREIGN KEY (<DS các cột làm
khóa ngoại>) REFERENCES <tên bảng tham
chiếu>(<ds cột>)
- Ví dụ: Thêm RB khóa ngoại cho bảng KetQua
ALTER TABLE KetQua ADD CONSTRAINT
fk_kq_sv FOREIGN KEY(masv) REFERENCES
SinhVien(masv)
Thêm ràng buộc kiểm tra (check)
• Thêm RB kiểm tra
– Cú pháp
ALTER TABLE <tên bảng> ADD CONSTRAINT
<tên RB> CHECK(<điều kiện>)
- Ví dụ: Thêm RB kiểm tra đảm bảo thuộc tính phai
trong bảng NhanVien chỉ nhận giá trị “nam” hoặc
“nữ”
ALTER TABLE NhanVien ADD CONSTRAINT
ck_phai CHECK(phai in (‘nam’,’nu’))
Xóa ràng buộc khóa chính, khóa ngoại, check
• Cú pháp
ALTER TABLE <tên bảng> DROP CONSTRAINT
<tên RB>
- Ví dụ:
- Xóa RB kiểm tra trong bảng NhanVien
ALTER TABLE NhanVien
DROP CONSTRAINT ck_phai
- Xóa RB khóa ngoại trong bảng KetQua
ALTER TABLE KetQua
DROP CONSTRAINT fk_kq_sv
Nội dung chương 3
• Các kiểu dữ liệu trong SQL
• Câu lệnh định nghĩa dữ liệu
–
–
–
–
Tạo bảng
Câu lệnh cập nhật dữ liệu
Câu lệnh thay đổi cấu trúc bảng
Xóa bảng
Xóa bảng (tt)
• Lưu ý khi xóa bảng có liên quan đến khóa ngoại:
– Nếu không có tham chiếu vòng thì tiến hành xóa bảng
chứa khóa ngoại trước sau đó xóa bảng còn lại, hoặc
xóa khóa ngoại rồi sau đó tiến hành xóa các bảng.
– Nếu có tham chiếu vòng thì xóa một khóa để làm mất
tham chiếu vòng rồi tiến hành như trường hợp 1.
– Có thể sử dụng câu lệnh sau làm vô hiệu hóa các RB
trên bảng trước khi xóa bảng:
Alter table <tên bảng> nocheck
constraint all
Ví dụ tổng hợp
• Tạo csdl QLDT gồm các lược đồ sau:
– SINHVIEN (MaSV, Hoten, Namsinh, QQ, Hocluc)
– DETAI (MaDT, TenDT, Chunhiem, Kinhphi)
– SV_DT (MaSV, MaDT, NoiAD, KQ)
• Ta có các câu lệnh SQL sau:
Create database QLDT
Use QLDT
Create table SinhVien(
masv int primary key, hoten nvarchar(30),
namsinh datetime, qq nvarchar(20), hoclucfloat)
Ví dụ tổng hợp
Create table DeTai(
madt int primary key, tendt
nvarchar(30),
chunhiem nvarchar(30), kinhphi int)
Create table SV_DT(
masv int foreign key references
SinhVien(masv),
madt int foreign key references
DeTai(madt),
noiAD nvarchar(20), kq float,
pk_svdt primaryconstraint
key(masv,madt))
Bài tập
• Cho lược đồ csdl quản lý hàng hóa như sau:
–
–
–
–
HangHoa(MaHG, TenHG, DVT, Dongia, Cohang)
Khach(MaKH, Hoten, Diachi, Daily, sodienthoai)
HoaDon(SoHD, Ngaylap, Ngaygiao, Trigia, MaKH)
Chitiet_HD(SoHD, MaHG, Soluong, Giaban)
• Thực hiện các công việc sau:
– 1. Viết câu lệnh để tạo tất cả các bảng dựa vào các LĐQH trên(có đầy đủ RB khóa chính, khóa ngoại và not null).
– 2. Trong bảng Khach, viết câu lệnh sửa cột diachi thànhnvarchar(30), giả sử trước đó cột này có kiểu char(20).
– 3. Viết câu lệnh kiểm tra RB trên bản Chitiet_HD.
– 4. Viết câu lệnh không kiểm tra RB trên bảng HoaDon.
– 5. Thêm RB kiểm tra cho thuộc tính cohang trong bangHangHoa là 0 hoặc 1.
– 6. Thêm RB duy nhất cho thuộc tính sodienthoai trong bảngKhach.
Phạm Thị Thu ThúyKhoa CNTT, Đại học Nha Trang
Chương IV:
Transact-SQL và truy vấn dữ liệu
Nội dung chương IV
• Câu lệnh thao tác dữ liệu
–
–
–
–
Truy vấn dữ liệu cơ bản
Truy vấn lồng
Hàm kết hợp và gom nhóm
Một số dạng truy vấn khác
• Khung nhin
Cơ sở dữ liệu ví dụ
• Trong suốt phần sau của chương này, ta sử dụng
csdl sau làm ví dụ minh họa:
– NhanVien(manv, honv, tenlot, tennv, ngaysinh, diachi,
phai, luong, manql, phong)
– PhongBan(maphong,tenphong,trphong, ngnhanchuc)
– DDPhong(maphong, diadiem)
– DeAn(tenda, mada, ddiemda, phong)
– PhanCong(manvien, soda, thoigian)
– ThanNhan(manvien, tentn, phai, ngaysinh, quanhe)
– Cho phép kết quả trả về của bảng có nhiều dòng trùng
nhau
Phép toán ĐSQH Một số bổ sung
Truy vấn dữ liệu
• Là ngôn ngữ rút trích dữ liệu
– Thường đi kèm với một số điều kiện nào đó
• Dựa trên
• Gồm 3 mệnh đề
• Tên các cột cần được hiển thị trong kết quả truy vấn
– <danh sách các bảng>
• Tên các bảng liên quan đến câu truy vấn
– <điều kiện>
•
•
•
Biểu thức boolean xác định dòng nào sẽ được rút trích
Nối các biểu thức: AND, OR, và NOT
Phép toán: , , , , , , LIKE và BETWEEN
SELECT [DISTINCT] <danh sách các cột>
FROM <danh sách các bảng>
[WHERE] <điều kiện>
– <danh sách các cột>:
Từ khóa DISTINCT để loại
bỏ các dòng trùng nhau
trong bảng kết quả
Truy vấn cơ bản
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điều kiện>
SELECT L
FROM R
WHERE C
L (C (R))
Truy vấn cơ bản (tt)
• SQL và ĐSQH
• Ví dụ: Cho biết ds sinh viên lớp có mã lớp là "Ti01"
SELECT *
FROM SinhVien
WHERE malop = ‘Ti01’
– Tương đương với biểu thức đsqh sau:
malop = ‘Ti01’ (SinhVien)
Dấu * để chỉ tất cả các cột
Truy vấn cơ bản (tt)
• Ví dụ: Cho biết ds sinh viên nam của lớp có mã
"Ti01"SELECT masv, hoten, ngaysinh, phai, malop
FROM SinhVien
WHERE malop = ‘Ti01’ and phai = ‘Nam’
– Tương đương với biểu thức đsqh sau:
(malop =masv, hoten, ngaysinh, phai, malop
‘Ti01’and phai=‘Nam’ (SinhVien))
Truy vấn cơ bản (tt)
Truy vấn cơ bản (tt)
• Tên bí danh:
– Có thể đặt lại tên cho ds các thuộc tính trong bảng kết
quả (gọi là tên bí danh) bằng cách sử dụng cú pháp
sau:
Select <tên cột> AS <tên mới cho cột>
– Ví dụ
SELECT masv AS ma, hoten AS ‘Ho ten’,
ngaysinh, phai, malop
FROM SinhVien
WHERE malop = ‘Ti01’ and phai = ‘Nam’
Truy vấn cơ bản (tt)
• Ví dụ: Cho biết mã số, họ tên, ngày sinh, tên lớp
của danh sách sinh viên lớp "công nghệ thông tin
01"
SELECT
FROM
WHERE
maso, hoten, ngaysinh, tenlop
SinhVien, LopHoc
tenlop = ‘Cong nghe thong tin
01’ AND SinhVien.malop = LopHoc.malop
Truy vấn cơ bản (tt)
• Tên bí danh cho bảng
– Ví dụ: Cho biết mã số, họ tên, ngày sinh, tên lớp của
danh sách sinh viên lớp "công nghệ thông tin 01"
Select
From
maso, hoten, ngaysinh, tenlop
SinhVien sv, LopHoc lh
Where tenlop = =‘Cong nghe thong
tin 01’
and sv.malop = lh.malop
Truy vấn cơ bản (tt)- Toán tử between, not between, like, not like
• BETWEEN
– Sử dụng để kiểm tra giá trị dữ liệu nằm trong (ngoài)một khoảng nào đó.
SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG > 20000 AND LUONG < 30000
• Có thể viết:
SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG BETWEEN 20000 AND 30000
• Sử dụng NOT BETWEEN tương tự
Truy vấn cơ bản (tt)- Toán tử between, not between, like, not like
• LIKE
– Từ khóa LIKE (NOT LIKE) được sử dụng trong câu
lệnh select nhằm mô tả khuôn dạng dữ liệu cần tìm
kiếm.
– Thường được kết hợp với các ký tự đại diện sau:
• %: chuỗi ký tự bất kỳ (có thể là không có hoặc nhiều ký tự)
• _: ký tự đơn bất kỳ
• []: ký tự đơn bất kỳ trong giới hạn được chỉ định (ví dụ [a-f])
hay một tập (ví du: [abcdef])
• [^]: ký tự đơn bất kỳ không nằm trong giới hạn được chỉ định
(ví dụ [^a-f]) hay một tập (ví dụ [^abcdef]).
Truy vấn cơ bản (tt)- Toán tử between, not between, like, not like
• LIKE (tt)
– Ví dụ:
SELECT masv, hoten, ngaysinh
FROM SinhVien
WHERE hoten LIKE ‘Nguyen _ _ _ _’
– Hoặc
SELECT masv, hoten, ngaysinh
FROM SinhVien
WHERE hoten LIKE ‘Nguyen %’
• Sử dụng NOT LIKE tương tự
– Lưu ý:
• Like “ab\%cd%” cho ra những chuỗi bắt đầu với “ab%cd”
• Like “ab\\cd%” cho ra những chuỗi bắt đầu với “ab\cd”
Truy vấn cơ bản (tt)
- Ví dụ
• Với những đề án ở "Ha Noi", cho biết mã đề án, mã
phòng ban chủ tri đề án, họ tên trưởng phòng cùng
với ngày sinh và địa chỉ của người ấy
Truy vấn cơ bản (tt)
- Ví dụ
• Cho biết họ tên của nhân viên phòng số 5 có tham
gia vào đề án “Sản phẩm X” với số giờ làm việc trên
10 giờ
Truy vấn cơ bản- Mệnh đề ORDER BY
• Dùng để hiển thị kết quả câu truy vấn theo một thứ
tự nào đó
• Cú pháp:SELECT <ds các cột>
FROM <ds các bảng>
WHERE <điều kiện>
ORDER BY <danh sách các cột><kiểu sắp>
– Trong đó <kiểu sắp> có thể là:
• ASC: tăng (mặc định)
• DESC: giảm
Truy vấn cơ bản- Mệnh đề ORDER BY (tt)
• Ví dụ:SELECT MANVIEN, SODA
FROM PHANCONG
ORDER BY MANVIEN DESC, SODA
SODA
10
30
10
30
10
20
30
MANVIEN
999887777
999887777
987987987
987987987
987654321
987654321
987654321
Nội dung chương IV
• Câu lệnh thao tác dữ liệu
–
–
–
–
Truy vấn dữ liệu cơ bản
Truy vấn lồng
Hàm kết hợp và gom nhóm
Một số dạng truy vấn khác
• Khung nhin
Truy vấn lồng
• Các câu lệnh SELECT có thể lồng nhau ở nhiềumức
• Các câu truy vấn con trong cùng một mệnh đềWHERE được kết hợp bằng phép nối logic
• Câu truy vấn con thường trả về một tập các giá trị
• Cú pháp:
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <so sánh tập hợp> (
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điều kiện>)
•
•
•
IN, NOT IN
ALL
ANY hoặc SOME
– Kiểm tra sự tồn tại
•
•
EXISTS
NOT EXISTS
Truy vấn lồng (tt)
• Mệnh đề WHERE của câu truy vấn cha
– <biểu thức> <so sánh tập hợp> <truy vấn con>
– So sánh tập hợp thường đi cùng với một số toán tử
•
•
Mệnh đề WHERE của truy vấn con không tham chiếu đến
thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn
cha
Khi thực hiện, câu truy vấn con sẽ được thực hiện trước, 1 lần
– Lồng tương quan
•
•
Mệnh đề WHERE của truy vấn con tham chiếu ít nhất một
thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn
cha
Khi thực hiện, câu truy vấn con sẽ được thực hiện nhiều lần,
mỗi lần tương ứng với một bộ của truy vấn cha
Truy vấn lồng (tt)
• Có 2 loại truy vấn lồng
– Lồng phân cấp
SELECT MANV, TENNV
FROM NHANVIEN, DDPhong
WHERE DIADIEM = ‘TP HCM’ AND phong = maphong
• Tương đương với câu truy vấn lồng sau:
SELECT MANV, TENNV
FROM NHANVIEN
WHERE PHONG IN (SELECT MAPHONG
FROM DDPHONG
WHERE DIADIEM = ‘TP HCM’
)
Truy vấn lồng (tt)- Ví dụ lồng phân cấp
• Ví dụ:
• Ví dụ:SELECT MANV, TENNV
FROM NHANVIEN
WHERE EXISTS (
SELECT *
FROM PHONGBAN
WHERE TENPHONG=‘Nghien cuu’ AND PHONG=MAPHONG)
Câu truy vấn trên cho kết quả gi? Tương đương với
câu truy vấn đơn giản nào?SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE TENPHONG=‘Nghien cuu’ AND PHONG=MAPHONG
Truy vấn lồng (tt)- Ví dụ lồng tương quan
• Tim những nhân viên có lương lớn hơn lương của ít
nhất một nhân viên phòng 4
• Tim những nhân viên có lương lớn hơn lương của
tất cả nhân viên phòng 4
Truy vấn lồng (tt)- Ví dụ
Truy vấn lồng (tt)- Nhận xét
• IN
– <tên cột> IN <câu truy vấn con>
– Thuộc tính ở mệnh đề SELECT của truy vấn con phải
có cùng kiểu dữ liệu với thuộc tính ở mệnh đề
WHERE của truy vấn cha
• EXISTS
– Không cần có thuộc tính, hằng số hay biểu thức nào
khác đứng trước
– Không nhất thiết liệt kê tên thuộc tính ở mệnh đề
SELECT của truy vấn con
– Những câu truy vấn có = ANY hay IN đều có thể
chuyển thành câu truy vấn có EXISTS
Nội dung chương IV
• Câu lệnh thao tác dữ liệu
–
–
–
–
Truy vấn dữ liệu cơ bản
Truy vấn lồng
Hàm kết hợp và gom nhóm
Một số dạng truy vấn khác
• Khung nhin
Hàm kết hợp và gom nhóm
• Hàm kết hợp:
– Được sử dụng trong mệnh đề SELECT
– Có các hàm kết hợp sau:
• COUNT
– COUNT(*) đếm số dòng
– COUNT(<tên thuộc tính>) đếm số giá trị khác NULL của
thuộc tính
– COUNT(DISTINCT <tên thuộc tính>) đếm số giá trị khác
nhau và khác NULL của thuộc tính
– MIN
• MAX
• SUM
• AVG
Hàm kết hợp và gom nhóm (tt)
• Ví dụ:
– Tìm tổng lương, lương cao nhất, lương thấp nhất và
lương trung bình của các nhân viên
– Select sum(luong) as ‘tong luong’,
min(luong)
max(luong)
as
as
‘luong
‘luong
nho
lon
nhat’,
nhat’,
avg(luong) as ‘luong tb’
From NhanVien
– Cho biết số lượng nhân viên của phòng "Nghien cuu"
Hàm kết hợp và gom nhóm (tt)
• Gom nhóm:
– Nhóm các bộ có cùng giá trị ở một tập các thuộc tính
lại với nhau
– Cú pháp:
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điều kiện>
GROUP BY <danh sách các cột gom nhóm>
Hàm kết hợp và gom nhóm (tt)
• Ví dụ:
– Cho biết số lượng nhân viên của từng phòng ban
– Cho biết thông tin của những phòng ban có nhiều hơn
10 nhân viên
Hàm kết hợp và gom nhóm (tt)
• Ví dụ:
– Với mỗi nhân viên cho biết mã số, họ tên, số lượng đề
án và tổng thời gian mà họ tham gia
SELECT
FROM
WHERE
GROUP BY
MANV, HONV, TENNV,
COUNT(*) AS SL_DA,SUM(THOIGIAN) AS TONG_TG
PHANCONG, NHANVIEN
MANVIEN=MANV
MANV, HONV, TENNV
– Cho biết những nhân viên tham gia từ 2 đề án trở lên
Hàm kết hợp và gom nhóm (tt)
• Cú pháp:
SELECT <danh sách các cột>
FROM <danh sách các bảng>
WHERE <điều kiện>
GROUP BY <danh sách các cột gom nhóm>
HAVING <điều kiện trên nhóm>
• Ví dụ: Cho biết những nhân viên tham gia từ 2 đề
án trở lên
Hàm kết hợp và gom nhóm (tt)
• Ví dụ:
– Cho biết những phòng ban (TENPHONG) có lương
trung bình của các nhân viên lớn lơn 20000
Hàm kết hợp và gom nhóm (tt)- Nhận xét
• Mệnh đề GROUP BY
– Các thuộc tính trong mệnh đề SELECT (trừ những
thuộc tính trong các hàm kết hợp) phải xuất hiện trong
mệnh đề GROUP BY
• Mệnh đề HAVING
– Sử dụng các hàm kết hợp trong mệnh đề SELECT để
kiểm tra một số điều kiện nào đó
– Chỉ kiểm tra điều kiện trên nhóm, không là điều kiện
lọc trên từng bộ
– Sau khi gom nhóm điều kiện trên nhóm mới được
thực hiện
Hàm kết hợp và gom nhóm (tt)- Nhận xét
• Thứ tự thực hiện câu truy vấn có mệnh đề GROUP
BY và HAVING
– (1) Chọn ra những dòng thỏa điều kiện trong mệnh đề
WHERE
– (2) Những dòng này sẽ được gom thành nhiều nhóm
tương ứng với mệnh đề GROUP BY
– (3) Áp dụng các hàm kết hợp cho mỗi nhóm
– (4) Bỏ qua những nhóm không thỏa điều kiện trong
mệnh đề HAVING
– (5) Rút trích các giá trị của các cột và hàm kết hợp
trong mệnh đề SELECT
Hàm kết hợp và gom nhóm (tt)
• Ví dụ:
– Tìm phòng ban có lương trung bình cao nhất
– Tìm 3 nhân viên có lương cao nhất
– Tìm tên các nhân viên được phân công làm tất cả các
đồ án
Nội dung chương IV
• Câu lệnh thao tác dữ liệu
–
–
–
–
Truy vấn dữ liệu cơ bản
Truy vấn lồng
Hàm kết hợp và gom nhóm
Một số dạng truy vấn khác
• Khung nhin
203
Điều kiện kết ở mệnh đề FROM
• Thông thường điều kiện của phép kết nối được chỉ
định trong mệnh đề where của câu truy vấn.
• Chuẩn SQL2 đưa ra một cách khác để biểu diễn
cho phép nối. Trong cách biểu diễn này:
– Điều kiện của phép kết nối được chỉ định ngay trong
mệnh đề From.
– Ưu điểm: Cho phép biểu diễn phép nối và điều kiện
nối rõ ràng (đặc biệt trong trường hợp phép nối được
thực hiện từ 3 bảng trở lên)
41
Điều kiện kết ở mệnh đề FROM (tt)
• Kết nối bằng (kết nối trong)
– Cú pháp:
SELECT <danh sách các cột>
<biểuFROM
WHERE
R1 [INNER] JOIN R2 ON
thức>
<điều kiện>
42
Điều kiện kết ở mệnh đề FROM (tt)
• Kết nối bằng (kết nối trong)
- Ví dụ: Hiển thị họ tên đầy đủ, ngày sinh, địa chỉ củacác nhân viên phòng “Nghien cuu“.
Có thể viết theo 2 cách như sau:
select
From
honv, tenlot, tennv, ngaysinh, diachi
NhanVien, PhongBan
Where phong = maphong
and tenphong = ‘Nghien cuu’
- Hoặc có thể viết:select honv, tenlot, tennv, ngaysinh, diachi
From NhanVien INNER JOIN PhongBan ON
phong = maphong
Where tenphong = ‘Nghien cuu’
43
Điều kiện kết ở mệnh đề FROM (tt)
Nhận xét
- Kết nối trong trả về những dòng có giá trị trong các cột đượcchỉ định thỏa mãn điều kiện kết nối, không trích xuất các dòng
không thỏa mãn.
- Để hiển thị cả những thông tin thỏa mãn và không thỏa
mãn điều kiện nối ta có thể sử dụng phép nối ngoài.
(những thông tin không thỏa mãn có giá trị NULL)
44
Điều kiện kết ở mệnh đề FROM (tt)
• Kết nối ngoài
– Cú pháp:
SELECT <danh sách các cột>
FROM R1 LEFT|RIGHT|FULL [OUTER] JOIN R2
<biểu thức>WHERE <điều kiện>
ON
45
Điều kiện kết ở mệnh đề FROM (tt)
• Kết nối ngoài– Ví dụ: Ta có 2 bảng PhongBan và DDPhong như sau:
• Kết nối ngoài trái 2 bảng trên cho kết quả sau:
select *
from PhongBan left join
DDPhong on
PhongBan.maphong =
DDPhong.maphong
Điều kiện kết ở mệnh đề FROM (tt)
• Kết nối ngoài– Ví dụ: Ta có 2 bảng PhongBan và DDPhong như sau:
• Kết nối ngoài phải 2 bảng trên cho kết quả sau:
select *
from PhongBan right join
DDPhong on
PhongBan.maphong =
DDPhong.maphong
Điều kiện kết ở mệnh đề FROM (tt)
• Kết nối ngoài– Ví dụ: Ta có 2 bảng PhongBan và DDPhong như sau:
• Kết nối ngoài đầy đủ 2 bảng trên cho kết quả sau:
select *
from PhongBan full join
DDPhong on
PhongBan.maphong =
DDPhong.maphong
Điều kiện kết ở mệnh đề FROM (tt)
• Ví dụ:
– Tìm mã và tên các nhân viên làm việc tại phòng
“Kinh doanh"
– Cho biết họ tên nhân viên và tên phòng ban mà họ là
trưởng phòng
49
Điều kiện kết ở mệnh đề FROM (tt)
• Ví dụ:
– Tìm họ tên các nhân viên và tên các đề án nhân viên
tham gia (nếu có)
– Tìm họ tên các nhân viên không có thân nhân nào(not exists / left joint)
50
Một số dạng câu truy vấn khác
• Tìm họ tên của những trưởng phòng không có
thân nhân nào.
• Danh sách những trưởng phòng có tối thiểu một thân
nhân (có ít nhất một thân nhân, có từ một thân nhân trở.
51
Nội dung chương IV
• Câu lệnh thao tác dữ liệu
–
–
–
–
Truy vấn dữ liệu cơ bản
Truy vấn lồng
Hàm kết hợp và gom nhóm
Một số dạng truy vấn khác
• Khung nhìn
52
Khung nhìn (View)
• Bảng là một quan hệ được tổ chức lưu trữ vật lý
trong CSDL
• Khung nhin cũng là một quan hệ
–
–
–
–
Không được lưu trữ vật lý (bảng ảo)
Không chứa dữ liệu
Được định nghĩa từ những bảng khác
Có thể truy vấn hay cập nhật thông qua khung nhìn
53
Khung nhìn (View)- Định nghĩa
• Tạo khung nhin
– CREATE VIEW <tên khung nhìn> AS <câu
truy vấn>
– Bảng ảo này có
• Danh sách thuộc tính trùng với các thuộc tính trong mệnh đề
SELECT
• Số dòng phụ thuộc vào điều kiện ở mệnh đề WHERE
• Dữ liệu được lấy từ các bảng ở mệnh đề FROM
• Xóa bỏ khung nhin:
DROP VIEW <tên khung nhìn>
54
Khung nhìn (View)- Ví dụ
• Tạo khung nhìn NVP3 chứa danh sách các nhân
viên phòng số 3
CREATE VIEW NVP3 AS
SELECT MANV, HONV, TENLOT, TENVN, LUONG
FROM NHANVIEN
WHERE PHONG=3
• Sử dụng khung nhin như một bảng
SELECT TENNV
FROM NVP3
WHERE luong > 2000
55
Khung nhìn (View)- Cập nhật, bổ sung và xóa dữ liệu qua view
• SV tự tìm hiểu (tương tự như cập nhật, bổ sung và xóa
dữ liệu trên table)
56
• Cho csdl sau:
–
–
–
–
–
–
Tacgia(matg, hotentg, namsinh, quequan, madv)
Donvi(madv, tendv, socb)
Tapchi(matc, tentc, noixb)
Chitiettc(macttc, matc, sora, sotrang)
Baibao(mabb, tenbb, macttc, ngaydang)
Tacgia_baibao(matg, mabb)
• Cho biết ds bài báo đăng vào ngày 19/2/2009
• Cho biết ds các chi tiết tạp chí của tạp chí “Khoa
học công nghệ”
• Cho biết danh sách tác giả (matg, hoten, namsinh,
tendv) là tác giả của bài báo có mã "bbcntt01"
• Cho biết ds tác giả (matg, hoten) của những tác giả
không có bài báo nào57
• Cho csdl sau:
–
–
–
–
–
–
Tacgia(matg, hotentg, namsinh, quequan, madv)
Donvi(madv, tendv, socb)
Tapchi(matc, tentc, noixb)
Chitiettc(macttc, matc, sora, sotrang)
Baibao(mabb, tenbb, macttc, ngaydang)
Tacgia_baibao(matg, mabb)
• 1. Cho biết ds các bài báo (mabb, tenbb, ngaydang,
tentc, sora), của tạp chí “khoa học và công nghệ”
số 4)
• 2. Cho biết ds tác giả (matg, hoten, quequan, tendv)
có đăng bài trên tạp chí “Khoa học và ứng dụng”
58
– NhanVien(manv, honv, tenlot, tennv, ngaysinh, diachi,
phai, luong, manql, phong)
– PhongBan(maphong,tenphong,trphong, ngnhanchuc)
– DDPhong(maphong, diadiem)
– DeAn(tenda, mada, ddiemda, phong)
– PhanCong(manvien, soda, thoigian)
– ThanNhan(manvien, tentn, phai, ngaysinh, quanhe)
• Tim những nhân viên có lương lớn hơn lương của ít
nhất một nhân viên phòng 4
• Tim những nhân viên có lương lớn hơn lương của
tất cả nhân viên phòng 4
59
BÀI TẬP chương IV (tt)
• Thực hiện các yêu cầu sau bằng SQL
–
–
–
–
–
–
–
–
Tạo csdl và tạo các bảng, nhập dữ liệu cho các bảng trong csdl
Cho biết mã và tên của các mặt hàng có giá lớn hơn 10 và số
lượng hiện có ít hơn 20
Cho biết thông tin những khách hàng nào đã mua mặt hàng áo
Việt Tiến
Cho biết thông tin những mặt hàng nào chưa từng được khách
hàng đặt mua?
Cho biết tổng số lượng bán được của mỗi mặt hàng
Bổ sung ràng buộc cho bảng DONDATHANG rang buộc kiểm
tra ngày giao hàng và ngày chuyển hàng phải sau hoặc bằng
với ngày đặt hàng.
Cho biết thông tin những khách hàng có cùng ngày sinh
Thống kê số lượng hóa đơn đã lập của mỗi nhân viên
61
CHƯƠNG 5:
LẬP TRÌNH VỚI TRANSACT- SQL
1
Phạm Thị Thu Thúy
Khoa CNTT, Đại học NhaTrang
BIẾN CỤC BỘ
Biến là một đối tượng có thể chứa dữ liệu
Dữ liệu có thể đưa vào các câu lệnh SQL dùng cục
bộ
Tên các biến cục bộ phải bắt đầu bằng @
Từ khóa SET hay SELECT được dùng để gán giá trị
cho biến cục bộ.
3
BIẾN CỤC BỘ (TT)
DECLARE @Tên_biến Kiểu_dữ_liệu [, ...]
Kiểu dữ liệu text, ntext hoặc image không đượcchấp nhận khi khai báo biến
Ví dụ: Để khai báo các biến lưu trữ giá trị tổng sốlượng đặt hàng, họ tên nhà cung cấp, ngày xuất
hàng. Sử dụng lệnh DECLARE như sau:
DECLARE @Tongsldat INT, @Hotenncc CHAR(50)DECLARE @Ngayxh DATETIME
4
BIẾN CỤC BỘ (TT) – GÁN GIÁ TRI CHO BIẾN
Từ khóa SET hay SELECT được dùng để gán
giá trị cho biến.
Cú pháp: SET @<tên biến cục bộ> = <giá trị>
Hoặc là:
SELECT @<Tên biến cục bộ> = <giá trị>
Chú ý: Phạm vi hoạt động của biến chỉ nằm
trong một thủ tục hoặc một lô có chứa lệnhkhai báo biến đó
5
BIẾN CỤC BỘ (TT) – GÁN GIÁ TRI CHO BIẾN
Ví dụ:
Để tính ra số lượng đặt hàng cao nhất của mặt hàng“Đầu DVD Hitachi 1 đĩa” có mã vật tư là “DD01”. Sử
dụng lệnh SELECT như sau:
DECLARE @MaxSldat INT
SELECT @MaxSldat=MAX(SLDAT)
FROM CTDONDH
WHERE MAVTU=‘DD01’
6
BIẾN CỤC BỘ (TT) – XEM GIÁ TRI HIÊN HÀNH
CỦA BIẾN
Để tính đồng thời giá trị số lượng đặt hàng thấpnhất và cao nhất, hiển thị kết quả ra màn hình. Ta
sử dụng lệnh SELECT và PRINT :
DECLARE @MinSldat INT, @MaxSldat INT
SELECT @MinSldat=MIN(SLDAT),@MaXSldat=MAX(SLDAT)
FROM CTDONDH
PRINT "Số lượng thấp nhất là : "
PRINT @MinSldat
PRINT "Số lượng cao nhất là : " +CONVERT(VARCHAR(10), @MaxSldat)
7
THỦ TỤC LƯU TRƯ
Tập hợp biên dịch các câu lệnh T-SQL được lưu trữ
với một tên xác định
Sử dụng để thực hiện các nhiệm vụ quản trị, hoặc áp
dụng các luật giao dịch phức tạp
Có hai loại thủ tục lưu trữ:
Thủ tục lưu trữ hệ thống đề cập đến phương pháp quản
trị dữ liệu và cập nhật thông tin vào các bảng (thường
bắt đầu bằng sp_).
Thủ tục lưu trữ do người dùng định nghĩa.
8
Sự nhất quán.
THỦ TỤC LƯU TRƯ - LỢI ÍCH
Tăng tốc độ thực hiện:
Thực thi tại server, biên dịch một lần
Tốc độ truy nhập dữ liệu nhanh hơn:
SQl không phải lựa chọn cách tốt nhất để xử lý các lệnhSQL và truy suất csdl mỗi khi chúng được biên dịch
Modular programming:
Một thủ tục có thể phân thành các thủ tục nhỏ hơn, cácthủ tục này có thể được dùng chung giữa các thủ tụckhác->giảm thời gian thiết kế và thực thi các thủ tục
đồng thời cũng dễ quản lý và gỡ rối.
Cải thiện sự bảo mật:
Nâng cao an toàn bảo mật. Có thể chỉ ra quyền thực thicho các thủ tục vì vậy nó thực hiện đúng tác vụ người
dùng.9
TAO THỦ TỤC LƯU TRƯ BẰNG T-SQL
Tạo thủ tục lưu trữ trong csdl hiện thời bằng Cú pháp:
CREATE PROC[EDURE] <tên thủ tục>
[(<DSách tham số>) ]
[WITH ECOMPILE| ENCRYPTION| RECOMPILE,ENCRYPTION]
AS
[DECLARE <biến cục bộ>] <Các câu lệnh của thủ tục>
Các thủ tục lưu trữ có quyền truy cập tới tất cả các đối
tượng khi thủ tục được gọi.
2100 tham số có thể được sử dụng trong một thủ tục lưu
trữ. Tham số bắt đầu bởi @, cần chỉ ra kiểu dliệu của
tham số
Có thể tạo lập nhiều biến cục bộ trong thủ tục
Dung lượng tối đa của thủ tục lưu trữ là 128 MB.12
TAO THỦ TỤC LƯU TRƯ BẰNG T-SQL (TT)
Giả sử ta cần thực hiện một chuỗi các thao tác trên
cơ sở dữ liệu 1. Bổ sung thêm môn học cơ sở dữ liệu có mã CST005
và số đơn vị học trình là 5 vào bảng MONHOC
2. Lên danh sách nhập điểm thi môn cơ sở dữ liệu cho
các sinh viên học lớp có mã CDT002 (bổ sung thêm vào
bảng DIEMTHI các bản ghi với cột MAMONHOC nhận
giá trị CST005, cột MASV nhận giá trị lần lượt là mã các
sinh viên học lớp có mã CDT002 và các cột điểm làNULL).
14
TAO THỦ TỤC LƯU TRƯ BẰNG T-SQL (TT)
Theo cách thông thường ta sẽ viết 2 lệnh như sau:
INSERT INTO monhoc
VALUES(‘CST005’, N‘Cơ sở dữ liệu’,5)
INSERT INTO diemthi(mamh,masv)
SELECT ‘CST005’, masv
FROM sinhvien
WHERE malop = ‘CDT002’
Lưu ý: ở đây bạn có cú pháp câu lệnh chèn dữ liệu vàomột bảng có tên banga với dữ liệu lấy từ bảng có tên
bangb khác như sau:INSERT INTO banga (cot1, cot2)
SELECT cot1, cot2 FROM bangb
15
Đây là mã
môn học, đã
cho trước
nên ghi cụ
thể ra luôn
TAO THỦ TỤC LƯU TRƯ BẰNG T-SQL (TT)
Thay vì phải viết 2 câu lệnh như trên, ta có thể định
nghĩa một thủ tục với các tham số sau @mamh,@tenmh, @sodvht, @malop để nhập dữ liệu chomột môn học bất kỳ và một lớp bất kỳ do người
dùng nhập vào khi sử dụng thủ tục.
16
TAO THỦ TỤC LƯU TRƯ BẰNG T-SQL (TT)
CREATE PROC sp_LenDanhSachDiem(@mamh NVARCHAR(10),
@tenmh@sodvht
@malop
NVARCHAR(50),SMALLINT,
CHAR(4)
ASBEGIN
INSERT INTO monhoc
VALUES(@mamh,@tenmh,@sodvht)
INSERT INTO diemthi(mamh,masv)SELECT @mamh,masv
FROM sinhvien
WHERE malop=@malop
END
Khi thủ tục trên đã được tạo ra, thực hiện được hai yêu cầutrên qua lời gọi thủ tục:
sp_LenDanhSachDiem ‘CST005','Cơ sở dữ liệu',5,‘L002' 17
THỰC THI CÁC THỦ TỤC NGƯỜI DÙNG
Lời gọi thủ tục có dạng:<tên_thủ_tục> [<danh_sách_các_đối_số>]
Số lượng các đối số và thứ tự của chúng phải phù hợp vớisố lượng và thứ tự của các tham số hình thức.
Nếu lời gọi thủ tục được thực hiện bên trong một thủ tụckhác, bên trong một trigger hay kết hợp với các câu lệnh
SQL khác, ta sử dụng cú pháp như sau:[EXECUTE] <tên_thủ_tục> [<danh_sách_các_đối_số>]
vdụ:
sp_LenDanhSachDiem ‘CST005','Cơ sở dữEXECUTEliệu',5,‘L002'
Thứ tự của các đối số được truyền cho thủ tục có thểkhông cần phải tuân theo thứ tự của các tham số như khi
định nghĩa thủ tục nếu tất cả các đối số được viết dướidạng:
@<tên_tham_số> = <giá_trị>
18
VD SỬ DỤNG BIẾN TRONG THỦ TỤC:
CREATE PROC sp_Vidu(@malop1 CHAR(4),@malop2CHAR(4))
ASDECLARE @tenlop1 NVARCHAR(30)
DECLARE @namnhaphoc1 INTDECLARE @tenlop2 NVARCHAR(30)
DECLARE @namnhaphoc2 INT
SELECT @tenlop1=tenlop,@namnhaphoc1=namnhaphocFROM lop WHERE malop=@malop1
SELECT @tenlop2=tenlop, @namnhaphoc2=namnhaphocFROM lop WHERE malop=@malop2
PRINT @tenlop1+' nhap hoc nam '+str(@namnhaphoc1)print @tenlop2+' nhap hoc nam '+str(@namnhaphoc2)
IF @namnhaphoc1=@namnhaphoc2PRINT 'Hai lớp nhập học cùng năm'
ELSEPRINT 'Hai lớp nhập học khác năm' 19
GIÁ TRI TRA VỀ CỦA THAM SỐ TRONG THỦ
TỤC
Trường hợp cần giữ lại giá trị của đối số sau khi kết thúc
thủ tục, khai báo tham số của thủ tục theo cú pháp:
@tên_tham_số kiểu_dữ_liệu OUTPUT
Hoặc:
@tên_tham_số kiểu_dữ_liệu OUT
Trong lời gọi thủ tục, sau đối số được truyền cho thủ tục,
cũng phải chỉ định thêm từ khoá OUTPUT (hoặc OUT)
CREATE PROCEDURE sp_Conghaiso(
@a
@b
@c
INT,
INT,
INT OUTPUT)
AS
SELECT @c=@a+@b20
GIÁ TRI TRA VỀ CỦA THAM SỐ TRONG THỦ TỤC
(TT)
Thực hiện lời gọi thủ tục trong một tập các câu
lệnh như sau:DECLARE @tong INT
SELECT @tong=0EXECUTE sp_Conghaiso 100,200,@tong OUTPUT
SELECT @tong
=> câu lệnh “SELECT @tong” sẽ cho kết quả là:
300
21
THỦ TỤC LƯU TRƯ - THAM SỐ GIÁ TRI MẶC
ĐINH
Tham số với giá trị mặc định được khai báo theo cú
pháp như sau:
@<tên_tham_số> <kdl> = <giá_trị_mặc_định>
22
THỦ TỤC LƯU TRƯ - THAM SỐ GIÁ TRI MẶC
ĐINH
CREATE PROC sp_TestDefault(AS
BEGIN
@tenlop NVARCHAR(30)=NULL,
@noisinh NVARCHAR(100)=‘Khánh Hòa’)
IF @tenlop IS NULLSELECT hodem,ten
FROM sinhvien INNER JOIN lopON sinhvien.malop=lop.malop
WHERE noisinh=@noisinhELSE
SELECT hodem,tenFROM sinhvien INNER JOIN lop
ON sinhvien.malop=lop.malopWHERE noisinh=@noisinh AND
tenlop=@tenlop
END23
THỦ TỤC LƯU TRƯ - THAM SỐ GIÁ TRI MẶC ĐINH
(TT)
Cho biết họ tên của các sinh viên sinh tại Huế:
sp_testdefault
Cho biết họ tên của các sinh viên lớp 54CTH sinh
tại Khánh Hòa: sp_testdefault @tenlop=‘54CTH‘
Cho biết họ tên của các sinh viên sinh tại Nghệ An:
sp_testDefault @noisinh=N'Nghệ An‘
Cho biết họ tên của các sinh viên lớp 53TH sinh
tại Đà Nẵng: sp_testdefault @tenlop=‘53TH',@noisinh='Đà Nẵng'
24
THỦ TỤC LƯU TRƯ - BIÊN DICH LAI THỦ
TỤC
Các thủ tục lưu trữ được biên dịch lại để phản ánh
sự thay đổi tới các chỉ số
Có ba cách để biên dịch lại các thủ tục: Sử dụng thủ tục hệ thống sp_recompile
RECOMPILE CREATEvới lệnhChỉ rõ WITH
PROCEDURE
Chỉ rõ WITH RECOMPILE với lệnh EXECUTE
25
THỦ TỤC LƯU TRƯ - THAY ĐỔI THỦ TỤC
LƯU TRƯ
Câu lệnh ALTER PROCEDURE được sử dụng để
sửa một thủ tục lưu trữ
Cú pháp giống như lệnh CREATE PROCEDURE
Sự thay đổi này vẫn giữ lại các quyền người dùng
Cp:
tên_thủ_tụcALTER PROCEDURE
[(danh_sách_tham_số)]
[WITH RECOMPILE|ENCRYPTION|
RECOMPILE,ENCRYPTION] AS
<Các_câu_lệnh_Của_thủ_tục>
26
THỦ TỤC LƯU TRƯ - XÓA THỦ TỤC
Sử dụng câu lệnh DROP PROCEDURE với cú pháp
như sau: DROP PROCEDURE <tên_thủ_tục >
27
THỦ TỤC LƯU TRƯ - TỔNG KẾT
Một thủ tục lưu trữ là một nhóm các câu lệnh SQL
được biên dịch lại.
Người phát triển CSDL hoặc người quản trị hệ
thống viết thủ tục để chạy các nhiệm vụ quản trịthông thường, hoặc để ứng dụng các luật giao dịch
phức tạp. Thủ tục lưu trữ chứa các thao tác hoặc cáccâu lệnh truy vấn dữ liệu.
Các thủ tục lưu trữ tăng tốc độ thực thi của truy
vấn, hỗ trợ truy cập dữ liệu nhanh, hỗ trợ việc lập
trình theo mô đun, duy trì tính nhất quán, và tăngtính bảo mật.
28
THỦ TỤC LƯU TRƯ - TỔNG KẾT (TT)
Có ba cách để biên dịch lại các thủ tục lưu trữ: Sử dụng thủ tục hệ thống sp_recompile
RECOMPILE CREATEvới lệnhChỉ rõ WITH
PROCEDURE
Chỉ rõ WITH RECOMPILE với lện EXECUTE
Câu lệnh ALTER PROCEDURE được sử dụng để
sửa chữa một thủ tục lưu trữ.
29
Hàm là đối tương CSDL tương tự như thủ tục
Có thể sử dụng hàm như một thành phần của
HÀM
Điểm khác biệt giữa hàm và thủ tục:
Hàm trả về một giá trị thông qua tên hàm còn thủ tụcthì không.
một biểu thức (chẳng hạn, trong danh sách chọn củalệnh SELECT).
Hàm do HQT CSDL cung cấp sẵn
Người sử dụng có thể định nghĩa các hàm nhằmphục vụ cho mục đích riêng của mình
31
HÀM
Các hàm thao tác với tập bản ghi có thể đượcdùng thay cho tên các bảng trong SQL.
Các hàm tập hợp tính toán cho ra kết quả là mộtgiá trị đơn nhất (ví dụ tính tổng hay trung bình).
Các hàm vô hướng thao tác trên một giá trị và trảvề một giá trị. Các hàm này có thể được dùng
trong các biểu thức.
33
HÀM – ĐINH NGHĨA HÀM
CREATE FUNCTION tên_hàm ([danh_sách_tham_số])
RETURNS (kiểu_trả_về_của_hàm)AS
BEGINcác_câu_lệnh_của_hàm
END
34
HÀM – ĐINH NGHĨA HÀM (TT)
CREATE FUNCTION thu(@ngay DATETIME)
RETURNS NVARCHAR(10)
AS
BEGIN
DECLARE @st NVARCHAR(10)
SELECT @st=CASE DATEPART(DW,@ngay)
WHEN 1 THEN 'Chủ 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) /* Trị trả về của hàm */
END35
HÀM – SỬ DỤNG HÀM
SELECT masv, hodem, ten,
dbo.thu(ngaysinh), ngaysinh
FROM sinhvien
WHERE malop=’C24102’
36
HÀM – HÀM VỚI GIÁ TRI TRA VỀ LÀ DƯ LIÊU
KIỂU BANG
tên_hàmCREATE FUNCTION
([danh_sách_tham_số]) RETURNS TABLE
AS
RETURN (câu_lệnh_select)
Qui tắc:
Kiểu trả về của hàm được chỉ định bởi mệnh đề
RETURNS TABLE.
Trong phần thân của hàm chỉ có duy nhất một câu lệnh
RETURN xác định giá trị trả về của hàm thông qua duy
nhất một câu lệnh SELECT (không sử dụng bất kỳ câu
lệnh nào khác trong phần thân của hàm).
37
HÀM – HÀM VỚI GIÁ TRI TRA VỀ LÀ DƯ LIÊU
KIỂU BANG (TT)
Vd: định nghĩa hàm xemsv
CREATE FUNCTION func_XemSV(@khoa
SMALLINT) RETURNS TABLE
AS
RETURN(SELECT masv,hodem,ten,ngaysinh
FROM sinhvien INNER JOIN lop
ON sinhvien.malop=lop.malop
WHERE khoa=@khoa)
38
HÀM – HÀM VỚI GIÁ TRI TRA VỀ LÀ DƯ LIÊU
KIỂU BANG (TT)
Khi cần sử dụng nhiều câu lệnh trong phần thân
hàm, sử dụng cú pháp sau:
<tên_hàm>CREATE FUNCTION([<danh_sách_tham_số>])
RETURNS @<biến_bảng> TABLE <định_nghĩa_bảng>
AS
BEGIN
<các_câu_lệnh_trong_thân_hàm>
RETURN
END
39
HÀM – HÀM VỚI GIÁ TRI TRA VỀ LÀ DƯ LIÊU
KIỂU BANG (TT)
Lưu ý:
Cấu trúc bảng trả về bởi hàm được xác địnhdựa vào định nghĩa của bảng trong mệnh đề
RETURNS.
Biến @<biến_bảng> trong mệnh đềRETURNS có phạm vi sử dụng trong hàm và
được sử dụng như một tên bảng.
Câu lệnh RETURN trong thân hàm không chỉđịnh giá trị trả về. Giá trị trả về của hàm chính
là các dòng dữ liệu trong bảng có tên là@<biếnbảng> được định nghĩa trong mệnh đề
RETURNS
40
HÀM – HÀM VỚI GIÁ TRI TRA VỀ LÀ DƯ LIÊU
KIỂU BANG (TT) – VÍ DỤ
CREATE FUNCTION Func_Tongsv(@khoa SMALLINT) RETURNS
@bangthongke TABLE (
makhoa
tenkhoa
tongsosv
NVARCHAR(5),
NVARCHAR(50),
INT
) AS
BEGIN
IF @khoa=0
INSERT INTO @bangthongke
SELECT khoa.makhoa,tenkhoa,COUNT(masv)
FROM (khoa INNER JOIN lop
ON khoa.makhoa=lop.makhoa) INNER JOIN sinhvien
ON lop.malop=sinhvien.malop
GROUP BY khoa.makhoa,tenkhoa
ELSE41
HÀM – HÀM VỚI GIÁ TRI TRA VỀ LÀ DƯ LIÊU
KIỂU BANG (TT)
INSERT INTO @bangthongke
SELECT khoa.makhoa,tenkhoa,COUNT(masv)
FROM (khoa INNER JOIN lop
ON khoa.makhoa=lop.makhoa)
INNER JOIN sinhvien
ON lop.malop=sinhvien.malop
WHERE khoa=@khoa
GROUP BY khoa.makhoa,tenkhoa
RETURN /*Trả kết quả về cho hàm*/
END
42
HÀM – HÀM VỚI GIÁ TRI TRA VỀ LÀ DƯ LIÊU
KIỂU BANG (TT)
Câu lệnh:
SELECT * FROM dbo.func_TongSV(25)
Sẽ cho kết quả thống kê tổng số sinh viên khoá 25 của
mỗi khoa:
Còn câu lệnh:
SELECT * FROM dbo.func_TongSV(0)
Cho ta biết tổng số sinh viên hiện có (tất cả các khoá)
của mỗi khoa
43
TRIGGER – TRIGGER LÀ GÌ?
Cấu trúc gần giống như một thủ tục nội tại nhưng Không có tham số đầu vào và đầu ra
Phải được liên kết với một bảng/ bảng ảo trong CSDL
Không thể gọi mà được thực hiện tự động. Sử dụng
trong việc: Tính toán, cập nhật giá trị tự động
Kiểm tra dữ liệu nhập
Khai báo sử dụng Kết hợp với các hành động INSERT/UPDATE/DELETE
trên bảng hay bảng ảo
Khi tạo ra, tham gia vào transaction khởi tạo bởi câu
lệnh cập nhật dữ liệu tương ứng
45
CÁC XỬ LÝ BÊN TRONG TRIGGER
Kiểm tra các ràng buộc dữ liệu phức tạp
Các ràng buộc mô tả phức tạp, không thể dùngconstraint
Gọi hành động Rollback Tran để hủy thao tác cập nhậtkhi vi phạm ràng buộc
Bảo đảm dữ liệu luôn được toàn vẹn
Bảo đảm việc kiểm thử ứng dụng không làm hư dữ liệucó sẵn
Tính toán, tự động cập nhật giá trị Bổ sung các hành động cập nhật dữ liệu để đảm bảo
tính toàn vẹn dữ liệu
Đơn giản hoá việc xây dựng ứng dụng
Chỉ định các bẫy lỗi dễ hiểu
Tăng tính thân thiện của ứng dụng
Dễ dàng nhận ra các lỗi khi lập trình46
CÁC HAN CHẾ TRÊN TRIGGER
Không được tạo và tham chiếu bảng tạm
Không tạo hay thay đổi, xoá cấu trúc các đối tượng
sẵn có trong CSDL CREATE/ALTER/DROP
Không gán, cấp quyền cho người dùng
GRAND/REVOKE
47
CÁC LOạI TRIGGER
Có 2 loại trigger: Trigger thông thường: AFTER (FOR) trigger
Chạy sau các hành động kiểm tra dữ liệu của các Rule
Constraint.
Dữ liệu đã bị tạm thời thay đổi trong bảng
INSTEAD OF trigger Chạy trước các hành động kiểm tra dữ liệu
Dữ liệu chưa hề bị thay đổi
Có thể thay thế hành động cập nhật dữ liệu bằng các hành
động khác.
48
CÁC BANG TRUNG GIAN INSERTED VÀ
DELETED
Inserted
Chứa dữ liệu được thêm mới trong hành động
INSERT/UPDATE
Có ở cả hai loại trigger
Cấu trúc bảng giống với bảng thực sự được cập nhật dữ
liệu
Deleted Chứa dữ liệu bị xoá trong hành động DELETE/UPDATE
Có ở cả hai loại trigger
Cấu trúc bảng giống với bảng thực sự được cập nhật dữ
liệu
Hành động update trong SQL Server Xoá dòng dữ liệu cũ
Thêm vào dòng dữ liệu mới với thông tin đã cập nhật 49
TAO MỚI TRIGGER
Trigger có thể được tạo bằng câu lệnh hoặc bằng
SQL Server Management Studio
Trong cả hai trường hợp, câu lệnh CREATE
TRIGGER được sử dụng để tạo ra trigger.
CREATE TRIGGER Tên_Trigger ON Tên_bảng
{ [ INSTEAD OF ] | [ FOR | AFTER ] }
{ [ INSERT [, UPDATE [,DELETE ] ] ] }
AS
[DECLARE Biến_cục_bộ]
Các_lệnh
51
MÔ TA
Tên bảng Tên bảng mà trigger tạo mới sẽ liên kết
INSTEAD OF: chỉ định đây là trigger loại instead of
trigger Mỗi bảng chỉ có quyền tạo một instead of trigger cho
một hành động cập nhật
FOR hoặc AFTER
Nếu tạo trigger thông thường
INSERT, UPDATE, DELETE
Hành động cập nhật dữ liệu tác động vào bảng để kích
hoạt trigger.
52
SỬA NỘI DUNG TRIGGER
Sửa nội dung
ALTERTRIGGER Tên_Trigger ON Tên_bảng
FOR INSERT [, UPDATE [,DELETE ]]AS
[DECLAREBiến_cục_bộ]
Các_lệnh
54
TRIGGER LỒNG NHAU
Trigger có thể lồng nhau
Hành động cập nhật Trigger Cập nhật bảng khác
Trigger trên bảng tương ứng
Instead Of trigger không phát sinh lại trên chính bảng
mà nó liên kếtCập nhật Instead of Trigger Gọi câu lệnh cập nhật xuống
bảng Instead of trigger
Số cấp lồng tối đa 32 cấp
Sử dụng biến @@NestedLevel
Cấu hình cho phép trigger lồng nhau EXECsp_configure 'nested triggers', [0 | 1]
55
KHI THÊM MỚI MẪU TIN
Thường dùng để kiểm tra Khóa ngoại, Miền giá trị, Liên thuộc tính trong cùng
một bảng
Liên thuộc tính của nhiều bảng khác nhau
3 loại đầu tiên, chỉ dùng trigger nếu muốn cung cấp
các báo lỗi cụ thể bằng tiếng Việt Nếu đã khai báo các ràng buộc này bằng constraint
Các cấu trúc lệnh thường dùng khi kiểm tra If Else
If Exists
Raiserror
Rollback Tran
57
KHI HỦY BỎ MẪU TIN
Tương tự, kiểm tra các ràng buộc như trigger
INSERT
Nên kiểm tra ràng buộc khoá ngoại
Thông thường ràng buộc này dẫn đến việc phải cập nhật
một số dữ liệu trên bảng khác
Chú ý: SQL Server 2000 có thuộc tính CASCADE
DELETE
58
KHI SỬA ĐỔI MẪU TIN
Tương tự, kiểm tra các ràng buộc như trigger
INSERT Ràng buộc khoá ngoại có thể sử dụng CASCADE
UPDATE để thực hiện tự động
Xác định cột đang được cập nhậtIf Update(Tên_cột)
Xử lý
59
TRIGGER CẬP NHẬT GIÁ TRI TỰ ĐỘNG
Sau khi kiểm tra ràng buộc trigger có thể Rollback nếu dữ liệu không hợp lệ
Thực hiện tiếp các hành động cập nhật trên bảng khác
để đảm bảo toàn vẹn dữ liệu: Cập nhật giá trị tự động
Vd: Insert CTGiaoHang Cập nhật bảng TONKHO
Các hành động cập nhật thường thực hiện Hủy bỏ dữ liệu do quan hệ khoá ngoại
Tính lại các cột 'tính toán' trong các bảng liên quan
Vị trí thực hiện Trong cùng trigger kiểm tra ràng buộc đã định nghĩa
Sau khi kiểm tra dữ liệu đã hợp lệ (thoả mãn các ràng
buộc)
60
INSTEAD OF TRIGGER
Bảng ảo thông thường có thể được cập nhật nhưng
có nhiều giới hạn Group By, Order By, Distinct
Ràng buộc khoá ngoại
Thiếu các cột NOT NULL trong bảng
Trigger Instead of Xảy ra trước khi SQL Server kiểm tra ràng buộc
Thay đổi hành động cập nhật vào bảng ảo bằng hành
động thích hợp trên bảng gốc
61
VÍ DỤ
Tạo bảng ảo sauSelect D.SoDH, NgayDH, MaNhaCC, V.MaVTu, TenVTu,SoLuong, DonGia From CTDONDH CT, DONDH D, VATTUV Where CT.SoDH = D.SoDH And CT.MaVTu = V.MaVTu
CREATE TRIGGER tg_vw_CTDONDH_BIINSTEAD OF INSERT ON vw_CTDONDH
AS
-- Nếu chưa có đơn đặt hàng, thêm đơn đặt hàng vào DONDHInsert Into DONDH Select SoDH, NgayDH, MaNhaCCFrom Inserted Where SoDH Not In (Select SoDH
From DonDH)
-- Nếu chưa có vật tư, thêm vật tư vào bảng VATTUInsert Into VATTU(MaVTu, TenVTu) Select MaVTu,TenVTu From Inserted Where MaVTu Not In (Select
MaVTu From VATTU)
-- Thêm các chi tiết đặt hàng vào CTDONDHInsert Into CTDONDH Select SoDH, MaVTu, SoLuong,
DonGia From Inserted
62