Was ist der Unterschied zwischen CROSS JOIN
und INNER JOIN
?
CROSS JOIN:
SELECT
Movies.CustomerID, Movies.Movie, Customers.Age,
Customers.Gender, Customers.[Education Level],
Customers.[Internet Connection], Customers.[Marital Status],
FROM
Customers
CROSS JOIN
Movies
INNER JOIN:
SELECT
Movies.CustomerID, Movies.Movie, Customers.Age,
Customers.Gender, Customers.[Education Level],
Customers.[Internet Connection], Customers.[Marital Status]
FROM
Customers
INNER JOIN
Movies ON Customers.CustomerID = Movies.CustomerID
Welches ist besser und warum sollte ich eines verwenden?
sql
sql-server
sql-server-2008
tsql
cross-join
PriceCheaperton
quelle
quelle
CROSS JOIN
führt zu allen möglichen Kombinationen der Tabellen. Beispiel: Tabelle1 mit 100 Zeilen und Tabelle2 mit 100 Zeilen führen zu 10000 Datensätzen.x CROSS JOIN y
isx INNER JOIN y ON 1=1
Antworten:
Cross Join kombiniert die Zeilen nicht. Wenn Sie 100 Zeilen in jeder Tabelle mit 1 zu 1 Übereinstimmung haben, erhalten Sie 10.000 Ergebnisse. Innerjoin gibt in derselben Situation nur 100 Zeilen zurück.
Diese beiden Beispiele liefern das gleiche Ergebnis:
Cross Join
Innere Verbindung
Verwenden Sie die letzte Methode
quelle
select * from table1 cross join table2 where table1.id = table2.fk_id
alsselect * from table1, table2 where table1.id = table2.fk_id
(durchcross join
ein ersetzen,
)Hier ist das beste Beispiel für Cross Join und Inner Join.
Betrachten Sie die folgenden Tabellen
TABELLE :
Teacher
TABELLE :
Student
1. INNER JOIN
Inner Join wählt die Zeilen aus, die beide Tabellen erfüllen .
Bedenken Sie, wir müssen die Lehrer finden, die Klassenlehrer sind, und ihre entsprechenden Schüler. In diesem Zustand müssen wir uns bewerben
JOIN
oderINNER JOIN
und werdenAbfrage
Ergebnis
2. CROSS JOIN
Cross Join wählt alle Zeilen aus der ersten Tabelle und alle Zeilen aus der zweiten Tabelle aus und wird als kartesisches Produkt angezeigt, dh mit allen Möglichkeiten.
Bedenken Sie, dass wir alle Lehrer in der Schule und die Schüler finden müssen, unabhängig von den Klassenlehrern, die wir anwenden müssen
CROSS JOIN
.Abfrage
Ergebnis
quelle
Cross Join
denken Sie, es werden nicht alle Zeilen zurückgegeben, wenn keineWhere
Klausel angegeben ist? Aus Ihren Kommentaren geht hervor, dass ein Anfänger eher verwirrt sein kann !!! @phipipxyCROSS JOIN = (INNER) JOIN = Komma (",")
TL; DR Der einzige Unterschied zwischen SQL CROSS JOIN, (INNER) JOIN und Komma (",") (neben Komma mit niedrigerer Priorität für die Auswertungsreihenfolge) besteht darin, dass (INNER) JOIN ein ON hat, während CROSS JOIN und Komma dies nicht tun.
Zu Zwischenprodukten
Alle drei erzeugen ein relationales konzeptionelles relationales "kartesisches" Produkt im SQL-Stil, auch bekannt als Cross-Join, aller möglichen Kombinationen einer Zeile aus jeder Tabelle. Es ist ON und / oder WHERE, die die Anzahl der Zeilen reduzieren. SQL Fiddle
Der SQL-Standard definiert <comma> über Produkt (7.5 1.b.ii), <cross join> über <comma> (7.7 1.a) und JOIN ON <Suchbedingung> über <comma> plus WHERE (7.7 1.b) ).
Wie Wikipedia es ausdrückt:
Re OUTER JOIN und mit ON vs WHERE in ihnen sehen Bedingungen in LEFT JOIN (OUTER JOIN) vs INNER JOIN .
Warum Spalten zwischen Tabellen vergleichen?
Wenn keine doppelten Zeilen vorhanden sind:
Jede Tabelle enthält die Zeilen, die eine echte Aussage aus einer bestimmten Anweisungsvorlage zum Ausfüllen der [benannten] Lücken machen. (Es macht einen wahren Satz aus - erfüllt - ein bestimmtes (charakteristisches) Prädikat .)
Eine Basistabelle enthält die Zeilen, die aus einer vom DBA angegebenen Anweisungsvorlage eine echte Aussage machen:
Das Zwischenprodukt eines Joins enthält die Zeilen, die eine wahre Aussage aus dem UND der Vorlagen seiner Operanden machen:
ON & WHERE-Bedingungen werden UND-verknüpft, um eine weitere Vorlage zu erhalten. Der Wert sind wieder die Zeilen, die diese Vorlage erfüllen:
Insbesondere bedeutet der Vergleich von Spalten auf (SQL-) Gleichheit zwischen Tabellen, dass die Zeilen, die aus den Teilen der Vorlage der verknüpften Tabellen vom Produkt ferngehalten werden, für diese Spalten denselben Wert (nicht NULL) haben. Es ist nur ein Zufall, dass viele Zeilen normalerweise durch Gleichheitsvergleiche zwischen Tabellen entfernt werden. Notwendig und ausreichend ist die Charakterisierung der gewünschten Zeilen.
Schreiben Sie einfach SQL für die Vorlage für die gewünschten Zeilen!
Zur Bedeutung von Abfragen (und Tabellen im Vergleich zu Bedingungen) siehe: Wie werden übereinstimmende Daten aus einer anderen SQL-Tabelle für zwei verschiedene Spalten abgerufen: Inner Join und / oder Union?
Gibt es eine Faustregel zum Erstellen einer SQL-Abfrage aus einer für Menschen lesbaren Beschreibung?
Überladen von "Cross Join"
Leider wird der Begriff "Cross Join" verwendet für:
Diese verschiedenen Bedeutungen werden verwechselt. (ZB wie in anderen Antworten und Kommentaren hier.)
Verwenden von CROSS JOIN vs (INNER) JOIN vs Komma
Die übliche Konvention lautet:
Typischerweise werden auch Bedingungen, die nicht auf Tabellenpaaren liegen, für ein WHERE beibehalten. Möglicherweise müssen sie jedoch in einen (n INNER) JOIN ON gesetzt werden, um die entsprechenden Zeilen für das Argument für einen RIGHT, LEFT oder FULL (OUTER) JOIN zu erhalten.
Zu "Komma nicht verwenden" Das Mischen von Komma mit explizitem JOIN kann irreführen, da Komma eine niedrigere Priorität hat. Angesichts der Rolle des Zwischenprodukts im Sinne von CROSS JOIN, (INNER) JOIN und Komma sind die Argumente für die oben genannte Konvention, es überhaupt nicht zu verwenden, wackelig. Ein CROSS JOIN oder Komma ist wie ein (INNER) JOIN, der sich in einem WAHREN Zustand befindet. Ein Zwischenprodukt, ON und WHERE, führen alle ein UND in das entsprechende Prädikat ein. Ansonsten kann man sich INNER JOIN ON vorstellen - beispielsweise eine Ausgabezeile nur dann zu generieren, wenn ein Paar von Eingabezeilen gefunden wird, die die ON-Bedingung erfüllen - und dennoch die Cross-Join-Zeilen zurückgeben, die die Bedingung erfüllen. Der einzige Grund, warum ON das Komma in SQL ergänzen musste , war das Schreiben OUTERJOINs. Natürlich sollte ein Ausdruck seine Bedeutung klar machen; Aber was klar ist, hängt davon ab, was unter Dingen zu verstehen ist.
Zu Venn-Diagrammen Ein Venn-Diagramm mit zwei sich kreuzenden Kreisen kann den Unterschied zwischen Ausgabezeilen für INNER-, LEFT-, RIGHT- und FULL-JOINs für dieselbe Eingabe veranschaulichen. Und wenn das EIN bedingungslos WAHR ist, ist das INNER JOIN-Ergebnis dasselbe wie CROSS JOIN. Es kann auch die Eingabe- und Ausgabezeilen für INTERSECT, UNION & EXCEPT veranschaulichen. Wenn beide Eingaben dieselben Spalten haben, ist das INTERSECT-Ergebnis dasselbe wie für Standard-SQL-NATURAL-JOIN, und das EXCEPT-Ergebnis ist dasselbe wie für bestimmte Redewendungen, die LEFT & RIGHT-JOIN betreffen. Es zeigt jedoch nicht , wie (INNER) JOIN im Allgemeinen funktioniert. Das erscheint auf den ersten Blick nur plausibel . Es kann Teile der Eingabe und / oder Ausgabe für identifizierenSonderfälle von ON, PKs (Primärschlüssel), FKs (Fremdschlüssel) und / oder SELECT. Alles, was Sie tun müssen, um dies zu sehen, ist zu identifizieren, was genau die Elemente der Mengen sind, die durch die Kreise dargestellt werden . (Welche durcheinandergebrachten Präsentationen niemals klar machen.) (Denken Sie daran, dass Ausgabezeilen für Verknüpfungen im Allgemeinen andere Überschriften als Eingabezeilen haben . Und SQL-Tabellen sind Taschen, keine Sätze von Zeilen mit NULL-Werten .)
quelle
CROSS JOIN
. Ich frage mich, wie oft jemand zu SQL kommt, der bereits mit dem kartesischen Produkt vertraut ist, es aber nicht herausfinden kannCROSS JOIN
.Inner Join
Der Join, der nur die Zeilen anzeigt, die in beiden verknüpften Tabellen übereinstimmen, wird als innerer Join bezeichnet. Dies ist die Standardverknüpfung im Abfrage- und Ansichts-Designer.
Syntax für Inner Join
Cross Join
Ein Cross-Join, der ein kartesisches Produkt der Tabellen erzeugt, die an dem Join beteiligt sind. Die Größe eines kartesischen Produkts ist die Anzahl der Zeilen in der ersten Tabelle multipliziert mit der Anzahl der Zeilen in der zweiten Tabelle.
Syntax für Cross Join
Oder wir können es auch anders schreiben
Überprüfen Sie nun die folgende Abfrage auf Cross Join
Beispiel
Oder
quelle
Bitte denken Sie daran, wenn Sie eine WHERE-Klausel hinzufügen, verhält sich der Cross-Join wie ein innerer Join. Beispielsweise erzeugen die folgenden Transact-SQL-Abfragen dieselbe Ergebnismenge. Weitere Informationen finden Sie unter http://technet.microsoft.com/en-us/library/ms190690(v=sql.105).aspx
quelle
CROSS JOIN
Wie ich in diesem Artikel erklärt habe , soll CROSS JOIN ein kartesisches Produkt erzeugen.
Ein kartesisches Produkt verwendet zwei Sätze A und B und generiert alle möglichen Permutationen von Paardatensätzen aus zwei gegebenen Datensätzen.
Angenommen, Sie haben die folgenden
ranks
undsuits
Datenbanktabellen:Und das
ranks
hat folgende Zeilen:Während die
suits
Tabelle die folgenden Datensätze enthält:Als CROSS JOIN-Abfrage wie folgt:
generiert alle möglichen Permutationen
ranks
undsuites
Paare:INNER JOIN
Andererseits gibt INNER JOIN das kartesische Produkt der beiden Verbindungsdatensätze nicht zurück.
Stattdessen nimmt der INNER JOIN alle Elemente aus der Tabelle auf der linken Seite und vergleicht sie mit den Datensätzen auf der Tabelle auf der rechten Seite, sodass:
Angenommen, wir haben eine Eins-zu-Viele-Tabellenbeziehung zwischen einer übergeordneten
post
und einerpost_comment
untergeordneten Tabelle , die wie folgt aussehen:Wenn die
post
Tabelle nun die folgenden Datensätze enthält:und die
post_comments
Tabelle hat diese Zeilen:Eine INNER JOIN-Abfrage wie die folgende:
wird alle
post
Datensätze zusammen mit allen zugehörigen Datensätzen enthaltenpost_comments
:Weitere Informationen zur Funktionsweise von INNER JOIN finden Sie auch in diesem Artikel .
quelle
SQL Server akzeptiert auch die einfachere Notation von:
Mit dieser einfacheren Notation muss man sich nicht um den Unterschied zwischen inneren und Kreuzverbindungen kümmern. Anstelle von zwei "ON" -Klauseln gibt es eine einzige "WHERE" -Klausel, die den Job erledigt. Wenn Sie Schwierigkeiten haben, herauszufinden, welche "JOIN" - "ON" -Klauseln wohin führen, geben Sie die "JOIN" -Notation auf und verwenden Sie die einfachere oben.
Es betrügt nicht.
quelle
Beim Schreiben von Abfragen mit inneren Verknüpfungen werden die Datensätze aus beiden Tabellen abgerufen, wenn die Bedingung für beide Tabellen erfüllt ist, dh die genaue Übereinstimmung der gemeinsamen Spalte in beiden Tabellen.
Beim Schreiben einer Abfrage mit Cross Join ähnelt das Ergebnis dem kartesischen Produkt der Anzahl der Datensätze in beiden Tabellen. Beispiel: Wenn Tabelle1 2 Datensätze enthält und Tabelle2 3 Datensätze enthält, lautet das Ergebnis der Abfrage 2 * 3 = 6 Datensätze.
Gehen Sie also nicht zum Cross Join, bis Sie das brauchen.
quelle
Cross Join und Inner Join sind gleich, mit dem einzigen Unterschied, dass wir beim Inner Join einige der Ergebnisse des kartesischen Produkts boolesch filtern
Bei der Gestaltung unserer Daten entscheiden wir, dass es nur einen Fall des Feldes gibt, das wir für den Join verwenden. Join nur Kreuzverknüpfung beider Tabellen und nur die Zeilen erhalten, die einen speziellen booleschen Ausdruck ausführen.
Beachten Sie, dass wir den Filter übergeben würden, wenn die Felder, für die wir unsere Joins ausführen, in beiden Tabellen null wären. Es liegt an uns oder dem Datenbankhersteller, zusätzliche Regeln hinzuzufügen, um Nullen zu vermeiden oder zuzulassen. Bei den Grundlagen handelt es sich lediglich um eine Kreuzverbindung, gefolgt von einem Filter.
quelle
Der innere Join gibt das Ergebnis übereinstimmender Datensätze zwischen zwei Tabellen an, wobei der Cross-Join die möglichen Kombinationen zwischen zwei Tabellen liefert.
quelle
A = {1,5,3,4,6,7,9,8} B = {2,8,5,4,3,6,9}
cross join
wirken als kartesisches Produkt A ✖ B = {1,2}, {1,8} ..., {5,2}, {5,8}, {5,5} ..... {3,3} ..., {6,6} .... {8,9} und gab diese lange Ergebnismenge zurück ..bei der Verarbeitung
inner join
seines durch kartesisches Produkt fertig und wählen Paaren kombiniert werden .. Wenn diese denken geordneten Paare als zwei Primärschlüssel der Tabelle und Suchen nach Klausel A = B danninner join
wählen , {5,5}, {4,4}, {6,6} , {9,9} und gab die angefragte Spalte in der select-Klausel zurück, die sich auf diese IDs bezieht.Wenn
cross join
auf a = b, dann ist das Ergebnis dieselbe Ergebnismenge wieinner join
. in diesem Fall auch verwendeninner join
.quelle
Dies hängt von der erwarteten Ausgabe ab.
Ein Cross-Join ordnet alle Zeilen in einer Tabelle allen Zeilen in einer anderen Tabelle zu. Ein innerer Join stimmt mit einem Feld oder Feldern überein. Wenn Sie eine Tabelle mit 10 Zeilen und eine andere mit 10 Zeilen haben, verhalten sich die beiden Verknüpfungen unterschiedlich.
Beim Cross-Join werden 100 Zeilen zurückgegeben, die nicht miteinander verknüpft sind, sondern nur ein sogenanntes kartesisches Produkt. Der innere Join vergleicht die Datensätze miteinander. Angenommen, einer hat einen Primärschlüssel und das ist ein Fremdschlüssel im anderen, würden 10 Zeilen zurückgegeben.
Ein Cross-Join hat eine begrenzte allgemeine Nützlichkeit, ist jedoch der Vollständigkeit halber vorhanden und beschreibt das Ergebnis des Verbindens von Tabellen, ohne dass der Abfrage Beziehungen hinzugefügt wurden. Sie können einen Cross-Join verwenden, um Listen mit Wortkombinationen oder Ähnlichem zu erstellen. Eine innere Verknüpfung ist dagegen die häufigste Verknüpfung.
quelle