INNER JOIN: соединение двух таблиц
Содержание курса
Псевдоним таблицы через AS и уточнённое имя столбца
Когда в запросе участвуют две таблицы, сразу возникают две проблемы. Первая — длина: писать customers.customer_id и orders.customer_id в каждом условии утомительно. Вторая — неоднозначность: если столбец с одним именем есть в обеих таблицах, SQLite не поймёт, какой именно вы имеете в виду, и выдаст ошибку.
Оба вопроса решают псевдонимы таблиц:
SELECT *
FROM customers AS c
INNER JOIN orders AS o ON c.customer_id = o.customer_id;
AS c после имени таблицы объявляет псевдоним, который действует на весь запрос. Теперь везде — в ON, WHERE, SELECT — вместо customers пишем c, вместо orders — o.
Важное ограничение: после того как псевдоним объявлен, смешивать его с полным именем нельзя. Запись вроде c.customer_id = orders.customer_id вызовет ошибку, потому что orders уже «переименован» в o внутри этого запроса.
Запись псевдоним.столбец называется уточнённым именем столбца. Она нужна не только для сокращения, но и для явного указания источника. В SELECT это особенно важно: столбец customer_id есть в обеих таблицах, и если написать просто customer_id без уточнения, SQLite откажется выполнять запрос с сообщением об ambiguous column. Уточнение снимает неоднозначность:
SELECT c.name, o.order_date, o.total_amount
FROM customers AS c
INNER JOIN orders AS o ON c.customer_id = o.customer_id;
Здесь c.name — столбец name из customers, o.order_date и o.total_amount — столбцы из orders. Каждый столбец однозначно привязан к источнику, и запрос читается без двусмысленности.
