SQL Inner Join - On Klausel

kossy

Bekanntes Mitglied
Hallo zusammen !

Ich würde gerne mal etwas von euch wissen wollen. Wenn ich einen Inner Join über zwei oder evtl. auch mehrere Tabellen vornehme, dann baue ich ja den Inner Join über die sogenannte ON Klausel auf.

Ich habe bisher durch die eigene Praxis festgestellt, dass es egal ist, auf welcher Seite ich vom Schlüsselwort Inner Join welche Tabelle schreibe, es wird semantisch immer das gleiche Ergebnis produziert.

Ein Beispiel:

Diese Anweisung:

SQL:
Tabelle_1 INNER JOIN Tabelle_2
ON Tabelle_1.feld_a = Tabelle_2.feld_a


führt exakt zu demselben Ergebnis wie diese Anweisung:

SQL:
Tabelle_2 INNER JOIN Tabelle_1
ON Tabelle_1.feld_a = Tabelle_2.feld_a

Nun stellt sich für mich die Frage, ob es die Semantik der Ergebnismenge signifikant verändert, wenn ich nicht die Tabellenamen innerhlab der INNER JOIN Klausel austausche, sondern nur die Fremd- und Primärschlüsselfelder innerhalb der ON Klausel?


Nochmal ein Beispiel:

Anstatt

SQL:
Tabelle_1 INNER JOIN Tabelle_2
ON Tabelle_1.feld_a = Tabelle_2.feld_a

schreibe ich stattdessen

SQL:
Tabelle_1 INNER JOIN Tabelle_2
ON Tabelle_2.feld_a = Tabelle_1.feld_a


und baue die Join Bedingung um, indem ich nur die Bedingungen in der ON Klausel vertausche.

Ich hatte das mal selbst ausgetestet und habe keine Veränderungen festgestellt. Ich stelle diese Frage jetzt hier im Forum, weil ich zu dieser speziellen Frage in keiner Literatur und auch nirgens im Internet eine ganz genaue und detailierte Antwort zu dieser Frage finden konnte. Insbesondere ist diese Frage interessant, wenn ein INNER JOIN auf diese Weise über mehrere Tabellen aufgebaut wird und ab und an mal die ON Klausel unterschiedlich aufgebaut werden.

Bitte keine Hinweise und Links zu Seite, wo die einfache Syntax des INNER JOINS erläutert wird. Da habe ich bereits etliche durch, es geht einzig und alleine um das Vertauschen der ON Klausel.

Viele Grüße
Kossy
 
Zuletzt bearbeitet von einem Moderator:

turtle

Top Contributor
Ob das einen Unterschied macht, lässt sich nur über den SQL-Plan erfahren, den die DB für die Ausführung gewählt hat (explain).
 

Kar

Mitglied
Die Grundlage des INNER JOINs ist das Kartesische Produkt. Ob du jetzt Feld A aus Tabelle1 mit Feld A aus Tabelle2 vergleichst oder umgekehrt ist das Gleiche.
 

Evil-Devil

Top Contributor
Bei einem INNER JOIN ist die Reihenfolge egal. Erst wenn du mit LEFT bzw. RIGHT OUTER JOIN arbeitest ist die Reihenfolge der Verknüpfung entscheidend.

Hierzu würde ich dir empfehlen entweder in der MySQL Doku zu schauen oder einfach in einem der vielen Tutorials die man via Google zu dem Thema finden kann. :)

Wobei man Left/Right Outer Join eher selten benötigt.
 

kossy

Bekanntes Mitglied
Hallo !

Ich habe nochmal eine andere Frage an euch. Wenn ich mithilfe der ON-Klausel einen beliebigen JOIN in meiner Datenbank produziere, habe ich dann eigentlich die Möglichkeit zwei Tabellen nach unterschiedlichen Kriterien zu "joinen", oder funktioniert das nur anhand eines Kriteriums?

Dazu vielleicht mal ein Beispiel, um zu verstehen, worauf ich eigentlich hinaus möchte:

SQL:
SELECT *
FROM Tabelle_1 tbl1 INNER JOIN Tabelle_2 tbl2
ON tbl1.feld_1 = tbl2.feld_2
    AND tbl1.feld_x <> tbl2.feld_y
    AND tbl1.feld_abc < tbl2.feld_abc

Gibt es evtl. auch di Möglichkeit, die Bedingungen in einer ON Klausel noch mehr zu verkomplizieren, indem man evtl. die Felder der Tabellen (z.B. tbl1.feld_x) mithilfe eines Selects zu ermitteln?

Ich habe dazu mal in Netz nach Beispiel gesucht, bin aber nirgends wirklich entsprechen fündig geworden mit Beispielen, die genau auf meine Frage abzielen.

MFG
Kossy
 

Evil-Devil

Top Contributor
Wenn du Tabellen joinst, dann willst du in der Regel Daten ziehen die zusammen hängen. Also über eine ID, einen Text oder wie auch immer die zu verbinden sind. Auf Kleiner oder ungleich mach imho wenig Sinn. Weil du dann n:m Mengen erhalten würdest die ganz sicher nicht dein Ziel sind.

