Functions trong dự án quản lý sinh viên

Khóa Thực chiến SQL cùng Kteam - Dự án quản lý sinh viên

5.0 (8 đánh giá)
Tạo bởi K9 Cập nhật lần cuối 20:52 29-10-2021 21.270 lượt xem 14 bình luận
Tác giả/Dịch giả: K9
Học nhanh

Danh sách bài học

Functions trong dự án quản lý sinh viên

Dẫn nhập

Ở bài trước, chúng ta đã cùng nhau NHẬP DỮ LIỆU VÀ THỰC HÀNH TRUY VẤN CƠ BẢN. Qua đó, Kteam cũng đã hướng dẫn bạn cách nhập dữ liệu bằng giao diện, bằng code và cùng nhau thực hiện một số câu truy vấn cơ bản.

Trong bài này chúng ta sẽ cùng nhau đi vào một phần khá thú vị của khóa thực chiến với dự án Quản lý sinh viên đó chính là Functions trong CSDL dự án Quản lý sinh viên

Đừng quên hoàn thành bài tập truy vấn của buổi trước trong dự án Quản lý sinh viên lên SQL Server nhé! Chúng ta sẽ sửa các bài tập đó trước!

Chúng ta hãy cùng nhau teamwork, thảo luận và hỗ trợ nhau trong dự án này để giải quyết  bài toán thực tế một cách hoàn chỉnh dưới sự hướng dẫn của anh Kim Long - founder Howkteam nhé! 


Nội dung

Để theo dõi bài này một cách tốt nhất, bạn nên có kiến thức về các phần:

Trong bài này, Kteam sẽ cùng các bạn tìm hiểu các nội dung:

  • Giải quyết bài tập của bài trước
  • Nhắc lại kiến thức functions trong SQL Server
  • Hướng dẫn thực hành functions
  • Phân tích các vấn đề thực tế trong sử dụng functions
  • Phần định hướng bài tập
  • Các phần chia sẻ kinh nghiệm thực tế

Phần mềm sử dụng

Trong khóa học này, chúng ta sẽ học và thực hành trực tiếp với SQL Server. Nếu bạn chưa cài đặt SQL thì có thể xem qua bài 

Bạn cũng có thể sử dụng các phiên bản khác từ 2008 trở lên. (vì không có nhiều khác biệt)


Functions

Bạn nên tìm hiểu qua phần FUNCTIONS TRONG SQL SERVER để nắm kiến thức và hiểu cách ứng dụng của functions

Hướng dẫn thực hành

Hãy viết các function sau :

  1. Với 1 mã sinh viên và 1 mã khoa, kiểm tra xem sinh viên có thuộc khoa này không (trả về đúng hoặc sai)
  2. Tính điểm thi sau cùng của một sinh viên trong một môn học cụ thể
  3. Tính điểm trung bình của một sinh viên (chú ý : điểm trung bình được tính dựa trên lần thi sau cùng), sử dụng function 2 đã viết

Bài tập về nhà

  1. Nhập vào 1 sinh viên và 1 môn học, trả về các điểm thi của sinh viên này trong các lần thi của môn học đó.
  2. Nhập vào 1 sinh viên, trả về danh sách các môn học mà sinh viên này phải học. 

Kết

Trong bài này,chúng ta đã tìm hiểu về Functions trong dự án quản lý sinh viên. Buổi học đã được diễn ra vào lúc 20h ngày 14/07/2019 tại phần trình chiếu của bài  Functions trong dự án quản lý sinh viên trên Howkteam.com

Ở bài sau, chúng ta sẽ tìm hiểu về PROCEDURES TRONG DỰ ÁN QUẢN LÝ SINH VIÊN

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của bạn để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó” 


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Functions trong dự án quản lý sinh viên dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!

Project

Nếu việc thực hành theo hướng dẫn không diễn ra suôn sẻ như mong muốn. Bạn cũng có thể tải xuống PROJECT THAM KHẢO ở link bên dưới!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Tác giả/Dịch giả

K9

Nhà sáng lập Howkteam.com, KQuiz.vn & tác giả các khóa học C#, Auto, Unity3D, Python....

Với mong muốn mang đến kiến thức chất lượng, miễn phí cho mọi người, với tâm huyết phá bỏ rào cản kiến thức từ việc giáo dục thu phí. Tôi đã cùng đội ngũ Kteam đã lập nên trang website này để thế giới phẳng hơn.
Hãy cùng chúng tôi lan tỏa kiến thức đến cộng đồng! 

Khóa học

Khóa Thực chiến SQL cùng Kteam - Dự án quản lý sinh viên

sql, kteam, howkteam,cơ sở dữ liệu, bài tập cơ sở dữ liệu

