Соответствуют ли следующие операторы выбора SQL92?
Соответствуют ли следующие операторы выбора SQL92?
SELECT table1.id, table2.id,*
FROM table1, table2
WHERE table1.id = table2.id
SELECT table1.Num, table2.id,*
FROM table1, table2
WHERE table1.Num = table2.id
4 ответа
Да, показанные вами запросы используют синтаксис, совместимый с SQL92. Моя копия " Понимание нового SQL: Полное руководство" Джима Мелтона и Алана Р. Саймона подтверждает это.
SQL92 по-прежнему поддерживает объединения с использованием синтаксиса запятой для обратной совместимости с SQL89. Насколько я знаю, все реализации SQL поддерживают как синтаксис запятой, так и JOIN
синтаксис включается.
В большинстве случаев реализация SQL знает, как их оптимизировать, чтобы они были идентичны по семантике (то есть они давали одинаковый результат) и производительности.
Исходя из StingyJack...
SELECT
table1.id,
table2.id,
*
FROM
table1
INNER JOIN
table2 ON table1.id = table2.id
WHERE
table1.column = 'bob'
SELECT table1.id, table2.id,* FROM table1, table2 WHERE table1.id = table2.id and table1.column = 'bob'
Где JOIN? Где фильтр?
JOIN также требует некоторой дисциплины и базовой проверки: легче избежать перекрестного соединения или частичного перекрестного соединения
К сожалению, я верю, что это так, но этот синтаксис объединения сложнее читать и поддерживать.
Я знаю, что в MSSQL нет разницы в производительности между этими двумя методами соединения, но какой из них легче понять?
SELECT table1.id, table2.id,*
FROM table1, table2
WHERE table1.id = table2.id
SELECT
table1.id,
table2.id,
*
FROM table1
INNER JOIN table2
ON table1.id = table2.id
Я могу ошибаться, но я понимаю, что соглашение SQL92 состоит в объединении таблиц с помощью оператора JOIN (например, FROM table1 INNER JOIN table2).