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.