Trong các khóa học SỬ DỤNG SQL SERVER PHÂN TÍCH THIẾT KẾ PHẦN MỀM, Kteam đã đề cập đến các kiến thức cần thiết để bạn có thể bắt đầu xây dựng một cơ sở dữ liệu với SQL server và truy vấn qua CSDL đó.

Ở combo Thực chiến SQL, chúng ta sẽ cùng nhau phân tích các CSDL đó từ đặc tả và ứng dụng các kiến thức đã học ở hai khóa trên vào việc giải quyết các yêu cầu thực tế của một CSDL. Trong bộ khóa học này các bạn sẽ đi qua các kiến thức từ cơ bản đến nâng cao qua các dự án khác nhau.

Nào! Chúng ta sẽ cùng nhau tìm hiểu dự án đầu tiên THỰC CHIẾN SQL CÙNG DỰ ÁN QUẢN LÝ SINH VIÊN

Đánh giá

Vo Tan Duc đã đánh giá 19:05 04-04-2022

Hay quá anh ơi. Em quen giọng anh rồi. Mong anh ra nhiều series thực chiến về phần mềm, sql, tool,...

minhthuybxlc đã đánh giá 01:12 11-09-2021

minhvuDHCH đã đánh giá 11:20 08-08-2021

DongTV đã đánh giá 21:08 30-07-2021

anhqn24 đã đánh giá 10:47 06-08-2020

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
giaezs đã bình luận 09:51 09-06-2024

Mn ơi cho em xin mẫu code function về quán lý nhà hàng với ạ huhu

luannt.2809 đã bình luận 16:14 26-10-2023

câu 5 nè: 

create function UF_Print_MH_Of_SV(
    @masv varchar(10)
) returns table
as return select Mon_Hoc.* from Sinh_Vien left join Lop on Sinh_Vien.Ma_Lop = Lop.Ma_Lop
left join Khoa on Lop.Ma_Khoa = Khoa.Ma_Khoa left join Mon_Hoc on Khoa.Ma_Khoa = Mon_Hoc.Ma_Khoa
where Sinh_Vien.Ma_SV = @masv

LTB137016 đã bình luận 22:53 29-11-2021

SQL Server-Function

Hướng dẫn thực hành

Hãy viết các function sau:

  1. Với 1 mã sinh viên và 1 mã khoa, kiểm tra xem sinh viên có thuộc khoa này không (trả về đúng hoặc sai)

CREATE FUNCTION BF_CHECK(@MaSV VARCHAR(10),@MaKhoa VARCHAR(10))

RETURNS VARCHAR(5)

AS

BEGIN

DECLARE @KQ VARCHAR(5)

SET @KQ = 'FALSE'

IF(EXISTS(SELECT * FROM dbo.Sinh_Vien LEFT JOIN dbo.Lop ON Lop.MaLop = Sinh_Vien.Malop LEFT JOIN dbo.Khoa ON Khoa.MaKhoa = Lop.Ma_Khoa WHERE dbo.Sinh_Vien.MaSV = @MaSV AND dbo.Khoa.MaKhoa =@MaKhoa))

SET @KQ = 'TRUE'

 

RETURN @KQ

END

 

GO

 

SELECT dbo.BF_CHECK('0212001','CNTT')

  1. Tính điểm thi sau cùng của một sinh viên trong một môn học cụ thể

 

CREATE FUNCTION checking(@masv VARCHAR(10),@mamh VARCHAR(10))

RETURNS FLOAT

AS

BEGIN

DECLARE @Score FLOAT;

SET @Score = 0;

SELECT TOP(1) @Score = dbo.Ket_qua.Diem_thi FROM dbo.Ket_qua

WHERE dbo.Ket_qua.MaSV = @masv AND dbo.Ket_qua.MaMH = @mamh

ORDER BY dbo.Ket_qua.Lan_thi DESC

RETURN @Score

END

GO

 

 

SELECT dbo.checking('0212001','THT01')

 

  1. Tính điểm trung bình của một sinh viên (chú ý: điểm trung bình được tính dựa trên lần thi sau cùng), sử dụng function 2 đã viết

 

CREATE FUNCTION SCORE_AVARAGE (@MaSV VARCHAR(10))

RETURNS FLOAT

AS

BEGIN

DECLARE @AVG_SCORE FLOAT

 

SELECT @AVG_SCORE = AVG(dbo.Ket_qua.Diem_thi) FROM dbo.Ket_qua

LEFT JOIN(SELECT dbo.Ket_qua.MaMH,MAX(dbo.Ket_qua.Lan_thi) AS last_time FROM dbo.Ket_qua WHERE MaSV = @MaSV GROUP BY MaMH) last_result

