Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: left join, not exists

Как выбрать записи без связанных сущностей в SQL?

Вопрос проверяет понимание JOIN-ов и умение корректно работать с отсутствующими связями в реляционных базах данных.

Короткий ответ

Для выбора записей без связанных сущностей обычно используется LEFT JOIN с проверкой на NULL. Такой запрос позволяет получить строки из основной таблицы, для которых нет соответствующих строк в связанной таблице. Это стандартный и читаемый подход. Альтернативно можно использовать подзапросы с NOT EXISTS. Выбор зависит от читаемости и оптимизации.

Длинный ответ

Задача выбора записей без связанных сущностей часто встречается при работе с внешними ключами.

Использование LEFT JOIN

Наиболее распространенный подход — LEFT JOIN.

Идея заключается в том, что:

  • строки из основной таблицы всегда возвращаются

  • если связанной записи нет, поля из второй таблицы будут NULL

Пример:

SELECT u.*
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL;

Этот запрос вернет пользователей без заказов.

Использование NOT EXISTS

Альтернативный и часто более надежный вариант — NOT EXISTS.

Пример:

SELECT u.*
FROM users u
WHERE NOT EXISTS (
    SELECT 1
    FROM orders o
    WHERE o.user_id = u.id
);

Преимущества:

  • не зависит от NULL

  • хорошо оптимизируется планировщиком

  • корректно работает при сложных условиях

Что выбрать на практике

  • простой случай → LEFT JOIN + IS NULL

  • сложные условия → NOT EXISTS

  • большие данные → проверять execution plan

Типичные ошибки

  • использование INNER JOIN

  • проверка NULL не по ключу

  • дублирование строк из-за неправильного JOIN

Вывод: для поиска записей без связей используются LEFT JOIN с IS NULL или NOT EXISTS, и выбор зависит от конкретного сценария.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Postgres

    Postgres

Ключевые слова

#left join

#not exists

Подпишись на Java Developer в телеграм