Я выполнил приведенные ниже запросы, чтобы отобразить фамилию, должность, номер отдела и название отдела для всех сотрудников, которые работают в Торонто.
Структура таблицы такая
- Сотрудники (идентификатор сотрудника, фамилия, идентификатор отдела, ...)
- Подразделения (идентификатор_отдела, имя_отдела, идентификатор_обслуживания ...)
- Адреса (location_id, город, ...)
С предложениями ON и USING он возвращает два результата: row и
С предложением NATURAL JOIN он возвращает только одно.
В чем разница, я запрашиваю его с неправильным естественным соединением?
С включенным
SELECT
e.last_name,
e.job_id,
d.department_name,
l.city
FROM employees e
JOIN departments d ON e.department_id= d.department_id
JOIN locations l ON d.location_id=l.location_id
WHERE upper(l.city)='TORONTO';
С ИСПОЛЬЗОВАНИЕМ
SELECT
e.last_name,
e.job_id,
d.department_name,
l.city
FROM employees e
JOIN departments d USING(department_id)
JOIN locations l USING(location_id)
WHERE upper(l.city)='TORONTO';
С ЕСТЕСТВЕННЫМ СОЕДИНЕНИЕМ
SELECT
last_name,
job_id,
department_name,
city
FROM employees
NATURAL JOIN departments
NATURAL JOIN locations
WHERE upper(city)='TORONTO';
NATURAL JOIN
опасен, потому что он просто объединяет все совпадающие имена столбцов, проверьте определения ваших таблиц, если в обеих таблицах существуют дополнительные повторяющиеся имена столбцов - person dnoeth   schedule 17.05.2015...
в определениях ваших таблиц выше, но тот факт, что вы получаете меньше записей сNATURAL JOIN
, указывает на то, что действительно существует другое общее поле между таблицами, которое вы не используете в своих явных объединениях. - person Hart CO   schedule 17.05.2015