Различия между 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
0Tweet about this on Twitter
Twitter

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

Ваш адрес email не будет опубликован.

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

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