SQL код скопирован в буфер обмена
Узнайте, как использовать SQL INNER JOIN для объединения совпадающих строк из нескольких таблиц. Этот урок охватывает синтаксис INNER JOIN, визуальную логику и практические примеры с использованием базы данных Sakila, включая соединение трех и более таблиц. Освойте связи в базах данных и улучшите свои навыки SQL-запросов для анализа данных. Ключевые слова: SQL, INNER JOIN, объединение таблиц, реляционные базы данных, синтаксис JOIN, SQL для анализа данных, база данных Sakila.
EN PT

Урок 5.2: INNER JOIN - Соединение совпадающих строк

В предыдущем уроке мы изучили фундаментальную концепцию соединения таблиц для получения связанных данных. Самый распространенный и часто используемый тип соединения - это INNER JOIN. В этом уроке мы подробно рассмотрим его логику, синтаксис и практическое применение.

Что такое INNER JOIN?

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

Представьте это как пересечение двух наборов данных.

Визуализация:

   Таблица A (customer)         Таблица B (payment)
   +----+----------+            +----+----------+
   | id | name     |            | id | amount   |
   +----+----------+            +----+----------+
   | 1  | Alice    | <--------> | 1  | 10.00    | (Совпадение!)
   | 2  | Bob      |            | 1  | 15.00    | (Совпадение!)
   | 3  | Charlie  |            | 4  | 20.00    | (Нет совпадения для Charlie или ID 4)
   +----+----------+            +----+----------+

В этом примере Charlie исключен, так как у него нет платежей, а платеж с customer_id 4 исключен, так как нет клиента с таким ID.

Синтаксис INNER JOIN

Стандартный синтаксис для INNER JOIN выглядит так:

SELECT
    table1.column1,
    table2.column2
FROM
    table1
INNER JOIN
    table2 ON table1.common_column = table2.common_column;
  • INNER JOIN: Указывает, что нам нужны только совпадающие строки.
  • ON: Определяет условие для сопоставления (обычно это первичный ключ одной таблицы и внешний ключ другой).

Примечание: В большинстве баз данных SQL (таких как MySQL, PostgreSQL и SQL Server) ключевое слово INNER является необязательным. Написание JOIN и INNER JOIN даст один и тот же результат.

Практические примеры (база данных Sakila)

1. Соединение городов и стран

Таблица city содержит столбец country_id, который ссылается на таблицу country. Чтобы увидеть название города рядом с названием страны, мы используем INNER JOIN.

SELECT
    ci.city,
    co.country
FROM
    city AS ci
INNER JOIN
    country AS co ON ci.country_id = co.country_id;

Этот запрос возвращает только те города, которые связаны с существующей страной.

2. Список сотрудников и их адресов

Чтобы узнать, где живет каждый сотрудник, мы соединяем таблицы staff и address.

SELECT
    s.first_name,
    s.last_name,
    a.address,
    a.district
FROM
    staff AS s
INNER JOIN
    address AS a ON s.address_id = a.address_id;

Соединение более чем двух таблиц

Вы можете последовательно использовать несколько условий INNER JOIN, чтобы собрать информацию из нескольких таблиц сразу. Например, чтобы увидеть, в каких фильмах снимался актер, нам понадобятся три таблицы: actor, film и промежуточная таблица film_actor.

SELECT
    a.first_name,
    a.last_name,
    f.title
FROM
    actor AS a
INNER JOIN
    film_actor AS fa ON a.actor_id = fa.actor_id
INNER JOIN
    film AS f ON fa.film_id = f.film_id
LIMIT 10;

Как это работает:

  1. Первое соединение связывает actor и film_actor по actor_id.
  2. Второе соединение связывает результат первого шага с таблицей film по film_id.
  3. В результат попадают только те записи, которые существуют во всех трех таблицах и соответствуют условиям.

Ключевые выводы урока

  • INNER JOIN - это тип соединения по умолчанию в SQL.
  • Он возвращает строки только тогда, когда есть совпадение в обеих таблицах.
  • Строки, которые не соответствуют условию соединения, отбрасываются из результата.
  • Вы можете соединять несколько таблиц, добавляя последующие операторы INNER JOIN.
  • Использование псевдонимов таблиц (AS ci, AS co) делает сложные соединения более читаемыми.