Соединение двух таблиц

SQL имел бы очень маленькое практическое применение, если бы позволял получать данные только из одной таблицы.

При проектировании структуры данных стараются исключать дублирование данных (см нормальные формы).

Посмотрим на таблицу городов (city)

SELECT *
  FROM city
city_id name timezone_id
1 Москва 2
2 Санкт-Петербург 2
3 Новосибирск 5
... ... ...

В ней нет никакой информации o часовом поясе, только его идентификатор. Чтобы получить информацию о часовом поясе, нужно соединить таблицу городов (city) с таблицей часовых поясов (timezone) по идентификатору (timezone_id), т.е. для каждой записи из таблицы городов нужно получить ровно одну запись из таблицы часовых поясов с соответствующим идентификатором.

Рассмотрим запрос соединения таблиц городов и часовых поясов:

SELECT *
  FROM city
  JOIN timezone
    ON timezone.timezone_id = city.timezone_id
city_id name timezone_id timezone_id time_offset
1 Москва 2 2 UTC+3
2 Санкт-Петербург 2 2 UTC+3
3 Новосибирск 5 5 UTC+6
... ... ... ... ...
SELECT *             -- выбрать все поля
  FROM city         -- из таблицы city
  JOIN timezone     -- присоединить таблицу timezone
    ON timezone.timezone_id = city.timezone_id
                     -- для каждой записи из city сопоставить запись 
                     -- из timezone с совпадающим timezone_id

Обрати внимание на столбцы полученного результата, состоящего из 5 столбцов

  1. city_id - идентификатор города из таблицы city;
  2. name - название города из таблицы city;
  3. timezone_id - идентификатор часового пояса из таблицы city;
  4. timezone_id - идентификатор часового пояса из таблицы timezone;
  5. time_offset - время относительно UTC из таблицы timezone.

Столбец timezone_id встретился дважды в результате, потому что он есть в каждой из таблиц.

Синтаксис соединения таблиц:

SELECT список_полей
  FROM таблица1
  JOIN таблица2 ON условия_присоединения_таблицы2
  JOIN таблица3 ON условия_присоединения_таблицы3
  ...

2.11 Пропуск первых строк результата

3.2 Псевдонимы таблиц