Tải bản đầy đủ (.ppt) (18 trang)

Bài giảng điện tử môn tin học: Cơ bản về lập trình bằng Transact_SQL potx

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 (295.76 KB, 18 trang )

1
CƠ BẢN VỀ LẬP TRÌNH
BẰNG TRANSACT – SQL
10
10
2
1. Khái niệm cơ bản:
1. Khái niệm cơ bản:
a. Qui tắc định danh:
a. Qui tắc định danh:

Tối đa 128 ký tự.
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ý tự thông thường A->Z

Bắt đầu là một ký hiệu (@,#) sẽ có một ý nghĩa
Bắt đầu là một ký hiệu (@,#) sẽ có một ý nghĩa
khác.
khác.

Những định danh nào có khoảng trắng ở giữa thì
Những định danh nào có khoảng trắng ở giữa thì
phải kẹp trong dấu [] oặc “ ”
phải kẹp trong dấu [] oặc “ ”

Các định danh không được trùng lắp và không
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.
trùng với từ khóa của T-SQL.


3
b. Tham chiếu đến các đối tượng:
b. Tham chiếu đến các đối tượng:

Tên đầy đủ:
Tên đầy đủ:
Server.database.ower.object
Server.database.ower.object

Tên ngắn: Nếu là local server thì ta khỏi chỉ
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ỉ
Server, nếu ở CSDL hiện hành thì không cần chỉ
Database;
Database;
Owner
Owner
mặc định là user name trong
mặc định là user name trong
Database.
Database.

Nếu tham chiếu tường minh thì tăng tốc.
Nếu tham chiếu tường minh thì tăng tốc.
Ví dụ:
Ví dụ:
Create Table
Create Table



Northwind orederhist
Northwind orederhist
Create Table
Create Table


Northwind.dbo.orederhist
Northwind.dbo.orederhist

Database Owner (dbo) user có đầy đủ các quyền
Database Owner (dbo) user có đầy đủ các quyền
thao tác trong CSDL. Bất kỳ một thành viê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.
thuộc nhóm sysadmin thì mặc nhiên thuộc dbo.
4
c. Kiểu dữ liệu (data type):
c. Kiểu dữ liệu (data type):
xem lại bài 5 – Tr.43
xem lại bài 5 – Tr.43
d. Batch:
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
tiếp và kết thúc bởi phát biểu GO
tiếp và kết thúc bởi phát biểu GO
Vd:
Vd:
USE
USE



giaotrinh_db
giaotrinh_db
GO
GO
Create View
Create View
vw_NhanVien
vw_NhanVien
AS
AS
Select
Select
*
*
From
From
NhanVien
NhanVien
GO
GO
Select
Select
*
*
From
From
vw_NhanVien
vw_NhanVien

GO
GO
5

Ghi chú:
Ghi chú:

Các phát biểu trong 1 batch được biên dịch
Các phát biểu trong 1 batch được biên dịch
thành một nhóm.
thành một nhóm.

Nếu một trong phát biểu của batch bị lỗi thì
Nếu một trong phát biểu của batch bị lỗi thì
batch cũng xem như lỗi.
batch cũng xem như lỗi.

Các phát biểu
Các phát biểu
Create
Create
bị ràng buộc trong một
bị ràng buộc trong một
batch
batch
đơn, tức trong batch đó chỉ có phát biểu
đơn, tức trong batch đó chỉ có phát biểu
Create. Các phát biểu đó là: Create DataBase,
Create. Các phát biểu đó là: Create DataBase,
Create Table, Create Index,…

Create Table, Create Index,…
e.
e.


Kịch bản (Script)
Kịch bản (Script)

Một Script là một tập của một hay nhiều bó lệnh
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
được lưu lại thành một tập tin SQL
6
2. Biến (Variable)
2. Biến (Variable)

Biến được dùng để:
Biến được dùng để:

Phải được khai báo trước khi 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 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ể
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
dùng bất cứ khi nào và không cần khai báo

Biến cục bộ (Local variable)

Biến cục bộ (Local variable)

Được khai báo trong phần thân của một bó lệnh
Được khai báo trong phần thân của một bó lệnh
hoặc một thủ tục.
hoặc một thủ tục.

Phạm vi hoạt động của biến bắt đầu từ điểm mà
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ô
nó được khai báo cho đến khi kết thúc một lô
(batch)
(batch)
hoặc
hoặc
stored procedure
stored procedure
hoặc
hoặc
Function
Function


nó được khai báo.
nó được khai báo.

Tên của biến bắt đầu @
Tên của biến bắt đầu @
7
a. Khai báo (Declare):

a. Khai báo (Declare):
DECLARE
DECLARE
@var_name
@var_name
var_type
var_type
[,…n]
[,…n]

Gán giá trị cho biế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
Nếu biến vừa khai báo xong thì biến mặc nhiên
được gán giá trị là NULL.
được gán giá trị là NULL.

Để gán biến ta dùng lệnh
Để gán biến ta dùng lệnh
Set
Set
hoặc dùng câu lệnh
hoặc dùng câu lệnh


Select
Select

Syntax:

Syntax:
SET
SET
@var_name =
@var_name =
expression
expression
SELECT
SELECT
{@var_name =
{@var_name =
expression
expression
} [,…n]
} [,…n]
8
Use
Use


giaotrinh_db
giaotrinh_db
GO
GO
Declare
Declare
@NamLV int
@NamLV int
Set
Set

@NamLV = 1994
@NamLV = 1994
Select
Select
*
*
From
From
NhanVien
NhanVien
Where
Where


Year
Year
(NgayLamViec) = @NamLV
(NgayLamViec) = @NamLV
GO
GO
Use
Use


giaotrinh_db
giaotrinh_db
GO
GO
Declare
Declare

@TenDem
@TenDem
nvarchar
nvarchar
(10)
(10)
,
,
@HoTen
@HoTen
nvarchar
nvarchar
(50)
(50)
Set @TenDem = N
Set @TenDem = N
'
'
Van
Van
'
'
Select
Select
@HoTen = Ho +
@HoTen = Ho +
'
'



'
'
+ Ten
+ Ten
From
From
NhanVien
NhanVien
Where
Where


Ho Like
Ho Like
'%' +
'%' +
@TenDem
@TenDem
+ '%'
+ '%'
Select
Select


@
@
HoTen
HoTen
GO
GO

9
3. Cấu trúc điều khiển:
3. Cấu trúc điều khiển:
a.
a.
Khối
Khối
BEGIN … END
BEGIN … END
b. PRINT:
b. PRINT:


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ả
của SQL của 1 Biểu thức, chuỗi, hàm, biến….
của SQL của 1 Biểu thức, chuỗi, hàm, biến….
VD:
VD:
PRINT
PRINT
N ‘Chào bạn’
N ‘Chào bạn’


PRINT
PRINT


@@VERSION

@@VERSION


PRINT
PRINT
N‘Hai nhân năm = ‘ +
N‘Hai nhân năm = ‘ +
Cast
Cast
(2*5 as char(4))
(2*5 as char(4))
c. Cấu trúc điều khiển:
c. Cấu trúc điều khiển:
IF … ELSE
IF … ELSE
Syntax:
Syntax:
IF
IF
condition
condition
{statement}
{statement}
[ ELSE
[ ELSE
[Condition 1 ]
[Condition 1 ]
{statement}
{statement}
]

]
10
USE
USE
GiaoTrinh_db
GiaoTrinh_db
IF
IF


(
(
Select
Select
Count
Count
(*)
(*)
From
From
KhachHang
KhachHang
Where
Where
TenCongTy = ‘ABC’
TenCongTy = ‘ABC’
)
)
> 0
> 0

Begin
Begin
Print
Print
‘Có Công ty tên là ABC’
‘Có Công ty tên là ABC’
End
End
ELSE
ELSE
Begin
Begin
Print
Print
‘Không Có Công ty tên là ABC’
‘Không Có Công ty tên là ABC’
End
End
11
d. Cấu trúc của CASE
d. Cấu trúc của CASE
CASE
CASE
input_expression
input_expression


WHEN
WHEN
when_expression

when_expression
THEN
THEN
result_expression
result_expression


[ n ]
[ n ]


[
[
ELSE
ELSE
else_result_expression ]
else_result_expression ]
END
END




CASE
CASE




WHEN

WHEN
when_expression
when_expression
THEN
THEN
result_expression
result_expression


[ n ]
[ n ]


[
[
ELSE
ELSE
else_result_expression ]
else_result_expression ]
END
END


12
SELECT
SELECT
MaNhanVien, Ho, Ten, LuongCoBan +
MaNhanVien, Ho, Ten, LuongCoBan +
CASE
CASE

WHEN
WHEN
PhuCap
PhuCap
IS NULL
IS NULL


THEN
THEN
0
0
ELSE
ELSE
PhuCap
PhuCap
END
END
FROM
FROM
NHANVIEN
NHANVIEN


Select
Select
N'Nhóm giá các loại hàng' =
N'Nhóm giá các loại hàng' =



CASE
CASE






When
When
price
price
IS NULL
IS NULL


THEN
THEN
N'Chưa có gía'
N'Chưa có gía'


When
When
price < 10
price < 10
THEN
THEN
N'Giá < 10'
N'Giá < 10'



When
When
price >= 10
price >= 10
and
and
price < 20
price < 20
Then
Then
N'Giá >= 10 và <=20'
N'Giá >= 10 và <=20'


Else
Else
N'Giá > 20'
N'Giá > 20'


END
END
,
,


Title
Title

as
as
N'Tựa đề'
N'Tựa đề'
FROM
FROM
titles
titles
ORDER BY
ORDER BY
price
price
13
DECLARE
DECLARE
@a as
@a as
int
int
, @b as
, @b as
int
int
DECLARE
DECLARE
@ketqua as
@ketqua as
nvarchar
nvarchar
(30)

(30)
SET
SET
@a=3
@a=3
SET
SET
@b=5
@b=5
SET
SET
@ketqua =
@ketqua =
CASE
CASE


WHEN
WHEN
@a<@b
@a<@b
THEN
THEN
N'A nhỏ hơn B'
N'A nhỏ hơn B'


WHEN
WHEN
@a<@b THEN N'A lớn hơn B'

@a<@b THEN N'A lớn hơn B'


ELSE
ELSE
N'A bằng B'
N'A bằng B'


END
END
End cua CASE
End cua CASE
PRINT
PRINT
@ketqua
@ketqua
14
e. Vòng lặp WHILE
e. Vòng lặp WHILE
WHILE
WHILE
Boolean_expression
Boolean_expression


{sql_statement | statement_block}
{sql_statement | statement_block}
[ BREAK ]
[ BREAK ]



{sql_statement | statement_block}
{sql_statement | statement_block}
[ CONTINUE ]
[ CONTINUE ]

[BREAK]:
[BREAK]:
Dùng để kết thúc vòng lặp khi gặp một
Dùng để kết thúc vòng lặp khi gặp một
trường hợp cụ thể nào đó.
trường hợp cụ thể nào đó.

[CONTINUE]:
[CONTINUE]:
Lặp lại đầu vòng lặp.
Lặp lại đầu vòng lặp.

Thông thường 2 từ khóa
Thông thường 2 từ khóa
Break
Break


Continue
Continue
nằm trong
nằm trong
trong cấu trúc

trong cấu trúc
If…Else…
If…Else…
15
e. Vòng lặp WHILE
e. Vòng lặp WHILE
USE
USE
pubs
pubs
GO
GO
WHILE
WHILE
(
(
SELECT
SELECT


AVG
AVG
(price)
(price)
FROM
FROM
titles) < $30
titles) < $30
BEGIN
BEGIN



UPDATE
UPDATE
titles
titles


SET
SET
price = price * 2
price = price * 2


SELECT
SELECT
MAX(price) FROM titles
MAX(price) FROM titles


IF
IF
(
(
SELECT
SELECT


MAX
MAX

(price)
(price)
FROM
FROM
titles) > $50
titles) > $50


BREAK
BREAK


ELSE
ELSE


CONTINUE
CONTINUE
END
END
PRINT
PRINT
'Too much for the market to bear'
'Too much for the market to bear'
16
e. Lệnh RETURN:
e. Lệnh RETURN:
RETURN
RETURN
[integer_expression]

[integer_expression]
Return
Return
kết thúc tiến trình trình xử lý,
kết thúc tiến trình trình xử lý,
Return
Return
thường
thường
được dùng trong thủ tục lưu trữ
được dùng trong thủ tục lưu trữ
(Store Procedure).
(Store Procedure).
f.
f.
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
dừng một thời gian trước khi xử lý tiếp các phát biểu
dừng một thời gian trước khi xử lý tiếp các phát biểu
sau đó.
sau đó.
Syntax:
Syntax:


WAITFOR
WAITFOR
{

{
DELAY
DELAY
‘time’ |
‘time’ |
TIME
TIME
‘time’ }
‘time’ }


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ờ
DELAY ‘Time’:
DELAY ‘Time’:
Hệ thống tạm dừng
Hệ thống tạm dừng
trong
trong
khoảng thời
khoảng thời
gian ‘Time’ VD:
gian ‘Time’ VD:
WAITFOR DELAY
WAITFOR DELAY
’02:10’
’02:10’
TIME ‘Time’:
TIME ‘Time’:
Hệ thống được tạm dừng

Hệ thống được tạm dừng
đến
đến
thời gian
thời gian
‘Time’ chỉ ra. VD:
‘Time’ chỉ ra. VD:
WAITFOR TIME
WAITFOR TIME
’02:10’
’02:10’
17
g. Lệnh RAIREEOR
g. Lệnh RAIREEOR
Phát sinh lỗi của người dùng. Người dùng có thể phát sinh
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
các lỗi từ bảng
sysmessage
sysmessage
hoặc xây dựng lỗi động tùy
hoặc xây dựng lỗi động tùy
thông tin của người dùng.
thông tin của người dùng.
RAISERROR
RAISERROR
({msg_id | msg_str} {, severity, state}
({msg_id | msg_str} {, severity, state}
[,argument [,…n]])
[,argument [,…n]])

[WITH option [,…n]]
[WITH option [,…n]]
Thêm một lỗi mới của người dùng định nghĩa:
Thêm một lỗi mới của người dùng định nghĩa:
Sp_addMessage
Sp_addMessage
msg_ID, severity, ‘msg’ [,’language’]
msg_ID, severity, ‘msg’ [,’language’]
[,’with_log’] [,’replace’]
[,’with_log’] [,’replace’]
Xóa một lỗi của người dùng
Xóa một lỗi của người dùng


Sp_dropmessage
Sp_dropmessage
Msg_ID
Msg_ID
18

Msg_id:
Msg_id:
Là mã số của lỗi mới, là một số int, không được
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à
trùng các mã đã có sẵn, bắt đầu là
50001
50001
.
.


Severity:
Severity:
Là mức lỗi của lỗi, là một số
Là mức lỗi của lỗi, là một số
smallint
smallint
. Mức hợp lệ
. Mức hợp lệ
là từ 1 đến 25. Chỉ có người quản trị CSDL mới có thể phát
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.
sinh thêm một thông báo lỗi mới từ 19 đến 25.



msg’:
msg’:
Là một chuỗi thông báo lỗi, tối đa 255 ký tự.
Là một chuỗi thông báo lỗi, tối đa 255 ký tự.



Language’:
Language’:
mặc định là ngôn ngữ của phiên kết nối.
mặc định là ngôn ngữ của phiên kết nối.




with_log’:
with_log’:
Thông báo lỗi có được ghi nhận vào nhật ký của
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à
ứng dụng khi nó xảy ra hay không, mặc định là
FALSE
FALSE
.
.



replace’:
replace’:
Nếu được chỉ định chuỗi
Nếu được chỉ định chuỗi
REPLACE
REPLACE
, thì thông
, thì thông
báo lỗi đã tồn tại được ghi đè bởi chuỗi thông báo mới và
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
mức lỗi mới. Tham số này phải chỉ định nếu
msg_id
msg_id
đã có.
đã có.


Lưu ý:
Lưu ý:
Nếu trả về 0 tức là thêm vào thành công, 1 thất bại.
Nếu trả về 0 tức là thêm vào thành công, 1 thất bại.

×