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

Запрос выполняется следующим образом:

  1. За результат выполнения запроса берутся все строки из первой таблицы предложения FROM
  2. Для каждой строки из результата выполнения запроса отбираются строки из второй таблицы из FROM по условиям соединения. В результате для каждой строки из первой таблицы в результирующей выборке получается столько строк, сколько строк нашлось во второй таблице по условиям соединения.
  3. Пункт 2 выполняется для каждой таблицы из предложения FROM.
  4. Из строк, полученных в пунктах 1 - 3, остаются те, для которых условие в WHERE будет истинно.

По факту на сервере запрос может выполняться по другому (с оптимизацией, планами запросов, планировщиком будем разбираться в последующих курсах), на текущем этапе нас интересует только логика определения результата запроса.

Получим информацию городах во временной зоне 'UTC+3':

SELECT c.city_id,
       c.name,
       t.time_offset
  FROM city c
  JOIN timezone t
    ON t.timezone_id = c.timezone_id
 WHERE time_offset = 'UTC+3'
 ORDER BY name

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

3.4 Несколько условий соединения