Как мы можем переписать запрос с подзапросом в предложении SELECT? - PullRequest
0 голосов
/ 25 июня 2018

Как бы вы переписали следующий запрос в один без подзапроса, насколько это возможно?

Select dept name,
                 (Select Count(*)
                    From instructor
                   Where department.dept name = instructor.dept name
                 ) As num_instructors
 From department;

Я придумал следующее.Это хорошая эквивалентность вышесказанному?

   Select dept name, count(*)
     From department, instructor
    Where department.dept name = instructor.dept name
 Group By department.dept_name;

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Правильный способ написания запроса использует явный синтаксис JOIN:

select d.dept_name, count(i.dept_name)
from department d left join
     instructor i
     on d.dept_name = i.dept_name
group by d.dept_name;

Если вы заботитесь только об отделах, в которых есть хотя бы один инструктор, тогда join вообще не требуется:

select i.dept_name, count(*)
from instructor i
group by i.dept_name;
0 голосов
/ 25 июня 2018

Ваша попытка действительно близка, всего пара вещей ..

Вы должны использовать явные объединения (т. Е. JOIN, LEFT JOIN и т. Д.) Вместо неявных объединений (запятые в FROMпункт).Неявные объединения амортизируются более 25 лет.

Кроме того, в этом случае вам потребуется LEFT JOIN, иначе не будут отображаться отделы, в которых нет инструкторов.LEFT JOIN сохранит отделы без инструкторов и даст вам счет 0 (как первый запрос), где JOIN не будет отображать их вообще.

SELECT d.dept_name, COUNT(i.dept_name) as num_instructors
FROM department d
LEFT JOIN instructors i on d.dept_name = i.dept_name
GROUP BY d.dept_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...