← Назад к вопросам

Соединение таблиц сотрудников и должностей

1.2 Junior🔥 231 комментариев
#SQL и базы данных

Условие

Даны две таблицы:

Таблица persons:

  • id (INT) — идентификатор сотрудника
  • name (VARCHAR) — имя сотрудника
  • pos_id (INT) — идентификатор должности

Таблица positions:

  • id (INT) — идентификатор должности
  • title (VARCHAR) — название должности

Напишите SQL-запрос, который соединит эти таблицы и выведет id сотрудника, имя и название должности.

Требования

  • Вывести столбцы: id, name, pos_title
  • Использовать INNER JOIN
  • Переименовать столбец title в pos_title

Пример данных

idnamepos_id
1Иван1
2Мария2
idtitle
1Аналитик
2Менеджер

Ожидаемый результат

idnamepos_title
1ИванАналитик
2МарияМенеджер

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение: 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

Как работает запрос

  1. Берем таблицу persons (Иван pos_id=1, Мария pos_id=2)
  2. Присоединяем positions (1=Аналитик, 2=Менеджер)
  3. Ищем совпадения по pos_id
  4. Выводим нужные столбцы

Результат: 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 каждый раз
Соединение таблиц сотрудников и должностей | PrepBro