Stored Procedure trong dự án quản lý sinh viên với SQL Server

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

5.0 (3 đánh giá)
Tạo bởi K9 Cập nhật lần cuối 20:09 16-07-2019 3.469 lượt xem 11 bình luận
Học nhanh

Danh sách bài học

Stored Procedure trong dự án quản lý sinh viên với SQL Server

Dẫn nhập

Ở bài trước, chúng ta đã cùng nhau thực hành FUNCTIONS TRONG QUẢN LÝ SINH VIÊN VỚI SQL SERVER .Chúng ta đã cùng nhau giải quyết một số câu về functions khá khoai khoai hen

Trong bài này chúng ta sẽ cùng nhau đi lại phần functions cho các bạn dễ hiểu hơn và đi vào phần tiếp theo của khóa thực chiến với dự án Quản lý sinh viên đó chính là Stored Procedure 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ủng cố kiến thức của bài trước
  • Nhắc lại kiến thức Stored Procedure trong SQL Server
  • Hướng dẫn thực hành Stored Procedure
  • Phân tích các vấn đề thực tế trong sử dụng Stored Procedure
  • 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)


Procedures

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

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

Source code mẫu của phần này sẽ được cập nhập sau khi khóa livestream kết thúc.

Hãy viết các Stored Procedure sau:

  1.  In danh sách các sinh viên của 1 lớp học
  2. Nhập vào 2 sinh viên, 1 môn học, tìm xem sinh viên nào có điểm thi môn học đó lần đầu tiên là cao hơn.
  3. Nhập vào 1 môn học và 1 mã sv, kiểm tra xem sinh viên có đậu môn này trong lần thi đầu tiên không, nếu đậu thì xuất ra là “Đậu”, không thì xuất ra “Không đậu”
  4. Nhập vào 1 khoa, in danh sách các sinh viên (mã sinh viên, họ tên, ngày sinh) thuộc khoa này.
  5. Nhập vào 1 sinh viên và 1 môn học, in điểm thi của sinh viên này của các lần thi môn học đó.

Ví dụ:  Lần 1 : 10 Lần 2: 8

  1. Nhập vào 1 sinh viên, in ra các môn học mà sinh viên này phải học.
  2. Nhập vào 1 môn học, in danh sách các sinh viên đậu môn này trong lần thi đầu tiên. 
  3. In điểm các môn học của sinh viên có mã số là maSinhVien được nhập vào.

Chú ý: điểm của môn học là điểm thi của lần thi sau cùng

Bài tập về nhà

Thêm 1 quan hệ

XepLoai:

maSV diemTrungBinh ketQua hocLuc
  1. Quy định : ketQua của sinh viên là ”Đạt‘ nếu diemTrungBinh (chỉ tính các môn đã có điểm) của sinh viên đó lớn hơn hoặc bằng 5 và không quá 2 môn dưới 4 điểm, ngược lại thì kết quả là không đạtĐưa dữ liệu vào bảng xếp loại. Sử dụng function 3 đã viết ở bài 4

Đối với những sinh viên có ketQua là ”Đạt‘ thì hocLuc được xếp loại như sau:

  • diemTrungBinh >= 8 thì hocLuc là ”Giỏi
  • 7 < = diemTrungBinh < 8 thì hocLuc là ”Khá” Còn lại là ”Trung bình”  
  1. Với các sinh viên có tham gia đầy đủ các môn học của khoa, chương trình mà sinh viên đang theo học, hãy in ra điểm trung bình cho các sinh viên này.

Chú ý: Điểm trung bình được tính dựa trên điểm thi lần sau cùng. Sử dụng function 3 đã viết ở bài 4 


Khảo sát buổi học

Hôm nay chúng ta đã hoàn buổi 5 của khóa THỰC CHIẾN SQL VỚI KTEAM - DỰ ÁN QUẢN LÝ SINH VIÊN
Đây là bài khảo sát ngắn sau mỗi bài học, nhằm giúp Kteam đánh giá hiệu quả truyền tải của khóa học và hỗ trợ bạn các giải đáp các câu hỏi, kiến thức được đề cập đến trong bài.

KHẢO SÁT BÀI STORED PROCEDURES TRONG CSDL QUẢN LÝ SINH VIÊN

Vui lòng giúp Kteam hoàn thành khảo sát để nhận được email theo dõi tiến độ cùng source code bài hôm nay, học liệu bài mới và đường dẫn tham gia khóa học mỗi ngày nhé! 


Kết

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

Lưu ý: Sau bài học, Kteam sẽ gửi mail Khảo sát & giải đáp câu hỏi đến mail đã đăng ký của các bạn. Hoàn thành mail trước buổi học tiếp theo để xác nhận đã tham gia buổi học và đăng ký nhận đường dẫn kèm học liệu cho buổi học tiếp theo.

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

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ó” 


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ÌNH LUẬ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 & 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á

NamNhan đã đánh giá 19:37 16-07-2019

