Составляем запросы SQL с INNER JOIN по нескольким столбцам
Быстрый ответ
Для выполнения INNER JOIN по нескольким полям следует применить условие ON с равенством по соответствимым столбцам, используя для этого оператор AND. Ниже приведён образец запроса, в котором таблицы TableA и TableB соединяются по полям id и name:
SELECT *
FROM TableA
JOIN TableB
ON TableA.id = TableB.id AND TableA.name = TableB.name;
Данный запрос выдаст записи со значениями id и name, равными в обоих таблицах, таким образом, это будет выглядеть как соединение двух половинок одного целого.
Псевдонимы: незаменимые помощники в коде
Псевдонимы таблиц в SQL облегчают чтение и понимание кода благодаря своей созвучности. Они особенно необходимы при работе со столбцами, имеющими похожие названия.
SELECT A.*, B.*
FROM TableA AS A
INNER JOIN TableB AS B
ON A.id = B.linked_id AND A.name = B.name;
Использование псевдонимов (A
для TableA, B
для TableB) повышает наглядность кода, выделяющую соответствие столбцов к определённой таблице. Это можно сравнить с выдачей VIP-пропуска каждой таблице, которым они выделяются среди других.
Работа со сложными соединениями
При соединении таблиц по нескольким условиям удобно группировать условия скобками, что содействует более ясному пониманию логической структуры запроса. Важно помнить, что порядок операций, как и в математике, имеет значение.
SELECT A.*, B.*
FROM TableA AS A
INNER JOIN TableB AS B
ON (A.id = B.id) AND (A.start_city = B.end_city AND A.start_code = B.end_code);
Здесь происходит своего рода игра с условиями: мы соединяем id, а также проверяем, чтобы пары начальных и конечных городов и их кодов совпадали.
Визуализация
Можно представить INNER JOIN
по нескольким столбцам, как совместное танцевальное выступление. 💃🕺
Каждый из участников обладает своими уникальными характеристиками:
Танцовщица А (💃): [Имя, Возраст, Стиль танца]
Танцор Б (🕺): [Имя, Стиль танца, Опыт]
В соответствии с правилами, пары образуются по совпадению Имени и Стиля танца:
💃🤝🕺: [Совпадающее Имя, Совпадающий Стиль танца]
# INNER JOIN по нескольким столбцам объединяет партнеров, у которых совпадают и Имя, и Стиль танца
Изменение вашего стиля соединения
В некоторых случаях иногда стоит рассмотреть возможность изменить тип INNER JOIN
. Если необходим более объемный набор данных, LEFT JOIN
может оказаться более подходящим благодаря своей способности включать данные.
SELECT A.name, B.city
FROM TableA AS A
LEFT JOIN TableB AS B
ON A.id = B.matching_id AND A.code = B.code;
С его помощью, как с помощью кий LEFTy в руках бильярдиста, получаются все записи из левой таблицы и сопоставленные записи из правой. Несопоставленные записи из правой таблицы отображаются как NULL.
Соединение одной и той же таблицы... дважды!
Иногда возникает необходимость соединить таблицу саму с собой, например, для вывода информации о месте отправления и прибытия. Это как найти в своём зеркальном отражении путь к себе.
SELECT flights.*, dep_city.name AS DepartureCity, arr_city.name AS ArrivalCity
FROM flights
INNER JOIN airports AS dep_city ON flights.dep_code = dep_city.code
INNER JOIN airports AS arr_city ON flights.arr_code = arr_city.code;
Это не дублирование, это просто двукратное соединение таблицы flights с airports для сопоставления кодов отправления и прибытия. Словно двукратный въезд в режиме транзита!
Особенности систем управления базами данных
У каждой системы управления базами данных есть свои нюансы и особенности SQL-синтаксиса. Поэтому важно учитывать особенности используемой системы: MySQL, MS SQL Server, Oracle или PostgreSQL.
WHERE: фильтры SQL
С помощью предложения WHERE
можно детализировать результаты запроса, отсеивая ненужные данные. Это как стать детективом Шерлоком в мире SQL.
SELECT *
FROM employees
INNER JOIN departments
ON employees.dep_id = departments.id
WHERE departments.name = 'Engineering';
И пусть зазвучит музыка тайн: мы видим только тех сотрудников, которые заняли инженерные вершины и вступили в отдел Инженерии.
Полезные материалы
- SQL INNER JOIN — пошаговое руководство по основам операции INNER JOIN.
- SQL JOIN: в чем разница между WHERE и ON? — обсуждение в сообществе нюансов использования JOIN.
- SQL Joins | Промежуточный SQL – Mode — подробный учебник по различным типам SQL JOINs.
- SQL | Join (Inner, Left, Right and Full Joins) — всестороннее руководство по разным операциям соединения.
- Операция RIGHT OUTER JOIN — последняя документация Oracle по RIGHT OUTER JOIN для глубокого понимания механизмов соединения.