Natural join

Uit twee tabellen wordt één resultaattabel afgeleid, waarvan de rijen bestaan uit alle mogelijke combinaties van een rij uit de ene met een rij uit de andere tabel, mits beide rijen voor alle gelijknamige kolomnamen dezelfde waarden hebben en ze moeten van hetzelfde datatype zijn. Als de kolommen dezelfde naam hebben maar van een verschillend datatype zijn, krijg je een foutmelding. Een combinatie van twee rijen ontstaat door ze aan elkaar te plakken en de dubbele waarden slechts eenmaal in het resultaat op te nemen. Het DBMS leidt de voorwaarde van de join dus zelf af door te kijken naar de namen van de kolommen in de beide tabellen.

 

De tabel employees heeft een kolom job_id. Dit job_id verwijst naar de kolom met dezelfde naam in de tabel jobs. Ze zijn beide van het type VARCHAR(10). Dus job_id staat zowel in de tabel employees als in de tabel jobs. Maar job_title staat alleen maar in de tabel jobs.

 

clip0128

 

Als je nu een overzicht wil maken van personeelsleden met daarin ook hun job_title dan gebruik je de volgende query:

 

SELECT first_name, last_name, job_id, job_title

FROM employees NATURAL JOIN jobs;

 

clip0129

 

 

Nog een voorbeeld. Je wil alle department_names tonen met de city. De department_names staan in de tabel departments en city staat in de tabel locations. In beide tabellen staat een kolom location_id van het type SMALLINT(6).

 

SELECT department_name, city

FROM departments NATURAL JOIN locations;

 

clip0130

 

 

Het is mogelijk WHERE te gebruiken met een natural join.

 

SELECT first_name, last_name, job_id, job_title

FROM employees NATURAL JOIN jobs

WHERE last_name = 'King';

 

clip0132

 

Het gebruik van de NATURAL JOIN wordt sterk afgeraden aangezien je de kans loopt onbetrouwbare informatie op te halen op deze manier. In de praktijk wordt de NATURAL JOIN dan ook zelden of niet gebruikt. De enige reden dat ie hier genoemd wordt, is dat je moet weten dat ie bestaat, maar gebruik hem dus niet!

 

Neem bijvoorbeeld onderstaande query.

 

SELECT first_name, last_name, job_id, department_name

FROM employees NATURAL JOIN departments;

 

clip0282

 

Er zitten twintig employees in de tabel employees en met deze NATURAL JOIN van de tabellen employees en departments komen er maar twaalf rijen terug!