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_1entable_2worden samengevoegde tabellen genoemd. - Voor elke rij in de
table_1zoekt de zoekopdracht de corresponderende rij in detable_2die 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_1onderzocht, en dit proces gaat door totdat alle rijen in detable_1zijn 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,productNamevan deproductstabel. -
categoryNameuit decategoriestabel.
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;
|