Семантическая эквивалентность SQL: {полное, левое, правое} объединение в true = внутреннее объединение в true? - PullRequest
0 голосов
/ 13 ноября 2018

Эквивалентны ли два оператора SQL?

  1. select * from tb1 {full, left, right} join tb2 on true
  2. select * from tb1 inner join tb2 on true

По моему мнению, эти два утвержденияэквивалент.Но в PostgreSQL он не выполняет преобразование.Я не знаю, что делают другие базы данных.Или есть какой-то случай, который я не рассматривал?

1 Ответ

0 голосов
/ 13 ноября 2018

Эти конструкции не одинаковы:

select *
from tbl1 inner join
     tbl2
     on true;

и:

select *
from tbl1 left join
     tbl2
     on true;

В большинстве случаев оба выполняют CROSS JOIN.НО, есть разница, когда у tbl2 нет строк.

Когда у tbl2 нет строк, версия INNER JOIN не возвращает строк.Версия LEFT JOIN возвращает строки из первой таблицы со значениями NULL из второй.

RIGHT JOIN и FULL JOIN ведут себя аналогично с пустыми таблицами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...