@wideShift

JOIN всегда делает декартово произведение?

Я понимаю, что в результате будет каждого JOIN.
Мне не понятно, как внутри оно работает.
Мне казалось, что так:
1) INNER JOIN - декартово произведение и потом выбор строк по условию.
2) LEFT JOIN - декартово произведение и потом выбор строк по условию + добавить строки из левой таблицы, которым не нашлось соответствие.
  • Вопрос задан
  • 837 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Akela_wolf
Extreme Programmer
Если вас интересует это в плане получаемого результата - то да, можно рассматривать это так: декартово произведение + фильтр строк по условию (и добавление NULL-ов в случае LEFT JOIN).

Если интересует как это устроено внутри СУБД - то там далеко не всегда будет декартово произведение, потому что это довольно затратная операция. Какие конкретно операции будет выполнять СУБД можно увидеть по EXPLAIN-у - это называется план запроса. Там может быть и NESTED LOOP (вложенный цикл) и MERGE JOIN и другие операции, которые планировщик запроса сочтет подходящими для данного конкретного сочетания таблиц в данном конкретном запросе (на это влияет структура запроса, наличие индексов, собранная по таблицам статистика и пр. факторы, углубляться в которые я сейчас не буду).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы