#4 – Связи между таблицами (JOIN)
Видеоурок
При работе с базами данных редко бывает достаточно одной таблицы. Обычно данные распределены по разным таблицам – например, users (пользователи) и orders (заказы). Чтобы связать эти данные между собой и получить осмысленный результат, в SQL используется оператор JOIN.
Что делает JOIN?
Оператор JOIN объединяет строки из двух (или более) таблиц на основе общего поля. В большинстве случаев это внешний ключ — например, orders.user_id ссылается на users.id.
Пример базовых таблиц:
-- Таблица пользователей
SELECT * FROM users;
+----+------+---------------+
| id | name | email |
+----+------+---------------+
| 1 | Alex | [email protected] |
| 2 | Bob | [email protected] |
+----+------+---------------+
-- Таблица заказов
SELECT * FROM orders;
+----+---------+----------+-------+
| id | user_id | product | price |
+----+---------+----------+-------+
| 1 | 1 | iPad | 1200 |
| 2 | 2 | iPhone | 900 |
| 3 | 2 | MacBook | 2500 |
+----+---------+----------+-------+
INNER JOIN
Тип соединения INNER JOIN возвращает только те строки, которые есть в обеих таблицах. Если пользователь сделал заказ, он появится в результате, если нет — не будет показан.
SELECT users.name, orders.product, orders.price
FROM users
INNER JOIN orders ON users.id = orders.user_id;
Результат:
+------+----------+-------+
| name | product | price |
+------+----------+-------+
| Alex | iPad | 1200 |
| Bob | iPhone | 900 |
| Bob | MacBook | 2500 |
+------+----------+-------+
LEFT JOIN
Оператор LEFT JOIN возвращает все строки из левой таблицы (в данном случае users), даже если у пользователя нет заказов. Для таких пользователей значения из правой таблицы будут NULL.
SELECT users.name, orders.product
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
RIGHT JOIN
Аналогично, RIGHT JOIN возвращает все строки из правой таблицы (например, orders), даже если в левой таблице (users) нет соответствующих записей.
SELECT users.name, orders.product
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;
FULL JOIN
Тип FULL JOIN объединяет обе таблицы, возвращая все строки из обеих сторон. Если нет совпадения, в соответствующих полях будет NULL.
SELECT users.name, orders.product
FROM users
FULL JOIN orders ON users.id = orders.user_id;
Исходный код
Весь код будет доступен после подписки на проект! Задание к уроку
Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Также стоит посмотреть