HE186829LeDinhHuyLab4

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

create database Lab4;

--Question 1
create table Departments(
DeptID varchar(4) PRIMARY KEY,
Name NVARCHAR(50) NOT NULL,
NoOfStudents int
);

create table Students(


StudentID varchar(4) PRIMARY KEY,
LastName NVARCHAR(10),
FirstName NVARCHAR(30),
Sex char(1) CHECK (Sex IN ('F', 'M')),
DateOfBirth Date,
PlaceOfBirth NVARCHAR(30),
DeptID VARCHAR(4),
Scholarship FLOAT,
AverageScore NUMERIC(4,2),
FOREIGN KEY (DeptID) REFERENCES Departments(DeptID)
);

create table Courses (


CourseID VARCHAR(4) PRIMARY KEY,
Name NVARCHAR(35),
Credits TINYINT
);

create table Results (


StudentID VARCHAR(4),
CourseID VARCHAR(4),
Year int,
Semester int,
Mark float(1),
Grade varchar(6)
PRIMARY KEY (StudentID, CourseID, Year, Semester),
FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);

INSERT INTO Departments (DeptID, Name) VALUES


('IS','Information Systems'),
('NC','Network and Communication'),
('SE','Software Engineering'),
('CE','Computer Engineering'),
('CS','Computer Science');

INSERT INTO Students (StudentID, LastName, FirstName, Sex, DateOfBirth, PlaceOfBirth,


DeptID, Scholarship) VALUES
('S001',N'Lê',N'Kim Lan','F','1990/02/23',N'Hà Nội','IS',130000),
('S002',N'Trần',N'Minh Chánh','M','1992/12/24',N'Bình Định','NC',150000),
('S003',N'Lê',N'An Tuyết','F','1991/02/21',N'Hải Phòng','IS',170000),
('S004',N'Trần',N'Anh Tuấn','M','1993/12/20',N'TPHCM','NC',80000),
('S005',N'Trần',N'Thị Mai','F','1991/08/12',N'TPHCM','SE',0),
('S006',N'Lê',N'Thị Thu Thủy','F','1991/01/02',N'An Giang','IS',0),
('S007',N'Nguyễn',N'Kim Thư','F','1990/02/02',N'Hà Nội','SE',180000),
('S008',N'Lê',N'Văn Long','M','1992/12/08',N'TPHCM','IS',190000);

INSERT INTO Courses VALUES


('DS01','Database Systems',3),
('AI01','Artificial Intelligence',3),
('CN01','Computer Network',3),
('CG01','Computer Graphics',4),
('DSA1','Data Structures and Algorithms',4);

INSERT INTO Results (StudentID, CourseID, Year, Semester, Mark) VALUES


('S001','DS01', '2017',1,3),
('S001','DS01', '2017',2,6),
('S001','AI01', '2017',1,4.5),
('S001','AI01', '2017',2,6),
('S001','CN01', '2017',3,5),
('S002','DS01', '2016',1,4.5),
('S002','DS01', '2017',1,7),
('S002','CN01', '2016',3,10),
('S002','DSA1', '2016',3,9),
('S003','DS01', '2017',1,2),
('S003','DS01', '2017',3,5),
('S003','CN01', '2017',2,2.5),
('S003','CN01', '2017',3,4),
('S004','DS01', '2017',3,4.5),
('S004','DSA1', '2018',1,10),
('S005','DS01', '2017',2,7),
('S005','CN01', '2017',2,7),
('S005','CN01', '2018',1,5),
('S006','AI01', '2018',1,6),
('S006','CN01', '2018',2,10);

--Question 2
UPDATE Departments
SET NoOfStudents = (
SELECT COUNT(*)
FROM Students
WHERE Students.DeptID = Departments.DeptID
);

--Question 3
UPDATE Students
SET AverageScore = (
SELECT AVG(BestMark)
FROM (
SELECT MAX(Mark) as BestMark
FROM Results
WHERE Results.StudentID = Students.StudentID
GROUP BY CourseID
) as BestMarks
);

--Question 4
UPDATE Results
SET Grade = CASE
WHEN Mark >= 5 AND Mark <= 10 THEN 'Passed'
WHEN Mark >= 0 AND Mark < 5 THEN 'Failed'
END;

--Question 5
SELECT
StudentID,
CONCAT(FirstName, ' ', LastName) AS FullName,
DateOfBirth,
PlaceOfBirth,
DeptID,
Scholarship
FROM Students
WHERE Scholarship <= 160000
ORDER BY Scholarship DESC;

--Question 6
SELECT
D.DeptID,
D.Name AS DepartmentName,
S.StudentID,
S.LastName,
S.FirstName
FROM Departments D
LEFT JOIN Students S ON D.DeptID = S.DeptID
ORDER BY D.DeptID;

--Question 7
SELECT
S.StudentID,
S.LastName,
S.FirstName,
COUNT(R.CourseID) AS NumberOfCourses
FROM Students S
LEFT JOIN Results R ON S.StudentID = R.StudentID
GROUP BY S.StudentID, S.LastName, S.FirstName
ORDER BY NumberOfCourses;

--Question 8
SELECT
D.DeptID,
D.Name AS DepartmentName,
SUM(CASE WHEN S.Sex = 'F' THEN 1 ELSE 0 END) AS NumberOfFemaleStudents,
SUM(CASE WHEN S.Sex = 'M' THEN 1 ELSE 0 END) AS NumberOfMaleStudents
FROM Departments D
LEFT JOIN Students S ON D.DeptID = S.DeptID
GROUP BY D.DeptID, D.Name;

--Question 9
SELECT DISTINCT
S1.StudentID,
S1.LastName,
S1.FirstName
FROM Students S1
JOIN Results R1 ON S1.StudentID = R1.StudentID
WHERE S1.DeptID <> 'IS'
AND R1.CourseID = 'DS01'
AND R1.Mark > (
SELECT MIN(R2.Mark)
FROM Students S2
JOIN Results R2 ON S2.StudentID = R2.StudentID
WHERE S2.DeptID = 'IS'
AND R2.CourseID = 'DS01'
);

--Question 10
SELECT
C.CourseID,
CONCAT(S.FirstName, ' ', S.LastName) AS BestStudentFullName,
R.Mark
FROM Courses C
JOIN Results R ON C.CourseID = R.CourseID
JOIN Students S ON R.StudentID = S.StudentID
WHERE R.Mark = (
SELECT MAX(Mark)
FROM Results
WHERE CourseID = C.CourseID
);

You might also like