SQL для новичков: объединение таблиц

Урок посвящен объединению данных из разных таблиц SQL. Для примера используются три таблицы: shop (товары), people (пользователи) и orders (заказы).

Подготовка данных

Добавим записи в таблицу shop. Таблица хранит информацию о товарах: название и цена.

INSERT INTO shop (name, price) VALUES
('iPhone', 300),
('TV', 320),
('PS4', 30),
('Mac', 15),
('Fridge', 10),
('Phone 7', 23);

Создадим таблицу orders. Она хранит данные о заказах: номер заказа, ID товара, ID покупателя.

INSERT INTO orders (order_number, shop_id, person_id) VALUES
(1, 2, 4),
(2, 1, 5),
(3, 4, 3),
(4, 2, 2),
(5, 4, 5),
(6, 1, 4);

В таблице orders, поля shop_id и person_id являются внешними ключами, ссылающимися на id в таблицах shop и people соответственно.

Объединение данных с помощью INNER JOIN

Объединим данные из таблиц orders и people оператором INNER JOIN. INNER JOIN возвращает строки, имеющие соответствие в обеих таблицах по указанному условию.

SELECT
    orders.order_number,
    people.name,
    people.email
FROM
    orders
INNER JOIN
    people ON orders.person_id = people.id
ORDER BY
    orders.order_number DESC;

Запрос выбирает номер заказа (order_number) из orders и имя (name) и email (email) пользователя из people. Объединение происходит по полю person_id в orders и id в people. Результаты отсортированы по номеру заказа в обратном порядке.

Объединение данных из трёх таблиц

Для получения полной информации о заказе, включая название товара, добавим объединение с таблицей shop:

SELECT
    orders.order_number,
    people.name,
    shop.name AS product_name
FROM
    orders
INNER JOIN
    people ON orders.person_id = people.id
INNER JOIN
    shop ON orders.shop_id = shop.id;

Результат запроса: номер заказа, имя пользователя и название приобретенного товара.

Типы JOIN

Помимо INNER JOIN, существуют LEFT JOIN, RIGHT JOIN и FULL OUTER JOIN.

LEFT JOIN: Возвращает все строки из левой таблицы (например, people), и соответствующие строки из правой (orders), если они есть.

SELECT
    people.name,
    orders.order_number
FROM
    people
LEFT JOIN
    orders ON people.id = orders.person_id
ORDER BY people.name;

RIGHT JOIN: Аналогично LEFT JOIN, но возвращает все строки из правой таблицы.

SELECT
    orders.order_number,
    people.name
FROM
    orders
RIGHT JOIN
    people ON orders.person_id = people.id
ORDER BY orders.order_number;

Урок рассмотрел основные принципы объединения данных из нескольких таблиц в SQL с помощью оператора JOIN. Рассмотрены INNER JOIN, LEFT JOIN и RIGHT JOIN, и показано, как их использовать для получения нужной информации из связанных таблиц. Выбор типа JOIN зависит от задачи и необходимых данных.

Что будем искать? Например,программа