JuniorКодИногдаЕщё не отвечали
Запрос сотрудников, зарабатывающих больше руководителей
Перечислите каждого сотрудника, чья зарплата больше зарплаты его руководителя.
-- Employee(id, name, salary, dept_id, manager_id)
-- manager_id ссылается на Employee(id)
-- напишите ваш запрос здесь
Напишите запрос.
Сделайте self-join по связи с руководителем и сравните зарплаты: SELECT e.name FROM Employee e JOIN Employee m ON e.manager_id = m.id WHERE e.salary > m.salary. Таблица соединяется сама с собой: одна копия — сотрудник, другая — руководитель, через manager_id → id.
- ✗Сравнивать со средним по компании, а не с конкретным руководителем
- ✗Соединять по отделу вместо связи
manager_id → id - ✗Забывать отдельно алиасить две копии таблицы
- →Как заодно показать сотрудников без руководителя (NULL в
manager_id)? - →Почему обе стороны self-join должны нести разные алиасы таблицы?
Оглавление
Задача
Перечислите сотрудников из Employee, чья зарплата превышает зарплату их руководителя.
Решение
SELECT e.name AS employee, m.name AS manager
FROM Employee e
JOIN Employee m ON e.manager_id = m.id
WHERE e.salary > m.salary;
Ключевые моменты
- Каноничный self-join: таблица соединяется сама с собой через
manager_id → id. - Алиасы
eиmотличают строку-сотрудника от строки-руководителя. - Внутренний
JOINотбрасывает сотрудников без руководителя; для них используйтеLEFT JOIN.
Оглавление