Giáo trình SQL Server 2005
Mục lục
Mục lục . . . . . 1
1 Giới thiệu về SQL Server 2005 . . . 5
1.1 Cài đặt SQL Se rver 2005 Express Edition . . 5
1.1.1 Các yêu cầu cho hệ thống 32bit . . . 5
1.1.2 Các bước cài đặt SQL Server 2005 Express Edition . . 7
1.2 Một số thao tác c ơ bản trên SQL Server 2005 Express Edition. . 16
1.2.1 Tạo một CSDL mới . . . 16
1.2.2 Tạo bảng mới . . . . 17
1.2.3 Xóa bảng, xóa CSDL . . . 19
1.2.4 Mở một query editor để viết câu lệnh SQL . . 19
2 Structured Query Language (SQL) . . . 20
2.1 SQL là ngôn ng ữ của cơ sở dữ liệu quan hệ . . 20
2.2 Vai trò của SQL . . . . 20
2.3 Giới thiệu sơ lược về Transact SQL (T -SQL) . . 21
2.3.1 Ngôn ngữ định nghĩa dữ liệu ( Data Definition Language –DDL) . 22
2.3.2 Ngôn ngữ điều khiển dữ liệu (Data control language –DCL) . 22
2.3.3 Ngôn ngữ thao tác d ữ liệu (Data manipulation language –DML) . 23
2.3.4 Cú pháp của T-SQL . . . 24
2.3.5 Các kiểu dữ liệu . . . 25
2.3.6 Biến (Variables) . . . 26
2.3.7 Hàm (Function) . . . 27
2.3.8 Các toán tử (Operators) . . . 27
2.3.9 Các thành phần điều khiển (Control of flow) . . 28
2.3.10 Chú thích (Comment) . . . 28
2.3.11 Giá trị NULL . . . 28
3 Ngôn ngữ thao tác dữ liệu –DML . . . 29
3.1 Câu lệnh SELECT . . . . 29
3.1.1 Danh sách chọn trong câu lệnh SELECT . . 30
3.1.2 Mệnh đề FROM . . . 34
3.1.3 Mệnh đề WHERE -điều kiện truy vấn dữ liệu . . 34
3.1.4 Phép hợp (UNION) . . . 38
3.1.5 Phép nối . . . . 41
3.1.6 Các loại phép nối . . . 43
2
3.1.7 Phép nối theo chuẩn SQL -92 . . . 45
3.1.8 Mệnh đề GROUP BY . . . 47
3.1.9 Truy vấn con (Subquery) . . . 50
3.2 Thêm, cập nhật và xóa dữ liệu . . . 51
3.2.1 Thêm dữ liệu . . . . 52
3.2.2 Cập nhật dữ liệu . . . 53
3.2.3 Xóa dữ liệu. . . . 54
4 Ngôn ngữ định nghĩa dữ liệ u –DDL. . . 56
4.1 Tạo bảng . . . . 56
4.2 Các loại ràng buộc . . . . 58
4.2.1 Ràng buộc CHECK . . . 58
4.2.2 Ràng buộc PRIMARY KEY . . . 59
4.2.3 Ràng buộc FOREIGN KEY . . . 60
4.3 Sửa đổi định nghĩa bảng . . . 61
4.4 Xóa bảng . . . . 63
4.5 Khung nhìn -VIEW . . . 63
4.6 Thêm, cập nhật, xóa dữ liệu trong VIEW . . 65
4.7 Thay đổi định nghĩa khung nh ìn . . . 65
4.8 Xóa khung nhìn . . . . 66
5 Thủ tục lưu trữ, hàm và trigger . . . 67
5.1 Thủ tục lưu trữ (Stored procedure) . . . 67
5.1.1 Tạo thủ tục l ưu trữ . . . 68
5.1.2 Lời gọi thủ tục . . . 69
5.1.3 Biến trong thủ tục l ưu trữ . . . 69
5.1.4 Giá trị trả về trong thủ tục l ưu trữ. . . 70
5.1.5 Tham số với giá trị mặc định . . . 71
5.1.6 Sửa đổi thủ tục . . . 72
5.1.7 Xóa thủ tục . . . . 72
5.2 Hàm do người dùng định nghĩa (User Defined Function -UDF) . 72
5.2.1 Hàm vô hướng -Scalar UDF . . . 73
5.2.2 Hàm nội tuyến -Inline UDF . . . 74
5.2.3 Hàm bao gồm nhiều câu lệnh b ên trong –Multi statement UDF . 75
5.2.4 Thay đổi hàm . . . . 76
5.2.5 Xóa hàm . . . . 77
5.3 Trigger . . . . 77
3
5.3.1 Các đặc điểm của trigger . . . 77
5.3.2 Các trường hợp sử dụng trigger . . . 77
5.3.3 Khả năng sau của trigger . . . 78
5.3.4 Định nghĩa trigger . . . 78
5.3.5 Kích hoạt trigger dựa tr ên sự thay đổi dữ liệu tr ên cột . . 82
5.3.6 Sử dụng trigger v à Giao tác (TRANSACTION) . . 83
5.4 DDL TRIGGER . . . . 84
5.5 Enable/ Disable TRIGGER . . . 85
6 Sao lưu và ph ục hồi dữ liệu (Backup and Restore) . . 87
6.1 Các lý do phải thực hiện Backup . . . 87
6.2 Các loại Backup . . . . 87
6.2.1 Full backup và Differential backup . . 87
6.2.2 Transaction log backup . . . 88
6.3 Các thao tác th ực hiện quá tr ình Backup và Restore trong SQL Server 2005
Express Edition . . . . 89
6.3.1 Sao lưu (Backup) . . . 89
6.3.2 Phục hồi (Restore) . . . 91
7 Các hàm quan tr ọng trong T -SQL . . . 94
7.1 Các hàm làm việc với kiểu dữ liệu số . . . 94
7.1.1 Hàm ISNUMERIC . . . 94
7.1.2 Hàm ROUND . . . 94
7.2 Các hàm làm việc với kiểu dữ liệu chuỗi . . 95
7.2.1 Hàm LEFT . . . . 95
7.2.2 Hàm RIGHT . . . . 95
7.2.3 Hàm SUBSTRING . . . 95
7.2.4 Hàm LEN . . . . 96
7.2.5 Hàm REPLACE . . . 96
7.2.6 Hàm STUFF . . . . 96
7.2.7 Hàm LOWER/UPPER . . . 97
7.2.8 Hàm LTRIM/RTRIM . . . 97
7.3 Các hàm làm việc với kiểu dữ liệu Ng ày tháng/ Th ời gian . . 97
7.3.1 Hàm GETDATE . . . 97
7.3.2 Hàm DAY/ MONTH/ YEAR . . . 97
7.3.3 Hàm DATEPART . . . 98
7.3.4 Hàm DATENAME . . . 99
4
7.4 Hàm CAST và CONVERTER . . . 99
Tài liệu tham khảo . . . . 101
kup gần nhất. Trong những hệ thống CSDL lớn, quá tr ình differential backup sẽ sử dụng tài nguyên ít hơn rất nhiều so với quá trình full backup và có thể không ảnh hưởng đến hiệu suất của hệ thống. Quá trình differential ch ỉ sao lưu những sự thay đổi của dữ liệu từ lần full backup gần nhất, do đó khi có sự cố với CSDL nếu không có bản sao l ưu của quá trình full backup thì bản sao lưu của quá trình differential backup sẽ trở nên vô nghĩa. Ví dụ: Công ty XYZ thực hiện full backup vào cuối ngày thứ 6 hàng tuần và thực hiện differential backup vào tối các ngày từ thứ 2 tới thứ 5. Nếu CSDL có sự cố vào sáng thứ 4, quản trị viên CSDL sẽ phục hồi dữ liệu bằng bản sao l ưu của quá trình full backup của ngày thứ 6 tuần trước và sau đó phục hồi các thay đổi của dữ liệu bằng cách áp dụng bản sao l ưu của quá trình differential backup vào ngày th ứ 3. 88 6.2.2 Transaction log backup Quá trình full backup và differential backup chiếm nhiều tài nguyên hệ thống và ảnh hưởng đến hiệu suất làm việc hệ thống nên thường được thực hiện vào sau giờ làm việc. Tuy nhiên điều này có thể dẫn đến các mất mát dữ liệu trong một ng ày làm việc nếu CSDL có sự cố trước khi quá trình sao lưu diễn ra. Transaction log backup là một giải pháp nhằm giảm thiểu tối đa lượng dữ liệu có thể mất khi có sự cố CSDL. Trong quá trình hoạt động, SQL Server sử dụng transaction log để theo d õi tất cả các thay đổi trên CSDL. Log bảo đảm CSDL có thể phục hồi sau những sự cố đột xuất và cũng đảm bảo người dùng có thể quay ngược các kết quả trong các giao tác CSDL. Các giao tác chưa hoàn thành được lưu trong log trước khi được lưu vĩnh viễn trong CSDL. Transaction log backup sao lưu transactio n log của CSDL vào thiết bị lưu trữ. Mỗi khi transaction log được sao lưu, SQL Server bỏ đi các transaction đã thực hiện thành công (committed tracsaction) và ghi các transaction vào phương ti ện sao lưu. Transaction log backup sử dụng tài nguyên hệ thống ít hơn rất nhiều so với full backup và differential backup , do đó có thể sử dụng transaction log backup bất kỳ thời gian nào mà không sợ ảnh hưởng đến hiệu suất hệ thống. Trở lại với ví dụ về công ty XYZ. Công ty n ày thực hiện full backup vào tối thứ 6 và differential backup vào tối từ thứ 2 tới thứ 5. Công ty thực hiện thêm quá trình transaction log backup mỗi giờ một lần. Giả sử sự cố CSDL xảy ra vào 9h:05 sáng thứ 4. Quá trình khôi phục lại CSDL nhu sau: Dùng full backup và differential backup c ủa tối thứ 6 và tối thứ 3 để phục hồi lại trạng thái CSDL vào tối thứ 3. Tuy nhiên quá trình này vẫn còn để mất dữ liệu trong 2 giờ (7 – 9h) sáng thứ 4. Tiếp theo sử dụng 2 bản sao lưu transaction backup lúc 8h và 9h sáng để khôi phục CSDL về trạng thái lúc 9h sáng thứ 4. 89 6.3 Các thao tác thực hiện quá trình Backup và Restore trong SQL Server 2005 Express Edition 6.3.1 Sao lưu (Backup) Click OK 90 91 Click OK. Quá trình sao lưu hoàn tất 6.3.2 Phục hồi (Restore) 92 Click OK hai lần 93 Click OK. Quá trình phục hồi hoàn tất 94 7 Các hàm quan trọng trong T-SQL Ngôn ngữ T-SQL có nhiều hàm có thể tham gia vào câu lệnh T-SQL. Những hàm này thực hiện các nhiệm vụ quan trọng khác nhau. Trong ch ương này sẽ trình bày một số các hàm thông dụng để làm việc với các kiểu dữ liệu số, ch uỗi, ngày/thời gian và giá trị NULL trong SQL Server 2005. 7.1 Các hàm làm việc với kiểu dữ liệu số Các hàm quan trọng làm việc với kiểu dữ liệu số là hàm ISNUMERIC và ham ROUND 7.1.1 Hàm ISNUMERIC Hàm isNumeric kiểm tra một giá trị có phải thuộc kiểu dữ liệu số hay không. Ví dụ: Câu lệnh dưới đây trả về tên khách hàng, và một cột có tên NUMERIC. Cột này sẽ mang giá trị 0 nếu địa chỉ khách hàng không phải là số và ngược lại select CUSTOMERNAME, isnumeric(ADDRESS) as ISNUMERIC from customers 7.1.2 Hàm ROUND Hàm ROUND trả về một giá trị số, đã được làm tròn theo một độ đài chỉ định Cấu trúc hàm ROUND như sau: ROUND ( số_làm_tròn , độ_dài_làm_tròn ) Khi sử dụng hàm ROUND cần lưu ý: số_làm_tròn phải có kiểu dữ liệu số (numeric data type) nh ư int, float, decimal… trừ kiểu dữ liệu dạng nhị phân. Cho dù số_làm_tròn thuộc kiểu dữ liệu gì, kết quả hàm ROUND luôn trả về kiều số nguyên. Nếu độ_dài_làm_tròn là số âm và lớn hơn số chữ số phía trước dấu thập phân th ì hàm ROUND trả về 0. Ví dụ 1: 95 select ROUND(123.9994, 3), ROUND(123.99 95, 3) Ví dụ 2: select ROUND(123.4545, 2),ROUND(123.45, -2) Ví dụ 3: SELECT ROUND(150.75, 0), ROUND(150.75, 0, 1) 7.2 Các hàm làm việc với kiểu dữ liệu chuỗi Các hàm quan trọng bao gồm LEFT, RIGHT, LEN, REPLACE, STUFF, SUBSTRING, LOWER, UPPER, LTRIM, and RTRIM. 7.2.1 Hàm LEFT Hàm LEFT trả về một chuỗi ký tự có chiều d ài được chỉ định tính từ bên trái của chuỗi. Ví dụ: select left('Nha Trang', 5) 7.2.2 Hàm RIGHT Hàm RIGHT tương tự hàm LEFT nhưng tính từ bên phải của chuỗi Ví dụ: select right('Nha Trang', 5) 7.2.3 Hàm SUBSTRING Hàm STRING trích xuất một chuỗi con từ một chuỗi cho tr ước. Cấu trúc hàm SUBSTRING như sau: SUBSTRING (chuỗi_ban_đầu, vị_trí_bắt_đầu, chiều_d ài_chuỗi_con) Ví dụ 1: select substring ('Nha Trang', 2, 5) 96 Ví dụ 2: Select substring(‘Nha Trang’, -2, 5) 7.2.4 Hàm LEN Hàm LEN trả về chiều dài một chuỗi Ví dụ: Select len(‘Nha Trang’) 7.2.5 Hàm REPLACE Hàm REPLACE thay thế một chuỗi bởi một chuỗi khác Ví dụ 1: Câu lệnh dưới đây thay thế chữ “Nha” trong chuỗi Nha Trang bằng chữ “nha” Select replace(‘Nha Trang’, ‘Nha ’, ‘nha) Ví dụ 2: select replace(ADDRESS, 'Minh', 'Ninh') from customers 7.2.6 Hàm STUFF Hàm STUFF thay thế một số lượng xác định các ký tự trong một chuỗi bằng một chuỗi khác bắt đầu từ một vị trí được chỉ định. Ví dụ: 97 select stuff('Nha Trang', 2, 3, '*** ') 7.2.7 Hàm LOWER/UPPER Hàm LOWER chuyển các ký tự hoa trong chuỗi th ành các kí tự thường. Hàm UPPER chuyển các chuỗi ký tự thường trong chuỗi thành các ký tự hoa. Ví dụ: select lower('Nha Trang'), upper('Nha Trang') 7.2.8 Hàm LTRIM/RTRIM Hàm LTRIM cắt các khoảng trắng bên trái của chuỗi, hàm RTRIM cắt khoảng trắng bên phải chuỗi. Ví dụ: declare @llen int declare @rlen int declare @len int select @llen = len(ltrim(' Nha Trang')), @rlen = len(rtrim('Nha Trang ')), @len = len('Nha Trang') select @llen, @rlen, @len 7.3 Các hàm làm việc với kiểu dữ liệu Ngày tháng/ Thời gian 7.3.1 Hàm GETDATE Hàm GETDATE trả về ngày giờ lúc thực hiện câu truy vấn. Ví dụ: select getdate() 7.3.2 Hàm DAY/ MONTH/ YEAR Hàm DAY trả về ngày của một một giá trị thuộc kiểu datetime. Hàm MONTH trả về tháng của một giá trị thuộc kiểu datetime 98 Hàm YEAR trả về năm của một giá trị thuộc kiểu datetime. Ví dụ: select day(orderdate) as DAYOFORDER, month(orderdate) as MONTHOFORDER, year(orderdate) as YEAROFORDER from orders o inner join customers c on c.cus tomerid = o.customerid where c.customerid = 3 7.3.3 Hàm DATEPART Trong quá trình làm việc với các CSDL, đôi lúc ta muốn biết xem một ng ày nào đó thuộc quý mấy trong năm, hay thuộc tuần thứ mấy trong tháng . Hàm DATEPART giúp giải quyết các yêu cầu trên một cách dễ dàng. Cấu trúc hàm DATEPART như sau: DATEPART (yêu_cầu_trích_xuất, giá_trị_trích_xuất ) giá_trị_trích_xuất là một giá trị thuộc kiểu datetime. yêu_cầu_trích_xuất: ngày, tháng, năm, quý,…. Khi có một yêu cầu trích xuất nào đó, chúng ta sẽ có các chữ viết tắt tương ứng với các yêu cầu đó. Bảng dưới đây mô tả các yêu chữ viết tắt và các yêu cầu trích xuất tương ứng. Ý nghĩa Chữ viết tắt Năm yy, yyyy Quý qq,q Tháng mm,m Số ngày đã qua trong năm dy,y Ngày dd,d Tuần wk,ww Số ngày đã qua trong tuần dw Giờ hh Phút mi,n Giây ss,s Ví dụ: select datepart(yyyy, orderdate)as YEAROFORDERDATE, datepart(qq, orderdate)as QUARTEROFORDERDATE, 99 datepart(m, orderdate) as MONTHOFORDERDATE, datepart(wk, orderdate) as WEEKOFORDERDATE, datepart(d, orderdate) as DATEOFORDERDATE, datepart(dy, Orderdate), datepart(dw, orderdate) from orders 7.3.4 Hàm DATENAME Tương tự hàm DATEPART nhưng hàm DATENAME tr ả về một chuỗi ký tự Ví dụ: select datename(yyyy, orderdate)as YEAROFORDERDATE, datename(qq, orderdate)as QUARTEROFORDER DATE, datename(m, orderdate) as MONTHOFORDERDATE, datename(wk, orderdate) as WEEKOFORDERDATE, datename(d, orderdate) as DATEOFORDERDATE, datename(dy, Orderdate), datename(dw, orderdate) from orders 7.4 Hàm CAST và CONVERTER Chuyển đổi một giá trị thuộc kiểu dữ liệu này sang một kiểu dữ liệu khác. Hàm CAST và CONVERTER cung cấp cùng một chức năng. Một điểm thuận lợi khi dùng CONVERTER là khi chuyển đổi, hàm này cũng cho phép người dùng sẽ định dạng lại giá tri kết quả theo ý muốn. Cấu trúc hàm CAST và CONVERTER như sau: CAST (biểu_thức/giá_ trị AS kiểu_dữ liệu [độ_dài_kiểu_dữ_liệu ]) CONVERT ( kiểu_dữ liệu [độ_dài_kiểu_dữ_liệu ] , biểu_thức/giá_ trị [ ,kiểu_định_dạng] ) Năm 2 chữ số Năm 4 chữ số Output 0 hoặc 100 mon dd yyyy hh:mi AM (PM) 1 101 mm/dd/yy 2 102 yy.mm.dd 100 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) Ví1 dụ: select CUSTOMERNAME, convert (varchar, BIRTHDAY, 103) as BIRTHDAY, ADDRESS from Customers where Customername = 'Le Thi Hoa' and year(getdate()) - year(BIRTHDAY) > 20 Hàm CONVERT và hàm CAST có th ể sử dụng kết hợp với nhau để cho kết qua như mong muốn. Ví dụ: select c.CUSTOMERID, c.CUSTOMERNAME, convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY) as money),1) as SUMTOTAL from customers c inner join orders o on o.customerid = c.customerid inner join orderdetail od on o.or derid = od.orderid inner join items i on i.itemid = od.itemid group by c.customerid, c.customername 101 Tài liệu tham khảo 1. Giáo trình hệ quản trị cơ sở dữ liệu SQL Server, Khoa CNTT, Đại học Huế . 2. SQL Server 2005, T-SQL Recipes: Problem, Solution, Approach – Appress Publisher. 3. Sams Teach yourself Microsoft SQL Server 2005 Express in 24 hours.
File đính kèm:
- Giáo trình SQL Server 2005.pdf