Professional Documents
Culture Documents
HE186829LeDinhHuyLab4
HE186829LeDinhHuyLab4
HE186829LeDinhHuyLab4
--Question 1
create table Departments(
DeptID varchar(4) PRIMARY KEY,
Name NVARCHAR(50) NOT NULL,
NoOfStudents int
);
--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
);