sql >> Database >  >> RDS >> Mysql

sql voegt zich bij als venn-diagram

Ik ben het met Cade eens over de beperkingen van Venn-diagrammen hier. Een meer toepasselijke visuele weergave zou dit kunnen zijn.

Tafels

SELECT A.Colour, B.Colour FROM A CROSS JOIN B SQL Fiddle

De cross join (of cartesiaans product) levert een resultaat op bij elke combinatie van de rijen uit de twee tabellen. Elke tabel heeft 4 rijen, dus dit levert 16 rijen op in het resultaat.

SELECTEER A.Colour, B.Colour UIT EEN BINNENLAND SLUIT B AAN OP A.Colour =B.Colour SQL Fiddle

De inner join retourneert logischerwijs alle rijen van de cross join die voldoen aan de join-voorwaarde. In dit geval doen er vijf.

SELECTEER A.Colour, B.Colour UIT EEN BINNENKANT VOEG B AAN AAN A.Colour NOT IN ('Green','Blue') SQL Fiddle

De inner join-voorwaarde hoeft niet per se een gelijkheidsvoorwaarde te zijn en hoeft niet te verwijzen naar kolommen uit beide (of zelfs geen van beide) tabellen. Evaluatie van A.Colour NOT IN ('Green','Blue') op elke rij van het kruis komt de join terug.

Een inner join-voorwaarde van 1=1 zou evalueren naar waar voor elke rij in de cross join, zodat de twee equivalent zijn (SQL Fiddle ).

SELECTEER A.Colour, B.Colour VANAF EEN LINKER BUITENKANT SLUIT B AAN OP A.Colour =B.Colour SQL Fiddle

Outer Joins worden logisch op dezelfde manier geëvalueerd als inner joins, behalve dat als een rij uit de linkertabel (voor een linkerjoin) helemaal niet samenkomt met rijen uit de rechtertabel, deze in het resultaat behouden blijft met NULL waarden voor de rechterkolommen.

SELECTEER A.Colour, B.Colour VANAF EEN LINKER BUITENKANT SLUIT B AAN OP A.Colour =B.Colour WAAR B.Colour NULL IS SQL Fiddle

Dit beperkt eenvoudig het vorige resultaat om alleen de rijen terug te geven waar B.Colour IS NULL . In dit specifieke geval zijn dit de rijen die bewaard zijn gebleven omdat ze geen overeenkomst hadden in de rechter tabel en de query retourneert de enkele rode rij die niet overeenkomt in tabel B . Dit staat bekend als een anti semi-join.

Het is belangrijk om een ​​kolom te selecteren voor de IS NULL test die ofwel niet nullable is of waarvoor de join-voorwaarde ervoor zorgt dat een NULL waarden worden uitgesloten om ervoor te zorgen dat dit patroon correct werkt en om te voorkomen dat alleen rijen worden teruggehaald die toevallig een NULL hebben waarde voor die kolom naast de niet-overeenkomende rijen.

SELECTEER A.Colour, B.Colour VANUIT EEN RECHTS BUITENKANT WORD LID VAN B OP A.Colour =B.Colour SQL-viool

Rechter buitenste joins werken op dezelfde manier als linker buitenste joins, behalve dat ze niet-overeenkomende rijen uit de rechtertabel behouden en de linkerkolommen uitbreiden.

SELECTEER A.Colour, B.Colour VANUIT EEN VOLLEDIGE BUITENKANT WORD LID VAN B OP A.Colour =B.Colour SQL-viool

Volledige outer joins combineren het gedrag van linker- en rechterjoins en behouden de niet-overeenkomende rijen van zowel de linker- als de rechtertafel.



  1. Hoe alle afhankelijkheden van een tabel in de sql-server te vinden

  2. Hoe kan ik een database onder git (versiebeheer) plaatsen?

  3. Oracle JDeveloper-fragmenten gebruiken met MySQL

  4. hoe de grootte van een kolom te wijzigen