chuong#3 truy van nang cao
DESCRIPTION
...TRANSCRIPT
-
Chng 3
Truy vn nng cao
-
www.themegallery.com
Ni dung
Cu trc lnh
Th tc thng tr
Kiu d liu cursor
Hm ngi dng 4
1
2
3
-
www.themegallery.com
Khai bo bin
Tn bin?
Tm vc bin?
Kiu d liu?
Gi tr khi to?
-
www.themegallery.com
Khai bo bin
C php
Declare Var_name Datatype
Lu : Tn bin phi bt u bng 1 k t @
V d
Declare @MaSinhVien nvarchar(10)
Declare @TienLuong float
Declare @Sum float, @Count int
Declare @temp TABLE (ma int,
ten nvarchar(10))
-
www.themegallery.com
Khai bo bin
Tm vc bin
Bin cc b c ngha trong mt query batch hay mt th tc thng tr hoc mt hm ngi dng
Bin h thng c ngha trn c h thng. Tn ca chng bt u bng @@. Cc bin ny l read-only.
V d bin h thng : @@fetch_status, @@rowcount, @@trancount
-
www.themegallery.com
Lnh gn
Set @TenBien = GiaTri
Set @TenBien = TenBien
Set @TenBien = BieuThuc
Select @TenBien = (KetQuaTruyVan)
V d :
Set @MaLop = TH2001
Set @SoSV = (select count(*) from SinhVien)
Set @MaLop = TH + CAST (Year(@NgayTuyenSinh) AS char(4))
-
www.themegallery.com
Lnh gn
Cng c th gn gi tr cho bin bng cu truy vn thay v ch th set
V d :
SV(MaSV, HoTen, Tuoi)
Select @Var2 = HoTen, @Var1 = Tuoi
from SV
where MaSV = 1
Kiu d liu phi tng ng. Nu cu truy vn tr v nhiu dng th cc bin ch nhn gi tr t dng u tin
-
www.themegallery.com
Cu trc iu khin
If
[Begin]
Code block
[End]
Else
[Begin]
Code block
[End]
C Php
C th cha cc cu truy vn phc tp ty
Khai bo bin Cc tnh ton trn bin Cc cu truy vn phc tp ty
Optional
-
www.themegallery.com
Cu trc iu khin If logial expression
[Begin]
Code block
[End]
[Else if logial expression
[Begin]
Code block
[End]
[,n]] Else
[Begin]
Code block
[End]
C th lp li nhiu ln ty . M phng cu trc case
-
www.themegallery.com
Cu trc iu khin V d
HocPhan(MaHP, TenHP, SiSo)
DangKy(MaSV, MaHP)
Vit lnh thm mt ng k mi cho sinh vin c m s 001 vo hc phn HP01 (gi s hc phn ny tn ti trong bng HocPhan). Qui nh s s lp cho mi hc phn khng qu 50 sv
-
www.themegallery.com
Cu trc iu khin
WHILE
[Begin]
{ sql_statement | statement_block }
[ BREAK ]
{ sql_statement | statement_block }
[ CONTINUE ]
[End]
Thot vng lp
B qua on lnh sau
-
www.themegallery.com
Cu trc iu khin V d
SinhVien(MaSV: int, HoTen: nvarchar(30))
Vit lnh xc nh mt m sinh vin mi theo qui nh: m sinh vin tng dn, nu c ch trng th m mi xc nh s chn vo ch trng
Vd: 1,2,3,7 m sinh vin mi: 4
-
www.themegallery.com
Cu trc iu khin
CASE [input_expression]
WHEN when_expression THEN result_expression
[ ...n ]
[ ELSE else_result_expression ]
END
C th l gi tr hoc biu thc iu kin
-
www.themegallery.com
Cu trc iu khin
V d:
NHAN_VIEN(MaNV, HoTen, NgaySinh, CapBac,
Phai)
Cho bit nhng nhn vin n tui v hu (tui v hu ca nam l 60, ca n l 55)
-
www.themegallery.com
Cu trc iu khin
Select * From NHAN_VIEN
Where datediff(yy, NgaySinh, getdate())
> = Case Phai
when Nam then 60
when Nu then 55
End
-
www.themegallery.com
Cu trc iu khin
Cho bit m NV, h tn v loi nhn vin (cp bc
-
www.themegallery.com
Bi tp 1
Cho 3 s a, b, c.
Tm phn s nh nht. In gi tr ca a, b, c.
Xut thng bo "S nh nht l :"
-
www.themegallery.com
Bi tp 1
1. Declare @a int, @b float, @c int
2. Set a = 2
3. Select b = 2.4
4. set c = 2.5
5. print 'a=' + @a + 'b=' + @b + ' c=' + @c
6. If @a>@b
7. select @tmp = @b
8. if @b>@c
9. set @tmp = @c
10. if @c>@a
11. set @tmp = @a
12. print 'S nh nht l: ' + @tmp
Tm li
-
www.themegallery.com
Bi tp 2
Cho CSDL:
SinhVien (MaSV, Hoten, DiemTB)
Tm sinh vin c im trung bnh ln nht v xut thng
bo theo yu cu sau:
Nu im TB >= 8.0 [MaSV] - im trung bnh [DiemTB] Xp loi : Gii
Nu im TB >= 6.5 [MaSV] - im trung bnh [DiemTB] Xp loi : Kh
Nu im TB >= 5.0 [MaSV] - im trung bnh [DiemTB] Xp loi : Trung bnh
Ngc li [MaSV] - im trung bnh [DiemTB] Xp loi : Yu
-
www.themegallery.com
Bi tp 3
Cho CSDL:
SinhVien(MaSV, HoTen, NgaySinh)
Tm sinh vin c MaSV = 0912033 vi nh
dng nh sau:
------------------------------------
M SV : 0912033
H tn : Nguyn Kim i
Ngy sinh : 20/9/1990
-------------------------------------
-
www.themegallery.com
Bi tp 4
Cho CSDL:
SinhVien(MaSV, HoTen, NgaySinh)
DiemThi(MaSV, MaMH, Diem)
Tnh im trung bnh ca tng sinh vin. Nu sinh
vin c im trung bnh > 5.0 th in l u ngc
li rt. In di dng bng.
V d:
MaSV HoTen im TB Kt qu
0912033 Nguyn Kim i 4.5 Rt
-
www.themegallery.com
Bi tp 5
Cho CSDL:
SinhVien(MaSV, HoTen, NgaySinh)
DiemThi(MaSV, MaMH, Diem)
Kim tra MaSV = 0912003 c tn ti cha
Nu cha tn ti xut thng bo [MaSV] cha tn ti.
Ngc li, xut thng bo [MaSV] sinh vin tn ti.
-
www.themegallery.com
Bi tp 6
Cho CSDL:
MonHoc(MaMH, TenMH,SoChi)
Kim tra MaMH tn ti cha?
Nu tn ti ri xut thng bo [MaMH] tn ti
Ngc li, pht sinh MaMH mi v in thng bo M MH mi l [MaMHmoi]
V d:
Tm c MaMH ln nht l : MH008
Pht sinh MaMH mi = MH009
-
www.themegallery.com
Ni dung
Cu trc lnh
Th tc thng tr
Kiu d liu cursor
Hm ngi dng 4
1
2
3
-
www.themegallery.com
Th tc thng tr
Th tc: Cha cc lnh T_SQL Tng t nh mt th tc trong cc ngn ng lp trnh: c th truyn tham s, c tnh ti s dng
Thng tr: c dch v lu tr thnh mt i tng trong CSDL
-
www.themegallery.com
Th tc thng tr
Tn th tc?
Gi tr tr v?
Tham s ra?
Yu cu x l?
Tham s vo?
-
www.themegallery.com
ngha
Tnh ti s dng
Ti u ha khi bin dch
Gim lng thng tin trao i
m bo an CSDL an ton hn
n gin ha vic lp bo co
-
www.themegallery.com
C php
Create {proc | procedure} proc_name
Parameter DataType [output] [,n]
As
Code block
[return [return_value] ]
Go
Tn ca stored .Nn bt u vi USP
Tn tham s (t nh tn bin)
Kiu DL ca tham s Gi tr tr ra nu c
th dng mt (hay mt s) tham s output
Thn sa SP, vit nh th no l ty vo tng bi ton c th
Ch tr v gi tr int
-
www.themegallery.com
V d
Vit th tc thm mt ng k ca sinh vin vo mt hc phn
--1. Khai bo i s
Create procedure usp_ThemDangKy
@MaSV char(5),
@MaHP char(5),
@SiSo int = null output
As
-
www.themegallery.com
V d --2. Khai bo ni dung
Declare @SiSo int
Select @SiSo = SiSo From HocPhan Where MaHP= @MaHP
if @SiSo < 50
Begin
insert into DANG_KY(MaSV, MaHP)
values(@MaSV, @MaHP)
set @SiSo = @SiSo+1
return 1
End
return 0
Go
Tn tham s (t nh tn bin)
-
www.themegallery.com
Stored-Procedure
Kim tra
tn ti?
Stored-
procedure
Phn tch
c php
Bo li!
Kim tra
tn ti?
Thnh
cng!
Thnh
cng!
Bin dch
khi thc thi
-
www.themegallery.com
Scalar input parameters
CREATE PROC USP_XemSV
@MaSV Char(10)
AS
BEGIN
IF @MaSV is NULL
SELECT * FROM SINHVIEN
ELSE
SELECT *
FROM SINHVIEN
WHERE MaSV = @MaSV
END
EXEC USP_XemSV 0912311
-
www.themegallery.com
Table-valued input parameters
--Khai bo kiu d liu mi
CREATE TYPE DSCTDonHang AS TABLE
(
MaSP char(10) UNIQUE,
DonGia float,
SoLuong int
)
--Thm d liu vo bng @temp
DECLARE @temp DSCTDonHang
INSERT @temp VALUES('1','1',3)
SELECT * FROM @temp
-
www.themegallery.com
Table-valued input parameters
CREATE PROC USP_THEMHOADON
@TEMP AS DSCTDONHANG READONLY,
@MADONHANG CHAR(10),
@MAKHACHHANG CHAR(10)
AS
BEGIN
--Thm phiu t hng
INSERT PHIEUDATHANG (MADATHANG,NGAYDAT,MAKHACHHANG)
VALUES(@MADONHANG, GETDATE(), @MAKHACHHANG)
--Thm chi tit phiu t hng
INSERT CHITIETPHIEUDAT (MACHITIETPD,MASANPHAM,SOLUONG,MADATHANG)
SELECT *, @MADONHANG FROM @TEMP
END
-
www.themegallery.com
Table-valued input parameters
--Khai bo danh sch chi tit n hng
DECLARE @TEMP DSCTDONHANG
--Thm chi tit vo danh sch
INSERT @TEMP
VALUES('CT00000009','SP00000005',2),
('CT00000010','SP00000003',2)
--Xem ni dung bng @temp
SELECT * FROM @TEMP
--Thc thi th tc
EXEC USP_THEMHOADON @TEMP,'DH001','KH00000001'
-
www.themegallery.com
Scalar output parameters
Thng k doanh thu ca mi sn phm
CREATE PROC USP_ThongKe
@MaSP Char(10),
@TongSLBan int output,
@TongDoanhThu float output
AS
-
www.themegallery.com
Scalar output parameters
BEGIN
--Tnh tng s lng
SET @TongSLBan = (SELECT SUM(SoLuong)
FROM CHITIETPHIEUDAT
WHERE MaSanPham = @MaSP)
--Tnh tng doanh thu
SET @TongDoanhThu =
(SELECT SUM(SoLuong * DonGia)
FROM CHITIETPHIEUDAT
WHERE MaSanPham = @MaSP)
END
-
www.themegallery.com
Scalar output parameters
--Gi thc thi
DECLARE @TongSL int, @TongDT float
EXEC USP_ThongKe 'SP00000001',
@TongSL output,
@TongDT output
PRINT CAST(@TongSL AS Char(3)) + Char(13)
PRINT @TongDT
-
www.themegallery.com
Gi thc thi
{EXEC| EXECUTE}
[ @return_status = ] procedure_name
{ [ @parameter _name = ] value [ OUTPUT ] } [ ,...n ]
@parameter_name dng khi tham s l output
Value c th l gi tr hoc bin, v phi truyn ng th t khai bo
-
www.themegallery.com
V d --1. Truyn tr
Exec usp_ThemDangKy 001, HP01
--2. Truyn tr c tn bin
Exec usp_ThemDangKy @MaHP = HP01, @MaSV = 001
--3. Truyn tr c tn bin
Exec usp_ThemDangKy @MaHP, @MaSV
--4. C output
Declare @SiSo int
Exec usp_ThemDangKy 001,HP01, @SiSo output
--5. Nhn li gi tr t hm
Declare @SiSo int, @KetQua int
Exec @KetQua = usp_ThemDangKy 001,HP01, @SiSo output
-
www.themegallery.com
Th tc thng tr
Sa th tc
Thay t kha Create trong lnh to th tc bng t kha Alter
Xa th tc
Drop {procedure|proc} procedure_name
V d:
Drop procedure usp_ThemDangKy
-
www.themegallery.com
Th tc thng tr
Th mc cha th tc
-
www.themegallery.com
Th tc lng nhau
Create proc A
AS
Begin
-- Cc lnh
End
Create proc B
AS
Begin
EXEC A
-- Cc lnh
End
-
www.themegallery.com
Bi tp
CSDL:
SinhVien (MaSV, HoTen, MaLop)
Lop(MaLop, Siso)
KetQua(MaSV, MaMH, Diem)
1. Vit th tc nhp vo MaSV kim tra sinh vin c
tn ti.
2. Vit th tc thm 1 SV vo CSDL. Cp nht s s
lp (Nu s sv > 50. Thng bo lp y.)
-
www.themegallery.com
Ni dung
Cu trc lnh
Th tc thng tr
Kiu d liu cursor
Hm ngi dng 4
1
2
3
-
www.themegallery.com
Cursor Khi nim
MaSV Hoten NgaySinh
SV001 Nguyn Minh Thu 20/1/1990
SV002 Nguyn Th Thch 2/3/1991
SV003 Trn Minh Trang 4/3/1990
tempCol MaSV Hoten NgaySinh
1 SV001 Nguyn Minh Thu 20/1/1990
2 SV002 Nguyn Th Thch 2/3/1991
3 SV003 Trn Minh Trang 4/3/1990
WHILE CURSOR
-
www.themegallery.com
Cursor Khi nim
L mt cu trc d liu nh x n mt tp cc dng d liu l kt qu ca mt cu truy vn (select)
Cho php duyt tun t qua tp cc dng d liu v c gi tr tng dng.
-
www.themegallery.com
Cursor khi nim
V tr hin hnh ca cursor c th c dng nh iu kin trong mnh where ca lnh update hoc delete
Cho php cp nht / xo d liu (d liu tht s trong CSDL) tng ng vi v tr hin hnh ca cursor
-
www.themegallery.com
Cursor khai bo
C th khai bo theo c php chun hoc c php m rng ca T-SQL
C php chun Declare cur_name [Insensitive] [Scroll] Cursor
For select_statement
[ For {Read only| Update [of column_name [,n] ] } ]
-
www.themegallery.com
Cursor Khai bo
C php m rng Declare cursor_name Cursor
[ Local | Global ]
[ Forward_only| Scroll]
[ Static| Dynamic]
[ Read_only]
For select_statement
[ For Update [ of column_name [,n] ] ]
-
www.themegallery.com
Cursor Khai bo
Cursor_name:
Chiu di 128 k t
C 2 cch khai bo Tn cursor Tn tnh m t cho mt i tng
cursor. Tn cursor s c gn bng i tng cursor thng qua cu lnh Declare.
VD:
DECLARE cur CURSOR
FOR SELECT MSSV, TenSV FROM SINHVIEN
-
www.themegallery.com
Cursor Khai bo
Bin cursor cursor c khai bo nh mt bin kiu CURSOR, khi gn gi tr cho bin cursor thng qua lnh SET th bin ny s tr ti i tng cursor.
VD:
DECLARE @cur CURSOR
SET @cur = CURSOR
FOR SELECT MSSV, TenSV FROM SINHVIEN
HOC
DECLARE @cur CURSOR
SET @cur = my_cur
-
www.themegallery.com
Cursor Khai bo
ngha cc tham s ty chn:
Insensitive / static: ni dung ca cursor khng thay i trong sut thi gian tn ti, trong trng hp ny cursor ch l read only.
Dynamic: trong thi gian tn ti, ni dung ca cursor c th thay i nu d liu trong cc bng lin quan c thay i.
-
www.themegallery.com
Cursor Khai bo
Local: cursor cc b, ch c th s dng trong phm vi mt khi (query batch) hoc mt th tc/ hm
Global: cursor ton cc (tn ti trong sut connection hoc n khi b hy tng minh)
-
www.themegallery.com
Cursor Khai bo
Forward_only: cursor ch c th duyt mt chiu t u n cui
Scroll: c th duyt ln xung cursor ty
Read only: ch c th c t cursor, khng th s dng cursor update d liu trong cc bng lin quan (ngc li vi for update )
-
www.themegallery.com
Cursor Khai bo
Mc nh:
Global
Forward_only
For update
Dynamic
-
www.themegallery.com
Cursor Khai bo
Bng tng thch
Insensitive Scroll Read Only Update
Insensitive
Scroll
Read Only
Update
-
www.themegallery.com
Cursor Khai bo
Local Global Static Dynamic Read_only Update Forward_only Scroll
Local
Global
Static
Dynamic
Read_only
Update
Forward_only
Scroll
-
www.themegallery.com
Cursor Duyt cursor
Dng lnh Fetch duyt tun t qua cursor
Fetch
[ [Next| Prior| First| Last| Absolute n| Relative n]
From ] Tn_cursor
[Into @Tn_bin [,n] ]
Bin cha gi tr ca cursor. S lng bin phi = s ct tr ra ca cu select khi gn cursor
-
www.themegallery.com
Cursor - Duyt cursor
Mc nh : fetch next
i vi cursor dng forward_only, ch c th fetch next
Bin h thng @@fetch_status cho bit lnh fetch va thc hin c thnh cng hay khng
-
www.themegallery.com
@@fetch_status
Trc lnh fetch u tin: @@fetch_status khng xc nh
Fetch next ln u tin: @@fetch_status =0 (thnh cng)
@@ fetch_status 0
Object
-
www.themegallery.com
Trnh t s dng Khai bo cursor
M cursor bng lnh Open
Open tn_cursor
Fetch (next,) cursor chuyn n v tr ph hp
Dng lnh INTO a gi tr ca cursor vo bin
Nu khng c lnh INTO, gi tr ca cursor s hin th ra mn hnh kt qu sau lnh fetch
C th s dng v tr hin ti nh l iu kin cho mnh where ca cu delete/ update (nu cursor khng l read_only)
-
www.themegallery.com
Trnh t s dng
Lp li vic duyt v s dng cursor, c th s dng bin @@fetch_status bit duyt qua ht cursor hay cha.
ng cursor bng lnh Close Close Tn_cursor
Hy cursor bng lnh deallocate Deallocate Tn_cursor
Sau khi ng, vn c th m li nu cursor cha b hy
-
www.themegallery.com
V d 1 --1. Khai bo
Declare cur_DSKhoa Cursor
For Select MaKhoa, TenKhoa From Khoa
--2. M cursor
Open cur_DSKhoa
Declare @MaKhoa int, @TenKhoa varchar(30)
--3. Np cursor ln 1
Fetch Next From cur_DSKhoa into @MaKhoa,
@TenKhoa
-
www.themegallery.com
--4. Fetch ln 2n
While @@fetch_status = 0
Begin
update SinhVien
set MaSV = MaKhoa +MaSV
Where MaKhoa = @MaKhoa
Fetch Next From cur_DSKhoa into @MaKhoa,
@TenKhoa
End
-
www.themegallery.com
--5. ng cursor
Close cur_DSKhoa
--6. Hy cursor
Deallocate cur_DSKhoa
-
www.themegallery.com
V d 2 Dng cursor cp nht dng xc nh
Declare cur_DSKhoa cursor scroll For
select MaKhoa, TenKhoa
From Khoa
Open cur_DSKhoa
Fetch Absolute 2 From cur_DSKhoa
If (@@fetch_status = 0)
Update Khoa
Set TenKhoa = aaa
Where current of cur_DSKhoa
Close cur_DSKhoa
Deallocate cur_DSKhoa
-
www.themegallery.com
Ni dung
Cu trc lnh
Kiu d liu cursor
Th tc thng tr
Hm ngi dng 4
1
2
3
-
www.themegallery.com
Hm ngi dng
Ging stored procedure:
L m lnh c th ti s dng
Chp nhn cc tham s input
Dch mt ln v t c th gi khi cn
Khc stored procedure
Chp nhn nhiu kiu gi tr tr v (ch mt gi tr tr v)
Khng chp nhn tham s output
Khc v cch gi thc hin
-
www.themegallery.com
Hm ngi dng
Phn loi : gm 3 loi
Gi tr tr v l kiu d liu c s (int, varchar, float, datetime) th mc Scalar value function
Gi tr tr v l Table c c t mt cu truy vn th mc Table value function
Gi tr tr v l table m d liu c c nh tch ly dn sau mt chui thao tc x l v insert. th mc Table value function
-
www.themegallery.com
Hm ngi dng
Loi 1: Gi tr tr v l kiu d liu c s
Create function func_name
( {parameter_name DataType [= default ] }
[,n])
Returns DataType
As
Begin
Return {value | variable | expression}
End
D khng c tham s cng phi ghi cp ngoc rng
D thn function ch c 1 lnh cng phi t gia Begin v End
-
www.themegallery.com
V d
Tm s ln nht trong 3 s a, b, c Create function UF_SoLonNhat (@a int,@b int,@c int)
Returns int
As
Begin
Declare @max int
Set @max = @a
If @b > max set @max = @b
If @c > max set @max = @c
Return @max
End
-
www.themegallery.com
Hm ngi dng
Loi 2: Gi tr tr v l Table c c t mt cu truy vn
Create function func_name
( {parameter_name DataType [= default ] }
[,n])
Returns Table
As
Return [ ( ]select_statement [ ) ]
Go
Thn function lun
ch c mt lnh,
khng t trong cp
Begin -End
-
www.themegallery.com
Hm ngi dng
Loi 3: Gi tr tr v l table m d liu c c nh tch ly dn sau mt chui thao tc x l v insert.
Create function func_name
( {parameter_name DataType [= default ] } [,n])
Returns TempTab_name Table(Table_definition)
As
Begin
Return
End
-
www.themegallery.com
V d Create function uf_DanhSachLop
Returns @DS
Table(MaLop varchar(10),SoSV int)
As
Declare cur_L cursor for Select Ma From Lop
Declare @Ma varchar(10)
Open cur_L
Fetch next from cur_L into @Ma
While @@fetch_status=0
Begin
. End
Close cur_L
Deallcocate cur_L
Return
Go
Insert into @DS
Values (@Ma, (select count(*) from
SinhVien where Lop=@Ma))
Fetch next from cur_L into @Ma
-
www.themegallery.com
S dng hm
Cc hm ngi dng c s dng trong cu truy vn, trong biu thc ph hp kiu d liu tr v ca n
V d:
Select dbo.SoLonNhat(3,5,7)
Select * from DanhSachLop()
-
www.themegallery.com
Hm ngi dng
Lu : khi gi hm loi 1 (tr v gi tr c bn), phi c tn owner ca hm i km
V d dbo.uf_SoLonNhat()
-
www.themegallery.com
Hm ngi dng
Thay i hm ngi dng
Thay t kha create trong cc lnh to hm bng t kha alter
Xa hm ngi dng
Drop Function Tn_Hm_Cn_Xa
V d :
Drop Function uf_DanhSachMatHang
-
www.themegallery.com
Hm ngi dng
Ngoi cc hm do ngi dng nh ngha, SQL Server cn cung cp cc hm xy dng sn ca h thng
Cc hm ny cung cp tin ch nh x l chui, x l thi gian, x l s hc
Sinh vin tm hiu thm v cc hm ny trong Books on-line v cc ti liu tham kho
-
www.themegallery.com
Hm ngi dng
Th mc cha hm ngi dng
Th mc cha hm h thng
Loi 1
Loi 2, 3
-
www.themegallery.com
Bi tp
SinhVien (MaSV, HoTen, MaLop)
Lop(MaLop, Siso)
KetQua(MaSV, MaMH, Diem)
1. Vit hm tnh im trung bnh ca sinh vin.
2. Vit hm tm m sinh vin c im trung bnh cao
nht.
3. Vit hm xut danh sch cc sinh vin c im < 5.
4. Vit th tc xp loi cho sinh vin (gi hm cu 1).
-
Q & A