Соединения

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

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

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

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

SELECT *
  FROM city
city_idnametimezone_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_idnametimezone_idtimezone_idtime_offset
1Москва22UTC+3
2Санкт-Петербург22UTC+3
3Новосибирск55UTC+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
  ...
ПредыдущаяСледующая