> Какие виды JOIN существуют и в чем разница между LEFT JOIN и INNER JOIN (Python)

Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы

Компании: ООО Диджитал Сектор Поддержка, Ozon, Sunlight

Стек: Python

> Пример ответа

В SQL существует несколько основных типов JOIN: INNER JOIN, LEFT JOIN (или LEFT OUTER JOIN), RIGHT JOIN, FULL OUTER JOIN и CROSS JOIN. Разница между LEFT JOIN и INNER JOIN заключается в том, какие строки включаются в результат.

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

Пример на Python с использованием SQLite для наглядности:

PYTHON
import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('CREATE TABLE users (id INT, name TEXT)')
cur.execute('CREATE TABLE orders (id INT, user_id INT, product TEXT)')
cur.executemany('INSERT INTO users VALUES (?, ?)', [(1, 'Alice'), (2, 'Bob'), (3, 'Charlie')])
cur.executemany('INSERT INTO orders VALUES (?, ?, ?)', [(1, 1, 'Book'), (2, 1, 'Pen'), (3, 3, 'Notebook')])
# INNER JOIN - только пользователи с заказами
cur.execute('''
SELECT users.name, orders.product
FROM users
INNER JOIN orders ON users.id = orders.user_id
''')
print("INNER JOIN:", cur.fetchall()) # [('Alice', 'Book'), ('Alice', 'Pen'), ('Charlie', 'Notebook')]
# LEFT JOIN - все пользователи, даже без заказов
cur.execute('''
SELECT users.name, orders.product
FROM users
LEFT JOIN orders ON users.id = orders.user_id
''')
print("LEFT JOIN:", cur.fetchall()) # [('Alice', 'Book'), ('Alice', 'Pen'), ('Bob', None), ('Charlie', 'Notebook')]

Таким образом, INNER JOIN фильтрует строки, а LEFT JOIN гарантирует, что все записи из левой таблицы останутся в результате.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью