В чем разница между этими тремя запросами MySQL? - PullRequest
5 голосов
/ 26 января 2012
SELECT title,name FROM Lessons,Users WHERE Lessons.author = Users.email;

и

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

Ответы [ 2 ]

12 голосов
/ 26 января 2012

Нет разницы между этими тремя утверждениями, все они, неявные или явные, INNER JOIN s

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

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

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

1 голос
/ 28 января 2012

Мало того, что есть идеальный идемпотент, но может быть и другой путь. Если, например, вы можете переименовать 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...