Für den Fall das du die Ergebnismengen einschränken willst oder nur bestimmte Mengen haben willst könntest du mit temporären Tabellen im From arbeiten bzw. über die where Klausel die Menge eingrenzen.
 

kossy

Bekanntes Mitglied
Wenn du Tabellen joinst, dann willst du in der Regel Daten ziehen die zusammen hängen. Also über eine ID, einen Text oder wie auch immer die zu verbinden sind. Auf Kleiner oder ungleich mach imho wenig Sinn. Weil du dann n:m Mengen erhalten würdest die ganz sicher nicht dein Ziel sind.

Für den Fall das du die Ergebnismengen einschränken willst oder nur bestimmte Mengen haben willst könntest du mit temporären Tabellen im From arbeiten bzw. über die where Klausel die Menge eingrenzen.

Ok danke schön für das Feedback !!

Aber grundsätzlich wäre es theoretisch möglich, die On Klausel auch so zu nutzen wie ich es im Beispiel beschrieben habe oder (egal, ob das nun einen semantischen Sinn ergibt oder nicht)?

Viele Grüße
Kossy
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Inner Join ohne SQL Syntax Datenbankprogrammierung 2
E Mehrere Tabellenspalten mit INNER JOIN verknüpfen Datenbankprogrammierung 1
Eldorado MySQL SELECT mit GROUP BY und INNER JOIN Datenbankprogrammierung 2
S SQL inner join bei >10 Tabellen über 2 Variablen Datenbankprogrammierung 2
0x7F800000 MS-SQL Server 2008 Wie benutzt man da NATURAL JOIN / INNER JOIN USING? Datenbankprogrammierung 3
T Diverse JDBC Probleme (inner join, rs.last(), update) Datenbankprogrammierung 2
T Hibernate und inner class Datenbankprogrammierung 0
V Komplexe SQL-Abfrage mit Inner-Joins Datenbankprogrammierung 9
D JOIN COLUMN wird nicht genommen Datenbankprogrammierung 2
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
D Left Join mit Wioth Rollup Datenbankprogrammierung 0
S MySQL ehemaliger FULL OUTER JOIN zusammenstellen Datenbankprogrammierung 1
L Join zweier Tabellen in SQL Datenbankprogrammierung 2
A Fehlermeldung: JOIN FETCH expressions cannot be defined with an identification variable Datenbankprogrammierung 0
S SQL join - NullPointerExeption Datenbankprogrammierung 3
OnDemand LEFT JOIN id hat Null Datenbankprogrammierung 6
ruutaiokwu reihenfolge der operanden bei join's Datenbankprogrammierung 5
G SQLite Self Join "unbestimmter tiefe" Datenbankprogrammierung 7
I MySQL Vergleich über mehrere Tabellen! Join? Datenbankprogrammierung 6
N Select mit join Datenbankprogrammierung 3
F Oracle select sum() join select sum() Datenbankprogrammierung 9
Kenan89 Datenbank Join Datenbankprogrammierung 16
M JPQL - Join Verkettung Datenbankprogrammierung 8
F Komplexer Tabellen-Join und Ausgabe in Excel Datenbankprogrammierung 17
G JOIN Abfrage über mehrere Tabellen Datenbankprogrammierung 15
kirchrath Hibernate Join - angejointes Objekt wählen Datenbankprogrammierung 2
G Join Abfrage Datenbankprogrammierung 12
T MySQL: Join auf sich selbst schlägt fehlt Datenbankprogrammierung 3
MQue Join n:m Datenbankprogrammierung 9
D join updaten in java Datenbankprogrammierung 4
G [Hibernate] Problem mit LEFT JOIN Datenbankprogrammierung 7
S Preparestatement mit join Datenbankprogrammierung 4
S MySQL: Abfrage auf 2 Tabellen durch join Datenbankprogrammierung 5
P Join Datenbankprogrammierung 4
G Hilfe: Werte sind alle x2 (oder mehr) nach JOIN Datenbankprogrammierung 13
M Proble mit Selcet mit join und rst.next() Datenbankprogrammierung 15
E ERROR: argument of JOIN/ON must be type boolean? Datenbankprogrammierung 2
E Nochmal eine Datenbankabfrage Frage :-o (JOIN oder so) Datenbankprogrammierung 4
E JOIN und * Datenbankprogrammierung 3
G Probleme mit Access und Join Datenbankprogrammierung 3
G PL/SQL: Join mit Collection Datenbankprogrammierung 5
T [SQL] Doppelter Join aus der selben Tabelle & Feldnnamen Datenbankprogrammierung 3
S JOIN und wohin damit? Datenbankprogrammierung 5
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
J Hibernate One-To-One mit Where Klausel Datenbankprogrammierung 6
H Derby: SYSCS_UTIL.SYSCS_EXPORT_QUERY mit String Abfrage in wehre-Klausel nicht möglich Datenbankprogrammierung 3
M Mysql Delete ohne Where Klausel untersagen Datenbankprogrammierung 8
M SQL - Dynamisch die Tabelle in From-Klausel bestimmen Datenbankprogrammierung 11
@ Like-Klausel; NPE bzw. leeres ResultSet Datenbankprogrammierung 4
S Platzhalter in WHERE Klausel Datenbankprogrammierung 16
V "Order By"-Klausel -> Dumme Sortierung Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben