SQL Test Without Answers
SQL Test Without Answers
26. Write a SQL query to retrieve the names of all students who are enrolled in the course named
'Database Management'.
a) SELECT s.student_name FROM Students s JOIN Enrollments e ON s.student_id = e.student_id JOIN
Courses c ON e.course_id = c.course_id WHERE c.course_name = 'Database Management';
b) SELECT student_name FROM Students WHERE student_id IN (SELECT student_id FROM
Enrollments WHERE course_id IN (SELECT course_id FROM Courses WHERE course_name =
'Database Management'));
c) SELECT student_name FROM Students, Enrollments, Courses WHERE Students.student_id =
Enrollments.student_id AND Enrollments.course_id = Courses.course_id AND Courses.course_name
= 'Database Management';
d) All of the above.
27. Write a SQL query to find the total number of students enrolled in each course, displaying the
course name and the count, ordered by the count in descending order.
a) SELECT c.course_name, COUNT(e.student_id) AS total_students FROM Courses c JOIN Enrollments
e ON c.course_id = e.course_id GROUP BY c.course_name ORDER BY total_students DESC;
b) SELECT course_name, COUNT(*) FROM Enrollments GROUP BY course_id ORDER BY COUNT(*)
DESC;
c) SELECT course_name, COUNT(student_id) FROM Enrollments GROUP BY course_id ORDER BY
COUNT(student_id) DESC;
d) SELECT c.course_name, COUNT(*) FROM Courses c, Enrollments e WHERE c.course_id =
e.course_id GROUP BY c.course_name ORDER BY COUNT(*) DESC;
28. Write a SQL query to list the students who have been marked 'Absent' in at least 3 different
sessions.
a) SELECT s.student_name FROM Students s JOIN Enrollments e ON s.student_id = e.student_id JOIN
Attendance a ON e.enrollment_id = a.enrollment_id WHERE a.status = 'Absent' GROUP BY
s.student_id HAVING COUNT(DISTINCT a.session_date) >= 3;
b) SELECT student_name FROM Students WHERE student_id IN (SELECT student_id FROM
Enrollments WHERE enrollment_id IN (SELECT enrollment_id FROM Attendance WHERE status =
'Absent' GROUP BY enrollment_id HAVING COUNT(*) >= 3));
c) SELECT s.student_name FROM Students s JOIN Enrollments e ON s.student_id = e.student_id JOIN
Attendance a ON e.enrollment_id = a.enrollment_id WHERE a.status = 'Absent' GROUP BY
s.student_name HAVING COUNT(*) >= 3;
d) SELECT s.student_name FROM Students s, Enrollments e, Attendance a WHERE s.student_id =
e.student_id AND e.enrollment_id = a.enrollment_id AND a.status = 'Absent' GROUP BY
s.student_name HAVING COUNT(a.session_date) >= 3;
29. Write a SQL query to find the average marks obtained by each student across all exams they
have taken. Display student name and average marks.
a) SELECT s.student_name, AVG(m.marks_obtained) AS average_marks FROM Students s JOIN
Enrollments e ON s.student_id = e.student_id JOIN Marks m ON e.enrollment_id = m.enrollment_id
GROUP BY s.student_name;
b) SELECT student_name, AVG(marks_obtained) FROM Students JOIN Enrollments USING
(student_id) JOIN Marks USING (enrollment_id) GROUP BY student_name;
c) SELECT s.student_name, AVG(marks_obtained) FROM Students s, Enrollments e, Marks m WHERE
s.student_id = e.student_id AND e.enrollment_id = m.enrollment_id GROUP BY s.student_name;
d) All of the above.
30. Write a SQL query to retrieve the names of courses where the average attendance (percentage
of 'Present' sessions out of total sessions) is less than 75%.
a) SELECT c.course_name FROM Courses c JOIN Enrollments e ON c.course_id = e.course_id JOIN
Attendance a ON e.enrollment_id = a.enrollment_id GROUP BY c.course_name HAVING (SUM(CASE
WHEN a.status = 'Present' THEN 1 ELSE 0 END) / COUNT(*)) < 0.75;
b) SELECT course_name FROM Courses WHERE course_id IN (SELECT course_id FROM Enrollments
WHERE enrollment_id IN (SELECT enrollment_id FROM Attendance GROUP BY enrollment_id
HAVING (SUM(CASE WHEN status = 'Present' THEN 1 ELSE 0 END) / COUNT(*)) < 0.75));
c) SELECT c.course_name FROM Courses c JOIN Enrollments e ON c.course_id = e.course_id LEFT
JOIN Attendance a ON e.enrollment_id = a.enrollment_id GROUP BY c.course_name HAVING
AVG(CASE WHEN a.status = 'Present' THEN 1 ELSE 0 END) < 0.75;
d) None of the above.
31. Write a SQL query to find the student who has the highest total marks across all exams. Display
student name and total marks. (Assume marks_obtained is the score and total_marks is the
maximum possible score for each exam).
a) SELECT s.student_name, SUM(m.marks_obtained) AS total_obtained FROM Students s JOIN
Enrollments e ON s.student_id = e.student_id JOIN Marks m ON e.enrollment_id = m.enrollment_id
GROUP BY s.student_name ORDER BY total_obtained DESC LIMIT 1;
b) SELECT student_name, SUM(marks_obtained) FROM Students JOIN Enrollments USING
(student_id) JOIN Marks USING (enrollment_id) GROUP BY student_name ORDER BY
SUM(marks_obtained) DESC LIMIT 1;
c) SELECT s.student_name, SUM(m.marks_obtained) FROM Students s, Enrollments e, Marks m
WHERE s.student_id = e.student_id AND e.enrollment_id = m.enrollment_id GROUP BY
s.student_name ORDER BY SUM(m.marks_obtained) DESC LIMIT 1;
d) All of the above.
32. Write a SQL query to list the courses that have no enrollments.
a) SELECT c.course_name FROM Courses c WHERE NOT EXISTS (SELECT 1 FROM Enrollments e
WHERE c.course_id = e.course_id);
b) SELECT course_name FROM Courses WHERE course_id NOT IN (SELECT DISTINCT course_id FROM
Enrollments);
c) SELECT c.course_name FROM Courses c LEFT JOIN Enrollments e ON c.course_id = e.course_id
WHERE e.enrollment_id IS NULL;
d) All of the above.
33. Write a SQL query to find the student(s) who have the highest number of 'Late' attendances.
Display student name and the count of 'Late' attendances.
a) SELECT s.student_name, COUNT(a.attendance_id) AS late_count FROM Students s JOIN
Enrollments e ON s.student_id = e.student_id JOIN Attendance a ON e.enrollment_id =
a.enrollment_id WHERE a.status = 'Late' GROUP BY s.student_name ORDER BY late_count DESC
LIMIT 1;
b) SELECT student_name, COUNT(*) FROM Students JOIN Enrollments USING (student_id) JOIN
Attendance USING (enrollment_id) WHERE status = 'Late' GROUP BY student_name ORDER BY
COUNT(*) DESC LIMIT 1;
c) SELECT s.student_name, COUNT(*) FROM Students s, Enrollments e, Attendance a WHERE
s.student_id = e.student_id AND e.enrollment_id = a.enrollment_id AND a.status = 'Late' GROUP BY
s.student_name ORDER BY COUNT(*) DESC LIMIT 1;
d) SELECT s.student_name, COUNT(a.attendance_id) FROM Students s JOIN Enrollments e ON
s.student_id = e.student_id JOIN Attendance a ON e.enrollment_id = a.enrollment_id WHERE
a.status = 'Late' GROUP BY s.student_name HAVING COUNT(*) = (SELECT MAX(late_count) FROM
(SELECT COUNT(*) AS late_count FROM Attendance WHERE status = 'Late' GROUP BY enrollment_id)
AS subquery);
34. Write a SQL query to retrieve the names of students who have scored more than 80% in any of
the exams they have taken.
a) SELECT DISTINCT s.student_name FROM Students s JOIN Enrollments e ON s.student_id =
e.student_id JOIN Marks m ON e.enrollment_id = m.enrollment_id WHERE (m.marks_obtained /
m.total_marks) > 0.8;
b) SELECT DISTINCT student_name FROM Students WHERE student_id IN (SELECT student_id FROM
Enrollments WHERE enrollment_id IN (SELECT enrollment_id FROM Marks WHERE (marks_obtained
/ total_marks) > 0.8));
c) SELECT DISTINCT s.student_name FROM Students s, Enrollments e, Marks m WHERE s.student_id
= e.student_id AND e.enrollment_id = m.enrollment_id AND (m.marks_obtained / m.total_marks) >
0.8;
d) All of the above.
35. Write a SQL query to find the course(s) with the highest average marks across all enrollments in
that course. Display the course name and the average mark.
a) SELECT c.course_name, AVG(m.marks_obtained) AS avg_marks FROM Courses c JOIN Enrollments
e ON c.course_id = e.course_id JOIN Marks m ON e.enrollment_id = m.enrollment_id GROUP BY
c.course_name ORDER BY avg_marks DESC LIMIT 1;
b) SELECT course_name, AVG(marks_obtained) FROM Enrollments JOIN Courses USING (course_id)
JOIN Marks USING (enrollment_id) GROUP BY course_name ORDER BY AVG(marks_obtained) DESC
LIMIT 1;
c) SELECT c.course_name, AVG(m.marks_obtained) FROM Courses c, Enrollments e, Marks m WHERE
c.course_id = e.course_id AND e.enrollment_id = m.enrollment_id GROUP BY c.course_name ORDER
BY AVG(m.marks_obtained) DESC LIMIT 1;
d) SELECT c.course_name, AVG(m.marks_obtained) FROM Courses c JOIN Enrollments e ON
c.course_id = e.course_id JOIN Marks m ON e.enrollment_id = m.enrollment_id GROUP BY
c.course_name HAVING AVG(m.marks_obtained) = (SELECT MAX(avg_marks) FROM (SELECT
AVG(marks_obtained) AS avg_marks, course_id FROM Marks GROUP BY course_id) AS subquery)
LIMIT 1;
36. Write a SQL query to list students who have attended all sessions for at least one course they are
enrolled in.
a) SELECT s.student_name FROM Students s JOIN Enrollments e ON s.student_id = e.student_id JOIN
Attendance a ON e.enrollment_id = a.enrollment_id WHERE a.status = 'Present' GROUP BY
e.enrollment_id HAVING COUNT(*) = (SELECT COUNT(*) FROM Attendance WHERE enrollment_id =
e.enrollment_id) INTERSECT SELECT s.student_name FROM Students s JOIN Enrollments e ON
s.student_id = e.student_id;
b) SELECT DISTINCT s.student_name FROM Students s JOIN Enrollments e ON s.student_id =
e.student_id WHERE NOT EXISTS (SELECT 1 FROM Attendance a WHERE a.enrollment_id =
e.enrollment_id AND a.status <> 'Present');
c) SELECT s.student_name FROM Students s JOIN Enrollments e ON s.student_id = e.student_id
WHERE e.enrollment_id IN (SELECT enrollment_id FROM Attendance GROUP BY enrollment_id
HAVING COUNT(*) = SUM(CASE WHEN status = 'Present' THEN 1 ELSE 0 END));
d) SELECT s.student_name FROM Students s, Enrollments e WHERE s.student_id = e.student_id AND
NOT EXISTS (SELECT 1 FROM Attendance a WHERE a.enrollment_id = e.enrollment_id AND a.status =
'Absent') AND NOT EXISTS (SELECT 1 FROM Attendance a WHERE a.enrollment_id = e.enrollment_id
AND a.status = 'Late');
37. Write a SQL query to find the students who are enrolled in more than two courses. Display their
names.
a) SELECT s.student_name FROM Students s JOIN Enrollments e ON s.student_id = e.student_id
GROUP BY s.student_name HAVING COUNT(DISTINCT e.course_id) > 2;
b) SELECT student_name FROM Students WHERE student_id IN (SELECT student_id FROM
Enrollments GROUP BY student_id HAVING COUNT(*) > 2);
c) SELECT s.student_name FROM Students s, Enrollments e WHERE s.student_id = e.student_id
GROUP BY s.student_name HAVING COUNT(e.course_id) > 2;
d) All of the above.
38. Write a SQL query to identify courses where the number of students enrolled is less than the
average number of students per course.
a) SELECT c.course_name FROM Courses c WHERE (SELECT COUNT(*) FROM Enrollments e WHERE
e.course_id = c.course_id) < (SELECT AVG(student_count) FROM (SELECT COUNT(student_id) AS
student_count FROM Enrollments GROUP BY course_id) AS course_counts);
b) SELECT course_name FROM Courses WHERE course_id IN (SELECT course_id FROM Enrollments
GROUP BY course_id HAVING COUNT(*) < (SELECT AVG(count) FROM (SELECT COUNT(*) AS count
FROM Enrollments GROUP BY course_id) AS avg_count));
c) SELECT c.course_name FROM Courses c WHERE EXISTS (SELECT 1 FROM Enrollments e WHERE
e.course_id = c.course_id GROUP BY e.course_id HAVING COUNT(*) < (SELECT AVG(ec) FROM
(SELECT COUNT(*) AS ec FROM Enrollments GROUP BY course_id) AS avg_enrollment));
d) All of the above.
39. Write a SQL query to find the students who have never been absent in any of the sessions they
attended.
a) SELECT s.student_name FROM Students s JOIN Enrollments e ON s.student_id = e.student_id LEFT
JOIN Attendance a ON e.enrollment_id = a.enrollment_id GROUP BY s.student_name HAVING
SUM(CASE WHEN a.status = 'Absent' THEN 1 ELSE 0 END) = 0 AND COUNT(a.attendance_id) > 0;
b) SELECT student_name FROM Students WHERE student_id NOT IN (SELECT student_id FROM
Enrollments WHERE enrollment_id IN (SELECT enrollment_id FROM Attendance WHERE status =
'Absent'));
c) SELECT s.student_name FROM Students s WHERE NOT EXISTS (SELECT 1 FROM Enrollments e JOIN
Attendance a ON e.enrollment_id = a.enrollment_id WHERE s.student_id = e.student_id AND
a.status = 'Absent');
d) SELECT DISTINCT s.student_name FROM Students s JOIN Enrollments e ON s.student_id =
e.student_id JOIN Attendance a ON e.enrollment_id = a.enrollment_id WHERE a.status <> 'Absent'
GROUP BY s.student_name HAVING COUNT(a.attendance_id) > 0 AND COUNT(a.attendance_id) =
SUM(CASE WHEN a.status <> 'Absent' THEN 1 ELSE 0 END);
40. Write a SQL query to list the students and the courses they are enrolled in, along with their
marks for each exam in that course.
a) SELECT s.student_name, c.course_name, m.exam_name, m.marks_obtained FROM Students s
JOIN Enrollments e ON s.student_id = e.student_id JOIN Courses c ON e.course_id = c.course_id JOIN
Marks m ON e.enrollment_id = m.enrollment_id;
b) SELECT student_name, course_name, exam_name, marks_obtained FROM Students JOIN
Enrollments USING (student_id) JOIN Courses USING (course_id) JOIN Marks USING (enrollment_id);
c) SELECT s.student_name, c.course_name, m.exam_name, m.marks_obtained FROM Students s,
Enrollments e, Courses c, Marks m WHERE s.student_id = e.student_id AND e.course_id =
c.course_id AND e.enrollment_id = m.enrollment_id;
d) All of the above.