Giáo Trình SQL bài 10
Chia sẻ bởi Trần Thị Thanh Diệu |
Ngày 19/03/2024 |
13
Chia sẻ tài liệu: Giáo Trình SQL bài 10 thuộc Công nghệ thông tin
Nội dung tài liệu:
1
CƠ BẢN VỀ LẬP TRÌNH BẰNG TRANSACT – SQL
2
1. Khái niệm cơ bản:
a. Qui tắc định danh:
Tối đa 128 ký tự.
Bắt đầu là một ký tự thông thường A->Z
Bắt đầu là một ký hiệu (@,#) sẽ có một ý nghĩa khác.
Những định danh nào có khoảng trắng ở giữa thì phải kẹp trong dấu [] oặc “ ”
Các định danh không được trùng lắp và không trùng với từ khóa của T-SQL.
3
b. Tham chiếu đến các đối tượng:
Tên đầy đủ: Server.database.ower.object
Tên ngắn: Nếu là local server thì ta khỏi chỉ Server, nếu ở CSDL hiện hành thì không cần chỉ Database; Owner mặc định là user name trong Database.
Nếu tham chiếu tường minh thì tăng tốc.
Ví dụ: Create Table Northwind..orederhist
Create Table Northwind.dbo.orederhist
Database Owner (dbo) user có đầy đủ các quyền thao tác trong CSDL. Bất kỳ một thành viên thuộc nhóm sysadmin thì mặc nhiên thuộc dbo.
4
c. Kiểu dữ liệu (data type): xem lại bài 5 – Tr.43
d. Batch: là một tập các phát biểu T-SQL nằm liên tiếp và kết thúc bởi phát biểu GO
Vd:
USE giaotrinh_db
GO
Create View vw_NhanVien
AS
Select * From NhanVien
GO
Select * From vw_NhanVien
GO
5
Ghi chú:
Các phát biểu trong 1 batch được biên dịch thành một nhóm.
Nếu một trong phát biểu của batch bị lỗi thì batch cũng xem như lỗi.
Các phát biểu Create bị ràng buộc trong một batch đơn, tức trong batch đó chỉ có phát biểu Create. Các phát biểu đó là: Create DataBase, Create Table, Create Index,…
e. Kịch bản (Script)
Một Script là một tập của một hay nhiều bó lệnh được lưu lại thành một tập tin SQL
6
2. Biến (Variable)
Biến được dùng để:
Phải được khai báo trước khi dùng.
Các loại biến: biến cục bộ (local) và biến toàn cục (Global: được SQL Server đưa ra và có thể dùng bất cứ khi nào và không cần khai báo
Biến cục bộ (Local variable)
Được khai báo trong phần thân của một bó lệnh hoặc một thủ tục.
Phạm vi hoạt động của biến bắt đầu từ điểm mà nó được khai báo cho đến khi kết thúc một lô (batch) hoặc stored procedure hoặc Function mà nó được khai báo.
Tên của biến bắt đầu @
7
a. Khai báo (Declare):
DECLARE @var_name var_type [,…n]
Gán giá trị cho biến:
Nếu biến vừa khai báo xong thì biến mặc nhiên được gán giá trị là NULL.
Để gán biến ta dùng lệnh Set hoặc dùng câu lệnh Select
Syntax:
SET @var_name = expression
SELECT {@var_name = expression} [,…n]
8
Use giaotrinh_db
GO
Declare @NamLV int
Set @NamLV = 1994
Select * From NhanVien
Where Year(NgayLamViec) = @NamLV
GO
Use giaotrinh_db
GO
Declare @TenDem nvarchar(10), @HoTen nvarchar(50)
Set @TenDem = N`Van`
Select @HoTen = Ho + ` ` + Ten From NhanVien
Where Ho Like `%` + @TenDem + `%`
Select @HoTen
GO
9
3. Cấu trúc điều khiển:
a. Khối BEGIN … END
b. PRINT: Dùng để in thông tin ra màn hình kết quả của SQL của 1 Biểu thức, chuỗi, hàm, biến….
VD: PRINT N ‘Chào bạn’
PRINT @@VERSION
PRINT N‘Hai nhân năm = ‘ + Cast(2*5 as char(4))
c. Cấu trúc điều khiển: IF … ELSE
Syntax:
IF condition
{statement}
[ ELSE [Condition 1 ]
{statement} ]
10
USE GiaoTrinh_db
IF ( Select Count (*) From KhachHang
Where TenCongTy = ‘ABC’ ) > 0
Begin
Print ‘Có Công ty tên là ABC’
End
ELSE
Begin
Print ‘Không Có Công ty tên là ABC’
End
11
d. Cấu trúc của CASE
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[ ELSE else_result_expression ]
END
-----------------------------------------
CASE
WHEN when_expression THEN result_expression
[ ...n ]
[ ELSE else_result_expression ]
END
12
SELECT MaNhanVien, Ho, Ten, LuongCoBan +
CASE
WHEN PhuCap IS NULL THEN 0
ELSE PhuCap
END
FROM NHANVIEN
-------------------------------------------
Select N`Nhóm giá các loại hàng` =
CASE
When price IS NULL THEN N`Chưa có gía`
When price < 10 THEN N`Giá < 10`
When price >= 10 and price < 20 Then N`Giá >= 10 và <=20`
Else N`Giá > 20`
END,
Title as N`Tựa đề`
FROM titles
ORDER BY price
13
DECLARE @a as int, @b as int
DECLARE @ketqua as nvarchar(30)
SET @a=3
SET @b=5
SET @ketqua = CASE
WHEN @a<@b THEN N`A nhỏ hơn B`
WHEN @a<@b THEN N`A lớn hơn B`
ELSE N`A bằng B`
END --- End cua CASE
PRINT @ketqua
14
e. Vòng lặp WHILE
WHILE Boolean_expression
{sql_statement | statement_block}
[ BREAK ]
{sql_statement | statement_block}
[ CONTINUE ]
[BREAK]: Dùng để kết thúc vòng lặp khi gặp một trường hợp cụ thể nào đó.
[CONTINUE]: Lặp lại đầu vòng lặp.
Thông thường 2 từ khóa Break và Continue nằm trong trong cấu trúc If…Else…
15
e. Vòng lặp WHILE
USE pubs
GO
WHILE (SELECT AVG(price) FROM titles) < $30
BEGIN
UPDATE titles
SET price = price * 2
SELECT MAX(price) FROM titles
IF (SELECT MAX(price) FROM titles) > $50
BREAK
ELSE
CONTINUE
END
PRINT `Too much for the market to bear`
16
e. Lệnh RETURN: RETURN [integer_expression]
Return kết thúc tiến trình trình xử lý, Return thường được dùng trong thủ tục lưu trữ (Store Procedure).
f. Lệnh WAITFOR: Là một chỉ thị cho SQL Server tạm dừng một thời gian trước khi xử lý tiếp các phát biểu sau đó.
Syntax: WAITFOR { DELAY ‘time’ | TIME ‘time’ }
‘time’: Được viết theo dạng hh:mm:ss, tối đa là 24 giờ
DELAY ‘Time’: Hệ thống tạm dừng trong khoảng thời gian ‘Time’ VD: WAITFOR DELAY ’02:10’
TIME ‘Time’: Hệ thống được tạm dừng đến thời gian ‘Time’ chỉ ra. VD: WAITFOR TIME ’02:10’
17
g. Lệnh RAIREEOR
Phát sinh lỗi của người dùng. Người dùng có thể phát sinh các lỗi từ bảng sysmessage hoặc xây dựng lỗi động tùy thông tin của người dùng.
RAISERROR ({msg_id | msg_str} {, severity, state}
[,argument [,…n]])
[WITH option [,…n]]
Thêm một lỗi mới của người dùng định nghĩa:
Sp_addMessage msg_ID, severity, ‘msg’ [,’language’][,’with_log’] [,’replace’]
Xóa một lỗi của người dùng
Sp_dropmessage Msg_ID
18
Msg_id: Là mã số của lỗi mới, là một số int, không được trùng các mã đã có sẵn, bắt đầu là 50001.
Severity: Là mức lỗi của lỗi, là một số smallint. Mức hợp lệ là từ 1 đến 25. Chỉ có người quản trị CSDL mới có thể phát sinh thêm một thông báo lỗi mới từ 19 đến 25.
‘msg’: Là một chuỗi thông báo lỗi, tối đa 255 ký tự.
‘Language’: mặc định là ngôn ngữ của phiên kết nối.
‘with_log’: Thông báo lỗi có được ghi nhận vào nhật ký của ứng dụng khi nó xảy ra hay không, mặc định là FALSE.
‘replace’: Nếu được chỉ định chuỗi REPLACE, thì thông báo lỗi đã tồn tại được ghi đè bởi chuỗi thông báo mới và mức lỗi mới. Tham số này phải chỉ định nếu msg_id đã có.
Lưu ý: Nếu trả về 0 tức là thêm vào thành công, 1 thất bại.
CƠ BẢN VỀ LẬP TRÌNH BẰNG TRANSACT – SQL
2
1. Khái niệm cơ bản:
a. Qui tắc định danh:
Tối đa 128 ký tự.
Bắt đầu là một ký tự thông thường A->Z
Bắt đầu là một ký hiệu (@,#) sẽ có một ý nghĩa khác.
Những định danh nào có khoảng trắng ở giữa thì phải kẹp trong dấu [] oặc “ ”
Các định danh không được trùng lắp và không trùng với từ khóa của T-SQL.
3
b. Tham chiếu đến các đối tượng:
Tên đầy đủ: Server.database.ower.object
Tên ngắn: Nếu là local server thì ta khỏi chỉ Server, nếu ở CSDL hiện hành thì không cần chỉ Database; Owner mặc định là user name trong Database.
Nếu tham chiếu tường minh thì tăng tốc.
Ví dụ: Create Table Northwind..orederhist
Create Table Northwind.dbo.orederhist
Database Owner (dbo) user có đầy đủ các quyền thao tác trong CSDL. Bất kỳ một thành viên thuộc nhóm sysadmin thì mặc nhiên thuộc dbo.
4
c. Kiểu dữ liệu (data type): xem lại bài 5 – Tr.43
d. Batch: là một tập các phát biểu T-SQL nằm liên tiếp và kết thúc bởi phát biểu GO
Vd:
USE giaotrinh_db
GO
Create View vw_NhanVien
AS
Select * From NhanVien
GO
Select * From vw_NhanVien
GO
5
Ghi chú:
Các phát biểu trong 1 batch được biên dịch thành một nhóm.
Nếu một trong phát biểu của batch bị lỗi thì batch cũng xem như lỗi.
Các phát biểu Create bị ràng buộc trong một batch đơn, tức trong batch đó chỉ có phát biểu Create. Các phát biểu đó là: Create DataBase, Create Table, Create Index,…
e. Kịch bản (Script)
Một Script là một tập của một hay nhiều bó lệnh được lưu lại thành một tập tin SQL
6
2. Biến (Variable)
Biến được dùng để:
Phải được khai báo trước khi dùng.
Các loại biến: biến cục bộ (local) và biến toàn cục (Global: được SQL Server đưa ra và có thể dùng bất cứ khi nào và không cần khai báo
Biến cục bộ (Local variable)
Được khai báo trong phần thân của một bó lệnh hoặc một thủ tục.
Phạm vi hoạt động của biến bắt đầu từ điểm mà nó được khai báo cho đến khi kết thúc một lô (batch) hoặc stored procedure hoặc Function mà nó được khai báo.
Tên của biến bắt đầu @
7
a. Khai báo (Declare):
DECLARE @var_name var_type [,…n]
Gán giá trị cho biến:
Nếu biến vừa khai báo xong thì biến mặc nhiên được gán giá trị là NULL.
Để gán biến ta dùng lệnh Set hoặc dùng câu lệnh Select
Syntax:
SET @var_name = expression
SELECT {@var_name = expression} [,…n]
8
Use giaotrinh_db
GO
Declare @NamLV int
Set @NamLV = 1994
Select * From NhanVien
Where Year(NgayLamViec) = @NamLV
GO
Use giaotrinh_db
GO
Declare @TenDem nvarchar(10), @HoTen nvarchar(50)
Set @TenDem = N`Van`
Select @HoTen = Ho + ` ` + Ten From NhanVien
Where Ho Like `%` + @TenDem + `%`
Select @HoTen
GO
9
3. Cấu trúc điều khiển:
a. Khối BEGIN … END
b. PRINT: Dùng để in thông tin ra màn hình kết quả của SQL của 1 Biểu thức, chuỗi, hàm, biến….
VD: PRINT N ‘Chào bạn’
PRINT @@VERSION
PRINT N‘Hai nhân năm = ‘ + Cast(2*5 as char(4))
c. Cấu trúc điều khiển: IF … ELSE
Syntax:
IF condition
{statement}
[ ELSE [Condition 1 ]
{statement} ]
10
USE GiaoTrinh_db
IF ( Select Count (*) From KhachHang
Where TenCongTy = ‘ABC’ ) > 0
Begin
Print ‘Có Công ty tên là ABC’
End
ELSE
Begin
Print ‘Không Có Công ty tên là ABC’
End
11
d. Cấu trúc của CASE
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[ ELSE else_result_expression ]
END
-----------------------------------------
CASE
WHEN when_expression THEN result_expression
[ ...n ]
[ ELSE else_result_expression ]
END
12
SELECT MaNhanVien, Ho, Ten, LuongCoBan +
CASE
WHEN PhuCap IS NULL THEN 0
ELSE PhuCap
END
FROM NHANVIEN
-------------------------------------------
Select N`Nhóm giá các loại hàng` =
CASE
When price IS NULL THEN N`Chưa có gía`
When price < 10 THEN N`Giá < 10`
When price >= 10 and price < 20 Then N`Giá >= 10 và <=20`
Else N`Giá > 20`
END,
Title as N`Tựa đề`
FROM titles
ORDER BY price
13
DECLARE @a as int, @b as int
DECLARE @ketqua as nvarchar(30)
SET @a=3
SET @b=5
SET @ketqua = CASE
WHEN @a<@b THEN N`A nhỏ hơn B`
WHEN @a<@b THEN N`A lớn hơn B`
ELSE N`A bằng B`
END --- End cua CASE
PRINT @ketqua
14
e. Vòng lặp WHILE
WHILE Boolean_expression
{sql_statement | statement_block}
[ BREAK ]
{sql_statement | statement_block}
[ CONTINUE ]
[BREAK]: Dùng để kết thúc vòng lặp khi gặp một trường hợp cụ thể nào đó.
[CONTINUE]: Lặp lại đầu vòng lặp.
Thông thường 2 từ khóa Break và Continue nằm trong trong cấu trúc If…Else…
15
e. Vòng lặp WHILE
USE pubs
GO
WHILE (SELECT AVG(price) FROM titles) < $30
BEGIN
UPDATE titles
SET price = price * 2
SELECT MAX(price) FROM titles
IF (SELECT MAX(price) FROM titles) > $50
BREAK
ELSE
CONTINUE
END
PRINT `Too much for the market to bear`
16
e. Lệnh RETURN: RETURN [integer_expression]
Return kết thúc tiến trình trình xử lý, Return thường được dùng trong thủ tục lưu trữ (Store Procedure).
f. Lệnh WAITFOR: Là một chỉ thị cho SQL Server tạm dừng một thời gian trước khi xử lý tiếp các phát biểu sau đó.
Syntax: WAITFOR { DELAY ‘time’ | TIME ‘time’ }
‘time’: Được viết theo dạng hh:mm:ss, tối đa là 24 giờ
DELAY ‘Time’: Hệ thống tạm dừng trong khoảng thời gian ‘Time’ VD: WAITFOR DELAY ’02:10’
TIME ‘Time’: Hệ thống được tạm dừng đến thời gian ‘Time’ chỉ ra. VD: WAITFOR TIME ’02:10’
17
g. Lệnh RAIREEOR
Phát sinh lỗi của người dùng. Người dùng có thể phát sinh các lỗi từ bảng sysmessage hoặc xây dựng lỗi động tùy thông tin của người dùng.
RAISERROR ({msg_id | msg_str} {, severity, state}
[,argument [,…n]])
[WITH option [,…n]]
Thêm một lỗi mới của người dùng định nghĩa:
Sp_addMessage msg_ID, severity, ‘msg’ [,’language’][,’with_log’] [,’replace’]
Xóa một lỗi của người dùng
Sp_dropmessage Msg_ID
18
Msg_id: Là mã số của lỗi mới, là một số int, không được trùng các mã đã có sẵn, bắt đầu là 50001.
Severity: Là mức lỗi của lỗi, là một số smallint. Mức hợp lệ là từ 1 đến 25. Chỉ có người quản trị CSDL mới có thể phát sinh thêm một thông báo lỗi mới từ 19 đến 25.
‘msg’: Là một chuỗi thông báo lỗi, tối đa 255 ký tự.
‘Language’: mặc định là ngôn ngữ của phiên kết nối.
‘with_log’: Thông báo lỗi có được ghi nhận vào nhật ký của ứng dụng khi nó xảy ra hay không, mặc định là FALSE.
‘replace’: Nếu được chỉ định chuỗi REPLACE, thì thông báo lỗi đã tồn tại được ghi đè bởi chuỗi thông báo mới và mức lỗi mới. Tham số này phải chỉ định nếu msg_id đã có.
Lưu ý: Nếu trả về 0 tức là thêm vào thành công, 1 thất bại.
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Trần Thị Thanh Diệu
Dung lượng: |
Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)