Professional Documents
Culture Documents
Chapter 4 - Database
Chapter 4 - Database
CƠ SỞ DỮ LIỆU
Chương 4
NGÔN NGỮ SQL VÀ HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
MICROSOFT SQL SERVER
2
Tài liệu tham khảo
3
NGÔN NGỮ SQL VÀ HỆ QUẢN TRỊ
CƠ SỞ DỮ LIỆU MS SQL SERVER
1. TỔNG QUAN VỀ NGÔN NGỮ SQL VÀ MỘT SỐ KHÁI NIỆM CƠ BẢN
2. CÀI ĐẶT VÀ LÀM QUEN VỚI MÔI TRƢỜNG LÀM VIỆC CỦA SQL SERVER
3. LÀM VIỆC VỚI CƠ SỞ DỮ LIỆU TRONG SQL SERVER
4. LÀM VIỆC VỚI BẢNG DỮ LIỆU
5. THAO TÁC VỚI DỮ LIỆU TRONG BẢNG
6. TRUY VẤN DỮ LIỆU
7. TRUY VẤN CON
8. SỬ DỤNG KHUNG NHÌN (VIEW)
9. MỘT SỐ HÀM XÂY DỰNG SẴN TRONG SQL SERVER
10. KHAI BÁO BIẾN VÀ SỬ DỤNG CÁC CẤU TRÚC ĐIỀU KHIỂN TRONG T-SQL
11. THỦ TỤC VÀ HÀM DO NGƢỜI DÙNG TỰ ĐỊNH NGHĨA
12. SỬ DỤNG TRIGGER
13. XỬ LÝ GIAO DỊCH
14. SỬ DỤNG CON TRỎ
1.1. TỔNG QUAN VỀ NGÔN NGỮ SQL
a. Lịch sử phát triển
Đƣợc phát triển bởi IBM vào những năm 70 với tên gọi ban đầu là
Squel dựa trên mô hình dữ liệu quan hệ của F.Codd.
Viện Tiêu chuẩn quốc gia Hoa Kỳ (ANSI) và Tổ chức tiêu chuẩn
quốc tế (ISO) đã công bố các phiên bản chuẩn của SQL: SQL_86,
SQL_89, SQL_92, SQL:1999, SQL:2003, SQL:2006, SQL:2008,
SQL:2011.
Các phần mềm hệ quản trị cơ sở dữ liệu khác nhau sẽ hỗ trợ ngôn
ngữ SQL ở các mức độ khác nhau (có thể bổ sung thêm hoặc
không hỗ trợ một số câu lệnh hay cú pháp).
Raymond F. Boyce Donal D. Chamberlin
T-SQL xây dựng dựa trên SQL chuẩn (ANSI) nhƣng đƣợc
Microsoft bổ sung thêm một số tính năng nâng cao, đặc
biệt là các chức năng của ngôn ngữ lập trình.
1.2. MỘT SỐ KHÁI NIỆM CƠ BẢN
Khi làm việc với SQL và các hệ quản trị cơ sở dữ liệu thông thƣờng:
Dữ liệu đƣợc tổ chức dƣới dạng cơ sở dữ liệu (database). Đó là
một tập hợp gồm các bảng dữ liệu có liên quan.
Mỗi bảng dữ liệu (data table) là tập hợp các hàng (bản ghi) và cột.
Đó chính là một quan hệ (relation) trong mô hình quan hệ.
Lưu ý: Một tập hợp các bản ghi là kết quả trả về của một câu lệnh truy
vấn SELECT cũng đƣợc xem là một quan hệ.
Mỗi cột (column) của bảng là một thuộc tính (attribute) của quan hệ,
mỗi bản ghi (record) của bảng là một bộ (tuple) của quan hệ.
Cấu trúc của bảng dữ liệu (danh sách các cột) đƣợc xác định (định
nghĩa) bởi lƣợc đồ quan hệ tƣơng ứng.
9
a. Khái niệm về bảng dữ liệu
Dữ liệu trong cơ sở dữ liệu đƣợc tổ chức dƣới dạng các
bảng dữ liệu (Table). Bảng dữ liệu chính là một quan hệ
(relation) trong mô hình dữ liệu quan hệ.
Một cơ sở dữ liệu có thể gồm 01 hoặc nhiều bảng.
Field: Trƣờng (Attribute: Thuộc tính)
Trong bảng dữ liệu không
được phép tồn tại 02 bản ghi
có nội dung giống nhau.
11
b. Khái niệm khóa chính và khóa ngoại của bảng dữ liệu
Khóa chính
Khóa chính (Primary Key) của bảng là ràng buộc được xác lập trên một tập
các trường sao cho không tồn tại đồng thời 02 bản ghi bất kỳ của bảng
mang các bộ giá trị hoàn toàn giống nhau trên các trường này.
Đặc điểm:
Thông thường, khóa chính được xác lập trên 01 trường.
Khóa chính được sử dụng khi muốn chỉ định (phân biệt) các bản ghi trong
bảng dữ liệu.
Khi mô tả bảng dữ liệu, các trường xác lập là khóa chính sẽ được gạch
chân.
12
HocSinh(MaHS, TenHS, NgaySinh, Lop, D_Toan, D_TiengViet)
Khóa chính
(Primary Key)
13
Lop(MaLop, NienKhoa, PhongHoc, GiaoVienCN)
Khóa chính
(Primary Key)
14
Khóa ngoại
Khóa ngoại (Foreign Key) là ràng buộc được xác lập trên một tập các trường
của một bảng để phục vụ tham chiếu đến các trường tương ứng của một
bảng khác:
Các trường khóa ngoại phải có cùng số lượng và kiểu dữ liệu tương ứng
với các trường của bảng được tham chiếu tới.
Bộ giá trị tương ứng trên các trường khóa ngoại phải là một trong số các
bộ giá trị sẵn có tương ứng trên các trường của bảng được tham chiếu
hoặc là bộ các giá trị rỗng (NULL).
Đặc điểm:
Khóa ngoại thường bao gồm 01 trường.
Khóa ngoại thường sử dụng để tham chiếu đến khóa chính của bảng
khác.
Bảng được tham chiếu đến gọi là bảng cha. Bảng chứa khóa ngoại gọi là
bảng con.
15
MaLop PhongHoc GiaoVienCN
1A1 P101 Lê Thu Lan
1A2 P102 Vũ Hồng Nhung
1A3 P103 Trần Văn Thái
Khóa chính
(Primary Key)
MaHS TenHS NgaySinh MaLop D_Toan D_TiengViet
HS001 Vũ Tuấn Anh 2014-01-19 1A1 9.5 10.0
HS002 Lê Văn Bình 2014-05-16 1A1 10.0 10.0
HS003 Trần Văn Cường 2014-08-20 1A2 9.5 8.0
HS004 Lê Anh Dũng 2014-07-25 1A2 10.0 9.5
HS005 Lê Văn Bình 2014-05-16 1A1 10.0 10.0
Khóa chính
(Primary Key)
16 Khóa ngoại
(Foreign Key)
Lớp Giảng viên
Mã Lớp Tên Lớp Thời Lƣợng Mã GV Tên GV
L01 MS Word 2013 15 GV01 Vũ Thu Trang
L02 MS Excel 2013 20 GV02 Lê Anh Tuấn
L03 MS Powerpoint 2013 10 GV03 Trần Tuấn Cƣờng
L04 MS Access 2013 20
Khóa chính
Khóa chính
Phân Công Mã GV Mã Lớp
GV03 L01
GV02 L02
GV01 L04
GV03 L03
17
Khóa chính
c. Khái niệm về lược đồ cơ sở dữ liệu (database diagram)
Lược đồ cơ sở dữ liệu (Database Diagram) mô tả cấu trúc
của các bảng dữ liệu trong cơ sở dữ liệu và mối quan hệ
giữa chúng.
Mã Lớp Mã HV
Tên Lớp Tên HV
Phòng Học Năm Sinh
Điểm Thi
Mã Lớp
19
Lớp Giảng viên
Mã Lớp Tên Lớp Thời Lƣợng Mã GV Tên GV
L01 MS Word 2013 15 GV01 Vũ Thu Trang
L02 MS Excel 2013 20 GV02 Lê Anh Tuấn
L03 MS Powerpoint 2013 10 GV03 Trần Tuấn Cƣờng
L04 MS Access 2013 20
Khóa chính
Khóa chính
Phân Công Mã GV Mã Lớp
GV03 L01
GV02 L02
GV01 L04
GV03 L03
20
Khóa chính
Lớp Giảng Viên
Mã Lớp Mã GV
Tên Lớp Tên GV
Thời Lƣợng
Phân Công
Mã GV
Mã Lớp
21
2.1. HƢỚNG DẪN CÀI ĐẶT
Bƣớc 1: Tải file cài đặt từ trang của Microsoft:
22
Chọn phiên bản
muốn cài đặt
(64 bit hay 32 bit)
23
File cài đặt:
SQLEXPRWT_x86_ENU.exe
Hoặc
SQLEXPRWT_x64_ENU.exe
Bƣớc 2: Chạy file cài đặt đã đƣợc tải về ở bƣớc 1 để tiến hành quá trình cài đặt
và thực hiện lần lƣợt các thao tác theo hƣớng dẫn:
24
1
25
2
26
3
27
4
28
5
29
6
30
7
31
8
32
9
33
2.2. LÀM QUEN VỚI MÔI TRƢỜNG LÀM VIỆC
Server Type: Kiểu Server muốn truy
cập. Có 02 kiểu Server:
a. Đăng nhập hệ thống SQL Server 1. Database Engine: CSDL SQL Server
dạng chuẩn.
2. SQL Server Compact: CSDL SQL
Server phiên bản thu gọn.
35
b. Giao diện SQL Server Management Studio
SQL Server
Database Engine
36
User
Nút New Query: Mở ra cửa sổ soạn thảo mã lệnh SQL.
37
Hủy bỏ Kiểm tra cú
Chỉ định CSDL Thực thi Chạy debug mã lệnh Cửa sổ soạn
pháp của
muốn làm việc mã lệnh (gỡ lỗi) thảo mã lệnh
đang chạy mã lệnh
(Query Editor)
38
Lƣu mã nguồn T-SQL
thành tệp văn bản có
phần mở rộng là .sql
39
3.1. TỔ CHỨC TỆP TIN TRONG CSDL SQL SERVER
Mỗi cơ sở dữ liệu SQL Server thường bao gồm 02 tệp tin:
Tệp tin chứa dữ liệu (Main Data File) có phần mở rộng là
.MDF.
Tệp tin nhật ký giao tác (Log Data File) có phần mở rộng là
.LDF: ghi lại thông tin cần thiết về các giao tác đã thực thi
trên CSDL.
41
3.2. LÀM VIỆC VỚI CSDL SỬ DỤNG CÁC LỆNH T-SQL
a. Tạo cơ sở dữ liệu
CREATE DATABASE <Tên CSDL>
[ON
PRIMARY
(
NAME = <Tên logic của tệp>, Phần
FILENAME = <Đường dẫn vật lý của tệp> khai báo
[,SIZE = <Kích thước ban đầu của tệp>] tệp chứa
dữ liệu
[,MAXSIZE = <Kích thước tối đa của tệp>|UNLIMITED]
[,FILEGROWTH = <Tốc độ tăng trưởng kích thước tệp>]
)
LOG ON
(
NAME = <Tên logic của tệp>, Phần
khai báo
FILENAME = <Đường dẫn vật lý của tệp> tệp nhật
[,SIZE = <Kích thước ban đầu của tệp>] ký giao
[,MAXSIZE = <Kích thước tối đa của tệp>|UNLIMITED] tác (Log)
[,FILEGROWTH = <Tốc độ tăng trưởng kích thước tệp>]
)]
CREATE DATABASE Sales
ON
PRIMARY
(
NAME = Sales_dat,
FILENAME = 'C:\Program Files\Microsoft SQL
Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\saledat.mdf',
SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5
)
LOG ON
(
NAME = Sales_log,
FILENAME = 'C:\Program Files\Microsoft SQL
Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\salelog.ldf',
SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB
)
43
b. Chỉnh sửa các thuộc tính của cơ sở dữ liệu
44
Đổi nơi lƣu trữ tệp dữ liệu của cơ sở dữ liệu Sales sang
thƣ mục D:\Data và xác lập lại kích thƣớc ban đầu của
tệp này là 100MB:
ALTER DATABASE Sales
MODIFY FILE
(
NAME = Sales_dat,
FILENAME = 'D:\Data\Saledat.mdf',
SIZE = 100MB
)
Đổi tên cơ sở dữ liệu Sales thành dbBanHang
ALTER DATABASE Sales
MODIFY NAME = dbBanHang
45
c. Xóa cơ sở dữ liệu
46
3.3. LÀM VIỆC VỚI CSDL SỬ DỤNG CÁC CHỨC NĂNG
TRÊN MANAGEMENT STUDIO
a. Tạo cơ sở dữ liệu
2. Chọn mục
New Database...
1. Click chuột trên menu pop-up
phải vào mục
Databases
47
Tên cơ sở
dữ liệu
Tên logic Thông tin về Kích thƣớc Thiết lập sự Đƣờng dẫn Tên
của tệp loại tệp ban đầu của tăng trƣởng vật lý của tệp vật lý
(tệp dữ liệu tệp (MB) kích thƣớc của
Tên logic hay tệp .log) của tệp tự tệp
mặc định động Tên vật lý
được lấy
mặc định
theo tên
được lấy theo
của CSDL
tên logic của
tệp.
48
Click vào nút “…” ở cột Autogrowth để thay đổi thiết lập về
tăng trƣởng kích thƣớc tệp tự động → Mở ra hộp thoại
Change Autogrowth:
Tốc độ
tăng trƣởng
tính theo MB
Thiết lập kích thƣớc tối đa
Giới hạn kích
thƣớc (MB)
49
Click vào nút “…” ở cột Path để thay đổi thiết lập đƣờng dẫn vật lý
đến nơi lƣu trữ tệp → Mở ra hộp thoại Locate Folder:
50
b. Sửa đổi cấu trúc tệp và các thuộc tính của cơ sở dữ liệu
51
B2. Trong cửa sổ Database Properties, tại khung Select a page chọn mục Files.
B3. Sửa đổi các thuộc tính của các tệp trong phần Database file và nhấn OK để
kết thúc.
52
2- Đổi tên cơ sở dữ liệu
Click chuột phải vào cơ sở dữ liệu
muốn chỉnh sửa → Trên menu
popup, chọn Rename.
53
c. Xóa bỏ cơ sở dữ liệu
54
Hộp thoại Delete Object xuất hiện → Nhấn OK để hoàn thành thao tác xóa CSDL.
55
4.1. LÀM VIỆC VỚI BẢNG SỬ DỤNG CÁC LỆNH T-SQL
a. Tạo bảng dữ liệu
CREATE TABLE <tên bảng>
(
<tên cột> <kiểu dữ liệu> [NOT NULL]
[,<tên cột> <kiểu dữ liệu> [NOT NULL]]
[,<tên cột> <kiểu dữ liệu> [NOT NULL]]
...
[,CONSTRAINT <tên ràng buộc> PRIMARY KEY (<DS cột>)]
[,CONSTRAINT <tên ràng buộc> FOREIGN KEY (<DS cột>)
REFERENCES <tên bảng được tham chiếu>(<DS cột>)]
...
[,CONSTRAINT <tên ràng buộc> CHECK(<biểu thức logic>)]
...
)
56
CÁC KIỂU DỮ LIỆU TRONG SQL
STT Kiểu dữ liệu Ý nghĩa
1 char(n) Chuỗi ký tự ASCI độ dài n cố định
2 varchar(n) Chuỗi ký tự ASCI có độ dài biến đổi
3 nchar(n) Chuỗi ký tự Unicode độ dài n cố định
4 nvarchar(n) Chuỗi ký tự Unicode độ dài biến đổi
5 bit Chứa giá trị tƣơng ứng với 01 trong 02 trạng thái 0 hoặc 1
6 tinyint Số nguyên (0 đến 255)
7 smallint Số nguyên (-215 đến 215 – 1)
8 int Số nguyên (-231 đến 231 – 1)
9 bigint Số nguyên (-263 đến 263 – 1)
10 money Tiền tệ (-922,337,203,685,477.5808 to 922,337,203,685,477.5807)
11 smallmoney Tiền tệ (- 214,748.3648 to 214,748.3647)
Số thực phần thập phân cố định (p: tổng số chữ số, s: số chữ số phần thập phân)
12 decimal(p,s)
Phạm vi biểu diễn: -1038 + 1 đến 1038 – 1.
Số thực phần thập phân cố định (p: tổng số chữ số, s: số chữ số phần thập phân)
13 numeric(p,s)
Phạm vi biểu diễn: -1038 + 1 đến 1038 – 1.
14 float Số thực dấu phẩy động (từ -1.79E+308 đến 1.79E+308)
15 real Số thực dấu phẩy động (từ -3.40E+38 đến 3.40E+38)
16 datetime Thời gian (gồm ngày/tháng và giờ/phút/giây) (từ 01/01/1753 đến 31/12/9999)
17 smalldatetime Thời gian (gồm ngày/tháng và giờ/phút/giây) (từ 01/01/1900 đến 06/06/2079)
18 date Thời gian (chỉ có ngày/tháng) (từ 01/01/0001 đến 31/12/9999)
19 time Thời gian (chỉ có giờ/phút/giây)
PhongBan(MaPB, TenPB, DiaDiem)
NhanVien(MaNV, TenNV, ChuyenMon, HSLuong, Phong)
CREATE TABLE PhongBan
(
MaPB char(3) NOT NULL,
TenPB nvarchar(30) NOT NULL,
DiaDiem nvarchar(100),
CONSTRAINT PK_PhongBan PRIMARY KEY(MaPB)
)
CREATE TABLE NhanVien
(
MaNV char(5) NOT NULL,
TenNV nvarchar(30) NOT NULL,
ChuyenMon nvarchar(100),
Phong char(3) NOT NULL,
HSLuong decimal(3,1) NOT NULL,
CONSTRAINT PK_NhanVien PRIMARY KEY(MaNV),
CONSTRAINT FK_NhanVien FOREIGN KEY (Phong) REFERENCES PhongBan(MaPB),
CONSTRAINT HSLuong_Check CHECK((HSLuong>2.34)AND(HSLuong<4.0))
)
58
b. Sửa đổi cấu trúc bảng dữ liệu
Thêm cột dữ liệu mới
ALTER TABLE <tên bảng>
ADD <tên cột> <kiểu dữ liệu> [NOT NULL]
Xóa cột dữ liệu
ALTER TABLE <tên bảng>
DROP COLUMN <danh sách cột>
Sửa kiểu dữ liệu của cột
ALTER TABLE <tên bảng>
ALTER COLUMN <tên cột> <kiểu dữ liệu mới> [NOT NULL]
Thêm một ràng buộc đối với bảng
ALTER TABLE <tên bảng>
ADD CONSTRAINT <tên ràng buộc> <kiểu ràng buộc>
Xóa một ràng buộc đối với bảng
ALTER TABLE <tên bảng>
59 DROP CONSTRAINT <tên ràng buộc>
Ví dụ:
Thêm cột NgaySinh vào bảng NhanVien
ALTER TABLE NhanVien
ADD NgaySinh Date NOT NULL
Đổi kiểu dữ liệu của cột ChuyenMon trong bảng NhanVien từ
kiểu nvarchar có độ dài 100 sang kiểu nvarchar có độ dài 150
ALTER TABLE NhanVien
ALTER COLUMN ChuyenMon nvarchar(150)
Xóa cột DiaDiem trong bảng PhongBan
ALTER TABLE PhongBan
DROP COLUMN DiaDiem
Xóa ràng buộc khóa ngoại FK_NhanVien trong bảng NhanVien
ALTER TABLE NhanVien
60 DROP CONSTRAINT FK_NhanVien
c. Xóa bỏ bảng dữ liệu
DROP TABLE <tên bảng>
Ví dụ: Xóa bỏ bảng dữ liệu NhanVien
DROP TABLE NhanVien
61
4.2. LÀM VIỆC VỚI BẢNG SỬ DỤNG CÁC CHỨC NĂNG
TRÊN SQL SERVER MANAGEMENT STUDIO
a. Tạo bảng dữ liệu
62
1- KHAI BÁO CÁC CỘT CỦA BẢNG
Có cho phép
bỏ trống
(NULL) dữ
liệu trong cột
hay không?
Gõ tên cột
Chọn
kiểu dữ
liệu cho
cột
63
2- THIẾT LẬP KHÓA CHÍNH CHO BẢNG
Click chuột phải vào cột (hoặc một số cột) đang được chọn → Trên menu
popup chọn Set Primary Key
Lưu ý: Nếu khóa chính bao gồm nhiều cột: Phải chọn tất cả các cột này
bằng cách giữ phím Ctrl và click chọn từng cột. Sau đó mới click chuột
64 phải chọn Set Primary Key.
3- KHAI BÁO THÊM CỘT MỚI
Muốn khai báo thêm 01 cột mới vào trước vị trí của cột nào, click
chuột phải vào cột đó → Trên menu popup chọn Insert Column
65
4- XÓA KHAI BÁO CỘT
Muốn xóa khai báo của cột nào, click chuột phải vào vị trí ứng với
khai báo cột đó → Trên menu popup chọn Delete Column
66
5- THIẾT LẬP KHÓA NGOẠI
B1: Click chuột phải vào vị trí bất kỳ trong vùng khai báo cột → Trên
menu popup chọn Relationship
67
B2: Trên hộp thoại Foreign Key Relationships, click nút Add để bắt
đầu khai báo một ràng buộc khóa ngoại
68
Chọn mở mục Table And Columns Specification và nhấn vào nút “…”
69
Chọn bảng được
Khai báo tên
tham chiếu (bảng cha)
ràng buộc
Gõ tên bảng
vào đây
(để thay thế cho tên
mặc định mà SQL
Server tự chọn)
71
b. Chỉnh sửa cấu trúc bảng dữ liệu
72
c. Đổi tên bảng dữ liệu
73
d. Xóa bỏ bảng dữ liệu
74
Hộp thoại Delete Object xuất hiện → Nhấn OK để kết thúc thao tác xóa bảng.
75
5.1. CÁCH BIỂU DIỄN GIÁ TRỊ CỦA MỘT SỐ KIỂU DỮ LIỆU
TRONG NGÔN NGỮ T-SQL
a. Kiểu chuỗi ký tự ASCII: char(n), varchar(n)
Giá trị chuỗi đƣợc biểu diễn bằng một tập hợp các ký tự
ASCII nằm giữa 02 dấu nháy đơn.
Ví dụ: 'ABCD', 'John Smith',…
b. Kiểu chuỗi ký tự Unicode: nchar(n), nvarchar(n)
Giá trị chuỗi đƣợc biểu diễn bằng một tập hợp các ký tự
Unicode nằm giữa 02 dấu nháy đơn và đầu chuỗi có thêm
ký tự định dạng N (để phân biệt với chuỗi ASCII).
Ví dụ: N'Nguyễn Văn An', N'Hải Phòng', N'Kế toán',…
76
c. Kiểu ngày tháng kèm thời gian: datetime, smalldatetime
Giá trị ngày tháng kèm thời gian đƣợc biểu diễn bằng một
chuỗi ký tự nằm giữa 02 dấu nháy đơn theo định dạng năm-
tháng-ngày giờ-phút-giây: 'YYYY-MM-DD hh:mm:ss'.
Ví dụ: '2020-12-24 19:05:56'
d. Kiểu ngày tháng: date
Giá trị ngày tháng đƣợc biểu diễn bằng một chuỗi ký tự nằm
giữa 02 dấu nháy đơn theo định dạng năm-tháng-ngày:
'YYYY-MM-DD'. Ví dụ: '2020-12-24'
e. Kiểu thời gian: time
Giá trị thời gian đƣợc biểu diễn bằng một chuỗi ký tự nằm
giữa 02 dấu nháy đơn theo định dạng giờ-phút-giây:
'hh:mm:ss'. Ví dụ: '19:05:56'
77
f. Kiểu số thực với phần thập phân cố định: decimal(n,p),
numeric(n,p)
Giá trị số thực đƣợc biểu diễn bằng n chữ số, trong đó
có p chữ số phần thập phân.
Ví dụ: Các số thực sau đây có kiểu là decimal(3,2) hay
numeric(3,2): 3.14, 2.34, 1.67,…
g. Kiểu số thực dấu phẩy động: float, real
Giá trị số thực đƣợc biểu diễn thông qua lũy thừa của
10. Ví dụ:
0.0012 = 1.2 x 10-3 (ký hiệu 1.2E-3)
1200 = 1.2 x 103 (ký hiệu 1.2E3)
78
5.2. LÀM VIỆC VỚI DỮ LIỆU TRONG BẢNG SỬ DỤNG CÁC
LỆNH T-SQL
- Nếu danh sách giá trị đƣa vào là đầy đủ và tƣơng ứng 1-1 với tất cả
các cột của bảng thì có thể không cần chỉ ra danh sách cột sau tên
bảng.
Ví dụ: PhongBan(MaPB, TenPB, DiaDiem)
INSERT INTO PhongBan VALUES('PTV', N'Phòng Tài vụ', N'P203')
UPDATE <tên bảng>
SET <tên cột 1> = <giá trị 1>, <tên cột 2> = <giá trị 2>, ...
[WHERE <điều kiện>]
Lƣu ý:
- Câu lệnh có tác dụng thay thế giá trị đang có trên các cột bằng giá trị mới.
- Nếu trong câu lệnh có khai báo mệnh đề WHERE thì chỉ những bản ghi thỏa
mãn điều kiện chỉ ra sau mệnh đề WHERE mới chịu tác động của câu lệnh.
- Nếu trong câu lệnh không có mệnh đề WHERE thì tất cả các bản ghi trong
bảng đều bị tác động.
Ví dụ:
UPDATE PhongBan
SET TenPB = N'Phòng Kế hoạch – Tài chính',
DiaDiem = N'P302 - Nhà A6'
WHERE MaPB = 'PTV'
80
DELETE FROM <tên bảng> [WHERE <điều kiện>]
Lƣu ý:
- Câu lệnh có tác dụng xóa bỏ các bản ghi có trong bảng.
- Nếu trong câu lệnh có khai báo mệnh đề WHERE thì chỉ những bản
ghi thỏa mãn điều kiện chỉ ra sau mệnh đề WHERE mới bị xóa.
- Nếu trong câu lệnh không có mệnh đề WHERE thì tất cả các bản ghi
trong bảng đều bị xóa.
Ví dụ:
DELETE FROM NhanVien WHERE ChuyenMon = N'Kỹ sư tin học'
81
5.3. LÀM VIỆC VỚI DỮ LIỆU TRONG BẢNG SỬ DỤNG TÍNH
NĂNG CỦA MANAGEMENT STUDIO
82
Xuất hiện vùng nhập liệu để có thể thêm, sửa, xóa cho
các bản ghi trong bảng (giống trên các phần mềm bảng
tính):
Lưu ý: Mặc định vùng nhập liệu chỉ hiện thị số lượng bản
ghi giới hạn (200 bản ghi).
83
Muốn xóa bản ghi nào thì click chuột phải vào bản ghi đó và chọn Delete
trên menu popup.
Muốn tải lại dữ liệu để xử lý thì click chuột phải vào ví trí bất kỳ và chọn
Execute SQL trên menu popup
Muốn hiển thị nhiều hơn 200 bản ghi hoặc muốn tùy biến dữ liệu tải về
trên vùng nhập liệu thì click chuột phải vào vị trí bất kỳ và vào mục Pane
trên menu popup, chọn mục SQL để thay đổi câu lệnh SELECT tải dữ
liệu.
84
6.1. TỔNG QUAN VỀ CÂU LỆNH TRUY VẤN SELECT
1- Chức năng: Đọc dữ liệu từ các bảng và trả về kết quả dƣới dạng tập
hợp các bản ghi (result set).
2- Cú pháp và các thành phần trong câu lệnh truy vấn SELECT
89
6.2. CẤU TRÚC TRUY VẤN CƠ BẢN SELECT … FROM …
SELECT *|<danh sách cột> FROM <các bảng dữ liệu>
93
6.4. TRUY VẤN GỘP NHÓM VÀ TÍNH TOÁN THỐNG KÊ VỚI
MỆNH ĐỀ GROUP BY VÀ HAVING
SELECT *|<danh sách cột> FROM <tên bảng> [WHERE <điều kiện>]
GROUP BY <danh sách cột> [HAVING <điều kiện>]
Chia dữ liệu lấy về thành các nhóm (group) sao cho các bản ghi trong cùng
nhóm thì sẽ có giá trị trên các cột dùng để gộp nhóm là giống nhau.
Mỗi bản ghi của kết quả sẽ mang các giá trị đại diện cho một nhóm. Đó có
thể là một số các giá trị của cột gộp nhóm hoặc là kết quả khi áp dụng một
hàm thống kê trên nhóm đó (các hàm thống kê thường được sử dụng kèm
trong mệnh đề SELECT để thực hiện tính toán trên từng nhóm).
Mệnh đề HAVING giúp lọc ra các nhóm (group) thỏa mãn <điều kiện>
Lưu ý: Chỉ những cột có mặt trong mệnh đề GROUP BY hoặc các hàm thống
kê (tức là những giá trị đại diện cho cả nhóm) mới được phép xuất hiện trong
mệnh đề SELECT và HAVING.
CÁC HÀM THỐNG KÊ THƢỜNG DÙNG:
COUNT(*): Đếm số bản ghi có trong 1 nhóm.
COUNT(Ai): Đếm số giá trị tƣơng ứng với cột Ai của các bản ghi trong
nhóm.
SUM(Ai): Tính tổng các giá trị tƣơng ứng với cột Ai của các bản ghi
trong nhóm.
MAX(Ai): Tìm giá trị lớn nhất trong số các giá trị tƣơng ứng với cột Ai
95
Ví dụ 4.11: Cho bảng dữ liệu:
Inventory(ID, Value, Type)
ID Value Type
Thống kê số lượng và tổng giá trị các đồ vật
1 10 A
2 20 A thuộc về mỗi loại
3 10 B SELECT Type, COUNT(*), SUM(Value)
4 20 B FROM Inventory GROUP BY Type
5 10 A
6 20 C
7 10 C
Type Count(*) SUM(Value)
A 3 40
B 2 30
C 2 30
96
ID Value Type
1 10 A Type COUNT(*) SUM(Value)
ID Value Type 2 20 A A 3 40
1 10 A 5 10 A
2 20 A
3 10 B ID Value Type
Type COUNT(*) SUM(Value)
4 20 B 3 10 B
B 2 30
5 10 A 4 20 B
6 20 C
ID Value Type Type COUNT(*) SUM(Value)
7 10 C
6 20 C C 2 30
7 10 C
99
Thống kê giá trị (bằng tiền) ứng với mỗi mặt hàng (lưu ý: chỉ
thống kê các mặt hàng có số lượng trên 10 chiếc). Biết Giá trị =
Số lượng * Đơn giá
SELECT MaMH, TenMH, SoLuong * DonGia AS GiaTri
FROM MatHang WHERE SoLuong > 10
Thống kê giá trị bằng tiền ứng với mỗi loại hàng (tổng tiền các
mặt hàng thuộc về loại hàng đó)
SELECT LoaiHang, SUM(SoLuong * DonGia) AS GiaTri
FROM MatHang GROUP BY LoaiHang
100
6.5. SẮP XẾP CÁC BẢN GHI KẾT QUẢ VỚI MỆNH ĐỀ
ORDER BY
SELECT *|<danh sách cột> FROM <tên bảng> [WHERE <điều kiện>]
[GROUP BY <danh sách cột> [HAVING <điều kiện>]]
ORDER BY <danh sách cột> [ASC|DESC]
Ví dụ: HocSinh(MaHS, TenHS, NamSinh, Lop, DiemThi)
Liệt kê các học sinh theo thứ tự giảm dần của điểm thi
SELECT MaHS, Ten HS, DiemThi FROM HocSinh
ORDER BY DiemThi DESC
Liệt kê các học sinh theo thứ tự lớp tăng dần (10A1, 10A2, 10A3...,
11A1, 11A2, 11A3...)
SELECT * FROM HocSinh ORDER BY Lop
Liệt kê các học sinh theo thứ tự lớp tăng dần (10A1, 10A2,...), nếu
các học sinh cùng lớp thì xếp giảm dần theo điểm
101
SELECT * FROM HocSinh ORDER BY Lop ASC, DiemThi DESC
6.6. TRUY VẤN DỮ LIỆU TỪ NHIỀU BẢNG
SELECT *|<danh sách cột> FROM <các bảng dữ liệu>
[WHERE ... ] [GROUP BY ... ] [ORDER BY ...]
Các bảng dữ liệu sau FROM thƣờng đƣợc kết nối với nhau nhờ các
mệnh đề join
a. Mệnh đề INNER JOIN
<bảng 1> INNER JOIN <bảng 2> ON <điều kiện 1-2>
Trả về 01 tập các bản ghi. Mỗi bản ghi là kết quả của việc kết nối một
bản ghi của <bảng 1> với một bản ghi của <bảng 2> nếu chúng thỏa
mãn <điều kiện 1-2>
Có thể mở rộng ra cho kết nối nhiều bảng hơn
<bảng 1> INNER JOIN <bảng 2> ON <điều kiện 1-2>
INNER JOIN <bảng 3> ON <điều kiện 1-2-3>...
HocSinh
Lop
103
b. Các mệnh đề OUTER JOIN
LEFT OUTER JOIN
<bảng 1> LEFT OUTER JOIN <bảng 2> ON <điều kiện 1-2>
Trả về 01 tập các bản ghi gồm:
Các bản ghi là kết quả của việc kết nối các bản ghi của <bảng 1>
với các bản ghi của <bảng 2> nếu chúng thỏa mãn <điều kiện 1-2>
(chính là kết quả của INNER JOIN).
Các bản ghi còn lại của <bảng 1> (mà không thể kết nối đƣợc với
bản ghi nào của <bảng 2>) sau khi đã bổ sung thêm các giá trị
NULL vào vị trí tƣơng ứng với các cột của <bảng 2>.
104
Ví dụ
HocSinh
Lop
SELECT * FROM Lop LEFT OUTER JOIN HocSinh ON Lop.MaLop = HocSinh.MaLop
105
b. Các mệnh đề OUTER JOIN
RIGHT OUTER JOIN
<bảng 1> RIGHT OUTER JOIN <bảng 2> ON <điều kiện 1-2>
Trả về 01 tập các bản ghi gồm:
Các bản ghi là kết quả của việc kết nối các bản ghi của <bảng 1>
với các bản ghi của <bảng 2> nếu chúng thỏa mãn <điều kiện 1-2>
(chính là kết quả của INNER JOIN).
Các bản ghi còn lại của <bảng 2> (mà không thể kết nối đƣợc với
bản ghi nào của <bảng 1>) sau khi đã bổ sung thêm các giá trị
NULL vào vị trí tƣơng ứng với các cột của <bảng 1>.
106
Ví dụ
HocSinh
Lop HocSinh
SELECT * FROM Lop RIGHT OUTER JOIN HocSinh ON Lop.MaLop = HocSinh.MaLop
107
b. Các mệnh đề OUTER JOIN
FULL OUTER JOIN
<bảng 1> FULL OUTER JOIN <bảng 2> ON <điều kiện 1-2>
Trả về 01 tập các bản ghi gồm:
Các bản ghi là kết quả của việc kết nối các bản ghi của <bảng 1>
với các bản ghi của <bảng 2> nếu chúng thỏa mãn <điều kiện 1-2>
(chính là kết quả của INNER JOIN).
Các bản ghi còn lại của <bảng 1> (mà không thể kết nối đƣợc với
bản ghi nào của <bảng 2>) sau khi đã bổ sung thêm các giá trị
NULL vào vị trí tƣơng ứng với các cột của <bảng 2>.
Các bản ghi còn lại của <bảng 2> (mà không thể kết nối đƣợc với
bản ghi nào của <bảng 1>) sau khi đã bổ sung thêm các giá trị
NULL vào vị trí tƣơng ứng với các cột của <bảng 1>.
108
Ví dụ
HocSinh
HocSinh
Lop
SELECT * FROM Lop FULL OUTER JOIN HocSinh ON Lop.MaLop = HocSinh.MaLop
109
c. Mệnh đề CROSS JOIN
<bảng 1> CROSS JOIN <bảng 2>
Trả về 01 tập các bản ghi là kết quả của việc kết nối lần lƣợt mỗi
bản ghi của <bảng 1> với từng bản ghi của <bảng 2> (tƣơng tự nhƣ
phép tích Đề Các).
Có thể mở rộng ra cho kết nối nhiều bảng hơn hoặc phối hợp với
các dạng JOIN khác.
<bảng 1> CROSS JOIN <bảng 2> ... CROSS JOIN <bảng n>
110
Ví dụ
111
7.1. KHÁI NIỆM VỀ TRUY VẤN CON (SUB-QUERY)
Truy vấn con là một truy vấn được lồng trong một truy vấn
khác. Dạng thức thường gặp nhất của truy vấn con là
được lồng trong mệnh đề WHERE của truy vấn cha.
Ví dụ : Cho các bảng dữ liệu:
PhongKTX(SoPhong, SoGiuong)
SinhVien(MaSV, TenSV, Lop, SoPhong)
Liệt kê các phòng KTX chƣa có sinh viên nào vào ở.
SELECT * FROM PhongKTX
WHERE SoPhong NOT IN (SELECT SoPhong FROM SinhVien)
112
Truy vấn con
7. 2. CÁC DẠNG TRUY VẤN CON CƠ BẢN
Lồng trong mệnh đề WHERE của truy vấn cha sử dụng
kèm theo các lƣợng từ: ALL, ANY, các toán tử: IN, EXIST
kết hợp với phép toán phủ định (NOT) và so sánh
(>,<,>=,<=,=,<>):
WHERE <biểu thức cột> <phép toán> ANY|ALL (<truy vấn con>)
Người dùng
116
Phạm vi
người
dùng
không
được
phép truy
xuất
Dữ liệu thực
Phạm vi
người
dùng
được
phép truy
xuất
Khung nhìn
(view)
Người dùng
117
8.2. LÀM VIỆC VỚI KHUNG NHÌN (VIEW)
1- TẠO VIEW
CREATE VIEW <Tên View>[(<Danh sách cột>)]
AS
<Câu lệnh truy vấn SELECT định nghĩa view>
118
2- SỬA MỘT VIEW ĐÃ CÓ
ALTER VIEW <Tên View>[(<Danh sách cột mới>)]
AS
<Câu lệnh truy vấn SELECT mới định nghĩa view>
Ví dụ 2: Sửa lại view vwHocSinh thành 04 cột (thêm cột Diem) và chỉ
chứa thông tin về học sinh của lớp 10A1 và lớp 10A2:
ALTER VIEW vwHocSinh(HoTen, Lop, Phong, Diem)
AS
SELECT TenHS, TenLop, PhongHoc, DiemThi FROM Lop INNER JOIN HocSinh
ON Lop.MaLop = HocSinh.MaLop WHERE TenLop = „10A1‟ OR TenLop = „10A2‟
3- XOÁ VIEW
DROP VIEW <Tên View>
Ví dụ 3: Xoá view vwHocSinh
DROP VIEW vwHocSinh
119
4- TRUY VẤN DỮ LIỆU TRÊN VIEW
Truy vấn dữ liệu từ view giống nhƣ truy vấn dữ liệu từ một
bảng dữ liệu thông thƣờng.
120
9.1. CÁC HÀM XỬ LÝ THỜI GIAN
1- Các giá trị thời gian trong SQL Server
- Giá trị kiểu datetime hoặc smalldatetime: Bao gồm cả
thông tin về ngày, tháng, năm, giờ, phút, giây và miligiây. Ví dụ:
'2020-4-25 19:30:05.004'
- Giá trị kiểu date: Chỉ gồm thông tin về ngày, tháng, năm. Ví
dụ: '2020-4-25'
- Giá trị kiểu time: Chỉ gồm thông tin về giờ, phút, giây và
miligiây. Ví dụ: '19:30:05.004'.
121
Chú ý:
- Tùy theo ngữ cảnh mà một giá trị thời gian bất kỳ (VD như
'2020-4-25') sẽ được SQL Server xử lý như là một giá trị
kiểu datetime/smalldatetime hoặc kiểu date hay kiểu time.
- Khi xử lý, nếu giá trị thời gian thiếu vắng thành phần nào
thì chúng tự được hiểu là mang giá trị mặc định. Ví dụ:
1. Giá trị thời gian '2020-4-25' trong kiểu datetime sẽ
được hiểu là: '2020-4-25 00:00:00.000', tức là phần
giờ phút giây nếu không được nhắc gì tới thì được ngầm
định là 00:00:00.000.
2. Giá trị thời gian '19:05:20.005' trong kiểu datetime sẽ
được hiểu là '1900-01-01 19:05:20.005', tức là nếu
phần ngày, tháng, năm không được nhắc gì tới thì sẽ được
hiểu ngầm định là ngày 01/01/1900.
122
2- Các hàm xử lý thời gian cơ bản
1) GETDATE()
- Hàm không có tham số.
- Chức năng: Trả về một giá trị kiểu datetime là thời gian hiện thời
của hệ thống.
2) YEAR(<datevalue>)
- <datevalue>: Giá trị kiểu date/datetime/smalldatetime/time.
- Chức năng: Trả về giá trị số nguyên của năm tương ứng
- Ví dụ: YEAR('2021-5-12')trả về giá trị 2021.
3) MONTH(<datevalue>)
- <datevalue>: Giá trị kiểu date/datetime/smalldatetime/time.
- Chức năng: Trả về giá trị số nguyên của tháng tương ứng.
- Ví dụ: MONTH('2021-5-12 23:05:26') trả về giá trị 5.
4) DAY(<datevalue>)
- <datevalue>: Giá trị kiểu date/datetime/smalldatetime/time.
- Chức năng: Trả về giá trị số nguyên của ngày tương ứng.
123
- Ví dụ: DAY('2021-5-12') trả về giá trị 12.
5) DATEPART(<part_code>,<datevalue>)
- <datevalue>: Giá trị kiểu date/datetime/smalldatetime/time.
- Chức năng: Trả về giá trị số nguyên biểu diễn thành phần tương ứng của
chuỗi giá trị thời gian do <part_code> quy định:
Year YY
Quarter QQ
Month MM
DayOfYear DY
Day DD
WeekDay DW
Week WW
Hour HH
Minute Mi
Second SS
Milisecond MS
Ví dụ: DATEPART(QQ,'2021-5-12') trả về giá trị 2 (quý 2).
124
6) DATENAME(<part_code>,<datevalue>)
- <datevalue>: Giá trị kiểu date/datetime/smalldatetime/time.
- Chức năng: Trả về chuỗi ký tự biểu diễn thành phần tương ứng của
chuỗi giá trị thời gian do <part_code> quy định:
Year YYYY
Quarter QQ
Month MM
DayOfYear DY
Day DD
WeekDay DW
Week WW
Hour HH
Minute Mi
Second SS
Milisecond MS
Ví dụ: DATENAME(MM,'2021-9-12') trả về giá trị 'September'.
125 DATEPART(MM,'2021-9-12') trả về giá trị số nguyên là 9.
7) DATEDIFF(<part_code>,<startdate>,<enddate>)
- <stardate>, <enddate>: Giá trị kiểu date/datetime/smalldatetime/time.
- Chức năng: Trả về khoảng thời gian bắt đầu từ <startdate> và kết thúc
bởi <enddate> với đơn vị tính được quy định bởi <part_code>:
Year YYYY
Quarter QQ
Month MM
DayOfYear DY
Day DD
WeekDay DW
Week WW
Hour HH
Minute Mi
Second SS
Milisecond MS
Ví dụ: DATEDIFF(DD,'2021-5-12','2021-7-30')trả về giá trị 79 (ngày)
126
8) DATEADD(<part_code>,<n>,<datevalue>)
- <datevalue>: Giá trị kiểu date/datetime/smalldatetime/time.
- <n>: Giá trị số nguyên.
- Chức năng: Trả về giá trị thời gian kiểu datetime được xác định bằng
<datevalue> cộng thêm 1 khoảng thời gian có độ dài <n>. Đơn vị của độ
dài thời gian cộng thêm được quy định bởi <part_code>:
Year YYYY
Quarter QQ
Month MM
DayOfYear DY
Day DD
WeekDay DW
Week WW
Hour HH
Minute Mi
Second SS
Milisecond MS
Ví dụ: DATEADD(DD,25,'2021-5-12')trả về giá trị:
127 '2021-06-06 00:00:00.000'
9.2. CÁC HÀM XỬ LÝ CHUỖI KÝ TỰ
1- LEN(<chuỗi>): Trả về chiều dài chuỗi ký tự.
Ví dụ: LEN('ABCDE') trả về giá trị bằng 5
2- LEFT(<chuỗi>, <n>): Trả về chuỗi con gồm n ký tự đƣợc cắt
ra từ bên trái chuỗi ban đầu.
Ví dụ: LEFT('ABCDE',3) trả về chuỗi con 'ABC'.
3- RIGHT(<chuỗi>, <n>): Trả về chuỗi con gồm n ký tự đƣợc cắt
ra từ bên phải chuỗi ban đầu.
Ví dụ: RIGHT('ABCDE',2) trả về chuỗi con 'DE'.
4- LTRIM(<chuỗi>): Cắt các ký tự cách trống ở đầu bên trái
chuỗi nếu có.
Ví dụ: LTRIM(' ABC ') trả về chuỗi 'ABC '.
5- RTRIM(<chuỗi>): Cắt các ký tự cách trống ở đầu bên phải
chuỗi nếu có.
Ví dụ: LTRIM(' ABC ') trả về chuỗi ' ABC'.
128
6- UPPER(<chuỗi>): Chuyển toàn bộ các ký tự thành chữ hoa.
Ví dụ: UPPER('AbcDe') trả về chuỗi 'ABCDE'
7- LOWER(<chuỗi>): Chuyển toàn bộ các ký tự thành chữ
thƣờng.
Ví dụ: LOWER('ABcDe') trả về chuỗi 'abcde'.
8- SUBSTRING(<chuỗi>,<start>,<n>): Trả về chuỗi con gồm n ký
tự đƣợc cắt ra từ chuỗi ban đầu, bắt đầu từ vị trí <start>.
Ví dụ: SUBSTRING('ABCDE',2,3) trả về chuỗi con 'BCD'.
9- STUFF(<chuỗi 1>,<start>,<n>,<chuỗi 2>): Xóa n ký tự trong
<chuỗi 1> bắt đầu từ vị trí <start> sau đó chèn <chuỗi 2> vào vị
trí vừa xóa.
Ví dụ: STUFF('ABCDEFG',2,3,'12345') trả về chuỗi
'A12345EFG.
10- REPLICATE(<chuỗi>,<n>): Tạo ra chuỗi mới bằng cách lặp
lại chuỗi đã cho n lần
129
Ví dụ: REPLICATE('ABC',3) trả về chuỗi 'ABCABCABC'.
10- REPLACE(<chuỗi1>,<mẫu>,<chuỗi2>): Thay thế các chuỗi
ký tự <mẫu> xuất hiện trong <chuỗi1> bằng <chuỗi2>
Ví dụ: REPLACE('ABCEDFGHICEDABCED','CED','101') trả
về chuỗi 'AB101FGHI101AB101'.
11- CHARINDEX(<chuỗi1>,<chuỗi2>[,<start>]): Tìm và trả về vị
trí xuất hiện đầu tiên của <chuỗi1> trong <chuỗi2>. Ví trí bắt
đầu tiến hành tìm kiếm đƣợc xác định bởi tham số <start>.
Nếu tham số <start> không đƣợc chỉ định thì mặc định tìm từ
đầu <chuỗi2>.
Ví dụ: CHARINDEX('101','ABCD101CDE101EF') trả về vị trí
số 5.
9.3. HÀM ÉP KIỂU CAST
CAST(<giá trị cần ép kiểu> AS <kiểu dữ liệu mong muốn>)
130
10.1. KHAI BÁO BIẾN VÀ GÁN GIÁ TRỊ CHO BIẾN
1- Khai báo biến
a. Cú pháp
DECLARE @<Tên biến> AS <Kiểu dữ liệu> [= <Giá trị khởi tạo>]
b. Ví dụ
DECLARE @NgayNhap AS Date;
DECLARE @HoTen AS nvarchar(30) = N'Nguyễn Văn Bình';
DECLARE @a AS int = 3, @b AS bigint = 5;
131
2- Gán giá trị cho biến
a. Cú pháp
- Gán giá trị cho một biến:
SET @<Tên biến> = <Giá trị>;
- Gán giá trị cho nhiều biến cùng lúc:
SELECT @<Tên biến 1> = <Giá trị 1>, @<Tên biến 2> = <Giá trị 2>,…;
- Gán giá trị trả về từ câu lệnh truy vấn cho biến:
SELECT @<Tên biến 1> = <Cột 1>, … , @<Tên biến n> = <Cột n>
FROM … WHERE …
b. Ví dụ
SET @a = 7;
SELECT @a = 6, @NgayNhap = '2017-9-11';
SELECT @HoTen = TenNV FROM NhanVien WHERE MaNV = 'NV001';
132
10.2. SỬ DỤNG CÁC CẤU TRÚC ĐIỀU KHIỂN
1- Định nghĩa khối lệnh
a. Cú pháp
BEGIN
<Các câu lệnh SQL>
END;
b. Chức năng
- Dùng để tập hợp một dãy các lệnh thành một đơn vị xử lý.
- Thường dùng kết hợp với các câu lệnh rẽ nhánh và lặp.
133
2- Câu lệnh rẽ nhánh IF … ELSE …
a. Cú pháp
- Dạng đơn:
IF <Biểu thức điều kiện>
<Khối lệnh 1>
ELSE
<Khối lệnh 2>
- Dạng lồng nhau:
IF <Biểu thức điều kiện 1>
<Khối lệnh 1>
ELSE IF <biểu thức điều kiện 2>
<Khối lệnh 2>
…
ELSE
<Khối lệnh n>
134
b. Ví dụ: Đọc điểm trung bình của học sinh có mã học sinh là
HS001 từ bảng dữ liệu HocSinh và gán vào biến @DiemTB sau
đó đưa ra xếp loại của học sinh đó.
BEGIN
DECLARE @DiemTB AS decimal(3,1), @MaHS AS varchar(5) = 'HS001';
SELECT @DiemTB = DiemTB FROM HocSinh WHERE MaHS = @MaHS;
IF (@DiemTB >= 9)
PRINT(N'Xếp loại Xuất sắc');
ELSE IF (@DiemTB < 9 AND @DiemTB >= 8)
PRINT(N'Xếp loại Giỏi');
ELSE IF (@DiemTB < 8 AND @DiemTB >= 6.5)
PRINT(N'Xếp loại Khá');
ELSE IF (@DiemTB < 6.5 AND @DiemTB >= 5)
PRINT(N'Xếp loại Trung bình');
ELSE
PRINT(N'Xếp loại Yếu');
END;
135
Q&A
136