автор Малаховская Екатерина
JOIN для чайников
SQL (Structured Query Language) - это мощный инструмент для работы с данными в реляционных базах данных. Одним из важных аспектов является операция JOIN, которая позволяет объединять данные из нескольких таблиц.

Для новичков это может показаться сложным, но в этой статье мы рассмотрим различные типы JOIN и объясним, как они работают на примерах.

Когда вам надо написать запрос к одной таблице, например, к таблице с клиентами, то здесь все просто. Ваш запрос может выглядеть так:
SELECT * FROM customers
В данном запросе вам отобразяться все клиенты, которые храняться в таблице customers.
Но что делать, если вам надо получить данные из разных таблиц. Например, вам надо узнать Имя и Фамилию пользователя и список его заказов? Имя и Фамилия храняться в таблице customers, а номера заказов в таблицу orders.

Вот для этого надо применять оператор JOIN!

Не все таблицы вы сможете объединить при помощи JOIN. Данный оператор будет работать только тогда, когда таблицы связаны друг с другом (у них должен быть общий ключ, общее значение).
На данном рисунке вы видите две таблицы customers и orders. У них есть ключ - это id и customer_id (выделен зеленым).

Т.е. customer_id привязывает конкретный заказ к конкретному пользователю.

В примере выше мы можем увидеть, что у пользователя с ID = 1 (Ivan Ivanov) есть три заказа с OrderID = 1, 3 и 5.

У пользователя с ID = 3 (Fedor Federov) нет ни одного заказа.

У пользователя с ID = 2 есть один заказ с OrderID = 2.

1. INNER JOIN

Итак, INNER JOIN позволяет объединять строки из двух таблиц, используя значение из обеих таблиц. Он возвращает только строки, для которых есть соответствие в обеих таблицах. Другими словами, INNER JOIN выдаёт только пересечение данных из двух таблиц.
Если нам надо получить данные клиента и данные его заказа, мы будем использовать INNER JOIN и вот как будет выглядеть запрос:
SELECT * FROM orders
INNER JOIN customers 
ON orders.customer_id = customers.id;
Этот запрос выполняет INNER JOIN между двумя таблицами: orders и customers.

SELECT *: Это часть запроса, которая указывает, какие столбцы выбирать из результатов запроса. Здесь используется символ *, который означает "выбрать все столбцы".

FROM orders: Это указывает базу данных, из которой выбираются данные, в данном случае, из таблицы orders

INNER JOIN customers ON orders.customer_id = customers.id: Здесь мы делаем INNER JOIN между таблицами orders и customers. Мы указываем, что мы объединяем таблицы на основе значения столбцов id и customer_id. То есть, мы выбираем строки из таблицы orders и customers, где значения столбцов customer_id и id совпадают.

Таким образом, этот запрос вернет все столбцы из обеих таблиц для строк, где значение customer_id в таблице orders совпадает со значением id в таблице customers.

2. LEFT JOIN

LEFT JOIN возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если нет соответствующих строк в правой таблице, то будут возвращены NULL значения.

SELECT * FROM customers
LEFT JOIN orders
ON orders.customer_id = customers.id;
SELECT *: Это указывает, что мы выбираем все столбцы из результатов запроса.

FROM customers: Это указывает базу данных, из которой мы выбираем данные. Здесь мы выбираем данные из таблицы customers.

LEFT JOIN orders: Здесь мы указываем, что мы делаем LEFT JOIN с таблицей orders. Это означает, что мы будем включать все строки из таблицы customers, даже если для некоторых строк не будет соответствующих значений в таблице orders.

ON orders.customer_id = customers.id: Это условие объединения, где мы указываем, какие столбцы используются для сопоставления строк из обеих таблиц. Здесь мы сравниваем значения столбца customer_id из таблицы orders с значениями столбца id из таблицы customers. Это позволяет нам объединить строки, у которых значения в этих столбцах совпадают.

Итак, этот запрос вернет все столбцы из таблицы customers, а также соответствующие столбцы из таблицы orders, где значения столбца customer_id из таблицы orders совпадают с значениями столбца id из таблицы customers. Если для некоторых строк из таблицы customers нет соответствующих значений в таблице orders, то будут возвращены NULL значения.
3. RIGHT JOIN

RIGHT JOIN работает наоборот от LEFT JOIN. Он возвращает все строки из правой таблицы и соответствующие строки из левой таблицы. Если нет соответствующих строк в левой таблице, то возвращаются NULL значения.
SELECT * FROM customers
RIGHT JOIN orders
ON orders.customer_id = customers.id;
Вот так просто работают различные типы JOIN в SQL. Надеюсь, это помогло вам понять их лучше!
    А если хочешь потренироваться писать SQL запросы и научиться разворачивать базы данных, приходи на курс Основы SQL!
    Учимся отличать тест-план, тест-кейсы и чек-листы на примерах.
    Полезные ресурсы и советы для поиска работы
    Выпускник школы QaLearning рассказывает про свой путь обучения, поиска работы и прохождения собеседований. Вы получите много дельных советов!