PostgreSQL sluit zich aan bij: binnen, buiten, links, rechts, natuurlijk met voorbeelden

Inhoudsopgave:

Anonim

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)

  1. Klik in de navigatiebalk aan de linkerkant op Databases.
  2. 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)

  1. Klik in de navigatiebalk aan de linkerkant op Databases.
  2. 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)

  1. Klik in de navigatiebalk aan de linkerkant op Databases.
  2. 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)

  1. Klik in de navigatiebalk aan de linkerkant op Databases.
  2. 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)

  1. Klik in de navigatiebalk aan de linkerkant op Databases.
  2. 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)

  1. Klik in de navigatiebalk aan de linkerkant op Databases.
  2. 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)

  1. Klik in de navigatiebalk aan de linkerkant op Databases.
  2. 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