Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Postgres: sql, optimization, join

Как работать со сложными JOIN из множества таблиц?

Проверяет умение строить и оптимизировать SQL-запросы с множественными связями между таблицами.

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

Для сложных JOIN:

  1. Чётко определите связи между таблицами (через ON).

  2. Используйте псевдонимы (AS) для удобства.

  3. Разбивайте запрос на подзапросы или CTE.

  4. Добавляйте индексы на ключи соединения.
    Пример: SELECT * FROM orders JOIN customers ON orders.customer_id = customers.id.

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

Сложные JOIN возникают, когда нужно объединить данные из 3+ таблиц. Основные шаги:

  1. Определите связи:

    • INNER JOIN: Только совпадающие строки.

    • LEFT JOIN: Все строки левой таблицы + совпадения справа.

    SELECT 
      	o.order_id, 
      	c.name AS customer_name,
      	p.product_name
    FROM orders o
    JOIN customers c ON o.customer_id = c.id
    LEFT JOIN products p ON o.product_id = p.id;
  2. Используйте псевдонимы:
    Упрощают чтение запроса:

    SELECT 
      	ord.id, 
      	cust.name 
    FROM orders AS ord  -- Псевдоним
    JOIN customers AS cust ON ord.customer_id = cust.id;
  3. Разбивайте на CTE/подзапросы:
    Если запрос слишком сложный:

    WITH customer_orders AS (
      	SELECT customer_id, COUNT(*) AS total_orders
      	FROM orders
      	GROUP BY customer_id
    )
    SELECT c.name, co.total_orders
    FROM customers c
    JOIN customer_orders co ON c.id = co.customer_id;
  4. Оптимизация:

    • Индексы на колонках в ON и WHERE.

    • Избегайте SELECT * — выбирайте только нужные поля.

    • Используйте EXPLAIN ANALYZE для поиска узких мест.

Вывод:
Сложные JOIN требуют аккуратности и тестирования. Всегда проверяйте план выполнения запроса.

Уровень

  • Рейтинг:

    2

  • Сложность:

    4

Навыки

  • Postgres

    Postgres

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

#sql

#optimization

#join

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