Wat zijn PostgreSQL-joins?
PostgreSQL JOIN's worden gebruikt voor het ophalen van gegevens uit meer dan één tabellen. Met JOINs is het voor ons mogelijk om de SELECT- en JOIN-statements te combineren tot één statement. Een JOIN-voorwaarde wordt aan de instructie toegevoegd en alle rijen die aan de voorwaarden voldoen, worden geretourneerd.
De waarden uit verschillende tabellen worden gecombineerd op basis van gemeenschappelijke kolommen. De gemeenschappelijke kolom is meestal een primaire sleutel in de eerste tabel en een externe sleutel van de tweede tabel.
In deze PostgreSQL-tutorial leert u:
- Wat zijn PostgreSQL-joins?
- Soorten joins
- Innerlijke sluit zich aan
- Theta Join
- EQUI Join
- Natuurlijk toetreden
- Outer Joins
- LINKER BUITEN WORD LID
- RECHTS BUITEN MEEDOEN
- Volledige Outer Join
- Met behulp van pgAdmin
- Innerlijke sluit zich aan
- Theta Join
- EQUI Join
- Natuurlijk toetreden
- INNER JOIN (eenvoudige join)
- Outer Joins
- LINKER BUITEN WORD LID
- RECHTS BUITEN MEEDOEN
- Volledige Outer Join
Soorten joins
Er zijn twee JOIN-typen in PostgreSQL:
- Innerlijke sluit zich aan
- Outer Join
Innerlijke sluit zich aan
Er zijn 3 soorten inner joins:
- Theta sluit zich aan
- Natuurlijk meedoen
- EQUI doe mee
Theta Join
Een theta-join maakt het mogelijk om twee tafels samen te voegen op basis van de conditie die wordt weergegeven door theta. Theta-joins kunnen met alle vergelijkingsoperatoren werken. In de meeste gevallen wordt de theta-join aangeduid als inner-join.
De theta-join is het meest basale type JOIN. Het retourneert alle rijen van de tabellen waaraan aan de JOIN-voorwaarde is voldaan.
Syntaxis:
SELECT columnsFROM table-1INNER JOIN table-2ON table-1.column = table-2.column;
Beschouw de volgende tabellen van de Demo-database:
Boek:
Prijs:
We willen de naam van elk boek en de bijbehorende prijs zien. We kunnen het volgende commando uitvoeren:
SELECT Book.name, Price.priceFROM BookINNER JOIN PriceON Book.id = Price.id;
Dit levert het volgende op:
Slechts 3 rijen voldeden aan de join-voorwaarde.
EQUI Join
De EQUI-koppeling biedt ons een manier om twee tabellen samen te voegen op basis van de relatie tussen primaire sleutel en externe sleutel. Bijvoorbeeld:
SELECT *FROM BookJOIN Price ON Book.id = Price.id;
Dit levert het volgende op:
Records zijn uit beide tabellen geretourneerd op basis van de gemeenschappelijke kolommen, dat wil zeggen de kolom id.
Natuurlijk toetreden
Dit type join biedt ons een andere manier om een EQUI-join te schrijven. We kunnen ons vorige voorbeeld verbeteren door het trefwoord NATURAL toe te voegen, zoals hieronder weergegeven:
SELECT *FROM BookNATURAL JOIN Price;
Dit levert het volgende op:
Er is slechts één id-kolom geretourneerd. De NATURAL JOIN kon opmerken dat de id-kolom gebruikelijk is in de twee tabellen. Er werd er maar één teruggegeven.
Outer Joins
Er zijn drie soorten externe JOINs in PostgreSQL:
- Linker buitenste verbinding.
- Rechts buitenste verbinding.
- Volledige Outer Join
LINKER BUITEN WORD LID
De LINKER BUITENKOPPELING retourneert alle rijen in de tabel aan de linkerkant en alleen de rijen in de tabel aan de rechterkant waar aan de voorwaarde voor samenvoegen is voldaan.
Syntaxis:
SELECT columnsFROM table-1LEFT OUTER JOIN table-2ON table-1.column = table-2.column;
We moeten de naam van elk boek en de bijbehorende prijs zien. We kunnen het volgende commando uitvoeren:
SELECT Book.name, Price.priceFROM BookLEFT JOIN PriceON Book.id = Price.id;
Dit levert het volgende op:
Alle 4 rijen in de Boekentabel zijn geretourneerd. Slechts 3 rijen uit de prijstabel voldeden aan de voorwaarde voor samenvoegen. Daarom werden ze teruggestuurd. Het laatste boek heeft geen overeenkomstige prijswaarde.
RECHTS BUITEN MEEDOEN
De RIGHT OUTER JOIN retourneert alle rijen in de tabel aan de rechterkant en rijen in de tabel aan de linkerkant waar aan de join-voorwaarde is voldaan.
Syntaxis:
SELECT columnsFROM table-1RIGHT OUTER JOIN table-2ON table-1.column = table-2.column;
Bijvoorbeeld:
SELECT Book.name, Price.priceFROM BookRIGHT JOIN PriceON Book.id = Price.id;
Dit levert het volgende op:
Alle rijen in de prijstabel zijn geretourneerd. Alleen de rijen in de tabel Boek die aan de voorwaarde voor samenvoegen voldeden, werden geretourneerd. De derde rij heeft geen waarde voor naam omdat er geen overeenkomst is gevonden.
Volledige Outer Join
Dit type JOIN retourneert alle rijen in de tabel aan de linkerkant en alle rijen in de tabel aan de rechterkant met null-waarden waar niet aan de join-voorwaarde is voldaan.
Syntaxis:
SELECT columnsFROM table-1FULL OUTER JOIN table-2ON table-1.column = table-2.column;
Bijvoorbeeld:
SELECT Book.name, Price.priceFROM BookFULL OUTER JOIN PriceON Book.id = Price.id;
Dit levert het volgende op:
Alle rijen van alle tabellen zijn geretourneerd, met null-waarden waar geen overeenkomst is gevonden.
Met behulp van pgAdmin
De bovenstaande taken kunnen als volgt worden uitgevoerd in pgAdmin:
Innerlijke sluit zich aan
Theta Join
Stap 1) Log in op uw pgAdmin-account.
Stap 2)
- Klik in de navigatiebalk aan de linkerkant op Databases.
- Klik op Demo.
Stap 3) Typ de vraag in de zoekopdrachteditor:
SELECT Book.name, Price.priceFROM BookINNER JOIN PriceON Book.id = Price.id;
Stap 4) Klik op de knop Uitvoeren.
Het zou het volgende moeten retourneren:
EQUI Join
Stap 1) Log in op uw pgAdmin-account.
Stap 2)
- Klik in de navigatiebalk aan de linkerkant op Databases.
- Klik op Demo.
Stap 3) Typ de vraag in de zoekopdrachteditor:
SELECT *FROM BookJOIN Price ON Book.id = Price.id;
Stap 4) Klik op de knop Uitvoeren.
Het zou het volgende moeten retourneren:
Natuurlijk toetreden
Stap 1) Log in op uw pgAdmin-account.
Stap 2)
- Klik in de navigatiebalk aan de linkerkant op Databases.
- Klik op Demo.
Stap 3) Typ de vraag in de zoekopdrachteditor:
SELECT *FROM BookNATURAL JOIN Price;
Stap 4) Klik op de knop Uitvoeren.
Het zou het volgende moeten retourneren:
INNER JOIN (eenvoudige join)
Stap 1) Log in op uw pgAdmin-account.
Stap 2)
- Klik in de navigatiebalk aan de linkerkant op Databases.
- Klik op Demo.
Stap 3) Typ de vraag in de zoekopdrachteditor:
SELECT Book.name, Price.priceFROM BookINNER JOIN PriceON Book.id = Price.id;
Stap 4) Klik op de knop Uitvoeren.
Het zou het volgende moeten retourneren:
Outer Joins
LINKER BUITEN WORD LID
Stap 1) Log in op uw pgAdmin-account.
Stap 2)
- Klik in de navigatiebalk aan de linkerkant op Databases.
- Klik op Demo.
Stap 3) Typ de vraag in de zoekopdrachteditor:
SELECT Book.name, Price.priceFROM BookLEFT JOIN PriceON Book.id = Price.id;
Stap 4) Klik op de knop Uitvoeren.
Het zou het volgende moeten retourneren:
RECHTS BUITEN MEEDOEN
Stap 1) Log in op uw pgAdmin-account.
Stap 2)
- Klik in de navigatiebalk aan de linkerkant op Databases.
- Klik op Demo.
Stap 3) Typ de vraag in de zoekopdrachteditor:
SELECT Book.name, Price.priceFROM BookRIGHT JOIN PriceON Book.id = Price.id;
Stap 4) Klik op de knop Uitvoeren.
Het zou het volgende moeten retourneren:
Volledige Outer Join
Stap 1) Log in op uw pgAdmin-account.
Stap 2)
- Klik in de navigatiebalk aan de linkerkant op Databases.
- Klik op Demo.
Stap 3) Typ de vraag in de zoekopdrachteditor:
SELECT Book.name, Price.priceFROM BookFULL OUTER JOIN PriceON Book.id = Price.id;
Stap 4) Klik op de knop Uitvoeren.
Het zou het volgende moeten retourneren:
Overzicht:
- In PostgreSQL gebruiken we JOINs als we waarden uit meer dan één tabel moeten ophalen.
- De INNER JOIN is het meest basale type JOIN. Het retourneert alle records waarin aan de opgegeven JOIN-voorwaarde is voldaan.
- De LEFT OUTER JOIN retourneert alle rijen in de linkertabel en alleen de rijen in de andere tabel waaraan aan de join-voorwaarde is voldaan.
- De RIGHT OUTER JOIN retourneert alle rijen in de rechtertabel en alleen rijen in de andere tabel waarvoor aan de join-voorwaarde is voldaan.
- Dit type JOIN retourneert alle rijen in de linkertabel en alle rijen in de rechtertabel met null-waarden waarbij niet aan de join-voorwaarde is voldaan.
Download de database die in deze zelfstudie wordt gebruikt