SQL-joins uitgelegd met live voorbeelden

SQL-joins uitgelegd

SQL-joins uitgelegd: inner, left, right, full, cross, self | We.Inc

Draai elke SQL-join op twee kleine voorbeeldtabellen direct in uw browser en zie welke rijen overblijven, met PostgreSQL-syntax voor INNER, LEFT, RIGHT, FULL, CROSS en self joins.

Een join combineert rijen uit twee tabellen op basis van een voorwaarde, meestal overeenkomende keys. INNER JOIN houdt alleen rijen die aan beide kanten overeenkomen. LEFT JOIN houdt elke rij uit de linkertabel en vult ontbrekende rechterkolommen met NULL, RIGHT JOIN doet het omgekeerde, FULL JOIN houdt beide, en CROSS JOIN koppelt elke rij aan elke rij.

Welke rijen elke join houdt

Venndiagrammen zijn de gebruikelijke manier om joins uit te leggen, maar ze verbergen juist wat u opbreekt: gedupliceerde rijen en NULLs. Hieronder staan twee piepkleine tabellen, customers en orders, met een klant die nooit iets bestelde en een bestelling waarvan de klant is verwijderd. Kies een join en het resultaat wordt in uw browser berekend, zodat u precies ziet welke rijen verschijnen en waarom.

Veelgestelde vragen

Wat is het verschil tussen INNER JOIN en LEFT JOIN?

INNER JOIN laat rijen zonder match vallen. LEFT JOIN houdt elke rij van de eerste tabel en zet NULL in de kolommen van de tweede tabel als er niets overeenkomt. In de demo staat Cleo in de LEFT JOIN met een lege bestelling en ontbreekt ze in de INNER JOIN.

Is JOIN hetzelfde als INNER JOIN?

Ja. In PostgreSQL is het woord INNER optioneel en is een kale JOIN een inner join. Het woord OUTER is ook optioneel, dus LEFT JOIN en LEFT OUTER JOIN betekenen hetzelfde.

Waarom gaf mijn join meer rijen terug dan de tabel heeft?

Elke linkerrij verschijnt één keer per overeenkomende rechterrij. Een klant met drie bestellingen staat er drie keer in. Dat is correct gedrag; aggregeer met GROUP BY of join een vooraf gegroepeerde subquery als u één rij per klant nodig hebt.

Wat is een self join?

Een tabel die onder twee aliassen met zichzelf wordt gejoind, gebruikt als rijen naar andere rijen in dezelfde tabel wijzen, zoals medewerkers en hun managers, of klanten en wie hen heeft doorverwezen.

Ondersteunt MySQL FULL OUTER JOIN?

PostgreSQL wel, en dat is de syntax die hier wordt getoond. MySQL kent geen FULL JOIN-keyword; de gebruikelijke omweg is een LEFT JOIN gecombineerd met een RIGHT JOIN via UNION.

ON, USING en NATURAL

Filters bij outer joins draaien in een andere volgorde

Probeer het in PostgreSQL

Plak dit in psql of een andere SQL-editor voor Postgres om de voorbeeldtabellen na te bouwen, en draai daarna de query's uit de demo.

Voorbeeldtabellen

Bestelling 104 wijst bewust naar klant 9, die niet bestaat, zodat de outer joins iets te laten zien hebben.

Klanten die nooit bestelden

De LEFT JOIN houdt Cleo met NULL in de bestelkolommen, en het IS NULL-filter houdt alleen die rijen over.

Join-playground

Voorbeeldtabellen in de demo

Type join

Resultaat: {n} rijen

Gemarkeerde cellen zijn door de outer join met NULL aangevuld.

SELF

Gratis beginnen · Geen creditcard nodig

Gerelateerd: Gidsen

Product

Voor wie

Functies

Bronnen

Bedrijf

Sitemap