2012-01-26 3 views
5
SELECT title,name FROM Lessons,Users WHERE Lessons.author = Users.email; 

иВ чем разница между этими тремя запросами MySQL?

SELECT title,name FROM Lessons JOIN Users ON Lessons.author = Users.email; 

и

SELECT title,name FROM Lessons INNER JOIN Users ON Lessons.author = Users.email; 

Уроки имеет столбец с именем author проиндексированы в качестве внешнего ключа к Users.email. title столбец в Lessons и name столбец в Users

+0

Я считаю, что это адресуется в этом вопросе: http://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-line – jzila

+0

разница - это просто стиль, – onedaywhen

ответ

12

Там нет никакой разницы между тремя утверждениями, все они, либо прямой или косвенной, INNER JOIN сек

  1. Первое утверждение с помощью неявное старое соединение синтаксис. Хотя это все еще поддерживается, использование явных объединений является более читабельным и удобным для обслуживания. Не используйте соединения старого стиля.

  2. Второй оператор использует явное соединение без указания типа соединения. По умолчанию это INNER JOIN

  3. Третье утверждение также является Явные и избегает любых неясностей. Это, безусловно, самый рекомендуемый способ написания объединений.

1

Не только идеальный идемпотент, но может быть и другой способ. Если вы, например, можете переименовать Lessons.author в Lesson.email, чтобы удостовериться, что связанные столбцы имеют одинаковое имя в двух таблицах, вы можете использовать NATURAL JOIN, который неявно связывает строки из разных таблиц, которые доля же имя:

-- After renaming Lessons.author in Lessons.email, you simply use NATURAL JOIN 
SELECT title,name FROM Lessons NATURAL JOIN Users; 
Смежные вопросы