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
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:
- Giáo trình SQL - Trần Nguyên Phong.pdf