SQL INNER JOIN вопрос

Я создаю запрос, который будет отображать информацию для записи, которая выводится из 8 таблиц. Разработчик, который изначально написал запрос, использовал комбинацию "где это равно этому" И "это равно этому" для создания объединений.

С тех пор я изменил запрос на использование INNER JOINS. Я задавался вопросом, был ли мой подход лучше, чем использование комбинации операторов WHERE.

С точки зрения хорошей практики, комбинация INNER JOINS - хороший вариант, или я должен использовать другую технику.

Ответ 1

С точки зрения производительности, не будет никакой разницы... по крайней мере, не на видных RDBMS, таких как Sql-server/Oracle... Эти механизмы базы данных, способные идентифицировать оба шаблона, одинаковы и используют одинаковые план выполнения для обоих...

В моем скромном мнении обе одинаково хорошие практики, но вы должны поддерживать согласованность и правильное выравнивание... Где-то я слышал, что предложение where обычно используется разработчиками oracle, а внутреннее соединение Sql-Server... Не очень уверен в этом... К настоящему времени большинство кодеров способны понимать оба типа запросов...

Ответ 2

Я полагаю, что между ними нет разницы в производительности:

Стиль ANSI
SELECT * FROM Table1 a JOIN TABLE2 b on a.id = b.id

Старый стиль
SELECT * FROM Table1 a , TABLE2 b
WHERE a.id = b.id

Стиль ANSI более новый и читаемый и красивый, я предпочитаю старый стиль, особенно когда речь заходит об объединении более 4/5 таблиц... возможно, потому что im Oracle Dev, как было сказано ранее o_O

Ответ 3

Оба будут вести себя одинаково (как сказал Король). Лично я предпочитаю синтаксис INNER/OUTER/LEFT JOIN, потому что он более интуитивно понятный/явный. Когда вы попадаете в LEFT JOINs с условиями соединения в предложении WHERE, вам нужно использовать знаки плюс, а затем вы должны помнить, с какой стороны их включить. Urgghh.

Также кажется (опять же, как сказал Король), что Oracle devs предпочитает помещать условия соединения в предложение WHERE.

-Jamiet