Объясните как работает запрос?

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

Ответ
select a.*
from   employee a, employee b
where  b.id = a.chief_id  and  a.salary > b.salary


Часть запроса where b.id = a.chief_id не понятна. Подскажите почему именно так

5aa05f2de9c25210833360.png
  • Вопрос задан
  • 13851 просмотр
Пригласить эксперта
Ответы на вопрос 2
@Arik
1. Мы подключаем одну таблицу два раза, БД работает как будто с разными таблицами (a и b).
таблицу a считаем за сотрудников
таблицу b за начальников, почему так:

2. Делаем связь между записями через b.id = a.chief_id, тут говорится у сотрудника (а) есть шеф под chief_id, если chief_id не указан, значит это шеф, а значит в выборке он не участвует

3. Добавляется условие a.salary > b.salary, что ЗП сотрудника(a) больше ЗП его начальника (b).

4. Если условия (where) удовлетворены, то select a.* - выводим все данные сотрудника
Ответ написан
Комментировать
coderisimo
@coderisimo
5aa13fdd1fd68352914893.jpeg

Таблица А берется целиком из employee , а для таблицы В, из employee берутся только те строки, в которых id = chief_id таблицы А. Другими словами - для каждого работника вы добавляете строку где есть инфа о его шефе.
В результате Вы, как бы работаете с составной таблицей (состоящей из А и В , см. картинку ). С такой таблицей в которой , в каждой строке есть и зп работника и зп его руководителя.
Только в этом случае вы сможете отобрать строки по условию a.salary > b.salary .
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы