Урок посвящен объединению данных из разных таблиц 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 зависит от задачи и необходимых данных.