Как можно объединять таблицы в SQL?

«Как можно объединять таблицы в SQL?» — вопрос из категории Базы данных и SQL, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для объединения данных из нескольких таблиц в SQL используются операторы JOIN (соединение по условию) и UNION (объединение наборов строк).

Операторы JOIN (основные):

  1. INNER JOIN (или просто JOIN): Возвращает только те строки, где есть совпадение в обеих таблицах.

    SELECT orders.id, customers.name
    FROM orders
    INNER JOIN customers ON orders.customer_id = customers.id;
    -- Результат: только заказы, у которых есть клиент.
  2. LEFT JOIN (LEFT OUTER JOIN): Возвращает все строки из левой (первой) таблицы и совпадающие строки из правой. Если совпадения нет, поля из правой таблицы будут NULL.

    SELECT customers.name, orders.id
    FROM customers
    LEFT JOIN orders ON customers.id = orders.customer_id;
    -- Результат: все клиенты, даже те, кто не сделал ни одного заказа.
  3. RIGHT JOIN (RIGHT OUTER JOIN): Аналогичен LEFT JOIN, но приоритет у правой таблицы. Используется реже.

  4. FULL JOIN (FULL OUTER JOIN): Возвращает все строки из обеих таблиц. Если совпадения нет, недостающие поля заполняются NULL. Поддержка зависит от СУБД.

  5. CROSS JOIN: Возвращает декартово произведение — каждую строку из первой таблицы со всеми строками из второй. Используется редко и с осторожностью.

Операторы для объединения результатов запросов (SET операторы):

  • UNION: Объединяет результаты двух SELECT, удаляя дубликаты. Столбцы должны совпадать по типам и количеству.
    SELECT city FROM suppliers
    UNION
    SELECT city FROM customers;
    -- Список уникальных городов и от поставщиков, и от клиентов.
  • UNION ALL: Объединяет результаты сохраняя все дубликаты. Работает быстрее UNION, если дубли не нужно удалять.