Подтвердить что ты не робот

Какая разница между разделенными запятыми соединениями и присоединением к синтаксису в MySQL?

Например, если бы у меня была таблица "Человек" с столбцом "id", которая ссылается на столбец "id" в таблице "Рабочий"

В чем разница между этими двумя запросами? Они дают одинаковые результаты.

SELECT * 
FROM Person 
JOIN Worker 
  ON Person.id = Worker.id;

и

SELECT * 
FROM Person, 
     Worker 
WHERE Person.id = Worker.id;

Спасибо

4b9b3361

Ответ 1

Нет никакой разницы.

Второе представление делает запрос более читаемым и делает его очень ясным, какое соединение соответствует какому условию.

Ответ 2

Запросы логически эквивалентны. Оператор запятой эквивалентен оператору [INNER] JOIN.

Запятая - это старший оператор объединения стиля. Ключевое слово JOIN было добавлено позже, и предпочтение отдается, потому что оно также позволяет выполнять операции объединения OUTER.

Он также позволяет изолировать предикаты (условия) соединения от предложения WHERE в предложении ON. Это улучшает читаемость.

Ответ 3

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

см. пример:

Create Table table1
(
    ID int NOT NULL Identity(1, 1) PRIMARY KEY ,
    Name varchar(50)
)

Create Table table2
(
    ID int NOT NULL Identity(1, 1) PRIMARY KEY ,
    ID_Table1 INT NOT NULL
)

Следующий запрос даст мне все столбцы и строки из обеих таблиц

SELECT
    *
FROM table1, table2

Следующий запрос даст мне столбцы из первой таблицы с псевдонимом таблицы под названием "table2"

SELECT
    *
FROM table1 table2

Если вы ошибочно забыли запятую в соединении, разделенном запятыми, вторая таблица автоматически преобразует в псевдоним таблицы для первой таблицы. Не во всех случаях, но есть шансы на что-то вроде этого

Ответ 4

Использование JOINS упрощает чтение кода, поскольку оно самоочевидно.

В скорости нет разницы (я ее протестировал), и план выполнения тот же

Если оптимизатор запросов выполняет свою работу правильно, между этими запросами не должно быть разницы. Это всего лишь два способа указать один и тот же желаемый результат.

Ответ 5

The SELECT * FROM table1, table2, etc. хорош для нескольких таблиц, но он становится экспоненциально сложнее по мере увеличения количества таблиц.

Синтаксис JOIN делает его явным, какие критерии влияют на таблицы (дающие условие). Кроме того, второй способ - это более старый стандарт.

Хотя в базе данных они становятся тем же самым