Соединение таблиц сотрудников и должностей
Условие
Даны две таблицы:
Таблица persons:
- id (INT) — идентификатор сотрудника
- name (VARCHAR) — имя сотрудника
- pos_id (INT) — идентификатор должности
Таблица positions:
- id (INT) — идентификатор должности
- title (VARCHAR) — название должности
Напишите SQL-запрос, который соединит эти таблицы и выведет id сотрудника, имя и название должности.
Требования
- Вывести столбцы: id, name, pos_title
- Использовать INNER JOIN
- Переименовать столбец title в pos_title
Пример данных
| id | name | pos_id |
|---|---|---|
| 1 | Иван | 1 |
| 2 | Мария | 2 |
| id | title |
|---|---|
| 1 | Аналитик |
| 2 | Менеджер |
Ожидаемый результат
| id | name | pos_title |
|---|---|---|
| 1 | Иван | Аналитик |
| 2 | Мария | Менеджер |
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение: SQL JOIN для соединения таблиц
Основной запрос
SELECT
p.id,
p.name,
pos.title AS pos_title
FROM persons p INNER JOIN positions pos ON p.pos_id = pos.id;
Объяснение
SELECT столбцы:
- p.id — идентификатор сотрудника из persons
- p.name — имя сотрудника
- pos.title AS pos_title — название должности с переименованием
FROM persons p: основная таблица с сокращением p
INNER JOIN positions pos: соединяем positions, выводим только совпадения
ON p.pos_id = pos.id: условие — id должности в persons совпадает с id в positions
Как работает запрос
- Берем таблицу persons (Иван pos_id=1, Мария pos_id=2)
- Присоединяем positions (1=Аналитик, 2=Менеджер)
- Ищем совпадения по pos_id
- Выводим нужные столбцы
Результат: id | name | pos_title 1 | Иван | Аналитик 2 | Мария | Менеджер
Другие типы JOIN
LEFT JOIN: все сотрудники, даже без должности (результат NULL)
RIGHT JOIN: все должности, даже без сотрудников (результат NULL)
FULL OUTER JOIN: всё (сотрудники и должности без пары)
Оптимизация
Для больших таблиц добавить индексы: CREATE INDEX idx_persons_pos_id ON persons(pos_id); CREATE INDEX idx_positions_id ON positions(id);
Это ускорит JOIN за счет быстрого поиска совпадений.
Частые ошибки
- Забыли ON условие → ошибка синтаксиса
- Используете WHERE вместо ON → неправильный результат с LEFT/RIGHT
- Неправильное имя столбца → Column not found
- Забыли алиас → нужно писать pos.title каждый раз