Giáo trình SQL - Trần Nguyên Phong

MỤC LỤC

MỤC LỤC.2

LỜI NÓI ĐẦU.5

CHƯƠNG 1: .7 TỔNG QUAN VỀSQL

1.1 SQL là ngôn ngữcơsởdữliệu quan hệ.7

1.2 Vai trò của SQL.8

1.3 Tổng quan vềcơsởdữliệu quan hệ.9

1.3.1 Mô hình dữliệu quan hệ.9

1.3.2 Bảng (Table).9

1.3.3 Khoá của bảng.10

1.3.4 Mối quan hệvà khoá ngoài.11

1.4 Sơlược vềSQL.12

1.4.1 Câu lệnh SQL.12

1.4.2 Qui tắc sửdụng tên trong SQL.14

1.4.3 Kiểu dữliệu.14

1.4.4 Giá trịNULL.16

1.5 Kết chương.16

CHƯƠNG 2: .18 NGÔN NGỮTHAO TÁC DỮLIỆU

2.1 Truy xuất dữliệu với câu lệnh SELECT.18

2.1.1 Mệnh đềFROM.19

2.1.2 Danh sách chọn trong câu lệnh SELECT.20

2.1.3 Chỉ định điều kiện truy vấn dữliệu.25

2.1.4 Tạo mới bảng dữliệu từkết quảcủa câu lệnh SELECT.29

2.1.5 Sắp xếp kết quảtruy vấn.29

2.1.6 Phép hợp.31

2.1.7 Phép nối.33

2.1.7.1 Sửdụng phép nối.34

2.1.7.2 Các loại phép nối.36

2.1.7.4 Sửdụng phép nối trong SQL2.40

2.1.8 Thống kê dữliệu với GROUP BY.43

2.1.9 Thống kê dữliệu với COMPUTE.46

2.1.10 Truy vấn con (Subquery).49

2.2 Bổsung, cập nhật và xoá dữliệu.53

2.2.1 Bổsung dữliệu.53

2.2.2 Cập nhật dữliệu.54

2.2.3 Xoá dữliệu.56

Bài tập chương 2.58

CHƯƠNG 3: .69 NGÔN NGỮ ĐỊNH NGHĨA DỮLIỆU

2

Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL

3.1 Tạo bảng dữliệu.69

3.1.1 Ràng buộc CHECK.72

3.1.2 Ràng buộc PRIMARY KEY.74

3.1.3 Ràng buộc UNIQUE.76

3.1.4 Ràng buộc FOREIGN KEY.76

3.2 Sửa đổi định nghĩa bảng.79

3.3 Xoá bảng.81

3.4 Khung nhìn.82

3.4.1 Tạo khung nhìn.84

3.4.2 Cập nhật, bổsung và xoá dữliệu thông qua khung nhìn.86

3.4.3 Sửa đổi khung nhìn.89

3.4.4 Xoá khung nhìn.90

Bài tập chương 3.90

CHƯƠNG 4: .96 BẢO MẬT TRONG SQL

4.1 Các khái niệm.96

4.2 Cấp phát quyền.97

4.2.1 Cấp phát quyền cho người dùng trên các đối tượng cơsởdữliệu.97

4.2.2 Cấp phát quyền thực thi các câulệnh.99

4.3 Thu hồi quyền.100

4.3.1 Thu hồi quyền trên đối tượng cơsởdữliệu:.100

4.3.2 Thu hồi quyền thực thi các câu lênh:.103

CHƯƠNG 5: .104 THỦTỤC LƯU TRỮ, HÀM VÀ TRIGGER

5.1 Thủtục lưu trữ(stored procedure).104

5.1.1 Các khái niệm.104

5.1.2 Tạo thủtục lưu trữ.105

5.1.3 Lời gọi thủtục lưu trữ.107

5.1.4 Sửdụng biến trong thủtục.107

5.1.5 Giá trịtrảvềcủa thamsốtrong thủtục lưu trữ.108

5.1.6 Thamsốvới giá trịmặc định.109

5.1.7 Sửa đổi thủtục.110

5.2 Hàmdo người dùng định nghĩa.111

5.2.1 Định nghĩa và sửdụng hàm.111

5.2.2 Hàmvới giá trịtrảvềlà “dữliệu kiểu bảng”.112

5.3 Trigger.116

5.3.1 Định nghĩa trigger.117

5.3.2 Sửdụng mệnh đềIF UPDATE trong trigger.119

5.3.3 ROLLBACK TRANSACTION và trigger.121

5.3.4 Sửdụng trigger trong trường hợp câu lệnh INSERT, UPDATE và DELETE cótác

động đến nhiều dòng dữliệu.122

5.3.4.1 Sửdụng truy vấn con.122

5.3.4.2 Sửdụng biến con trỏ.125

Bài tập chương 5.127

CHƯƠNG 6: .132 GIAO TÁC SQL

6.1 Giao tác và các tính chất của giao tác.132

6.2 Mô hình giao tác trong SQL.133

3

Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL

6.3 Giao tác lồng nhau.136

PHỤLỤC.138

A. Cơsởdữliệu mẫu sửdụng trong giáo trình.138

B. Một sốhàmthường sửdụng.141

B.1 Các hàm trên dữliệu kiểu chuỗi.141

B.2 Các hàm trên dữliệu kiểu ngày giờ.143

B.3 Hàmchuyển đổi kiểu.144

TÀI LIỆU THAM KHẢO.146

pdf146 trang | Chuyên mục: SQL Server | Chia sẻ: dkS00TYs | Lượt xem: 2657 | Lượt tải: 5download
Tóm tắt nội dung Giáo trình SQL - Trần Nguyên Phong, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
INT 
) 
và thủ tục sp_TransEx: 
CREATE PROC sp_TranEx(@a INT,@b INT) 
AS 
BEGIN 
 BEGIN TRANSACTION T1 
 IF NOT EXISTS (SELECT * FROM T WHERE A=@A ) 
 INSERT INTO T VALUES(@A,@B) 
 IF NOT EXISTS (SELECT * FROM T WHERE A=@A+1) 
 INSERT INTO T VALUES(@A+1,@B+1) 
 COMMIT TRANSACTION T1 
END 
Lời gọi đến thủ tuch sp_TransEx được thực hiện trong một giao tác khác như sau: 
BEGIN TRANSACTION T3 
136 
 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL 
 EXECUTE sp_tranex 10,20 
ROLLBACK TRANSACTION T3 
Trong giao tác trên, câu lệnh ROLLBACK TRANSACTION T3 huỷ bỏ giao tác và do đó 
tác dụng của lời gọi thủ tục trong giao tác không còn tác dụng, tức là không có dòng 
dữ liệu nào mới được bổ sung vào bảng T (cho dù giao tác T1 trong thủ tục sp_tranex 
đã thực hiện thành công với lệnh COMMIT TRANSACTION T1). 
 Ta xét tiếp một trường hợp của một giao tác khác trong đó có lời gọi đến thủ tục 
sp_tranex như sau: 
 BEGIN TRANSACTION 
 EXECUTE sp_tranex 20,40 
 SAVE TRANSACTION a 
 EXECUTE sp_tranex 30,60 
 ROLLBACK TRANSACTION a 
 EXECUTE sp_tranex 40,80 
 COMMIT TRANSACTION 
sau khi giao tác trên thực hiện xong, dữ liệu trong bảng T sẽ là: 
A B 
20 40 
21 41 
40 80 
41 81 
Như vậy, tác dụng của lời gọi thủ tục sp_tranex 30,60 trong giao tác đã bị huỷ bỏ 
bởi câu lệnh ROLLBACK TRANSACTION trong giao tác. 
 Như đã thấy trong ví dụ trên, khi các giao tác SQL được lồng vào nhau, giao tác 
ngoài cùng nhất là giao tác có vai trò quyết định. Nếu giao tác ngoài cùng nhất được uỷ 
thác (commit) thì các giao tác được lồng bên trong cũng đồng thời uỷ thác; Và nếu 
giao tác ngoài cùng nhất thực hiện lệnh ROLLBACK thì những giao tác lồng bên trong 
cũng chịu tác động của câu lệnh này (cho dù những giao tác lồng bên trong đã thực 
hiện lệnh COMMIT TRANSACTION). 
_______________________________________ 
137 
 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL 