lehkhacson đã đánh giá 17:52 16-07-2019

Minh Đức đã đánh giá 20:30 15-07-2019

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
linhbeo228 đã bình luận 15:49 16-07-2019
-- 9.
-- Thêm 1 quan hệ XepLoai: MaSV, DTB, KetQua, HocLuc
CREATE TABLE XepLoai
    (
      MaSV VARCHAR(10) PRIMARY KEY ,
      DTB FLOAT ,
      KetQua NVARCHAR(9) ,
      HocLuc NVARCHAR(10) ,
      FOREIGN KEY ( MaSV ) REFERENCES dbo.SinhVien ( MaSV )
    )
GO

-- Hàm tìm lần thi cuối cùng (sử dụng cho việc tính điểm trung bình)
CREATE FUNCTION UF_LanThiCuoi
    (
      @masv VARCHAR(10) ,
      @mamh VARCHAR(10)
    )
RETURNS INT
    BEGIN
        DECLARE @lanthi INT
        SELECT  @lanthi = MAX(LanThi)
        FROM    dbo.KetQua
        WHERE   MaSV = @masv
                AND MaMH = @mamh
        RETURN @lanthi
    END
GO

-- Hàm tính điểm trung bình
CREATE FUNCTION UF_DiemTrungBinh ( @masv VARCHAR(10) )
RETURNS FLOAT
AS
    BEGIN
        DECLARE @dtb FLOAT
        SELECT  @dtb = AVG(Diem)
        FROM    dbo.KetQua
        WHERE   MaSV = @masv
                AND LanThi = dbo.UF_LanThiCuoi(@masv, MaMH)
        RETURN ROUND(@dtb, 1)
    END
GO

-- Hàm kiểm tra có sinh viên có quá 2 môn dưới 4 điểm hay không
-- Nếu có trả về 1, ngược lại trả về 0
CREATE FUNCTION UF_KiemTra ( @masv VARCHAR(10) )
RETURNS INT
AS
    BEGIN
        DECLARE @somon INT -- số môn
        SELECT  @somon = COUNT(*)
        FROM    dbo.KetQua
        WHERE   MaSV = @masv
                AND LanThi = dbo.UF_LanThiCuoi(@masv, MaMH)
                AND Diem < 4
        IF ( @somon > 2 )
            RETURN 1
        RETURN 0
    END
GO

-- Hàm tính kết quả
-- KetQua của sinh viên là 'Đạt' nếu DTB của sinh viên đó >= 5 
-- và không quá 2 môn dưới 4 điểm, ngược lại thì kết quả là 'Không đạt'
CREATE FUNCTION UF_KetQua
    (
      @masv VARCHAR(10) ,
      @dtb FLOAT
    )
RETURNS NVARCHAR(9)
AS
    BEGIN
        DECLARE @ketqua NVARCHAR(9)
        SET @ketqua = N'Không đạt'
        IF ( @dtb >= 5
             AND dbo.UF_KiemTra(@masv) = 0
           )
            SET @ketqua = N'Đạt'
        RETURN @ketqua
    END
GO

-- Hàm tính xếp loại học lực
-- Đối với những sinh viên có KetQua là 'Đạt' thì HocLuc được xếp loại 
-- như sau: DTB >= 8: 'Giỏi', 7 <= DTB < 8: 'Khá', còn lại 'Trung bình'
CREATE FUNCTION UF_HocLuc
    (
      @masv VARCHAR(10) ,
      @dtb FLOAT ,
      @ketqua NVARCHAR(9)
    )
RETURNS NVARCHAR(10)
AS
    BEGIN
        DECLARE @hocluc NVARCHAR(10)
        SET @hocluc = N''
        IF ( @ketqua LIKE N'Đạt' )
            IF ( @dtb >= 8 )
                SET @hocluc = N'Giỏi'
            ELSE
                IF ( @dtb >= 7 )
                    SET @hocluc = N'Khá'
                ELSE
                    SET @hocluc = N'Trung bình'
        RETURN @hocluc
    END
GO

-- Đưa dữ liệu vào bảng xếp loại
INSERT  INTO dbo.XepLoai
        ( MaSV )
VALUES  ( '0212001' )
INSERT  INTO dbo.XepLoai
        ( MaSV )
VALUES  ( '0212002' )
INSERT  INTO dbo.XepLoai
        ( MaSV )
VALUES  ( '0212003' )
INSERT  INTO dbo.XepLoai
        ( MaSV )
VALUES  ( '0212004' )
INSERT  INTO dbo.XepLoai
        ( MaSV )
VALUES  ( '0311001' )
INSERT  INTO dbo.XepLoai
        ( MaSV )
VALUES  ( '0311002' )
GO

UPDATE  dbo.XepLoai
SET     DTB = dbo.UF_DiemTrungBinh(MaSV)
UPDATE  dbo.XepLoai
SET     KetQua = dbo.UF_KetQua(MaSV, DTB)
UPDATE  dbo.XepLoai
SET     HocLuc = dbo.UF_HocLuc(MaSV, DTB, KetQua)
GO

 

lehkhacson đã bình luận 15:27 16-07-2019

a xem câu 9 em với ạ

--cau 9.
--tao function kiem tra ket qua cua sinh vien
--FK_Avg_Point_Student la fuction 3 cua bai 4
create function FK_ketqua
(@masv varchar (10))
returns nvarchar (20)
as
begin 
declare @ketqua nvarchar (20)
declare @dtb float
declare @ktra tinyint
set  @dtb = ( select dbo.FK_Avg_Point_Student (@masv))
select @ktra = count (Diem) from Ket_Qua 
where Ket_Qua.Ma_SV = @masv
and diem <= 4
if (@dtb = null)
	set @ketqua = NULL
else
begin
	if ( @dtb >= 5 and @ktra <= 2)
		set @ketqua = N'Đạt'
	if ( @dtb < 5 or @ktra > 2)
		set @ketqua = N'Không Đạt'
end
return @ketqua
end	
go


--tao fuction kiem tra hoc luc cua sinh vien
create function FK_hocluc
(@masv varchar (10))
returns nvarchar (20)
as 
begin
declare @hocluc nvarchar (20)
declare @ketqua nvarchar (20)
declare @dtb float
set @ketqua = (select dbo.FK_ketqua(@masv))
set  @dtb = ( select dbo.FK_Avg_Point_Student (@masv))
if (@ketqua = N'Đạt')
begin
	if (@dtb >=8) 
		set @hocluc = N'Giỏi'
    else
	    if (@dtb >=7)
		    set @hocluc = N'Khá'
	    else 
		    set @hocluc = N'Trung Bình'
end
else
	set @hocluc = NULL

return @hocluc
end
go

--tao view 

create view xeploai
as
select Sinh_Vien.Ma_SV as 'masv', dbo.FK_Avg_Point_Student (Sinh_Vien.Ma_SV) as 'diemtrungbinh', dbo.FK_ketqua (Sinh_Vien.Ma_SV) as 'ketqua', dbo.FK_hocluc (Sinh_Vien.Ma_SV) as 'hocluc'
from Sinh_Vien
go
select* from xeploai

 

lehkhacson đã bình luận 21:52 15-07-2019

a xem câu 5 hộ e với 

create proc KP_cau5
@masv varchar (10), @mamh varchar (10)
as 
begin
	if (@masv not in (select Sinh_Vien.Ma_SV from Sinh_Vien) or @mamh not in (select Mon_Hoc.Ma_Mon_Hoc from Mon_Hoc))
		print 'ma sinh vien hoac ma mon hoc khong dung. moi ban nhap lai!'
	else
	begin
		declare @lanthimax int
		declare @diem float
		declare @lanthi int
		set @lanthi = 1
		select @lanthimax = max(Ket_Qua.Lan_Thi)
		from Ket_Qua
		where Ket_Qua.Ma_SV = @masv
		while @lanthi <= @lanthimax
		begin
			select @diem = Ket_Qua.Diem
			from Ket_Qua
			where Ket_Qua.Ma_SV = @masv
			and Ket_Qua.Ma_Mon_Hoc = @mamh
			and Ket_Qua.Lan_Thi = @lanthi
			print 'lan' + CAST (@lanthi as char (5)) + ':' + CAST(@diem as char (5))
			set @lanthi = @lanthi + 1
		end
			print ''
	end
end

 

quocbao16vn@gmail.com đã bình luận 21:32 15-07-2019

câu 7

SELECT Sinh_Vien.* FROM Sinh_Vien
    LEFT JOIN Ket_Qua ON Ket_Qua.Ma_SV = Sinh_Vien.Ma_SV
    LEFT JOIN Mon_Hoc ON Mon_Hoc.Ma_MH = Ket_Qua.Ma_MH
    WHERE Ket_Qua.Ma_MH='THT02'
    AND Ket_Qua.Lan_Thi=1
    AND Ket_Qua.Diem >= 5

linhbeo228 đã bình luận 21:27 15-07-2019
-- Câu 7
CREATE PROC USP_Cau7 @mamh VARCHAR(10)
AS
    BEGIN
        SELECT  *
        FROM    dbo.KetQua
        WHERE   MaMH = @mamh
                AND LanThi = 1
                AND Diem > 5
    END
GO

-- Câu 8
CREATE PROC USP_Cau8 @masv VARCHAR(10)
AS
    BEGIN
        SELECT  *
        FROM    dbo.KetQua KQ
        WHERE   KQ.MaSV = @masv
                AND KQ.LanThi = ( SELECT    MAX(KQ2.LanThi)
                                  FROM      KetQua KQ2
                                  WHERE     KQ2.MaSV = KQ.MaSV
                                            AND KQ2.MaMH = KQ.MaMH
                                )
    END
GO

 

Không có video.