Оператор INNER JOIN объединяет две таблицы на основе общего столбца и выбирает записи с совпадающими значениями в этих столбцах. Например:
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers INNER JOIN Orders ON Customers.customer_id = Orders.customer; |
Вот как работает этот код:
Здесь мы выбираем столбцы customer_id и first_name (из таблицы Customers) и столбец amount (из таблицы Orders). В результате получаем те строки, в которых есть совпадение между customer_id (таблицы Customers) и customer (таблицы Orders).
Синтаксис оператора INNER JOIN
Синтаксис оператора INNER JOIN
следующий:
1 2 3 4 |
SELECT столбцы FROM таблица1 INNER JOIN таблица2 ON таблица1.имя_столбца = таблица2.имя_столбца; |
Оператор INNER JOIN с оператором WHERE
Вот пример использования оператора INNER JOIN
с оператором WHERE
:
1 2 3 4 5 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers INNER JOIN Orders ON Customers.customer_id = Orders.customer WHERE Orders.amount >= 500; |
Здесь мы объединяем две таблицы и выбираем строки, в которых сумма (amount) больше или равна 500.
Оператор INNER JOIN с псевдонимами
Мы можем использовать псевдонимы (оператор AS) с оператором INNER JOIN
, чтобы сделать код короче и чище. Например:
1 2 3 4 |
SELECT C.cat_name, P.prod_title FROM Categories AS C INNER JOIN Products AS P ON C.cat_id = P.cat_id; |
Здесь мы выбираем общие строки между таблицами Categories и Products.
Оператор INNER JOIN с тремя таблицами
Мы также можем объединить более двух таблиц, используя оператор INNER JOIN
. Например:
1 2 3 4 5 6 |
SELECT C.customer_id, C.first_name, O.amount, S.status FROM Customers AS C INNER JOIN Orders AS O ON C.customer_id = O.customer INNER JOIN Shippings AS S ON C.customer_id = S.customer; |
Здесь мы:
объединяем таблицы Customers и Orders на основе customer_id;
объединяем таблицы Customers и Status на основе customer_id.
Команда возвращает те строки, в которых есть совпадение между значениями столбцов в обоих условиях объединения.
Примечание: Для запуска этой команды в каждой таблице должен быть общий столбец customer_id (или customer).
Сравнение INNER JOIN с другими JOIN-ами
INNER JOIN против JOIN
Мы можем использовать JOIN вместо INNER JOIN
. По сути, эти два оператора одинаковы. Например, следующий фрагмент кода:
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers INNER JOIN Orders ON Customers.customer_id = Orders.customer; |
идентичен
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers JOIN Orders ON Customers.customer_id = Orders.customer; |
INNER JOIN против LEFT JOIN
Оператор INNER JOIN
выбирает общие строки между двумя таблицами, в то время как оператор LEFT JOIN выбирает общие и все остальные строки из левой таблицы.
INNER JOIN
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers INNER JOIN Orders ON Customers.customer_id = Orders.customer; |
Результат (полные данные):
LEFT JOIN
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers LEFT JOIN Orders ON Customers.customer_id = Orders.customer; |
Результат:
INNER JOIN против RIGHT JOIN
Оператор INNER JOIN
выбирает общие строки между двумя таблицами, в то время как оператор RIGHT JOIN выбирает общие и все остальные строки из правой таблицы.
INNER JOIN
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers INNER JOIN Orders ON Customers.customer_id = Orders.customer; |
Результат (полные данные):
RIGHT JOIN
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers RIGHT JOIN Orders ON Customers.customer_id = Orders.customer_id; |
Результат:
INNER JOIN против FULL OUTER JOIN
Оператор INNER JOIN
выбирает общие строки между двумя таблицами, в то время как оператор FULL OUTER JOIN выбирает все строки из обеих таблиц.
INNER JOIN
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers INNER JOIN Orders ON Customers.customer_id = Orders.customer; |
Результат (полные данные):
FULL OUTER JOIN
1 2 3 4 |
SELECT Customers.customer_id, Customers.first_name, Orders.amount FROM Customers FULL OUTER JOIN Orders ON Customers.customer_id = Orders.customer; |
Результат: