Я изучаю Oracle SQL, и теперь я застрял в главе Joins. Я не могу понять разницу между Присоединяйтесь и Natural JoinВ чем разница между Join и Natural Join?
SELECT employee_id, job_id, department_id,
e.last_name, e.hire_date, j.end_date
FROM employees e
NATURAL JOIN job_history j;
176 SA_REP 80 Тейлор 24/03/2006 31/12/2006
SELECT e.employee_id, e.job_id, e.department_id,
e.last_name, e.hire_date, j.end_date
FROM employees e
JOIN job_history j
ON (e.department_id = j.department_id)
ORDER BY employee_id, last_name;
172 SA_REP 80 Bates 24/03/2007 31/12/2006
173 SA_REP 80 Kumar 21/04/2008 31/12/2007
173 SA_REP 80 Kumar 21/04/2008 31/12/2006
174 SA_REP 80 Abel 11/05/2004 31/12/2007
174 SA_REP 80 Abel 11/05/2004 31/12/2006
175 SA_REP 80 Hutton 19/03/2005 31/12/2007
175 SA_REP 80 Hutton 19/03/2005 31/12/2006
176 SA_REP 80 Taylor 24/03/2006 31/12/2007
176 SA_REP 80 Taylor 24/03/2006 31/12/2006
177 SA_REP 80 Livingston 23/04/2006 31/12/2007
177 SA_REP 80 Livingston 23/04/2006 31/12/2006
Я не знаю, почему Я получаю разные результаты, если как Join, так и Natural Join имеют схожие функции.
IMO, 'Nature Join' use ** implicit ** join columns, которые проверяют и объединяют все столбцы с одинаковым именем в двух таблицах. С 'Join' вы должны ** явно ** объявлять столбцы объединения в операциях' ON' (может быть, одно и то же имя, возможно, нет, возможно, 2 таблицы имеют 10 одинаковых имен столбцов, а просто присоединяются к 2 различным именам столбцов, ....). –
Хороший пример того, почему вы никогда не должны использовать естественные соединения. В вашем случае естественное соединение использует больше столбцов для объединения, что делает его более ограничительным. Какие столбцы это? Я не знаю, как это не показано! –
Хороший пример, где короткий атрибут, префикс которого просто подразумевается его именем таблицы, вызывает проблемы при использовании в реляционных операторах, связанных с другими таблицами, например. 'end_date' в' employees', где явное 'job_end_date' будет лучше. – onedaywhen