PHỤ LỤC 
A. Cơ sở dữ liệu mẫu sử dụng trong giáo trình 
 Trong toàn bộ nội dung giáo trình, hầu hết các ví dụ được dựa trên cơ sở dữ 
liệu mẫu được mô tả dưới đây. Cơ sở dữ liệu này được cài đặt trong hệ quản trị cơ sở 
dữ liệu SQL Server 2000 và được sử dụng để quản lý sinh viên và điểm thi của sinh 
viên trong một trường đại học. Để tiện cho việc tra cứu và kiểm chứng đối với các ví 
dụ, trong phần đầu của phụ lục chúng tôi giới thiệu sơ qua về cơ sở dữ liệu này. 
 Cơ sở dữ liệu bao gồm các bảng sau đây: 
• Bảng KHOA lưu trữ dữ liệu về các khoa hiện có ở trong trường 
• Bảng LOP bao gồm dữ liệu về các lớp trong trường 
• Bảng SINHVIEN được sử dụng để lưu trữ dữ liệu về các sinh viên trong 
trường. 
• Bảng MONHOC bao gồm các môn học (học phần) được giảng dạy trong 
trường 
• Bảng DIEMTHI với dữ liệu cho biết điểm thi kết thúc môn học của các sinh 
viên 
Mối quan hệ giữa các bảng được thể hiện qua sơ đồ dưới đây 
138 
 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL 
Các bảng trong cơ sở dữ liệu, mối quan hệ giữa chúng và một số ràng buộc được cài 
đặt như sau: 
CREATE TABLE khoa 
( 
makhoa NVARCHAR(5) NOT NULL 
 CONSTRAINT pk_khoa PRIMARY KEY, 
tenkhoa NVARCHAR(50) NOT NULL , 
dienthoai NVARCHAR(15) NULL 
) 
CREATE TABLE lop 
( 
malop NVARCHAR(10) NOT NULL 
 CONSTRAINT pk_lop PRIMARY KEY, 
tenlop NVARCHAR(30) NULL , 
khoa SMALLINT NULL , 
hedaotao NVARCHAR(25) NULL , 
namnhaphoc INT NULL , 
siso INT NULL , 
makhoa NVARCHAR(5) NULL 
) 
CREATE TABLE sinhvien 
( 
masv NVARCHAR(10) NOT NULL 
 CONSTRAINT pk_sinhvien PRIMARY KEY, 
hodem NVARCHAR(25) NOT NULL , 
ten NVARCHAR(10) NOT NULL , 
ngaysinh SMALLDATETIME NULL , 
gioitinh BIT NULL , 
noisinh NVARCHAR(100) NULL , 
malop NVARCHAR(10) NULL 
) 
CREATE TABLE monhoc 
( 
mamonhoc NVARCHAR(10) NOT NULL 
 CONSTRAINT pk_monhoc PRIMARY KEY, 
tenmonhoc NVARCHAR(50) NOT NULL , 
139 
 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL 
sodvht SMALLINT NOT NULL 
) 
CREATE TABLE diemthi 
( 
mamonhoc NVARCHAR(10) NOT NULL , 
masv NVARCHAR(10) NOT NULL , 
diemlan1 NUMERIC(5, 2) NULL , 
diemlan2 NUMERIC(5, 2) NULL, 
CONSTRAINT pk_diemthi PRIMARY KEY(mamonhoc,masv) 
) 
ALTER TABLE lop 
ADD 
 CONSTRAINT fk_lop_khoa 
 FOREIGN KEY(makhoa) 
 REFERENCES khoa(makhoa) 
 ON DELETE CASCADE 
 ON UPDATE CASCADE 
ALTER TABLE sinhvien 
ADD 
 CONSTRAINT fk_sinhvien_lop 
 FOREIGN KEY (malop) 
 REFERENCES lop(malop) 
 ON DELETE CASCADE 
 ON UPDATE CASCADE 
