Поскольку NATURAL JOIN объединяется во всех столбцах с одинаковыми именами, следовательно, ваш запрос NJ будет также соединяться с manager_id, тогда как форма USING не будет
Если вы изучите форму USING, вы увидите, что manager_idв каждой таблице разные.(Сделайте ваш запрос SELECT *
, и вы увидите ..)
При естественном объединении этого различия в manager_id между двумя таблицами удалит строку из результатов
Вероятно, стоит отметить, чтоестественное соединение и использование должно использоваться редко.Обязательно узнайте о них, чтобы вы могли оценить их существование, но вы должны придерживаться регулярных явных объединений по причинам последовательного и понятного поведения - если приложение будет обновлено в будущем и в эти две таблицы будут добавлены два новых столбца с одинаковыми именами.но будут разные данные нью-йорк не получится.
Редактировать:
Запустить это:
SELECT *
FROM employees JOIN departments
USING (department_id)
WHERE department_id = 80
ORDER BY location_id desc;
Посмотрите на два столбца, показывающие идентификатор менеджера.Данные в строке Zlotkey будут другими
Вы естественным образом вступили в эффективное объединение, сделав это:
SELECT *
FROM employees e JOIN departments d
on e.department_id = d.department_id AND e.manager_id = d.manager_id
WHERE department_id = 80
ORDER BY location_id desc;
И on e.department_id = d.department_id AND e.manager_id = d.manager_id
не верно для строки Zlotkey
Этопочему естественное соединение рискованно и, возможно, бесполезно - просто потому, что два столбца имеют одинаковое имя, не означает, что данные в них связаны между собой.Действительно, в вашем случае в ваших отделах есть менеджеры, а у ваших сотрудников - менеджеры.У меня также есть эта настройка на моей работе, но человек, который является моим менеджером, не является менеджером отдела, в котором я работаю