Hàm trả về một giá trị thông qua tên hàm còn thủ tục thì không. Hàm được sử dụng như là một thành phần của một biểu thức. Hàm có hai loại: Hàm hệ thống và hàm do người dụng định nghĩa Nhóm hàm Configuration (Cấu hình) Nhóm hàm Cursor (Kiểu con trỏ) Nhóm hàm Date and Time Nhóm hàm Mathematical (Toán học) Nhóm hàm Metadata (Siêu dữ liệu) Nhóm hàm Security (Bảo mật) Nhóm hàm String (Chuỗi) Nhóm hàm khác
Chương 6: HÀM 6.1 Giới thiệu 6.2 Hàm hệ thống 6.3 Hàm người dùng định nghĩa SQL Server 2005 6.1 Giới thiệu • Hàm trả giá trị thông qua tên hàm thủ tục không • Hàm sử dụng thành phần biểu thức • Hàm có hai loại: Hàm hệ thống hàm người dụng định nghĩa SQL Server 2005 6.2 Hàm hệ thống 6.2.1 Hàm hệ thống trả giá trị đơn 6.2.2 Hàm trả giá trị tổng hợp 6.2.3 Hàm trả khoảng giá trị Ranking SQL Server 2005 6.2.1 Hàm hệ thống trả giá trị đơn • Nhóm hàm Configuration (Cấu hình) • Nhóm hàm Cursor (Kiểu trỏ) • Nhóm hàm Date and Time • Nhóm hàm Mathematical (Toán học) • Nhóm hàm Metadata (Siêu liệu) • Nhóm hàm Security (Bảo mật) • Nhóm hàm String (Chuỗi) • Nhóm hàm khác SQL Server 2005 Nhóm hàm Configuration (Cấu hình) • Lấy thông tin cấu hình hành SQL Server SQL Server 2005 6.2.2 Hàm trả giá trị tổng hợp • Dùng để tổng hợp hay thống kê liệu • Hàm thường sử dụng nhiều khai báo phát biểu Select với mệnh đề Group by Sum, Count, Avg, Max, Min SQL Server 2005 6.2.3 Hàm trả khoảng giá trị Ranking Hàm thuộc nhóm Ranking dùng để kết hợp xếp loại tập kết Bao gồm hàm sau: •Rank •Ntile •Dense_Rank •Row_Number SQL Server 2005 Hàm Rank •Hàm dùng để tạo cột vị thứ xếp dựa vào giá trị cột xếp nhóm (PARTITION) •Cú pháp hàm Rank sau: Rank() Over ([Partition By ] Order By [DESC|ASC]) SQL Server 2005 Hàm Rank •Ví dụ: Hiển thị danh sách điểm thi lần học phần có mã Tinvp Trong kết trả có hiển thị thêm cột xếp vị thứ dựa vào điểm thi lần SELECT DT.MASV, HODEM,TEN,GIOITINH, DIEM, RANK() OVER (ORDER BY DIEM DESC) AS [VI THU] FROM DIEMTHI DT INNER JOIN SINHVIEN SV ON DT.MASV=SV.MASV WHERE MAHOCPHAN='TINVP' AND LANTHI=1 SQL Server 2005 Hàm Rank •Kết SQL Server 2005 10 Hàm Dense_Rank •tương tự hàm Rank, nhiên giá trị cột vị thứ có giá trị Dense_Ran k liên tục Rank SQL Server 2005 13 Hàm Ntile •Hàm tương tự hàm Rank, nhiên giá trị cột vị thứ giới hạn phạm vi định •Hàm NTILE có tác dụng chia số lượng ghi đưa vào nhóm số •Ví dụ: SELECT DT.MASV, HODEM,TEN,GIOITINH,DIEM, NTILE(2) OVER (ORDER BY DIEM DESC) AS [VI THU] FROM DIEMTHI DT INNER JOIN SINHVIEN SV ON DT.MASV=SV.MASV SQL Server 2005 14 Hàm Ntile •Sử dụng hàm NTILE cho ghi nhóm đưa xếp loại giống •Ví dụ: SELECT DT.MASV, HODEM,TEN,GIOITINH,DIEM, NTILE(3) OVER (PARTITION BY GIOITINH ORDER BY DIEM DESC) AS [VI THU] FROM DIEMTHI DT INNER JOIN SINHVIEN SV ON DT.MASV=SV.MASV SQL Server 2005 15 Hàm Row_Number • Trả số thứ tự cho ghi tập ghi mà phát biểu SELECT trả • Ví dụ: SELECT DT.MASV, HODEM, TEN, GIOITINH , DIEM, Row_Number () OVER (ORDER BY DIEM) AS [SO MAU TIN] FROM DIEMTHI DT INNER JOIN SINHVIEN SV ON DT.MASV=SV.MASV SQL Server 2005 16 6.3 Hàm người dùng định nghĩa 6.3.1 Tạo hàm 6.3.2 Thay đổi hàm SQL Server 2005 17 6.3.1 Tạo hàm 6.3.1.1 Tạo hàm trả giá trị đơn •Kích nút phải chuột lên mục Scalar valued Functions chọn New Scalar - valued Function, cửa sổ Query xuất cho phép bạn soạn thảo câu lệnh T-SQL để tạo hàm Cú pháp tạo hàm trả giá trị đơn sau: CREATE FUNCTION tên_hàm ([danh_sách_tham_số]) RETURNS (kiểu_trả_về_của_hàm) AS BEGIN Khai báo biến kết trả các_câu_lệnh_của_hàm RETURN kết trả hàm END SQL Server 2005 18 6.3.1.1 Tạo hàm trả giá trị đơn Ví dụ 1: Định nghĩa hàm tính thứ tuần giá trị kiểu ngày CREATE FUNCTION thu(@ngay DATETIME) RETURNS NVARCHAR(10) AS BEGIN DECLARE @st NVARCHAR(10) SELECT @st=CASE DATEPART(DW,@ngay) WHEN THEN N'Chủ nhật' WHEN THEN N'Thứ hai' WHEN THEN N'Thứ ba' WHEN THEN N'Thứ tư' WHEN THEN N'Thứ năm' WHEN THEN N'Thứ sáu' ELSE N'Thứ bảy' END RETURN (@st) /* Trị trả hàm */ END SQL Server 2005 19 6.3.1.1 Tạo hàm trả giá trị đơn •Một hàm định nghĩa sử dụng hàm HQTCSDL cung cấp (thông thường trước tên hàm, bạn phải định thêm tên người sở hữu hàm) •Ví dụ: Câu lệnh sử dụng hàm định nghĩa ví dụ trước: SELECT masv, hodem, ten, dbo.thu(ngaysinh) as Thu,ngaysinh FROM sinhvien WHERE malop='dl01' SQL Server 2005 20 6.3.1.2 Tạo hàm trả liệu kiểu bảng •Hàm nội tuyến trả liệu kiểu bảng (Inline Table- valued Function): Cú pháp: CREATE FUNCTION tên_hàm ([danh_sách_tham_số]) RETURNS TABLE AS RETURN (câu_lệnh_select) SQL Server 2005 21 6.3.1.2 Tạo hàm trả liệu kiểu bảng •Hàm nội tuyến trả liệu kiểu bảng: Ví dụ: Định nghĩa hàm func_XemSV: CREATE FUNCTION func_XemSV(@khoahoc SMALLINT) RETURNS TABLE AS RETURN( SELECT masv,hodem,ten,ngaysinh FROM sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop WHERE khoahoc=@khoahoc) SQL Server 2005 22 6.3.1.2 Tạo hàm trả liệu kiểu bảng •Hàm nội tuyến trả liệu kiểu bảng: Ví dụ: Định nghĩa hàm func_XemSV: Để biết danh sách sinh viên khoá 1, bạn sử dụng câu lệnh sau: SELECT * FROM dbo.func_XemSV(1) SQL Server 2005 23 6.3.1.2 Tạo hàm trả liệu kiểu bảng •Hàm chứa nhiều lệnh trả liệu kiểu bảng (Multi-Statement Table-valued Function ): CREATE FUNCTION tên_hàm([danh_sách_tham_số]) RETURNS @biến_bảng TABLE định_nghĩa_bảng AS BEGIN các_câu_lệnh_trong_thân_hàm RETURN END SQL Server 2005 24 6.3.1.2 Tạo hàm trả liệu kiểu bảng •Hàm chứa nhiều lệnh trả liệu kiểu bảng (Multi-Statement Table-valued Function ): Ví dụ: Định nghĩa hàm func_TongSV (@khoahoc SMALLINT) sau: - Hiển thị makhoa, tenkhoa, tongsosv - Nếu @khoahoc=0 cho biết tổng số sinh viên có (tất khóa) khoa - Ngược lại Sẽ cho kết thống kê tổng số sinh viên khoá @khoahoc khoa SQL Server 2005 25 6.3.1.2 Tạo hàm trả liệu kiểu bảng •Hàm chứa nhiều lệnh trả liệu kiểu bảng (Multi-Statement Tablevalued Function ): •Thực lệnh: SELECT * FROM dbo.func_TongSV(1) Hoặc SELECT * FROM dbo.func_TongSV(0) SQL Server 2005 26 6.3.2 Thay đổi hàm • Trong khung Object Explorer, chọn Database chứa hàm cần sửa đổi, chọn Programmability/ Function • Kích nút phải chuột lên hàm cần sửa đổi chọn Modify • Cửa sổ Query xuất chứa lệnh ALTER FUNCTION SQL Server 2005 27 ... JOIN SINHVIEN SV ON DT.MASV=SV.MASV SQL Server 2005 16 6.3 Hàm người dùng định nghĩa 6. 3.1 Tạo hàm 6. 3.2 Thay đổi hàm SQL Server 2005 17 6. 3.1 Tạo hàm 6. 3.1.1 Tạo hàm trả giá trị đơn •Kích nút phải... LANTHI=1 SQL Server 2005 11 Hàm Rank •Kết SQL Server 2005 12 Hàm Dense_Rank •tương tự hàm Rank, nhiên giá trị cột vị thứ có giá trị Dense_Ran k liên tục Rank SQL Server 2005 13 Hàm Ntile Hàm tương... Min SQL Server 2005 6. 2.3 Hàm trả khoảng giá trị Ranking Hàm thuộc nhóm Ranking dùng để kết hợp xếp loại tập kết Bao gồm hàm sau: •Rank •Ntile •Dense_Rank •Row_Number SQL Server 2005 Hàm Rank •Hàm