Ga naar hoofdinhoud

INNER JOIN

Inner join

Met een INNER JOIN worden de rijen getoond die in twee of meerdere tabellen voorkomen. In plaats van INNER JOIN kun je gewoon JOIN gebruiken. Een JOIN maak je met USING of met JOIN ON. Een INNER JOIN wordt ook wel een SIMPLE JOIN genoemd. De eerste tabel heeft zwart, blauw en wit. De tweede tabel heeft blauw, wit en oranje. Alleen blauw en wit komen voor in beide tabellen en die worden dan getoond. Zwart en oranje worden niet getoond.

SELECT last_name, department_name
FROM employees INNER JOIN departments USING(department_id);
SELECT last_name, department_name
FROM employees JOIN departments USING(department_id);
last_namedepartment_name
KingExecutive
KochharExecutive
De HaanExecutive
HunoldIT
ErnstIT
LorentzIT
MourgosShipping
RajsShipping
DaviesShipping
MatosShipping
VargasShipping
ZlotkeySales
AbelSales
TaylorSales
WhalenAdministration
HartsteinMarketing
FayMarketing
HigginsAccounting
GietzAccounting

Grant heeft geen department_id en komt daarom niet voor in de uitvoer.

Join using

Met USING geef je specifiek aan welke kolommen gebruikt moeten worden voor de JOIN.

SELECT first_name, last_name, department_id, department_name
FROM employees JOIN departments USING(department_id);

Het is mogelijk drie of meer tabellen te gebruiken om alle informatie in één uitvoer te zetten. Als je drie tabellen nodig hebt voor de juiste informatie, noem je de eerste tabel bij FROM en volgen er daarna twee JOINS.

SELECT last_name, department_name, city
FROM employees
JOIN departments
USING(department_id)
JOIN locations
USING(location_id);

Join on

JOIN ON werkt hetzelfde als JOIN USING maar JOIN ON kun je ook gebruiken als de kolomnamen van de twee verschillende tabellen niet exact hetzelfde zijn. Na ON benoem je dan de kolomnamen die aan elkaar gelijk moeten zijn. Eerst noem je de tabel, dan volgt er een punt en dan volgt de kolomnaam. Er zijn twee kolomnamen die je met elkaar wil vergelijken, maar ze heten anders. In de tabel employees heet de kolom salary en in de tabel job_grades heet de kolom lowest_sal. In onderstaand voorbeeld vergelijk je salary van employees met lowest_sal van job_grades. Deze personen zitten dus in de laagste salarisschaal van job_grade.

tip

JOIN ON is de allerbelangrijkste manier om tabellen aan elkaar te knopen en daarom moet er heel veel geoefend worden met JOIN ON!

SELECT first_name, last_name, salary, lowest_sal, highest_sal, grade_level
FROM employees
JOIN job_grades
ON employees.salary = job_grades.lowest_sal;

Met aliassen maak je deze query als volgt wat netter.

SELECT e.first_name,
e.last_name,
e.salary,
g.lowest_sal,
g.highest_sal,
g.grade_level
FROM employees e
JOIN job_grades g
ON e.salary = g.lowest_sal;
first_namelast_namesalarylowest_salhighest_salgrade_level
BruceErnst600060009999C
PatFay600060009999C

Nog een voorbeeld van employees die het minimum salaris hebben van de job_id die ze hebben. De tabellen employees en jobs worden samengevoegd op kolommen die niet dezelfde kolomnaam hebben. Merk op dat salary twee decimalen heeft en dat min_salary en max_salary geen decimalen hebben. De kolom salary is van het type DECIMAL en de kolommen min_salary en max_salary zijn van het type INT.

SELECT e.first_name, e.last_name, e.salary, j.min_salary, j.max_salary
FROM employees e
JOIN jobs j
ON e.salary = j.min_salary;
first_namelast_namesalarymin_salarymax_salary
AlexanderHunold9000900015000
BruceErnst6000600012000
DianaLorentz420042009000
PatFay6000600012000

JOIN ON werkt uiteraard ook als de kolomnamen van de verschillende tabellen wel hetzelfde zijn.

SELECT last_name, job_title
FROM employees
JOIN jobs
ON employees.job_id = jobs.job_id;
last_namejob_title
KingPresident
KochharAdministration Vice President
De HaanAdministration Vice President
HunoldProgrammer
ErnstProgrammer
LorentzProgrammer
MourgosStock Manager
RajsStock Clerk
DaviesStock Clerk
MatosStock Clerk
VargasStock Clerk
ZlotkeySales Manager
AbelSales Representative
TaylorSales Representative
GrantSales Representative
WhalenAdministration Assistant
HartsteinMarketing Manager
FayMarketing Representative
HigginsAccounting Manager
GietzPublic Accountant

Het is mogelijk drie of meer tabellen te gebruiken om alle informatie in één uitvoer te zetten. Voor de leesbaarheid kun je dan de joins onder elkaar zetten.

SELECT last_name, department_name, city
FROM employees
JOIN departments
ON (employees.department_id = departments.department_id)
JOIN locations
ON departments.location_id = locations.location_id;
last_namedepartment_namecity
KingExecutiveSeattle
KochharExecutiveSeattle
De HaanExecutiveSeattle
HunoldITSouthlake
ErnstITSouthlake
LorentzITSouthlake
MourgosShippingSouth San Francisco
RajsShippingSouth San Francisco
DaviesShippingSouth San Francisco
MatosShippingSouth San Francisco
VargasShippingSouth San Francisco
ZlotkeySalesOxford
AbelSalesOxford
TaylorSalesOxford
WhalenAdministrationSeattle
HartsteinMarketingToronto
FayMarketingToronto
HigginsAccountingSeattle
GietzAccountingSeattle