1. Trang chủ
  2. » Công Nghệ Thông Tin

Chuong iii truy van nang cao

83 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 83
Dung lượng 2,9 MB

Nội dung

CHƯƠNG III: TRUY VẤN NÂNG CAO GV: TUẤN NGUYÊN HOÀI ĐỨC Email: tnhduc@fit.hcmus.edu.vn Nội dung trình bày • Khai báo biến gán biến • Cấu trúc điều khiển • Thủ tục thường trú • Kiểu liệu cursor • Hàm người dùng Chương III : Truy vấn nâng cao Khai báo biến • Cú pháp : • Declare Var_name Datatype • Lưu ý tên biến : Tên biến phải bắt đầu ký tự @ mà thơi • Ví dụ : • Declare @MaSinhVien nvarchar(10) • Declare @TienLuong float • Declare @Sum float, @Count int Chương III : Truy vấn nâng cao Khai báo biến • Tầm vực biến • Biến cục có ý nghĩa querry batch hay thủ tục thường trú hàm người dùng • Biến hệ thống có ý nghĩa hệ thống Tên chúng bắt đầu @@ Các biến read-only • Ví dụ biến hệ thống : @@fetch_status, @@rowcount, @@trancount… Chương III : Truy vấn nâng cao Lệnh gán •Set TenBien = GiaTri •Set TenBien = TenBien •Set TenBien = BieuThuc •Set TenBien = KetQuaTruyVan Câu truy vấn phải trả dịng •Ví dụ : dịng phải có cột Set @MaLop = ‘TH2001’ Set @SoSV = (select count(*) from SinhVien) Set @MaLop = ‘TH’+Year(@NgayTuyenSinh) Chương III : Truy vấn nâng cao Lệnh gán • Cũng gán giá trị cho biến câu truy vấn thay thị set Kiểu liệu phải tương ứng Nếu câu truy vấn trả nhiều • Ví dụ : dịng biến nhận giá trị từ dòng • SV(MaSV, HoTen, Tuoi) • Select @Var2 = HoTen, @Var1 = Tuoi from SV where MaSV = Subquery returned more than value This is not permitted when the subquery follows =, !=, = or when the subquery is used as an expression • Ví dụ 2: • Declare @hoten nvarchar(40) • set @hoten = (select hoten from sinhvien) • print @hoten Chương III : Truy vấn nâng cao Nội dung trình bày • Khai báo biến gán biến • Cấu trúc điều khiển • Thủ tục thường trú • Kiểu liệu cursor • Hàm người dùng Chương III : Truy vấn nâng cao Cấu trúc điều khiển • Cấu trúc if - Else If logial expression [Begin] Code block [End] Else [Begin] Code block [End] Có thể chứa câu truy vấn phức tạp tùy ý • Khai báo biến • Các tính tốn biến • Các câu truy vấn phức tạp tùy ý •… Optional Chương III : Truy vấn nâng cao Cấu trúc điều khiển • Cấu trúc if - Else If logial expression [Begin] Code block [End] [Else if logial expression [Begin] Code block [End] [,…n]] Else [Begin] Có thể lặp lại nhiều lần tùy ý Mô cấu trúc case Code block [End] Chương III : Truy vấn nâng cao Cấu trúc điều khiển • Ví dụ : • HocPhan (MaHP, TenHP, SiSo) • DangKy (MaSV, MaHP) • Viết lệnh để thêm đăng ký cho sinh viên có mã số 001 vào học phần HP01 (giả sử học phần tồn bảng HocPhan) Qui định sỉ số lớp cho học phần không 50 sv Chương III : Truy vấn nâng cao 10 Hàm người dùng • Lưu ý : Trong thân hàm không sử dụng hàm hệ thống bất định (Built-in nondeterminis?c func?ons), bao gồm : • GETDATE • GETUTCDATE • NEWID • RAND • TEXTPTR • @@TOTAL_ERRORS, @@CPU_BUSY, @@TOTAL_READ, @@IDLE, @@TOTAL_WRITE, @@CONNECTIONS … Chương III : Truy vấn nâng cao 69 Hàm người dùng • Có thể xem hàm người dùng thuộc loại tùy theo giá trị trả : • Giá trị trả kiểu liệu sở (int, varchar, float, datetme…) • Giá trị trả Table có từ câu truy vấn (thuộc nhánh Table value functon) • Giá trị trả table mà liệu có nhờ ’ch lũy dần sau chuỗi thao tác xử lý insert (thuộc nhánh Table value functon) Chương III : Truy vấn nâng cao 70 70 Hàm người dùng • Giá trị trả kiểu liệu sở (int, varchar, float, dateome…) Create funcoon func_name (parameter dataType [=default][,…n]) returns dataType Giá trị mặc As định tham số Kiểu DL trả Begin Khai báo biến, xử lý tính Code block toán, truy vấn … Return {value | variable | expression} End Trả giá trị Chương III : Truy vấn nâng cao 71 Hàm người dùng • Ví dụ Create func†on 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 Dù khơng có tham số phải ghi cặp ngoặc rỗng Dù thân function có lệnh phải đặt Begin End Chương III : Truy vấn nâng cao 72 Hàm người dùng • Giá trị trả Table có từ câu truy vấn Create funcoon func_name (parameter dataType [= default][,…n]) returns Table Kiểu DL trả Table As Return (Select… From… Where……) Go Thân function có lệnh, khơng đặt Begin End Chương III : Truy vấn nâng cao 73 Hàm người dùng • Ví dụ : Create functon DanhSachMatHang (@MaDonHang varchar(10)) returns Table As Return (Select MH.TenHang,MH.DonGia From ChiTietDH CT,MatHang MH Where CT.MaDH = @MaDonHang and CT.MaMH = MH.MaMH) Go Chương III : Truy vấn nâng cao 74 Hàm người dùng • Giá trị trả table mà liệu có nhờ fch lũy dần sau chuỗi thao tác xử lý insert Create func†on func_name (parameter dataType [= default][,…n]) returns TempTab_name Table(Table_defini†on) As Begin Code block Return End Tên Table trả Định nghĩa cột khóa cho Table trả Tính tốn insert liệu vào Table trả Chương III : Truy vấn nâng cao 75 Hàm người dùng • Ví dụ Create func+on DanhSachLop returns @DS Table(MaLop varchar(10),SoSV int) As Begin End 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 Insert into @DS … values End (@Ma, Close cur_L (select count(*) from SinhVien Deallcocate cur_L where Lop=@Ma)) return Fetch next from cur_L into @Ma Chương III : Truy vấn nâng cao 76 Hàm người dùng • Xóa hàm người dùng • Drop functon Tên_Hàm_Cần_Xóa • Ví dụ : Drop func+on DanhSachMatHang Chương III : Truy vấn nâng cao 77 Hàm người dùng • Chỉ thị Cross Apply • Dùng câu truy vấn, “kết” table trả hàm (dạng 3) với table khác câu truy vấn thơng qua tham số hàm • Ví dụ : • Giả sử có hàm trả @n nhan viên lương cao phịng ban có mã cho trước : Create func/on NVLC (@MaPhg varchar(10),@n int) returns table As return Chỉ có với Select top(@n) * from NhanVien phiên Bản SQL Where Phg = @MaPhg Server 2005 Order by Luong Trở lên Chương III : Truy vấn nâng cao 78 Hàm người dùng • Chỉ thị Cross Apply • Ví dụ : • Giả sử cần truy vấn tên phòng, tên trưởng phòng kèm theo nhân viên lương cao phòng, NV in NV có lương 300’000đ Select P.tenphong,TP.hoVaTen From PhongBan P, NhanVien TP Cross apply NVLC(P.MaPhg,5) as Temp where TP.MaNV = P.TrgPhg and Temp.Luong > 300’000 Chương III : Truy vấn nâng cao 79 Hàm người dùng • Các hàm người dùng sử dụng câu truy vấn, biểu thức… phù hợp kiểu liệu trả • Ví dụ: • Select dbo.SoLonNhat(87,6,120) • Select * from DanhSachMatHang(‘DH007’) Chương III : Truy vấn nâng cao 80 Hàm người dùng • Ngồi hàm người dùng định nghĩa, SQL Server cung cấp hàm xây dựng sẵn hệ thống • Các hàm cung cấp †ện ích xử lý chuỗi, xử lý thời gian, xử lý số học… • Sinh viên •m hiểu thêm hàm Books on-line tài liệu tham khảo Chương III : Truy vấn nâng cao 81 Thư mục chứa hàm người dùng Loại 2, Loại Thư mục chứa hàm hệ thống Chương III : Truy vấn nâng cao 82 Hết Chương III Chương III : Truy vấn nâng cao 83

Ngày đăng: 06/04/2023, 09:30

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w