Различия между on и where в SQL

Рассмотрим примеры:

и

Что будет результатом выполнения зарпосов? Все пользователи (id и имя), относящиеся к группе ‘some group’.

На первый взгляд разницы между двумя этими запросами нет, но будут ли одинаковыми результаты следующих запросов, использующих left join?

и

Нет, не будут. В первом случае мы получим всех пользователей, которые совершили платеж типа ‘fine’ и тех, кто ни разу не совершал никакого платежа. Во втором — всех пользователей, независимо от того, совершали ли они какие-то платежи. При этом во второй выборке поле rent будет заполнено платежом типа fine, если найдется такая запись в таблице user_payment, иначе — null.

Надо помнить, что условие в on относится только к операции join, тогда как в where — ко всему запросу целиком. Соответственно,

  • если не удовлятворяется условие по on, то мы все равно получаем все строки из первой таблицы, а отсутствующие данные из второй таблицы дополняются Null.
  • Если же не удовлетворяется условие по where, то мы такие строки в выборке вообще не получаем.

 

Поделиться: Share on LinkedIn
Linkedin
Share on VK
VK
Share on Facebook
Facebook
0Share on Google+
Google+
0Tweet about this on Twitter
Twitter

Оставить комментарий

Ваш e-mail не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Яндекс.Метрика