SQL(6/14)
💻Объединение таблиц — JOIN на практике: INNER, LEFT, RIGHT JOIN, типичные ошибки и как их избежать SQL(6/14)
В практике аналитика одним из главных инструментов работы с данными является объединение таблиц — JOIN и камень предкновения всех начинающих аналитиков. Рассмотрим три основных вида JOIN на самых распространённых примерах.
1. INNER JOIN — пересечение таблиц
Что это? INNER JOIN возвращает только те строки, которые есть в обеих таблицах. Если в одной таблице нет совпадения для значения в другой, то такая строка в результат не попадёт.
Пример данных:
Таблица customers: | customer_id | name | |-------------|---------| | 1 | Alice | | 2 | Boris | | 3 | Charlie | Таблица orders: | order_id | customer_id | amount | |----------|-------------|--------| | 101 | 1 | 250 | | 102 | 2 | 125 | | 103 | 4 | 300 | Пример запроса: SELECT c.customer_id, c.name, o.order_id, o.amount FROM customers c INNER JOIN orders o ON c.customer_id = o.customer_id;
Результат: |customer_id|name|order_id|amount| |-----------|-----|-------|------| | 1 |Alice| 101 | 250 | | 2 |Boris| 102 | 125 | Обратите внимание, что клиент с customer_id = 3 отсутствует, так как у него нет заказов, и заказ с customer_id = 4 тоже не попал — нет такого клиента.
2. LEFT JOIN — всё из левой таблицы + совпадения справа
Что это? LEFT JOIN возвращает все строки из левой таблицы, а из правой — только совпадающие. Если для строки слева нет совпадения справа, поля из правой таблицы будут заполнены NULL.
Пример запроса: SELECT c.customer_id, c.name, o.order_id, o.amount FROM customers c LEFT JOIN orders o ON c.customer_id = o.customer_id;
Результат: | customer_id | name | order_id | amount | |-------------|---------|----------|--------| | 1 | Alice | 101 | 250 | | 2 | Boris | 102 | 125 | | 3 | Charlie | NULL | NULL |
Клиент Charlie здесь сохранён, несмотря на отсутствие заказов — это ключевое отличие от INNER JOIN.
3. RIGHT JOIN — всё из правой таблицы + совпадения слева
Что это? RIGHT JOIN — зеркальный аналог LEFT JOIN, возвращает все строки из правой таблицы, а из левой — только совпадающие.
Пример запроса: SELECT c.customer_id, c.name, o.order_id, o.amount FROM customers c RIGHT JOIN orders o ON c.customer_id = o.customer_id;
Результат: |customer_id|name| order_id | amount | |-------------|-------|----------|--------| | 1 | Alice | 101 | 250 | | 2 | Boris | 102 | 125 | | NULL | NULL | 103 | 300 |
Обратите внимание, что заказ с order_id = 103 сохранился, хотя клиента с customer_id = 4 в таблице нет — поля слева заполнены NULL.
Типичные ошибки при JOIN и как их избежать
Ошибка 1: Использование INNER JOIN, когда нужно сохранить все данные из одной таблицы Часто новички используют INNER JOIN, не учитывая, что при отсутствии совпадений строки пропадут из результата. Чтобы избежать потери важной информации, выбирайте LEFT или RIGHT JOIN в зависимости от задачи.
Ошибка 2: Несогласованность ключей для объединения При неправильном сопоставлении ключей (например, разный тип данных или несоответствие имён столбцов) будут неожиданно отсутствовать совпадения. Убедитесь, что типы данных совпадают, а ключи однозначно идентифицируют записи.
Понимание каждого типа JOIN и правильное использование условий соединения — залог корректных и эффективных запросов в аналитике.
Запомните, даже самый спокойный медведь умеет рычать, когда надо. Берегите голову, берегите данные — и пусть в вашем дне будет немного тишины, ясности и добрых переменных.