JOIN в SQL: основы объединения таблиц

КОНСТРУКЦИЯ JOIN

Почти каждая задача в SQL решается с использованием нескольких таблиц. Необходимо уметь объединять данные из разных таблиц по ключу. Конструкция JOIN нужна как раз для этой цели.

Рассмотрим соединение таблиц с помощью JOIN

В таблице supermarket_sales хранятся данные продаж, продукт представлен в виде идентификатора ProductID.

Чтобы понять, что за товар мы продаем, нужно добавить обычное название продукта, которое хранится в таблице supermarket_products в колонке ProductName.

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

Вот так будет выглядеть запрос:

select
    sales.Date,
    sales.ProductID,
    product.ProductName,
    product.ProductCost,
    sales.Quantity
from
    supermarket_sales as sales
join
    supermarket_products as product on sales.ProductId = product.ProductId -- инфо о продуктах
limit 10

Рассмотрим запрос подробнее:

  1. В FROM указываем первую таблицу.
  2. В join указываем вторую таблицу, JOIN всегда идет после FROM.
  3. Для каждой таблицы создаем новое короткое название через алиас.  
    • Если колонки в двух таблицах называются одинаково (в нашем случае это ProductID), то интерпретатор не поймет, какую колонку мы хотим вытащить. Поэтому в SELECT мы можем записать колонку только с названием таблицы перед колонкой. Таблицы обычно имеют длинные название, поэтому мы их сокращаем через AS.
    • Советуем ко всем колонкам добавлять короткое название таблицы, потому что это поможет потом быстро разобраться, из какой таблицы какие колонки вытаскиваются.
    • А еще настойчивая рекомендация - короткое название таблицы должно быть осмысленное
  4. После переименования таблицы указываем, по какой колонке мы соединяем две таблицы. В нашем случае каждый ProductName это какой-то ProductID, и для того, чтобы в таблицу с продажами подтянуть корректное название товара, нам нужно, чтобы ProductID из двух таблиц был равен. 
    • При одинаковых ключах мы не можем написать on ProductId = ProductId, потому что для интерпретатора непонятно, из какой таблицы мы берем эту колонку. Поэтому указываем короткое название таблицы как on sales.ProductId = product.ProductId 
    • Также старайтесь комментировать соединения, это в будущем поможет вам понимать, что у вас написано.