Tải bản đầy đủ (.docx) (7 trang)

Lab 4_Sqlstatements-Lab 4 - Trần Văn Hoàng - Se1768.Docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (95.17 KB, 7 trang )

LAB 4 – Simple SQL statements
Question 1:

Write SQL statements to create a database containing the following tables. Note: need to add appropriate primary and foreign keys.
1.Table: Departments
Name
DeptID
Name
NoOfStudents

Type
varchar
Nvarchar
int

Size

Type
varchar
Nvarchar
Nvarchar
varchar
Date
Nvarchar
Varchar
float
Numeric(4,2)

Size

Type


varchar
Nvarchar
tinyint

Size

Type
varchar
varchar
int
int
float
varchar

Size

4
50

Constraint: Name - not null.
2.Table: Students
Name
StudentID
LastName
FirstName
Sex
DateOfBirth
PlaceOfBirth
DeptID
Scholarship

AverageScore
Constraint: Sex should be ‘F’ or ‘M’

4
30
10
1
30
4

3.Table: Courses
Name
CourseID
Name
Credits

4
35

4.Table: Results
Name
StudentID
CourseID
Year
Semester
Mark
Grade
Write SQL statements to insert data to database as follow:
Table Departments:
DeptID

Name
IS
Information Systems
NC
Network and Communication
SE
Software Engineering
CE
Computer Engineering
CS
Computer Science
Table Students:

NoOfStudent
s

4
4
1
6


StudentID LastName

FirstName

Sex

DateOfBirth


PlaceOfBirth DeptID

Scholarship

S001



Kim Lan

F

23/02/1990

Hà nội

IS

130000

S002

Trần

Minh Chánh

M

24/12/1992


Bình Định

NC

150000

S003



An Tuyết

F

21/02/1991

Hải phịng

IS

170000

S004

Trần

Anh Tuấn

M


20/12/1993

TpHCM

NC

80000

S005

Trần

Thị Mai

F

12/08/1991

TpHCM

SE

0

S006



Thị Thu Thủy F


02/01/1991

An Giang

IS

0

S007

Nguyễn

Kim Thư

F

02/02/1990

Hà Nội

SE

180000

S008



Văn Long


M

08/12/1992

TpHCM

IS

190000

Table Courses:
CourseID Name
DS01
Database Systems
AI01
Artificial Intelligence
CN01
Computer Network
CN01
Computer Network
DSA1
Data Structures and Algorithms
Table Results:
StudentID
S001
S001
S001
S001
S001
S002

S002
S002
S002
S003
S003
S003
S003
S004
S004
S005
S005
S005
S006
S006

CourseID
DS01
DS01
AI01
AI01
CN01
DS01
DS01
CN01
DSA1
DS01
DS01
CN01
CN01
DS01

DSA1
DS01
CN01
CN01
AI01
CN01

Year
2017
2017
2017
2017
2017
2016
2017
2016
2016
2017
2017
2017
2017
2017
2018
2017
2017
2018
2018
2018

Credits

3
3
3
3
4

Semester
1
2
1
2
3
1
1
3
3
1
3
2
3
3
1
2
2
1
1
2

Mark
3

6
4.5
6
5
4.5
7
10
9
2
5
2.5
4
4.5
10
7
2.5
5
6
10

Grade

Write SQL statements to do bellow task.
Create Table Departments(
DeptID varchar(4) primary key,
name Nvarchar(50) Not null,
NoOfStudents int,
)
INSERT INTO Departments(DeptID,name,NoOfStudents)
VALUES('IS','Information Systems',NULL)

insert into Departments(DeptID,name,NoOfStudents)

AverageScore


values('NC','Network and Communication',NULL)
insert into Departments(DeptID,name,NoOfStudents)
values('SE','Software Engineering',NULL)
insert into Departments(DeptID,name,NoOfStudents)
values('CE','Computer Engineering',NULL)
insert into Departments(DeptID,name,NoOfStudents)
values('CS','Computer Science',NULL)
Create Table Students(
StudentID varchar(4) primary key,
LastName Nvarchar(30) ,
FirstName Nvarchar(20) ,
Sex varchar(1) NOT NULL CHECK (Sex IN ('F', 'M')),
DateOfBirth Date,
PlaceOfBirth Nvarchar(30) ,
DeptID varchar(4),
Scholarship float,
AverageScore Numeric(4,2)
)
INSERT INTO
Student
s(StudentID,LastName,FirstName,Sex,DateOfBirth,PlaceOfBirth,DeptID,Scholarship,AverageScore)
values('S001','Lê','Kim Lan','F','1990-02-23','Hà nội' ,'IS',130000,Null )
INSERT INTO
Student
s(StudentID,LastName,FirstName,Sex,DateOfBirth,PlaceOfBirth,DeptID,Scholarship,AverageScore)

values('S002' ,'Trầ
n' ,'Minh Chánh' ,'M' , '1992-12-24' ,
'Bình Định' ,
'NC' , 150000
,Null )
INSERT INTO
Student
s(StudentID,LastName,FirstName,Sex,DateOfBirth,PlaceOfBirth,DeptID,Scholarship,AverageScore)
values('S003' ,'Lê',
'An Tuyế
t' ,'F' ,'1991-02-21' ,'Hải phòng' ,'IS' ,170000 ,Null )
INSERT INTO
Student
s(StudentID,LastName,FirstName,Sex,DateOfBirth,PlaceOfBirth,DeptID,Scholarship,AverageScore)
values('S004' ,'Trầ
n' ,'Anh Tuấ
n',
'M ','1993-12-20','TpHCM','NC' ,80000 ,Null )
INSERT INTO
Student
s(StudentID,LastName,FirstName,Sex,DateOfBirth,PlaceOfBirth,DeptID,Scholarship,AverageScore)
values('S005' ,'Trầ
n','Thị Mai' ,'F' ,'1991-08-12' ,'TpHCM' ,'SE' , 0 ,Null )
INSERT INTO
Student
s(StudentID,LastName,FirstName,Sex,DateOfBirth,PlaceOfBirth,DeptID,Scholarship,AverageScore)
values('S006' ,'Lê' ,'Thị Thu Thủy' ,'F' ,'1991-01-02' ,'An Giang' ,'IS', 0 ,Null )
INSERT INTO
Student
s(StudentID,LastName,FirstName,Sex,DateOfBirth,PlaceOfBirth,DeptID,Scholarship,AverageScore)

values('S007' ,'Nguyễ
n', 'Kim Thư' ,'F' ,'1990-02-02' ,'Hà Nội', 'SE', 180000 ,Null )
INSERT INTO
Student
s(StudentID,LastName,FirstName,Sex,DateOfBirth,PlaceOfBirth,DeptID,Scholarship,AverageScore)
values('S008' ,'Lê','Văn Long' ,'M' ,'1992-12-08','TpHCM' ,'IS' ,190000 ,Null )
Create Table Courses(
CourseID varchar(4)primary key,
Name Nvarchar(35),
Credits tinyint,
)
INSERT INTO Courses(CourseID,Name,Credits)
values('DS01'
,'Database Systems' ,
3 )
INSERT INTO Courses(CourseID,Name,Credits)
values('AI01' ,
'Artificial Intelligence' ,

3 )


INSERT INTO Courses(CourseID,Name,Credits)
values('CN01',
'Computer Network' ,
3 )
INSERT INTO Courses(CourseID,Name,Credits)
values('CN01'
,'Computer Network' ,
3 )

INSERT INTO Courses(CourseID,Name,Credits)
values('DSA1' ,
'Data Structures and Algorithms' ,

4

)

Create Table Results(
StudentID varchar(4),
CourseID varchar(4),
Year int,
Semester int,
Mark float,
Grade varchar(6)
)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S001' ,
'DS01' ,
2017 ,1
,3 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S001' ,
'DS01' ,2017, 2
,6 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S001' ,
'AI01' ,
2017 , 1
,4.5 ,Null)

INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S001' ,'AI01'
,2017 ,2
,6 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S001 '
,'CN01'
,2017 ,
3,
5 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S002' ,'DS01',
2016 , 1,
4.5 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S002' ,
'DS01',
'2017',
1
,7 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S002', 'CN01'
,'2016' ,
3
,10 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S002' ,
'DSA1' ,
'2016' ,
3,

9 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S003' ,
'DS01' ,'2017'
,3
,5 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S003' ,
'DS01' ,'2017' ,
1,
2 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S003' ,
'CN01' ,2017 ,
2
,2.5 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S003' ,
'CN01',
2017 , 3,
4 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S004' ,
'DS01' ,2017 ,
3
,4.5 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S004'
,'DSA1',
2018 , 1

,10 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S005' ,
'DS01',
2017 ,2,
7 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S005' ,
'CN01' ,2017 ,
2,
2.5 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S005' ,
'CN01',
2018 , 1,
5 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S006'
,'AI01',
2018 , 1,
6 ,Null)
INSERT INTO Results(StudentID,CourseID,Year,Semester,Mark,Grade)
values('S006'
,'CN01'
,2018 ,
2
,10 ,Null)

Question 2.
Update NoOfStudents of each department in Departments table where NoOfStudents is the total number

of students of each departments. Note that for department that has no student, the NoOfStudents should be 0.


UPDATE Departments
SET NoOfStudents = ( SELECT COUNT(*)
FROM Students
WHERE

Departments.DeptID=Students.DeptID)

Question 3.
Update AverageScore for each student so that for each course, we take only his/her highest Mark and the
AverageScore of the student is calculated as the average mark of all the courses that the student joins.

UPDATE Students
SET AverageScore = ( SELECT Sum(Mark)/COUNT(StudentID)
FROM Results
WHERE Students.StudentID=Results.StudentID)
Question 4.



Update Grade in table Results so that:

Grade = ‘Passed’ if 5<= Mark <= 10
Grade = ‘Failed’ if 0<= Mark < 5

Update Results
Set Grade = case
when Mark <=10 and Mark >= 5 then 'Passed'

else 'Failed'
end
Question 5.

List (StudentID, Fullname, DateOfBirth, PlaceOfBirth, DeptID, Scholarship) of all students
having Scholarship not greater than 160000, in descending order of Scholarship. Note that FullName is the concatenation
of LastName and FirstName. For example, if LastName = ‘Lê’ and FirstName = ‘Kim Lan’, then Fullname should be
‘Kim Lan Lê’.

Select StudentID, CONCAT(FirstName,LastName) as
FullName, DateOfBirth, PlaceOfBirth, DeptID, Scholarship
from Students
where Scholarship<=160000
Question 6.

List (DeptID, DepartmentName, StudentID, LastName, FirstName) of all departments (KHOA)
so that we see also departments which have no students.

select Departments.DeptID , Name as DepartmentName,
StudentID, LastName, FirstName
from Departments


left join Students on
Departments.DeptID=Students.DeptID
ORDER BY Departments.DeptID
Question 7.
List (StudentID, LastName, FirstName, NumberOfCourses) of all students, show the results in ascending
order of NumberOfCourses where NumberOfCourses is the total number of courses studied by each student.


select Students.StudentID, LastName, FirstName,
count(Results.Semester)as NumberOfCourses
from Students
join Results on Students.StudentID=Results.StudentID
Group by Students.StudentID, LastName, FirstName
Question 8.

C1:

List (DeptID, DepartmentName, NumberOfFemaleStudents, NumberOfMaleStudents) of all departments.

select Departments.DeptID, name,
SUM(case when Sex like'M' then 1 else 0 end) as NumberOfMaleStudents,
SUM(case when Sex like'F' then 1 else 0 end) as NumberOfFemaleStudents
from Departments
left join Students on Students.DeptID=Departments.DeptID
group by Departments.DeptID, name

C2:

select Departments.DeptID, name, COUNT(Sex) as NumberOfFemaleStudents,null as
NumberOfMaleStudents
from Departments
join Students on Departments.DeptID=Students.DeptID
where Sex like'F'
group by Departments.DeptID, name
UNION
select Departments.DeptID, name,null as NumberOfFemaleStudents, COUNT(Sex) as
NumberOfMaleStudents
from Departments

left join Students on Departments.DeptID=Students.DeptID
where Sex like'M'
group by Departments.DeptID, name
Question 9.
Show the list of students which are not in the department ‘Information Systems’ but having Mark of
Database Systems greater than at least one student of department ‘Information Systems’.

select students.StudentID,LastName,FirstName,DeptID


from Students
join Results on Students.StudentID=Results.StudentID
where DeptID not like 'is' and Mark > (select min(mark) from
Students
join Results on
Students.StudentID=Results.StudentID
where DeptID like 'is')
Question 10. List (CourseID, CourseName, BestStudentFullName) where BestStudentFullName is the name of the
student who has the highest mark for this course.

Em nghĩ là sai nhưng
select courses.CourseID, Name, CONCAT(FirstName,LastName) as BestStudentFullName
from Courses
left join Results on Courses.CourseID=Results.CourseID
join Students on Students.StudentID=Results.StudentID
where
results.CourseID like 'AI01' and Mark = (select max(Mark) from Results )
UNION
select courses.CourseID, Name, CONCAT(FirstName,LastName) as BestStudentFullName
from Courses

left join Results on Courses.CourseID=Results.CourseID
join Students on Students.StudentID=Results.StudentID
where
results.CourseID like 'DS01' and Mark = (select max(Mark) from Results )
UNION
select courses.CourseID, Name, CONCAT(FirstName,LastName) as BestStudentFullName
from Courses
left join Results on Courses.CourseID=Results.CourseID
join Students on Students.StudentID=Results.StudentID
where Mark = (select max(Mark) from Results where CourseID like 'CN01')
UNION
select courses.CourseID, Name, CONCAT(FirstName,LastName) as BestStudentFullName
from Courses
left join Results on Courses.CourseID=Results.CourseID
join Students on Students.StudentID=Results.StudentID
where
results.CourseID like 'CG01' and Mark = (select max(Mark) from Results )
UNION
select courses.CourseID, Name, CONCAT(FirstName,LastName) as BestStudentFullName
from Courses
left join Results on Courses.CourseID=Results.CourseID
join Students on Students.StudentID=Results.StudentID
where results.CourseID like 'DSA1' and Mark = (select max(Mark) from Results where
results.CourseID like 'DSA1' )



×