By GokiSoft.com| 19:32 11/02/2022|
SQL Server/MySQL

[Video] Hệ thống quản lý sinh viên - SQL Server - C2108L

Hệ thống quản lý sinh viên - SQL Server



-- Tao CSDL
create database BT1800
go

-- Kich hoat CSDL
use BT1800
go

-- Tao Tables
create table Class (
	ClassId int not null,
	ClassCode nvarchar(50)
)
go

create table Student (
	StudentId int not null,
	StudentName nvarchar(50),
	BirthDate datetime,
	ClassId int
)
go

create table Subject (
	SubjectId int not null,
	SubjectName nvarchar(100),
	SessionCount int
)
go

create table Result (
	StudentId int not null,
	SubjectId int not null,
	Mark int
)
go

-- Index & Table Alter
create nonclustered index NCI_Student_StudentName on Student (StudentName)
go

alter table Result
alter column Mark float
go

-- Constraint
---- Primary Key
alter table Class
add constraint PK_Class primary key (ClassId)
go

alter table Student
add constraint PK_Student primary key (StudentId)
go

alter table Subject
add constraint PK_Subject primary key (SubjectId)
go

alter table Result
add constraint PK_Result primary key (StudentId, SubjectId)
go

---- Foreign Key
alter table Student
add constraint FK_Student_Class foreign key (ClassId) references Class (ClassId)
go

alter table Result
add constraint FK_Result_Student foreign key (StudentId) references Student (StudentId)
go

alter table Result
add constraint FK_Result_Subject foreign key (SubjectId) references Subject (SubjectId)
go

alter table Subject
add constraint CK_Subject_SessionCount check (SessionCount > 0)
go

-- Insert Data
insert into Class (ClassId, ClassCode)
values
(1, 'A'),
(2, 'B'),
(3, 'C'),
(4, 'D'),
(5, 'E')
go

insert into Student (StudentId, StudentName, BirthDate, ClassId)
values
(1, 'SA', '1993-08-05', 1),
(2, 'SB', '1993-08-05', 1),
(3, 'SC', '1993-08-05', 2),
(4, 'SD', '1993-08-05', 2),
(5, 'SE', '1993-08-05', 3)
go

insert into Subject (SubjectId, SubjectName, SessionCount)
values
(1, 'C Programming', 22),
(2, 'Web Design', 18),
(3, 'Database Management', 23)
go

insert into Result (StudentId, SubjectId, Mark)
values
(1, 1, 8),
(1, 2, 7),
(2, 3, 5),
(3, 2, 6),
(4, 3, 9),
(5, 2, 8)
go

-- Query Operation
select StudentId 'Ma Sinh Vien', StudentName 'Ten Sinh Vien', BirthDate 'Ngay Sinh'
from Student
where BirthDate between '1992-10-10' and '1993-10-10'
go

select Class.ClassId 'Ma Lop', Class.ClassCode 'Ten Lop', count(Student.StudentId) 'Si So Lop'
from Class left join Student on Class.ClassId = Student.ClassId
group by Class.ClassId, Class.ClassCode
go

select Student.StudentId 'Ma Sinh Vien', Student.StudentName 'Ten Sinh Vien', sum(Result.Mark) 'Tong Diem'
from Student left join Result on Student.StudentId = Result.StudentId
group by Student.StudentId, Student.StudentName
having sum(Result.Mark) > 10
go

-- View
---- C1
create view view_StudentSubjectMark
as
select top(3) Student.StudentId, Student.StudentName, Subject.SubjectName, Result.Mark
from Student, Subject, Result
where Student.StudentId = Result.StudentId
	and Subject.SubjectId = Result.SubjectId
order by Result.Mark desc
go

select * from view_StudentSubjectMark

drop view view_StudentSubjectMark

---- C2
create view view_StudentSubjectMark
as
select Student.StudentId, Student.StudentName, Subject.SubjectName, Result.Mark
from Student, Subject, Result
where Student.StudentId = Result.StudentId
	and Subject.SubjectId = Result.SubjectId
go

---- C3
create view view_StudentSubjectMark
as
select Student.StudentId, Student.StudentName, Subject.SubjectName, Result.Mark
from Student left join Result on Student.StudentId = Result.StudentId
	left join Subject on Subject.SubjectId = Result.SubjectId
go

---- TEST
select top(3) * from view_StudentSubjectMark
order by Mark desc

-- Proc
create proc up_IncreaseMark
	@subjectId int
as
begin
	update Result set Mark = Mark + 1 where SubjectId = @subjectId
end
go

select * from Result

exec up_IncreaseMark 2

-- Trigger
create trigger TG_Result_Insert on Result
for insert
as
begin
	if(select count(*) from inserted where Mark < 0) > 0
	begin
		print N'Can not insert mark < 0'
		rollback transaction
	end
end


insert into Result (StudentId, SubjectId, Mark)
values
(1, 3, -2)

-- Trigger
create trigger TG_Subject_Update on Subject
for update
as
begin
	if update(SubjectName)
	begin
		print N'You don"t update this column'
		rollback transaction
	end
end

update Subject set SubjectName = 'AAA' where SubjectId = 1





Tags:



Phản hồi từ học viên

5

(Dựa trên đánh giá ngày hôm nay)

Đăng nhập để làm bài kiểm tra

Chưa có kết quả nào trước đó