В условиях соединения ON
имя таблицы обычно не пишут, т.к. читать длинные портянки кода весьма утомительно. Подобно псевдонимам столбцов в списке выборки SELECT
можно задать псевдонимы таблицам. Для этого после названия таблицы через пробел нужно написать псевдоним таблицы. После того, как таблице назначен псевдоним, обращаться к ней по названию уже нельзя - только по псевдониму.
Перепишем запрос из предыдущей статьи с использованием псевдонимов для таблиц. Было:
SELECT *
FROM city
JOIN timezone
ON timezone.timezone_id = city.timezone_id
стало:
SELECT *
FROM city c
JOIN timezone t
ON t.timezone_id = c.timezone_id
Часто таблицам задают псевдонимы по первым буквам слов, входящих в название таблицы:
city - c
category - c
product - p
store_address - sa
product_price - pp
Алиасы таблиц также удобно использовать в списке выборки SELECT
. Выберем, например, из таблиц городов и часовых поясов только идентификатор города, название города и время относительно UTC:
SELECT c.city_id,
c.name,
t.time_offset
FROM city c
JOIN timezone t
ON t.timezone_id = c.timezone_id
Если поле встречается только в одной таблице, то в списке выборки таблицу, из которой взять столбец, указывать не обязательно. Последний запрос можно записать и так:
SELECT c.city_id,
name,
time_offset
FROM city c
JOIN timezone t
ON t.timezone_id = c.timezone_id
Но мы рекомендуем всегда указывать в списке выборки из какой таблицы какое поле берется. При таком подходе читающий запрос человек сразу поймет из какой таблицы берутся данные. Да и никто не гарантирует, что столбец с таким же названием не появится в другой таблице позже.
Если столбец с одинаковым названием встречается в нескольких таблицах из FROM
, то при использовании его без указания таблицы возникнет ошибка. Например, при выполнениии запроса
SELECT c.city_id,
name,
timezone_id,
time_offset
FROM city c
JOIN timezone t
ON t.timezone_id = c.timezone_id
возникнет ошибка
column reference "timezone_id" is ambiguous
потому что СУБД не знает, из какой таблицы ей взять значение поля timezone_id
.