Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL-Joins als Venn-Diagramm

Ich stimme Cade in Bezug auf die Einschränkungen von Venn-Diagrammen hier zu. Eine passendere visuelle Darstellung könnte dies sein.

Tabellen

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

Der Cross-Join (oder kartesisches Produkt) erzeugt bei jeder Kombination der Zeilen aus den beiden Tabellen ein Ergebnis. Jede Tabelle hat 4 Zeilen, also ergibt dies 16 Zeilen im Ergebnis.

SELECT A.Colour, B.Colour FROM A INNER JOIN B ON A.Colour =B.Colour SQL-Geige

Der Inner Join gibt logischerweise alle Zeilen aus dem Cross Join zurück, die der Join-Bedingung entsprechen. In diesem Fall reichen fünf.

SELECT A.Color, B.Color FROM A INNER JOIN B ON A.Color NOT IN ('Green','Blue') SQL-Geige

Die Inner-Join-Bedingung muss nicht unbedingt eine Gleichheitsbedingung sein, und sie muss nicht auf Spalten aus beiden (oder auch nur einer) der Tabellen verweisen. Auswerten von A.Colour NOT IN ('Green','Blue') in jeder Zeile des Cross-Join-Returns.

Eine innere Join-Bedingung von 1=1 würde für jede Zeile in der Kreuzverknüpfung als wahr ausgewertet, sodass die beiden gleichwertig sind (SQL Fiddle ).

SELECT A.Colour, B.Colour FROM A LEFT OUTER JOIN B ON A.Colour =B.Colour SQL-Geige

Äußere Joins werden logisch genauso ausgewertet wie innere Joins, außer dass, wenn eine Zeile aus der linken Tabelle (für einen linken Join) überhaupt nicht mit Zeilen aus der rechten Tabelle verknüpft wird, sie im Ergebnis mit NULL Werte für die rechten Spalten.

SELECT A.Colour, B.Colour FROM A LEFT OUTER JOIN B ON A.Colour =B.Colour WHERE B.Colour IS NULL SQL-Geige

Dadurch wird das vorherige Ergebnis einfach darauf beschränkt, nur die Zeilen zurückzugeben, in denen B.Colour IS NULL ist . In diesem speziellen Fall sind dies die Zeilen, die beibehalten wurden, da sie in der rechten Tabelle keine Übereinstimmung hatten, und die Abfrage gibt die einzelne rote Zeile zurück, die in Tabelle B nicht übereinstimmt . Dies wird als Anti-Semi-Join bezeichnet.

Es ist wichtig, eine Spalte für IS NULL auszuwählen Test, der entweder nicht nullfähig ist oder für den die Join-Bedingung sicherstellt, dass alle NULL Werte werden ausgeschlossen, damit dieses Muster korrekt funktioniert und nicht nur Zeilen zurückgegeben werden, die zufällig einen NULL haben Wert für diese Spalte zusätzlich zu den nicht übereinstimmenden Zeilen.

SELECT A.Colour, B.Colour FROM A RIGHT OUTER JOIN B ON A.Colour =B.Colour SQL-Geige

Right Outer Joins verhalten sich ähnlich wie Left Outer Joins, mit der Ausnahme, dass sie nicht übereinstimmende Zeilen aus der rechten Tabelle beibehalten und die linken Spalten auf Null erweitern.

SELECT A.Colour, B.Colour FROM A FULL OUTER JOIN B ON A.Colour =B.Colour SQL-Geige

Vollständige äußere Verknüpfungen kombinieren das Verhalten von linken und rechten Verknüpfungen und bewahren die nicht übereinstimmenden Zeilen aus der linken und der rechten Tabelle.