Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (322.85 KB, 18 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
2
<b>1. Khái niệm cơ bản:</b>
<b>1. Khái niệm cơ bản:</b>
<b>a. Qui tắc định danh:</b>
<b>a. Qui tắc định danh:</b>
<b><sub>Tối đa 128 ký tự.</sub><sub>Tối đa 128 ký tự.</sub></b>
<b><sub>Bắt đầu là một ký tự thông thường A->Z</sub><sub>Bắt đầu là một ký tự thông thường A->Z</sub></b>
<b><sub>Bắt đầu là một ký hiệu (@,#) sẽ có một ý nghĩa </sub><sub>Bắt đầu là một ký hiệu (@,#) sẽ có một ý nghĩa </sub></b>
<b>khác.</b>
<b>khác.</b>
<b><sub>Những định danh nào có khoảng trắng ở giữa thì </sub><sub>Những định danh nào có khoảng trắng ở giữa thì </sub></b>
<b>phải kẹp trong dấu [] oặc “ ”</b>
<b>phải kẹp trong dấu [] oặc “ ”</b>
<b><sub>Các định danh không được trùng lắp và không </sub><sub>Các định danh không được trùng lắp và không </sub></b>
<b>trùng với từ khóa của T-SQL.</b>
<b>b. Tham chiếu đến các đối tượng:</b>
<b>b. Tham chiếu đến các đối tượng:</b>
<b><sub>Tên đầy đủ:</sub><sub>Tên đầy đủ:</sub></b> <b><sub>Server.database.ower.object</sub><sub>Server.database.ower.object</sub></b>
<b><sub>Tên ngắn: Nếu là local server thì ta khỏi chỉ </sub><sub>Tên ngắn: Nếu là local server thì ta khỏi chỉ </sub></b>
<b>Server, nếu ở CSDL hiện hành thì khơng cần chỉ </b>
<b>Server, nếu ở CSDL hiện hành thì khơng cần chỉ </b>
<b>Database; </b>
<b>Database; </b> <b>OwnerOwner mặc định là user name trong mặc định là user name trong </b>
<b>Database.</b>
<b>Database.</b>
<b><sub>Nếu tham chiếu tường minh thì tăng tốc.</sub><sub>Nếu tham chiếu tường minh thì tăng tốc.</sub></b>
<b>Ví dụ: </b>
<b>Ví dụ: </b> <b>Create TableCreate Table Northwind..orederhistNorthwind..orederhist</b>
<b>Create Table</b>
<b>Create Table Northwind.dbo.orederhistNorthwind.dbo.orederhist</b>
<b><sub>Database Owner (dbo) user có đầy đủ các quyền </sub><sub>Database Owner (dbo) user có đầy đủ các quyền </sub></b>
<b>thao tác trong CSDL. Bất kỳ một thành viên </b>
<b>thao tác trong CSDL. Bất kỳ một thành viên </b>
<b>thuộc nhóm sysadmin thì mặc nhiên thuộc dbo.</b>
4
<b>c. Kiểu dữ liệu (data type):</b>
<b>c. Kiểu dữ liệu (data type): xem lại bài 5 – Tr.43 xem lại bài 5 – Tr.43</b>
<b>d. Batch:</b>
<b>d. Batch: là một tập các phát biểu T-SQL nằm liên là một tập các phát biểu T-SQL nằm liên </b>
<b>tiếp và kết thúc bởi phát biểu GO</b>
<b>tiếp và kết thúc bởi phát biểu GO</b>
<b>Vd:</b>
<b>Vd:</b>
<b>USE</b>
<b>USE giaotrinh_dbgiaotrinh_db</b>
<b>GO</b>
<b>GO</b>
<b>Create View</b>
<b>Create View vw_NhanVien vw_NhanVien</b>
<b>AS</b>
<b>AS</b>
<b>Select</b>
<b>Select * From * From NhanVien NhanVien</b>
<b>GO </b>
<b>GO </b>
<b>Select</b>
<b>Select * From * From vw_NhanVien vw_NhanVien</b>
<b>GO</b>
<b><sub>Ghi chú:</sub><sub>Ghi chú:</sub></b>
<b><sub>Các phát biểu trong 1 batch được biên dịch </sub><sub>Các phát biểu trong 1 batch được biên dịch </sub></b>
<b>thành một nhóm.</b>
<b>thành một nhóm.</b>
<b><sub>Nếu một trong phát biểu của batch bị lỗi thì </sub><sub>Nếu một trong phát biểu của batch bị lỗi thì </sub></b>
<b>batch cũng xem như lỗi.</b>
<b>batch cũng xem như lỗi.</b>
<b><sub>Các phát biểu Create</sub><sub>Các phát biểu </sub></b> <b><sub>Create</sub><sub> bị ràng buộc trong một </sub><sub> bị ràng buộc trong một </sub></b>
<b>batch</b>
<b>batch đơn, tức trong batch đó chỉ có phát biểu đơn, tức trong batch đó chỉ có phát biểu </b>
<b>Create. Các phát biểu đó là: Create DataBase, </b>
<b>Create. Các phát biểu đó là: Create DataBase, </b>
<b>Create Table, Create Index,…</b>
<b>Create Table, Create Index,…</b>
<b>e.</b>
<b>e. Kịch bản (Script)Kịch bản (Script)</b>
<b><sub>Một Script là một tập của một hay nhiều bó lệnh </sub><sub>Một Script là một tập của một hay nhiều bó lệnh </sub></b>
<b>được lưu lại thành một tập tin SQL</b>
6
<b>2. Biến (Variable)</b>
<b>2. Biến (Variable)</b>
<b><sub>Biến được dùng để:</sub><sub>Biến được dùng để:</sub></b>
<b><sub>Phải được khai báo trước khi dùng.</sub><sub>Phải được khai báo trước khi dùng.</sub></b>
<b><sub>Các loại biến: biến cục bộ (local) và biến toàn </sub><sub>Các loại biến: biến cục bộ (local) và biến toàn </sub></b>
<b>cục (Global: được SQL Server đưa ra và có thể </b>
<b>cục (Global: được SQL Server đưa ra và có thể </b>
<b>dùng bất cứ khi nào và không cần khai báo </b>
<b>dùng bất cứ khi nào và không cần khai báo </b>
<b><sub>Biến cục bộ (Local variable)</sub><sub>Biến cục bộ (Local variable)</sub></b>
<b><sub>Được khai báo trong phần thân của một bó lệnh </sub><sub>Được khai báo trong phần thân của một bó lệnh </sub></b>
<b>hoặc một thủ tục.</b>
<b>hoặc một thủ tục.</b>
<b><sub>Phạm vi hoạt động của biến bắt đầu từ điểm mà </sub><sub>Phạm vi hoạt động của biến bắt đầu từ điểm mà </sub></b>
<b>nó được khai báo cho đến khi kết thúc một lơ </b>
<b>nó được khai báo cho đến khi kết thúc một lô </b>
<b>(batch)</b>
<b>(batch) hoặc stored procedure hoặc stored procedure hoặc Functionhoặc Function mà mà </b>
<b>nó được khai báo.</b>
<b>nó được khai báo.</b>
<b>a. Khai báo (Declare):</b>
<b>a. Khai báo (Declare):</b>
<b>DECLARE</b>
<b>DECLARE @var_name @var_name var_type [,…n] var_type [,…n] </b>
<b><sub>Gán giá trị cho biến:</sub><sub>Gán giá trị cho biến:</sub></b>
<b><sub>Nếu biến vừa khai báo xong thì biến mặc nhiên </sub><sub>Nếu biến vừa khai báo xong thì biến mặc nhiên </sub></b>
<b>được gán giá trị là NULL.</b>
<b>được gán giá trị là NULL.</b>
<b><sub>Để gán biến ta dùng lệnh Set</sub><sub>Để gán biến ta dùng lệnh </sub><sub>Set</sub><sub> hoặc dùng câu lệnh </sub><sub> hoặc dùng câu lệnh</sub></b>
<b>Select</b>
<b>Select</b>
<b><sub>Syntax:</sub><sub>Syntax:</sub></b>
<b>SET</b>
<b>SET @var_name = @var_name = expressionexpression</b>
<b>SELECT</b>
8
<b>Use</b>
<b>Use</b> <b>giaotrinh_dbgiaotrinh_db</b>
<b>GO</b>
<b>GO</b>
<b>Declare</b>
<b>Declare @NamLV int @NamLV int</b>
<b>Set</b>
<b>Set @NamLV = 1994 @NamLV = 1994</b>
<b>Select</b>
<b>Select * From * From NhanVien NhanVien</b>
<b>Where</b>
<b>Where</b> <b>YearYear(NgayLamViec) = @NamLV (NgayLamViec) = @NamLV </b>
<b>GO</b>
<b>GO</b>
<b>Use</b>
<b>Use</b> <b>giaotrinh_dbgiaotrinh_db</b>
<b>GO</b>
<b>GO</b>
<b>Declare</b>
<b>Declare @TenDem nvarchar @TenDem nvarchar(10),(10), @HoTen nvarchar @HoTen nvarchar(50) (50) </b>
<b>Set @TenDem = N</b>
<b>Set @TenDem = N''VanVan''</b>
<b>Select</b>
<b>Select @HoTen = Ho + @HoTen = Ho + ''</b> <b>'' + Ten From + Ten From NhanVien NhanVien</b>
<b>Where</b>
<b>Where</b> <b>Ho Like Ho Like '%' + '%' + @TenDem@TenDem + '%' + '%'</b>
<b>Select</b>
<b>Select</b> <b> @ @HoTen HoTen </b>
<b>GO</b>
<b>3. Cấu trúc điều khiển:</b>
<b>3. Cấu trúc điều khiển:</b>
<b>a. </b>
<b>a. Khối Khối BEGIN … END BEGIN … END </b>
<b>b. PRINT:</b>
<b>b. PRINT:</b> <b>Dùng để in thông tin ra màn hình kết quả Dùng để in thông tin ra màn hình kết quả </b>
<b>của SQL của 1 Biểu thức, chuỗi, hàm, biến….</b>
<b>của SQL của 1 Biểu thức, chuỗi, hàm, biến….</b>
<b>VD: </b>
<b>VD: PRINTPRINT N ‘Chào bạn’ N ‘Chào bạn’</b>
<b> </b>
<b> PRINTPRINT @@VERSION @@VERSION</b>
<b> </b>
<b> PRINTPRINT N‘Hai nhân năm = ‘ + N‘Hai nhân năm = ‘ + CastCast(2*5 as char(4))(2*5 as char(4))</b>
<b>c. Cấu trúc điều khiển:</b>
<b>c. Cấu trúc điều khiển: IF … ELSE IF … ELSE</b>
<b>Syntax:</b>
<b>Syntax:</b>
<b>IF </b>
<b>IF conditioncondition</b>
<b>{statement}</b>
<b>{statement}</b>
<b>[ ELSE </b>
10
<b>USE</b>
<b>USE GiaoTrinh_db GiaoTrinh_db</b>
<b>IF</b>
<b>IF</b> <b>( ( Select Select CountCount (*) (*) FromFrom KhachHang KhachHang</b>
<b>Where</b>
<b>Where TenCongTy = ‘ABC’ TenCongTy = ‘ABC’ ) ) > 0 > 0 </b>
<b>Begin</b>
<b>Begin</b>
<b>Print</b>
<b>Print ‘Có Cơng ty tên là ABC’ ‘Có Cơng ty tên là ABC’</b>
<b>End</b>
<b>End</b>
<b>ELSE</b>
<b>ELSE</b>
<b>Begin</b>
<b>Begin</b>
<b>Print</b>
<b>Print ‘Khơng Có Cơng ty tên là ABC’ ‘Khơng Có Cơng ty tên là ABC’</b>
<b>End</b>
<b>CASE</b>
<b>CASE input_expression input_expression </b>
<b> </b>
<b> WHENWHEN when_expression when_expression THENTHEN result_expression result_expression </b>
<b> </b>
<b> [ ...n ] [ ...n ] </b>
<b> </b>
<b> [ [ ELSEELSE else_result_expression ] else_result_expression ]</b>
<b>END</b>
<b>END</b>
<b></b>
<b></b>
<b>---CASE</b>
<b>CASE </b>
<b> </b>
<b> WHENWHEN when_expression when_expression THENTHEN result_expression result_expression </b>
<b> </b>
<b> [ ...n ] [ ...n ] </b>
<b> </b>
12
<b>SELECT</b>
<b>SELECT MaNhanVien, Ho, Ten, LuongCoBan + MaNhanVien, Ho, Ten, LuongCoBan + </b>
<b>CASE</b>
<b>CASE</b>
<b>WHEN </b>
<b>WHEN PhuCap PhuCap IS NULLIS NULL</b> <b>THENTHEN 0 0</b>
<b>ELSE</b>
<b>ELSE PhuCap PhuCap</b>
<b>END</b>
<b>END</b>
<b>FROM</b>
<b>FROM NHANVIEN NHANVIEN</b>
<b></b>
<b></b>
<b>---Select</b>
<b>Select N'Nhóm giá các loại hàng' = N'Nhóm giá các loại hàng' = </b>
<b> </b>
<b> CASECASE</b>
<b> </b>
<b> WhenWhen price price IS NULLIS NULL THENTHEN N'Chưa có gía' N'Chưa có gía'</b>
<b> </b>
<b> WhenWhen price < 10 price < 10 THENTHEN N'Giá < 10' N'Giá < 10'</b>
<b> </b>
<b> WhenWhen price >= 10 price >= 10 andand price < 20 price < 20 ThenThen N'Giá >= 10 và <=20' N'Giá >= 10 và <=20'</b>
<b> </b>
<b> ElseElse N'Giá > 20' N'Giá > 20'</b>
<b> </b>
<b> ENDEND,,</b>
<b> </b>
<b> Title Title asas N'Tựa đề' N'Tựa đề'</b>
<b>FROM</b>
<b>FROM titles titles</b>
<b>ORDER BY</b>
<b>DECLARE</b>
<b>DECLARE @a as @a as intint, @b as , @b as intint</b>
<b>DECLARE</b>
<b>DECLARE @ketqua as @ketqua as nvarcharnvarchar(30)(30)</b>
<b>SET</b>
<b>SET @a=3 @a=3</b>
<b>SET</b>
<b>SET @b=5 @b=5</b>
<b>SET</b>
<b>SET @ketqua = @ketqua = CASECASE</b>
<b> </b>
<b> WHENWHEN @a<@b @a<@b THENTHEN N'A nhỏ hơn B' N'A nhỏ hơn B'</b>
<b> </b>
<b> WHENWHEN @a<@b THEN N'A lớn hơn B' @a<@b THEN N'A lớn hơn B'</b>
<b> </b>
<b> ELSEELSE N'A bằng B' N'A bằng B'</b>
<b> </b>
<b> ENDEND --- End cua CASE --- End cua CASE</b>
<b>PRINT</b>
14
<b>WHILE</b>
<b>WHILE Boolean_expression Boolean_expression</b>
<b> </b>
<b> {sql_statement | statement_block}{sql_statement | statement_block}</b>
<b>[ BREAK ]</b>
<b>[ BREAK ]</b>
<b> </b>
<b> {sql_statement | statement_block}{sql_statement | statement_block}</b>
<b>[ CONTINUE ]</b>
<b>[ CONTINUE ]</b>
<b><sub>[BREAK]:</sub><sub>[BREAK]:</sub><sub> Dùng để kết thúc vòng lặp khi gặp một </sub><sub> Dùng để kết thúc vòng lặp khi gặp một </sub></b>
<b>trường hợp cụ thể nào đó.</b>
<b>trường hợp cụ thể nào đó.</b>
<b><sub>[CONTINUE]:</sub><sub>[CONTINUE]:</sub><sub> Lặp lại đầu vịng lặp.</sub><sub> Lặp lại đầu vịng lặp.</sub></b>
<b><sub>Thơng thường 2 từ khóa </sub><sub>Thơng thường 2 từ khóa </sub></b> <b><sub>Break</sub><sub>Break</sub><sub> và </sub><sub> và </sub></b> <b><sub>Continue</sub><sub>Continue</sub><sub> nằm </sub><sub> nằm </sub></b>
<b>trong trong cấu trúc </b>
<b>USE</b>
<b>USE pubs pubs</b>
<b>GO</b>
<b>GO</b>
<b>WHILE</b>
<b>WHILE (SELECT (SELECT AVGAVG(price) FROM(price) FROM titles) < $30 titles) < $30</b>
<b>BEGIN</b>
<b>BEGIN</b>
<b> </b>
<b> UPDATEUPDATE titles titles</b>
<b> </b>
<b> SETSET price = price * 2 price = price * 2</b>
<b> </b>
<b> SELECTSELECT MAX(price) FROM titles MAX(price) FROM titles</b>
<b> </b>
<b> IFIF (SELECT (SELECT MAXMAX(price) FROM(price) FROM titles) > $50 titles) > $50</b>
<b> BREAKBREAK</b>
<b> </b>
<b> ELSEELSE</b>
<b> </b>
<b> CONTINUECONTINUE</b>
<b>END</b>
16
<b>e. Lệnh RETURN: </b>
<b>e. Lệnh RETURN: RETURNRETURN [integer_expression] [integer_expression]</b>
<b>Return </b>
<b>Return </b> <b>kết thúc tiến trình trình xử lý, Returnkết thúc tiến trình trình xử lý, </b> <b>Return thường thường </b>
<b>được dùng trong thủ tục lưu trữ </b>
<b>được dùng trong thủ tục lưu trữ (Store Procedure).(Store Procedure).</b>
<b>f. </b>
<b>f. </b> <b>Lệnh WAITFOR: Lệnh WAITFOR: Là một chỉ thị cho SQL Server tạm Là một chỉ thị cho SQL Server tạm </b>
<b>dừng một thời gian trước khi xử lý tiếp các phát biểu </b>
<b>sau đó.</b>
<b>sau đó.</b>
<b>Syntax:</b>
<b>Syntax: WAITFOR WAITFOR { DELAY{ DELAY ‘time’ | TIME ‘time’ | TIME ‘time’ } ‘time’ }</b>
<b>‘</b>
<b>‘time’: Được viết theo dạng hh:mm:ss, tối đa là 24 giờtime’: Được viết theo dạng hh:mm:ss, tối đa là 24 giờ</b>
<b>DELAY ‘Time’:</b>
<b>DELAY ‘Time’: Hệ thống tạm dừng trong Hệ thống tạm dừng trong khoảng thời khoảng thời </b>
<b>gian ‘Time’ VD: </b>
<b>gian ‘Time’ VD: WAITFOR DELAY WAITFOR DELAY ’02:10’’02:10’</b>
<b>TIME ‘Time’:</b>
<b>TIME ‘Time’: Hệ thống được tạm dừng đến Hệ thống được tạm dừng </b> <b>đến thời gian thời gian </b>
<b>‘Time’ chỉ ra. VD: </b>
<b>g. Lệnh RAIREEOR</b>
<b>g. Lệnh RAIREEOR</b>
<b>Phát sinh lỗi của người dùng. Người dùng có thể phát sinh </b>
<b>Phát sinh lỗi của người dùng. Người dùng có thể phát sinh </b>
<b>các lỗi từ bảng </b>
<b>các lỗi từ bảng sysmessagesysmessage hoặc xây dựng lỗi động tùy hoặc xây dựng lỗi động tùy </b>
<b>thông tin của người dùng. </b>
<b>thông tin của người dùng. </b>
<b>RAISERROR </b>
<b>RAISERROR ({msg_id | msg_str} {, severity, state}({msg_id | msg_str} {, severity, state}</b>
<b>[,argument [,…n]])</b>
<b>[,argument [,…n]])</b>
<b>[WITH option [,…n]]</b>
<b>[WITH option [,…n]]</b>
<b>Thêm một lỗi mới của người dùng định nghĩa:</b>
<b>Thêm một lỗi mới của người dùng định nghĩa:</b>
<b>Sp_addMessage </b>
<b>Sp_addMessage msg_ID, severity, ‘msg’ [,’language’]msg_ID, severity, ‘msg’ [,’language’]</b>
<b>[,’with_log’] [,’replace’]</b>
<b>[,’with_log’] [,’replace’]</b>
<b>Xóa một lỗi của người dùng</b>
<b>Xóa một lỗi của người dùng</b>
<b> </b>
18
<b><sub>Msg_id:</sub><sub>Msg_id:</sub><sub> Là mã số của lỗi mới, là một số int, không được </sub><sub> Là mã số của lỗi mới, là một số int, khơng được </sub></b>
<b>trùng các mã đã có sẵn, bắt đầu là </b>
<b>trùng các mã đã có sẵn, bắt đầu là 5000150001..</b>
<b><sub>Severity:</sub><sub>Severity:</sub><sub> Là mức lỗi của lỗi, là một số smallint</sub><sub> Là mức lỗi của lỗi, là một số </sub><sub>smallint</sub><sub>. Mức hợp lệ </sub><sub>. Mức hợp lệ </sub></b>
<b>là từ 1 đến 25. Chỉ có người quản trị CSDL mới có thể phát </b>
<b>là từ 1 đến 25. Chỉ có người quản trị CSDL mới có thể phát </b>
<b>sinh thêm một thông báo lỗi mới từ 19 đến 25.</b>
<b>sinh thêm một thông báo lỗi mới từ 19 đến 25.</b>
<b><sub>‘</sub><sub>‘</sub><sub>msg’:</sub><sub>msg’:</sub><sub> Là một chuỗi thông báo lỗi, tối đa 255 ký tự.</sub><sub> Là một chuỗi thông báo lỗi, tối đa 255 ký tự.</sub></b>
<b><sub>‘</sub><sub>‘</sub><sub>Language’:</sub><sub>Language’:</sub><sub> mặc định là ngôn ngữ của phiên kết nối.</sub><sub> mặc định là ngôn ngữ của phiên kết nối.</sub></b>
<b><sub>‘</sub><sub>‘</sub><sub>with_log’:</sub><sub>with_log’:</sub><sub> Thơng báo lỗi có được ghi nhận vào nhật ký </sub><sub> Thơng báo lỗi có được ghi nhận vào nhật ký </sub></b>
<b>của ứng dụng khi nó xảy ra hay khơng, mặc định là </b>
<b>của ứng dụng khi nó xảy ra hay không, mặc định là FALSEFALSE. . </b>
<b><sub>‘</sub><sub>‘</sub><sub>replace’:</sub><sub>replace’:</sub><sub> Nếu được chỉ định chuỗi REPLACE</sub><sub> Nếu được chỉ định chuỗi </sub><sub>REPLACE</sub><sub>, thì thơng </sub><sub>, thì thơng </sub></b>
<b>báo lỗi đã tồn tại được ghi đè bởi chuỗi thông báo mới và </b>
<b>mức lỗi mới. Tham số này phải chỉ định nếu </b>