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
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:
- SỬ DỤNG SQL SERVER
- PHÂN TÍCH THIẾT KẾ PHẦN MỀM
- Đã xem qua bài PHÂN TÍCH ĐẶC TẢ DỰ ÁN QUẢN LÝ SINH VIÊN
- Đã xem qua bài CÀI ĐẶT CSDL VÀ XÁC ĐỊNH KHÓA CHÍNH, KHÓA NGOẠI LÊN SQL SERVER
- Đã xem qua bài NHẬP DỮ LIỆU VÀ THỰC HÀNH TRUY VẤN CƠ BẢ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 :
- 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)
- Tính điểm thi sau cùng của một sinh viên trong một môn học cụ thể
- 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à
- 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 đó.
- 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 like và share để ủng hộ Kteam và tác giả nhé!
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ả
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
Trong các khóa học SỬ DỤNG SQL SERVER và 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á
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,...
Mn ơi cho em xin mẫu code function về quán lý nhà hàng với ạ huhu
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
SQL Server-Function
Hướng dẫn thực hành
Hãy viết các function sau:
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')
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')
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à
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')
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')
/* 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
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