department(dept_name, building, budget)

course(course_id, title, dept_name, credits)

instructor(ID, name, dept_name, salary)

section(course_id, sec_id, semester, year, building, room_number, time_slot_id)

teaches(ID, course_id, sec_id, semester, year)

student(ID, name, dept_name, tot_cred)

takes(ID, course_id, sec_id, semester, year, grade)
  1. Найдите название курса, семестр и год каждого курса, который прошли более 50 студентов

    выберите курс.название, берет.семестр, берет.год
    из курса
    естественное соединение берет
    где course.course_id = берет.course_id
    количество (отдельный идентификатор)> 50
    
  2. Найдите название каждого курса, в котором было более одного раздела

    выберите заголовок
    из курса
    раздел естественного соединения
    где course.course_id = section.course_id
    имеющий счетчик (отдельный sec_id)> 1
    
  3. Найдите идентификаторы всех инструкторов, которые преподавали более 5 курсов в Comp. Sci. отдел

    выберите ID
    от инструктора
    естественно присоединиться к курсу
    где course.dept_name = преподаватель. dept_name
    имея количество (кредитов)> 5
    

Также должны быть кредиты или course_id

  1. Найдите всех инструкторов, которые не преподавали ни один модуль, предлагаемый на факультете биологии

Этого я даже не знаю, с чего начать

Ответы (2)

Все ваши запросы отсутствуют предложения GROUP BY.

И если вы используете NATURAL JOIN, вам не нужно предложение WHERE для связи таблиц - NATURAL JOIN делает это автоматически.

select course.title , takes.semester , takes.year
from course
natural join takes
GROUP BY course.title, takes.semester, takes.year    
having count(distinct ID) > 50

select title 
from course
natural join section 
GROUP BY title
having count(distinct sec_id) > 1

select ID
from instructor
natural join course
GROUP BY ID
having count(credits)>5

В вашем последнем запросе есть еще несколько проблем. Вы не связываете преподавателя с курсом с помощью таблицы учит, и вы не проверяете, находится ли курс в Comp. Sci. отдел.

SELECT i.id
FROM instructor AS i
JOIN teaches AS t ON i.id = t.sec_id
JOIN course AS c ON t.course_id = c.id
WHERE c.dept_name = "Comp. Sci."
HAVING COUNT(*) > 5
select count(t.id), c.title , t.semester , t.year
from course c
left join takes t on t.cource_id=c.cource_id
group by 2,3,4
having count(t.id) > 50

select c.title, count(s.sec_id) 
from course c
left join section  s on c.course_id = s.course_id
group by 1
having count(s.sec_id) > 1

select i.ID, count(c.id)
from instructor i
left join course c on c.dept_name = i. dept_name
group by 1
having count(c.id)>5

select i.ID
from instructor i
left join department d on d.dept_name=i.dept_name
where d.dept_name<>'Biology'

2022 WebDevInsider