2013-11-23 4 views
2

Эти два SQL syntaxtes дают тот же результат, который лучше использовать и почему?Правильный способ написать синтаксис SQL?

первый:

SELECT c.Id,c.Name,s.Id,s.Name,s.ClassId 
FROM dbo.ClassSet c,dbo.StudentSet s WHERE c.Id=s.ClassId 

второй:

SELECT c.Id,c.Name,s.Id,s.Name,s.ClassId 
FROM dbo.ClassSet c JOIN dbo.StudentSet s ON c.Id=s.ClassId 
+2

Этот * список таблиц * разделенных запятыми * был отменен с ** ANSI-92 ** SQL Standard (более ** 20 лет ** назад) - также см. [Плохие привычки пинать: использование старого стиля JOINs] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) для получения дополнительной информации об этом –

ответ

3

2: 1-й лучше.

То, как вы присоединяетесь к первому запросу в устаревших. Избегайте использования , и использовать JOIN

«С точки зрения приоритета, объединение-х положение ON происходит перед пунктом WHERE. Это позволяет такие вещи, как LEFT JOIN b ON a.id = b.id WHERE b.id IS NULL проверить в случаях, когда нет соответствующей строки в б.»

"Использование, обозначения аналогичны обработке WHERE и на условиях, в то же время"

Found подробности об этом здесь, MySQL - SELECT, JOIN

Подробнее о стандартах SQL

http://en.wikipedia.org/wiki/SQL-92

+0

Это ближайший правильный ответ. Предыдущий стиль присоединения называется стилем SQL-89 и был единственным методом, доступным более десяти лет, что привело к новому стилю, представленному в SQL-92. С тех пор новый стиль был предпочтительным стилем как стандартного, так и для его читаемости. Старый стиль по-прежнему поддерживается в большинстве продуктов SQL, но также устарел и планируется удалить в будущем.Соединения стиля SQL-89 не должны изучаться/использоваться новыми студентами SQL, и преподаватели/преподаватели не учат их, так как работодатели с меньшей вероятностью нанимают тех, кто его использует. – RBarryYoung

+0

@RBarryYoung Я никогда не слышал, что старый стиль устарел (или планирует быть). Можете ли вы предоставить ссылку? –

+0

@ypercube: Вот он. Я посмотрю, смогу ли я найти более официальные заявления. Я знаю, что старые операторы равенства равенства стилей ('* =' и т. Д.) Устарели или прекращены некоторыми продуктами-поставщиками. – RBarryYoung

0

Проверить ссылку Is a JOIN faster than a WHERE?

Ответа на этот вопрос @MehrdadAfshari

Теоретически, нет, это не должно быть какой-либо Быстрее. Оптимизатор запросов должен иметь возможность создавать идентичный план выполнения. Тем не менее, некоторые DB-серверы могут создавать лучшие планы выполнения для одного из них (а не , вероятно, произойдет для такого простого запроса, но для достаточно сложных). Вы должны проверить оба и посмотреть (на вашем БД-движке).

1
SELECT c.Id,c.Name,s.Id,s.Name,s.ClassId FROM dbo.ClassSet c JOIN dbo.StudentSet s ON c.Id=s.ClassId 

Без всякого сомнения, выше один лучше, когда по сравнению с вашим первым one.In предшествования таблицы «О» сидят Во-вторых, и «Где» находится на четвертом

Но для простого запроса например, вы не хотите так разбивать себе голову, что для проектного уровня всегда рекомендуется «JOIN»

-1

Второй, потому что это более читаемо. Вот и все.

Смежные вопросы