100% found this document useful (3 votes)
682 views

Assign5 Ans

This document contains 11 multi-part SQL queries dealing with course enrollment data. The queries use joins, subqueries, aggregation, and other SQL features to return student, course, section and instructor information from different perspectives like enrollment counts, section capacities, and instructor locations.
Copyright
© © All Rights Reserved
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
100% found this document useful (3 votes)
682 views

Assign5 Ans

This document contains 11 multi-part SQL queries dealing with course enrollment data. The queries use joins, subqueries, aggregation, and other SQL features to return student, course, section and instructor information from different perspectives like enrollment counts, section capacities, and instructor locations.
Copyright
© © All Rights Reserved
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 3

Assignment #5

Subqueries
1. Show all the sections whose enrollment is greater than 5. Display course and section
number. Do two versions one using a join and the other with a correlated subquery. (10
rows)
SELECT s.course_no,
FROM section s
WHERE 5 < (SELECT
FROM
WHERE

s.section_no
COUNT(*)
enrollment e
e.section_id = s.section_id)

SELECT course_no, section_no,


COUNT(student_id)
FROM section, enrollment
WHERE section.section_id = enrollment.section_id
GROUP BY course_no, section_no
HAVING COUNT(student_id) > 5
2. Show all students (use the format: <last name>, <first initial> in a single column) who are
enrolled in more than two classes. (7 rows)
SELECT st.last_name||', '||substr(st.first_name,1,1)
FROM student st
WHERE 2 < (SELECT COUNT(*)
FROM enrollment e
WHERE e.student_id = st.student_id)
3. List courses and their description whose prerequisites are taught by Nina Schorin. (13 rows)
SELECT c.course_no, c.description
FROM course c, course pr
WHERE c.prerequisite = pr.course_no
AND pr.course_no IN (SELECT s.course_no
FROM section s, instructor i
WHERE s.instructor_id = i.instructor_id
AND i.last_name = 'Schorin')
4. Show instructors (along with their course numbers and section numbers) teaching class
sections with students whose last name begins with M. (16 rows)
SELECT
FROM
WHERE
AND

i.first_name||' '||i.last_name, s.course_no, s.section_no


section s, instructor i
s.instructor_id = i.instructor_id
s.section_id IN (SELECT section_id
FROM enrollment e, student s
WHERE e.student_id = s.student_id
AND last_name like 'M%')
ORDER BY i.last_name, s.course_no, s.section_no

5. List all sections (course_no, description, section_no) taught by instructors that do not live in
Connecticut. Sort the result by course_no, section_no. (78 rows) Write two versions, and use a
correlated subquery in one.
SELECT s.course_no, s.section_no, c.description
FROM section s, course c, instructor i

WHERE s.course_no = c.course_no


AND i.instructor_id = s.instructor_id
AND i.zip NOT IN (SELECT zip
FROM zipcode
WHERE state ='CT')
SELECT
FROM
WHERE
AND

s.course_no, s.section_no, c.description


section s, course c
s.course_no = c.course_no
EXISTS (SELECT null
FROM instructor i
WHERE i.instructor_id = s.instructor_id
AND i.zip NOT IN (SELECT zip
FROM zipcode
WHERE state ='CT'))

6. List all classes (course_no, section_no) taught by Fernand Hanks (Use a correlated subquery)
(9 rows).
SELECT s.course_no, s.section_no
FROM section s
WHERE EXISTS (SELECT null
FROM instructor i
WHERE s.instructor_id = i.instructor_id
AND i.last_name = 'Hanks')
8. List all students (use the format: <last name>, <first initial> in a single column) in sections with
fewer than 5 students enrolled. Do not show any duplicate student names (87 rows).
SELECT last_name||', '||first_name
FROM student
WHERE student_id IN (SELECT student_id
FROM enrollment
WHERE section_id IN (SELECT
FROM
GROUP
HAVING

section_id
enrollment
BY section_id
COUNT(*) < 5))

9. List all zip codes that are not assigned to students. Write two versions: using a NOT EXISTS
and using an OUTER JOIN. (82 rows)
SELECT zip
FROM zipcode z
WHERE NOT EXISTS (SELECT null
FROM student s
WHERE s.zip=z.zip)
SELECT
FROM
WHERE
AND

z.zip
zipcode z, student s
z.zip = s.zip (+)
s.zip IS NULL

SELECT
FROM
ON
WHERE

z.zip
zipcode z LEFT OUTER JOIN student s
z.zip = s.zip
s.zip IS NULL

10. Display the first & last names of students (use the format: <first_name last_name> in a
single column), and the number of classes they are enrolled in, for students who are enrolled
in more than 2 classes. (7 rows)
SELECT
FROM
WHERE
GROUP
HAVING

first_name||' '||last_name, COUNT(e.student_id)


student s, enrollment e
s.student_id = e.student_id
BY first_name, last_name
COUNT(e.student_id) > 2

SELECT first_name||' '||last_name


FROM student st
WHERE 2 < (SELECT COUNT(*)
FROM enrollment e
WHERE e.student_id=st.student_id)
11. Using a correlated sub-query, display course name, course number and the average capacity
of all sections of each course, rounded to 4 decimal places, where students are enrolled, and the
average capacity is less than 25. Use a column alias of AVERAGE_CAPACITY to represent the
number. (16 rows)
SELECT description, c.course_no, ROUND(AVG(capacity), 4)
AVERAGE_CAPACITY
FROM section s, course c
WHERE c.course_no = s.course_no
AND EXISTS (SELECT null
FROM enrollment e
WHERE e.section_id=s.section_id)
GROUP BY description, c.course_no
HAVING ROUND(AVG(capacity), 4) < 25

You might also like