Samenvatting: in deze tutorial leert u hoe u gegevens uit meerdere tabellen kunt opvragen met behulp van de SQL INNER JOIN-instructie.
In de vorige tutorial hebt u geleerd hoe u gegevens uit een enkele tabel kunt opvragen met behulp van de SELECT-instructie. U wilt echter vaak gegevens uit meerdere tabellen opvragen om een volledige resultatenset voor analyse te hebben. Om gegevens uit meerdere tabellen op te vragen, gebruikt u join-instructies.
SQL biedt verschillende soorten joins, zoals inner join, outer joins (linksbuiten joins of linksboven, rechts buiten of rechts join, en volledige outer join ) en zelf toetreden. In deze tutorial laten we u zien hoe u de INNER JOIN
-clausule gebruikt.
SQL INNER JOIN-syntaxis
Het volgende illustreert INNER JOIN
syntaxis voor het samenvoegen van twee tafels:
1
2
3
4
5
|
SELECTEER
column1, column2
FROM
table_1
INNER JOIN table_2 ON join_condition;
|
Laten we de bovenstaande syntaxis in meer detail bekijken:
- De
table_1
entable_2
worden samengevoegde tabellen genoemd. - Voor elke rij in de
table_1
zoekt de zoekopdracht de corresponderende rij in detable_2
die aan de voorwaarden voor samenvoegen voldoet. Als de bijbehorende rij is gevonden, retourneert de query een rij die gegevens uit beide tabellen bevat. Anders wordt de volgende rij in detable_1
onderzocht, en dit proces gaat door totdat alle rijen in detable_1
zijn onderzocht.
Voor het samenvoegen van meer dan twee tabellen, werd dezelfde logica toegepast.
SQL INNER JOIN voorbeelden
SQL INNER JOIN – gegevens opvragen uit twee tabellen voorbeeld
In dit voorbeeld gebruiken we de products
en categories
tabellen in de voorbeelddatabase. De volgende afbeelding illustreert het databasediagram.
In het bovenstaande diagram:
- Een categorie kan veel producten bevatten.
- Eén product behoort tot één en slechts één categorie.
Daarom is er een veel-op-één-relatie tussen de rijen in de categories
tabel en rijen in de products
tabel. De link tussen de twee tabellen is de categoryid
kolom.
We moeten de volgende gegevens uit beide tabellen opvragen:
-
productID
,productName
van deproducts
tabel. -
categoryName
uit decategories
tabel.
Met de volgende query worden gegevens uit beide tabellen opgehaald:
1
2
3
4
5
6
|
SELECTEER
productID, productName, categoryName
VAN
producten
INNER JOIN
categorieën ON categories.categoryID = products.categoryID;
|
De join-voorwaarde is gespecificeerd in de INNER JOIN
-clausule na het ON
-woord als de uitdrukking:
1
|
categories.categoryID = products.categoryID
|
Voor elke rij in de products
-tabel, vindt de query een overeenkomstige rij in de categories
-tabel met dezelfde categoryid.
Als er een overeenkomst is tussen twee rijen in beide tabellen, het retourneert een rij die kolommen bevat die zijn gespecificeerd in de SELECT-clausule, dwz product-id, productnaam en categorienaam; anders controleert het de volgende rij in de tabel products
om de overeenkomende rij in de tabel categories
te vinden. Dit proces gaat door totdat de laatste rij van de producttabel wordt onderzocht.
SQL INNER JOIN – het opvragen van gegevens uit drie tabellen
We kunnen dezelfde technieken gebruiken om drie tabellen samen te voegen.De volgende zoekopdracht selecteert productID
, productName
, categoryName
en supplier
uit de products
, categories
en suppliers
tabellen:
1
2
3
4
5
6
7
8
9
10
11
|
SELECTEER
productID,
productnaam,
categoryName,
companyName AS leverancier
FROM
products
INNER JOIN
categorieën OP categorieën. categoryID = products.categoryID
INNER JOIN
leveranciers OP leveranciers.supplierID = products.supplierID
|
Impliciete SQL INNER JOIN
Er is een andere vorm van de INNER JOIN
genaamd impliciete inner join, zoals hieronder weergegeven:
1
2
3
4
5
6
7
|
SELECTEER
column1, column2
FROM
table_1,
table_2
WAAR
join_condition;
|
In dit formulier specificeert u alle samengevoegde tafels in de FROM
-clausule en plaats de join-voorwaarde in de WHERE-clausule van de SELECT
-instructie. We kunnen het bovenstaande queryvoorbeeld herschrijven met de impliciete INNER JOIN
als volgt:
1
2
3
4
5
6
7
|
SELECTEER
productID, productnaam, categorienaam
VAN
producten,
categorieën
WAAR
products.categoryID = categories.categoryID;
|