Является ли ОТ x JOIN y ON xa = yb эквивалентно ОТ x,y ГДЕ xa = yb?
Я заметил на некоторых тестовых данных, что запросы в форме
SELECT *
FROM a
JOIN b ON a.x = b.y
WHERE [more conditions...];
возвращали те же данные, что и запросы формы
SELECT *
FROM a,b
WHERE a.x = b.y
AND [more conditions...];
Интуитивно они кажутся эквивалентными, но я не уверен, что это так.
Я предпочитаю запрос, который использует JOIN
поскольку он отделяет общую структуру запроса от конкретной бизнес-логики запроса. т.е. условия в WHERE
раздел запроса с использованием JOIN
те, которые могут быть параметризованы.
Какими другими способами, если таковые имеются, эти запросы не идентичны?
4 ответа
Обе формы эквивалентны, но еще одна причина, почему
SELECT *
FROM a
JOIN b ON a.x = b.y
WHERE [more conditions...];
Часто предпочтительным является то, что он предлагает большую гибкость, если вам нужно фильтровать вещи немного по-другому. Представьте себе, например, что х может быть null
, Вы просто должны изменить тип соединения на left join
,
Общий ответ - да.
Однако вы должны учитывать, что со сложностью ваших операторов SQL сложность их анализа и определения плана выполнения в базе данных возрастет, что повышает вероятность того, что соединения в стиле ANSI и обычные объединения не будут иметь одинаковый план выполнения., производительность и производительность.
Это, безусловно, имеет место в Oracle, в которой есть некоторые серьезные ошибки при разборе соединения ANSI (есть ошибки, ожидающие поддержки Oracle).
Эти запросы логически идентичны. Логические различия между новым JOIN
форма (SQL-92) и старше ,
Форма в том, как работают выражения внешнего соединения.
Где они не идентичны, в качестве кода. Форма SQL-89 была заменена SQL-92 более 20 лет назад, и более новая форма намного предпочтительнее из-за ее ясности, лучшего принятия стандартов для внешних объединений и большей выразительной силы для внешних объединений.
Да, эти два способа функционируют аналогичным образом, согласно книге: Основы систем баз данных / Рамез Элмасри, Шамкант Б. Нават. Интернет-ссылка на книгу