ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Составляем запросы SQL с INNER JOIN по нескольким столбцам

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для выполнения INNER JOIN по нескольким полям следует применить условие ON с равенством по соответствимым столбцам, используя для этого оператор AND. Ниже приведён образец запроса, в котором таблицы TableA и TableB соединяются по полям id и name:

SQL
Скопировать код
SELECT *
FROM TableA
JOIN TableB
ON TableA.id = TableB.id AND TableA.name = TableB.name;

Данный запрос выдаст записи со значениями id и name, равными в обоих таблицах, таким образом, это будет выглядеть как соединение двух половинок одного целого.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Псевдонимы: незаменимые помощники в коде

Псевдонимы таблиц в SQL облегчают чтение и понимание кода благодаря своей созвучности. Они особенно необходимы при работе со столбцами, имеющими похожие названия.

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-пропуска каждой таблице, которым они выделяются среди других.

Работа со сложными соединениями

При соединении таблиц по нескольким условиям удобно группировать условия скобками, что содействует более ясному пониманию логической структуры запроса. Важно помнить, что порядок операций, как и в математике, имеет значение.

SQL
Скопировать код
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 по нескольким столбцам, как совместное танцевальное выступление. 💃🕺

Каждый из участников обладает своими уникальными характеристиками:

Markdown
Скопировать код
Танцовщица А (💃): [Имя, Возраст, Стиль танца]
Танцор Б (🕺): [Имя, Стиль танца, Опыт]

В соответствии с правилами, пары образуются по совпадению Имени и Стиля танца:

Markdown
Скопировать код
💃🤝🕺: [Совпадающее Имя, Совпадающий Стиль танца]
# INNER JOIN по нескольким столбцам объединяет партнеров, у которых совпадают и Имя, и Стиль танца

Изменение вашего стиля соединения

В некоторых случаях иногда стоит рассмотреть возможность изменить тип INNER JOIN. Если необходим более объемный набор данных, LEFT JOIN может оказаться более подходящим благодаря своей способности включать данные.

SQL
Скопировать код
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.

Соединение одной и той же таблицы... дважды!

Иногда возникает необходимость соединить таблицу саму с собой, например, для вывода информации о месте отправления и прибытия. Это как найти в своём зеркальном отражении путь к себе.

SQL
Скопировать код
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.

SQL
Скопировать код
SELECT *
FROM employees
INNER JOIN departments
ON employees.dep_id = departments.id
WHERE departments.name = 'Engineering';

И пусть зазвучит музыка тайн: мы видим только тех сотрудников, которые заняли инженерные вершины и вступили в отдел Инженерии.

Полезные материалы

  1. SQL INNER JOIN — пошаговое руководство по основам операции INNER JOIN.
  2. SQL JOIN: в чем разница между WHERE и ON? — обсуждение в сообществе нюансов использования JOIN.
  3. SQL Joins | Промежуточный SQL – Mode — подробный учебник по различным типам SQL JOINs.
  4. SQL | Join (Inner, Left, Right and Full Joins) — всестороннее руководство по разным операциям соединения.
  5. Операция RIGHT OUTER JOIN — последняя документация Oracle по RIGHT OUTER JOIN для глубокого понимания механизмов соединения.
Свежие материалы