SKS textbook database
select distinct ID as student_ID
from takes
select distinct ID as instructor_ID, name
from instructor
select distinct dept_name
from department
Method 1
select distinct S.ID as student_ID,
S.name,
count(S.ID) as number_of_Comp_Sci_courses
from student S
inner join takes T
on S.ID = T.ID
inner join course C
on T.course_id = C.course_id
where C.dept_name = 'Comp. Sci.'
group by S.ID
Method 2
select distinct student.ID, name
from student, takes, course
where course.dept_name = 'Comp. Sci.'
and student.ID = takes.ID
and course.course_id = takes.course_id
Method 1
select distinct S.ID as student_ID,
S.name,
C.title,
T.grade
from student S
inner join takes T
on S.ID = T.ID
inner join course C
on T.course_id = C.course_id
where C.dept_name = 'Comp. Sci.'
Method 2
select distinct student.ID, name, grades
from student, takes, course
where course.dept_name = 'Comp. Sci.'
and student.ID = takes.ID
and course.course_id = takes.course_id
select distinct s.ID as student_ID,
s.name
from student s
where s.ID not in
(
select distinct S.ID
from student S
inner join takes T
on S.ID = T.ID
where T.year < 2017);
select dept_name, max(I.salary) as maximum_salary
from instructor I
group by dept_name
select max(I.salary) as maximum_salary
from instructor I
group by dept_name
order by maximum_salary
limit 1
select dept_name,
max(I.salary) as maximum_salary
from instructor I
group by dept_name
order by maximum_salary
limit 1
Method 1
select ID, name
from instructor
except
select distinct instructor.ID, instructor.name
from instructor, teaches, takes
where instructor.ID = teaches.ID
and teaches.course_id = takes.course_id
and teaches.year = takes.year
and teaches.semester= takes.semester
and teaches.sec_id= takes.sec_id
and takes.grade = 'A'
order by ID ASC;
Method 2
select distinct ID, name
from instructor
where ID NOT IN
(select distinct instructor.ID
from instructor, teaches, takes
where instructor.ID = teaches.ID
and teaches.course_id = takes.course_id
and teaches.year = takes.year
and teaches.semester= takes.semester
and teaches.sec_id= takes.sec_id
and takes.grade = 'A')
order by ID ASC;
Method to double-check the results
select *
from takes Ta
inner join teaches Te
on Ta.course_id = Te.course_id
and Ta.sec_id = Te.sec_id
and Ta.semester = Te.semester
and Ta.year = Te.year
inner join instructor I
on I.ID = Te.ID
where i.ID = '32343'
Method 1
select distinct Se.course_id, Se.sec_id,
Se.year, Se.semester,
count(S.ID) as number_of_students
from section Se
inner join takes Ta
on Ta.course_id = Se.course_id
and Ta.sec_id = Se.sec_id
and Ta.semester = Se.semester
and Ta.year = Se.year
inner join Student S
on Ta.ID = S.ID
group by (Se.course_id, Se.sec_id, Se.year, Se.semester)
Method 2
select course_id, sec_id, year, semester, count(*) as num
from takes group by course_id, sec_id, year, semester