CREATE DATABASE SE1431_HE141655
USE SE1431_HE141655
CREATE TABLE Departments(
DeptID VARCHAR(4) NOT NULL PRIMARY KEY,
Name NVARCHAR(50),
NoOfStudents INT
);
CREATE TABLE Students(
StudentID VARCHAR(4),
LastName NVARCHAR(30),
FirstName NVARCHAR(30),
Sex VARCHAR(1),
DateOfBirth DATE,
PlaceOfBirth NVARCHAR(30),
DeptID VARCHAR(4),
Scholarship FLOAT,
AverageScore NUMERIC(4,2),
CONSTRAINT Check_Sex CHECK(Sex IN ('M','F'))
);
CREATE TABLE Courses(
CourseID VARCHAR(4),
Name NVARCHAR(35),
Credits TINYINT
);
CREATE TABLE Results(
StudentID VARCHAR(4),
CourseID VARCHAR(4),
Year INT,
Semester INT,
Mark FLOAT(1),
Grade VARCHAR(6)
);
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-12',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( CourseID, Name, Credits)
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','2.5'),
('S005','CN01','2018','1','5'),
('S006','AI01','2018','1','6'),
('S006','CN01','2018','2','10');
UPDATE Departments
SET NoOfStudents=(SELECT COUNT(1) FROM Students s WHERE s.DeptID=Departments.DeptID);
CREATE TABLE avgscore(
studentID VARCHAR(4) PRIMARY KEY,
avgs NUMERIC(4,2)
)
INSERT INTO avgscore
SELECT a.StudentID, avg(MaxMarks)
FROM
(SELECT StudentID, CourseID, max(Mark) MaxMarks
FROM Results
GROUP BY StudentID, CourseID) AS a GROUP BY a.StudentID
UPDATE Students SET AverageScore = avgscore.avgs FROM Students, avgscore WHERE Students.StudentID = avgscore.studentID;
UPDATE Result
SET Grade = 'Pass'
Where Mark >= '5' AND Mark <= '10';
UPDATE Result
SET Grade = 'Failed'
WHERE Mark >= '0' AND Mark < '5';
SELECT StudentID, Fullname = (FirstName + ' ' + LastName), DateOfBirth, PlaceOfBirth, DeptID, Schoolarship
FROM Students
WHERE Schoolarship > '160000'
ORDER BY Schoolarship DESC;
SELECT Departments.DeptID, DepartmentName = (Name), FirstName, LastName
FROM Departments
FULL OUTER JOIN Students
ON Departments.DeptID = Students.DeptID;
SELECT Students.StudentID, LastName, FirstName, COUNT(Courses.CourseID) AS NumberOfCourse
FROM Students, Courses, Results
WHERE Students.StudentID = Results.StudentID
AND Courses.CourseID = Results.CourseID
GROUP BY Students.StudentID, LastName,FirstName
ORDER BY NumberOfCourse
SELECT Departments.DeptID, Departments.Name,
SUM(CASE WHEN Sex = 'F' THEN 1 ELSE 0 END) AS NumberOfFemaleStudents,
SUM(CASE WHEN Sex = 'M' THEN 1 ELSE 0 END) AS NumberOfMaleStudents
FROM Departments, Students
WHERE Departments.DeptID = Students.DeptID
GROUP BY Departments.DeptID, Departments.Name
SELECT DISTINCT Students.* FROM Students, Results
WHERE Students.StudentID = Results.StudentID
AND Results.CourseID = 'DS01'
AND Students.DeptID <> 'IS'
GROUP BY Students.StudentID, Students.LastName, Students.Firstname, Students.Sex, Students.DateOfBirth, Students.PlaceOfBirth
HAVING Mark > any (SELECT Mark FROM Results, Students
WHERE Students.StudentID = Results.StudentID
AND Results.CourseID = 'DS01'
AND Students.DeptID LIKE 'IS')