2010-02-03 1 views
3

Являются ли эти запросы обеими представлениями equi join?SQL Server Query представления equi join

Я нахожу, что оба возвращают одинаковый результат.

Query1:

SELECT C.* FROM [Case] A, [Event] B, Notice C 
WHERE A.CaseID = B.CaseID 
AND B.EventID = C.EventID 

Query2:

SELECT C.* FROM [Case] A 
join [Event] B on A.CaseID = B.CaseID 
join Notice C on B.EventID = C.EventID 

Просьба уточнить.

ответ

4

Да, те же запросы, различный синтаксис.

Второй запрос лучше записать в виде:

SELECT C.* 
FROM [Case] A 
inner join [Event] B on A.CaseID = B.CaseID 
inner join Notice C on B.EventID = C.EventID 

Второй запрос с использованием синтаксиса ANSI имеет некоторые преимущества по сравнению с первым:

  • легко видеть, когда у вас есть недостающий ON пункт
  • дает понять, что такое вид соединения в настоящее время делается
  • отделяет JOIN статья WHERE статья
+0

Прохладный .. Спасибо, ребята! –

+0

PLUS, конечно, это более свежий синтаксис, другой - 18 лет устаревших по причинам, описанным выше. Это также легче mainatain, особенно когда нужно добавлять левые соединения, поскольку синтаксис старого стиля не имеет хорошей поддержки для левых объединений (по крайней мере, в SQL Server). Фактически они устарели и прямо сейчас на SQL-сервере, что они могут возвращать неверные результаты, поскольку оптимизированный путается относительно того, является ли это левым соединением или перекрестным соединением. – HLGEM

+0

Хорошие баллы - плюс у меня есть ** сильное отвращение ** до синтаксиса перед ANSI :) – RedFilter

0

При использовании запятой в предложении FROM это то же самое, что и ключевое слово JOIN. Обычно вы используете INNER JOIN или форму OUTER JOIN, которая дает гораздо более эффективные результаты.