ON last_result.MaMH = Ket_qua.MaMH

WHERE dbo.Ket_qua.MaSV = @MaSV AND last_result.last_time=dbo.Ket_qua.Lan_thi

 

RETURN @AVG_SCORE

END

GO

 

SELECT  dbo.SCORE_AVARAGE('0212001')

 

Bài tập về nhà

  1. Nhập vào 1 sinh viên và 1 môn học, trả về các điểm thi của sinh viên này trong các lần thi của môn học đó.

Returns TABLE thì không có AS,BEGIN,END. Vì kết quả trả ra là một table nên là phải selec * from <result> chứ không thể Select trực tiếp kết quả (vì như binh thường kết quả trả ra là một field) Tương tự như đối với kết quả trả ra là một Collumn(một comlumn là một table có 1 cột và n hàng )

CREATE FUNCTION SCORE_SVV(@MaSV VARCHAR(10),@MaMH VARCHAR(10))

RETURNS TABLE

RETURN SELECT dbo.Ket_qua.Lan_thi,dbo.Ket_qua.Diem_thi

FROM dbo.Ket_qua

WHERE dbo.Ket_qua.MaSV = @MaSV AND dbo.Ket_qua.MaMH = @MaMH

 GO

SELECT * FROM dbo.SCORE_SVV('0212001','THT01')

    

 

  1. Nhập vào 1 sinh viên, trả về danh sách các môn học mà sinh viên này phải học. 

CREATE FUNCTION DS_MHH(@MaSV VARCHAR(10))

RETURNS TABLE

RETURN

SELECT dbo.Mon_hoc.Ten_Mon_hoc FROM dbo.Sinh_Vien LEFT JOIN dbo.Ket_qua ON Ket_qua.MaSV = Sinh_Vien.MaSV LEFT JOIN dbo.Mon_hoc ON Mon_hoc.MaMH = Ket_qua.MaMH

WHERE dbo.Sinh_Vien.MaSV = @MaSV

    

GO

 

 

SELECT * FROM dbo.DS_MHH('0212001')

DongTV đã bình luận 09:11 31-07-2021

/* Câu 5. Nhập vào 1 sinh viên, trả về danh sách các môn học mà sinh viên này phải học. */
CREATE FUNCTION UF_DSMonHocSV
(
    @MaSV VARCHAR(10)
)
RETURNS TABLE
RETURN
    SELECT SV.MaSV, SV.Ho_Ten, MH.TenMH FROM dbo.Sinh_Vien AS SV
    LEFT JOIN dbo.Lop AS L ON L.Ma_Lop = SV.Ma_Lop
    LEFT JOIN dbo.Khoa AS K ON K.Ma_Khoa = L.Ma_Khoa
    LEFT JOIN dbo.Mon_Hoc AS MH ON MH.Ma_Khoa = K.Ma_Khoa
    WHERE SV.MaSV = @MaSV
GO

DongTV đã bình luận 07:03 31-07-2021

Câu 3. Tính điểm trung bình của một sinh viên
(chú ý : điểm trung bình được tính dựa trên lần thi sau cùng), sử dụng function 5.2 đã viết */

Cách 1:
CREATE FUNCTION UF_DiemTB
(
    @MaSV VARCHAR(10)
)
RETURNS NVARCHAR(100)
AS
BEGIN
DECLARE @DiemTB FLOAT = 0;
SELECT @DiemTB = ROUND(AVG(Diem_Thi), 3) FROM dbo.Ket_Qua AS KQ
RIGHT JOIN    
    (
    SELECT MaMH, MAX(Lan_Thi) AS [LanThiCuoi] FROM dbo.Ket_Qua AS KQ
    WHERE KQ.MaSV = @MaSV
    GROUP BY MaMH
    ) AS Ket_Qua_1
ON Ket_Qua_1.MaMH = KQ.MaMH
WHERE KQ.MaSV = @MaSV AND Ket_Qua_1.LanThiCuoi = KQ.Lan_Thi
RETURN @DiemTB
END
GO

Cách 2:

CREATE FUNCTION UF_DiemTB2
(
    @MaSV VARCHAR(10)
)
RETURNS FLOAT
AS
BEGIN
DECLARE @DiemTB FLOAT = 0;
SELECT @DiemTB = ROUND(AVG(DiemThiCuoi), 3) FROM     
    (
    SELECT DISTINCT KQ.MaMH, dbo.UF_TinhDiemSV(@MaSV,KQ.MaMH) AS [DiemThiCuoi] FROM dbo.Ket_Qua AS KQ
    WHERE KQ.MaSV = @MaSV
    ) AS Ket_Qua_1
RETURN @DiemTB
END
GO

Không có video.