Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

write SQL query for: Find all students who have taken all courses taken by instr

ID: 3752105 • Letter: W

Question

write SQL query for:

Find all students who have taken all courses taken by instructor 'Srinivasan'. (This is the division operation of relational algebra.) You can implement it by counting the number of courses taught by Srinivasan, and for each student (i.e. group by student), find the number of courses taken by that student, which were taught by Srinivasan. Make sure to count each course ID only once.

//University DDL statements

create table classroom

      (building         varchar(15),

      room_number           varchar(7),

      capacity         numeric(4,0),

      primary key (building, room_number)

      );

create table department

      (dept_name        varchar(20),

      building         varchar(15),

      budget                   numeric(12,2) check (budget > 0),

      primary key (dept_name)

      );

create table course

      (course_id        varchar(8),

      title                  varchar(50),

      dept_name        varchar(20),

      credits          numeric(2,0) check (credits > 0),

      primary key (course_id),

      foreign key (dept_name) references department

            on delete set null

      );

create table instructor

      (ID               varchar(5),

      name             varchar(20) not null,

      dept_name        varchar(20),

      salary                 numeric(8,2) check (salary > 29000),

      primary key (ID),

      foreign key (dept_name) references department

            on delete set null

      );

create table section

      (course_id        varchar(8),

         sec_id              varchar(8),

      semester         varchar(6)

            check (semester in ('Fall', 'Winter', 'Spring', 'Summer')),

      year             numeric(4,0) check (year > 1701 and year < 2100),

      building         varchar(15),

      room_number           varchar(7),

      time_slot_id          varchar(4),

      primary key (course_id, sec_id, semester, year),

      foreign key (course_id) references course

            on delete cascade,

      foreign key (building, room_number) references classroom

            on delete set null

      );

create table teaches

      (ID               varchar(5),

      course_id        varchar(8),

      sec_id                 varchar(8),

      semester         varchar(6),

      year             numeric(4,0),

      primary key (ID, course_id, sec_id, semester, year),

      foreign key (course_id,sec_id, semester, year) references section

            on delete cascade,

      foreign key (ID) references instructor

            on delete cascade

      );

create table student

      (ID               varchar(5),

      name             varchar(20) not null,

      dept_name        varchar(20),

      tot_cred         numeric(3,0) check (tot_cred >= 0),

      primary key (ID),

      foreign key (dept_name) references department

            on delete set null

      );

create table takes

      (ID               varchar(5),

      course_id        varchar(8),

      sec_id                 varchar(8),

      semester         varchar(6),

      year             numeric(4,0),

      grade                    varchar(2),

      primary key (ID, course_id, sec_id, semester, year),

      foreign key (course_id,sec_id, semester, year) references section

            on delete cascade,

      foreign key (ID) references student

            on delete cascade

      );

create table advisor

      (s_ID             varchar(5),

      i_ID             varchar(5),

      primary key (s_ID),

      foreign key (i_ID) references instructor (ID)

            on delete set null,

      foreign key (s_ID) references student (ID)

            on delete cascade

      );

create table time_slot

      (time_slot_id          varchar(4),

      day              varchar(1),

      start_hr         numeric(2) check (start_hr >= 0 and start_hr < 24),

      start_min        numeric(2) check (start_min >= 0 and start_min < 60),

      end_hr                 numeric(2) check (end_hr >= 0 and end_hr < 24),

      end_min          numeric(2) check (end_min >= 0 and end_min < 60),

      primary key (time_slot_id, day, start_hr, start_min)

      );

create table prereq

      (course_id        varchar(8),

      prereq_id        varchar(8),

      primary key (course_id, prereq_id),

      foreign key (course_id) references course

            on delete cascade,

      foreign key (prereq_id) references course

      );

Explanation / Answer

SELECT name FROM student
WHERE ID={ SELECT ID FROM takes
       WHERE course_id={ SELECT course_id FROM teaches
                 WHERE ID={ SELECT ID FROM instructor
                   WHERE name='Srinivasan'}
                }
      }