Соответствуют ли следующие операторы выбора 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).

Другие вопросы по тегам