ALTER TABLE diemthi 
ADD 
 CONSTRAINT fk_diemthi_monhoc 
 FOREIGN KEY (mamonhoc) 
 REFERENCES monhoc(mamonhoc) 
 ON DELETE CASCADE 
 ON UPDATE CASCADE, 
 CONSTRAINT fk_diemthi_sinhvien 
 FOREIGN KEY (masv) 
 REFERENCES sinhvien(masv) 
 ON DELETE CASCADE 
140 
 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL 
 ON UPDATE CASCADE 
ALTER TABLE monhoc 
ADD 
 CONSTRAINT chk_monhoc_sodht 
 CHECK(sodvht>0 and sodvht<=5) 
ALTER TABLE diemthi 
ADD 
 CONSTRAINT chk_diemthi_diemlan1 
 CHECK (diemlan1>=0 and diemlan1<=10), 
 CONSTRAINT chk_diemthi_diemlan2 
 CHECK (diemlan2>=0 and diemlan2<=10) 
B. Một số hàm thường sử dụng 
 Mặc dù trong SQL chuẩn không cung cấp cụ thể các nhưng trong các hệ quản trị 
cơ sở dữ liệu luôn cung cấp cho người sử dụng các hàm cài sẵn (hay còn gọi là các 
hàm của hệ thống). Trong phần này, chúng tôi cung cấp một số hàm thường được sử 
dụng trong SQL Server để tiện cho việc tra cứu và sử dụng trong thực hành 
B.1 Các hàm trên dữ liệu kiểu chuỗi 
Hàm ASCII 
 ASCII(string) 
 Hàm trả về mã ASCII của ký tự đầu tiên bên trái của chuỗi đối số 
Hàm CHAR 
 CHAR(ascii_code) 
 Hàm trả về ký tự có mã ASCII tương ứng với đối số 
Hàm CHARINDEX 
 CHARINDEX(string1,string2[,start]) 
 Hàm trả về vị trí đầu tiên tính từ vị trí start tại đó chuỗi string1 xuất hiện trong 
chuỗi string2. 
Hàm LEFT 
 LEFT(string,number) 
 Hàm trích ra number ký tự từ chuỗi string tính từ phía bên trái 
Hàm LEN 
 LEN(string) 
141 
 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL 
 Hàm trả về độ dài của chuỗi string. 
Hàm LOWER 
 LOWER(string) 
 Hàm có chức năng chuyển chuỗi string thành chữ thường, kết quả được trả về 
cho hàm 
Hàm LTRIM 
 LTRIM(string) 
 Cắt bỏ các khoảng trắng thừa bên trái chuỗi string 
Hàm NCHAR 
 NCHAR(code_number) 
 Hàm trả về ký tự UNICODE có mã được chỉ định 
Hàm REPLACE 
 REPLACE(string1,string2,string3) 
 Hàm trả về một chuỗi có được bằng cách thay thế các chuỗi string2 trong chuỗi 
string1 bởi chuỗi string3. 
Hàm REVERSE 
 REVERSE(string) 
 Hàm trả về chuỗi đảo ngược của chuỗi string. 
Hàm RIGHT 
 RIGHT(string, number) 
 Hàm trích ra number ký tự từ chuỗi string tính từ phía bên phải. 
Hàm RTRIM 
 RTRIM(string) 
 Cắt bỏ các khoảng trắng thừa bên phải của chuỗi string. 
Hàm SPACE 
 SPACE(number) 
 Hàm trả về một chuỗi với number khoảng trắng. 
Hàm STR 
 STR(number [,length [,decimal]]) 
 Chuyển giá trị kiểu số number thành chuỗi 
Hàm SUBSTRING 
 SUBSTRING(string, m, n) 
 Trích ra từ n ký tự từ chuỗi string bắt đầu từ ký tự thứ m. 
Hàm UNICODE 
142 
 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL 
 UNICODE(UnicodeString) 
 Hàm trả về mã UNICODE của ký tự đầu tiên bên trái của chuỗi UnicodeString. 
Hàm UPPER 
 UPPER(string) 
 Chuyển chuỗi string thành chữ hoa 
B.2 Các hàm trên dữ liệu kiểu ngày giờ 
Hàm DATEADD 
 DATEADD(datepart, number, date) 
Hàm trả về một giá trị kiểu DateTime bằng cách cộng thêm một khoảng giá trị 
là number vào ngày date được chỉ định. Trong đó, datepart là tham số chỉ định thành 
phần sẽ được cộng đối với giá trị date bao gồm: 
Datepart Viết tắt 
year yy, yyyy 
quarter qq, q 
month mm, m 
dayofyear dy, y 
day dd, d 
week wk, ww 
hour hh 
minute mi, n 
second ss, s 
millisecond ms 
Hàm DATEDIFF 
 DATEDIFF(datepart, startdate, enddate) 
 Hàm trả về khoảng thời gian giữa hai giá trị kiểu này được chỉ định tuỳ thuộc 
vào tham số datepart 
Hàm DATEPART 
 DATEPART(datepart, date) 
 Hàm trả về một số nguyên được trích ra từ thành phần (được chỉ định bởi tham 
số partdate) trong giá trị kiểu ngày được chỉ định. 
Hàm GETDATE 
 GETDATE() 
Hàm trả về ngày hiện tại 
Hàm DAY, MONTH, YEAR 
143 
 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL 
 DAY(date), MONTH(date), YEAR(date) 
 Hàm trả về giá trị ngày (tháng hoặc năm) của giá trị kiểu ngày được chỉ định. 
B.3 Hàm chuyển đổi kiểu 
Hàm CAST 
 CAST (biểu_thức AS kiểu_dữ_liệu) 
 Chuyển đổi giá trị của biểu thức sang kiểu được chỉ định 
Hàm CONVERT 
 CONVERT(kiểu_dữ_liệu, biểu_thức [,kiểu_chuyển_đổi]) 
 Hàm có chức năng chuyển đổi giá trị của biểu thức sang kiểu dữ liệu được chỉ 
định. Tham số kiểu_chuyển_đổi là một giá trị số thường được sử dụng khi chuyển đổi 
giá trị kiểu ngày sang kiểu chuỗi nhằm qui định khuôn dạng dữ liệu được hiển thị và 
được qui định như sau: 
Năm 2 chữ số Năm 4 chữ số Khuôn dạng dữ liệu 
 0 hoặc 100 mon dd yyyy hh:mi AM (PM) 
1 101 mm/dd/yy 
2 102 yy.mm.dd 
3 103 dd/mm/yy 
4 104 dd.mm.yy 
5 105 dd-mm-yy 
6 106 dd mon yy 
7 107 Mon dd, yy 
8 108 hh:mm:ss 
 9 hoặc 109 mon dd yyyy hh:mi:ss:mmmAM (PM) 
10 110 mm-dd-yy 
11 111 yy/mm/dd 
12 112 yymmdd 
 13 hoặc 113 dd mon yyyy hh:mm:ss:mmm(24h) 
14 114 hh:mi:ss:mmm(24h) 
144 
 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL 
 20 hoặc 120 yyyy-mm-dd hh:mi:ss(24h) 
 21 hoặc 121 yyyy-mm-dd hh:mi:ss.mmm(24h) 
 126 yyyy-mm-dd Thh:mm:ss:mmm(no spaces) 
 130 dd mon yyyy hh:mi:ss:mmmAM 
 131 dd/mm/yy hh:mi:ss:mmmAM 
Ví dụ: Câu lênh: 
SELECT hodem,ten, 
 CONVERT(NVARCHAR(20),ngaysinh,101) AS ngaysinh 
FROM sinhvien 
cho kết quả là: 
_______________________________________ 
145 
 Khoa CNTT - Trường ĐHKH Huế Giáo trình SQL 
TÀI LIỆU THAM KHẢO 
1. James R, Groff, Paul N.Weinberg, SQL: The Complete Reference, McGraw-
Hill/Osborne, 2002. 
2. Diana Lorentz, SQL Reference, Oracle Corporation, 2001. 
3. Marcilina S. Garcia, Jamie Reding, Edward Whalen, Steve Adrien DeLuca, SQL 
Server 2000 Administrator’s Companion, Microsoft Press, 2000. 
4. C. J. Date, Hugh Darwen, A Guide to the SQL Standard, Addison-Wesley 
Publishing, 1992. 
146 

File đính kèm:

  • pdfGiáo trình SQL - Trần Nguyên Phong.pdf
Tài liệu liên quan