reihenfolge der operanden bei join's

ruutaiokwu

Top Contributor
hallo zusammen

jemand hat mir gesagt, dass es bei sql-join's relevant ist wie die reihenfolge der "operanden" beim vergleichsoperator definiert werden. als test-db habe ich die "credit"-db von sql server genommen:

SQL:
SELECT
  *
FROM member mbr

LEFT JOIN payment pmt
ON ([B][COLOR="Red"]pmt.member_no = mbr.member_no[/COLOR][/B])

sowie

SQL:
SELECT
  *
FROM member mbr

LEFT JOIN payment pmt
ON ([B][COLOR="Red"]mbr.member_no = pmt.member_no[/COLOR][/B])


...wie ich aber sehe kommt immer das gleiche dabei raus.

ein anderes beispiel: es gibt a.) eine kundentabelle (adressdaten etc.) sowie b.) eine bestellungstabelle.

nun möchte man allen kunden mit allen bestellungen (wenn vorhanden! daher "left join") ausgeben:

(pseudo-code)
SQL:
SELECT * FROM kunden LEFT JOIN bestellungen ON (kunden.ID = bestellungen.ID)



im anderen fall möchte man alle bestellungen wenn möglich zusätzlich mit kunden ausgeben, jedoch auch wenn der kunden in der zwischenzeit gelöscht wurde (foreign key -> "SET NULL" beim löschen des PK's in der kundentabelle!)

(pseudo-code)
SQL:
SELECT * FROM bestellungen LEFT JOIN kunden ON (kunden.ID = bestellungen.ID)



...das ist doch die einzige art und weise wie man das "gegenteil" erreichen kann, oder macht man das wirklich mit der umkehrung der operanden??? leider fehlt mit z.zt. die möglichkeit das praktisch zu testen.

und: bei einem "OUTER JOIN" ist es irrelevant welche tabelle beim "SELECT" und welche beim "JOIN" angegeben wird, wahrscheinlich auch beim "OUTER JOIN"...? sehe ich das richtig?


vielen dank für eure feedbacks.
 

Times

Bekanntes Mitglied
Wenn ich dich richtig verstehe suchst du einfach den RIGHT JOIN oder?

Hier mal ein paar Beispiele:

1. LEFT JOIN
Selektiert alle Kunden mit dazugehöriger Bestellung, auch die Kunden ohne Bestellung
SQL:
SELECT Kunde.*,Bestellung.* FROM Kunde LEFT JOIN Bestellung ON Kunde.BestellungID = Bestellung.ID

2. RIGHT JOIN
Selektiert nur Kunden mit dazugehöriger Bestellung, auch Bestellungen ohne Kunden. (Bissel verwirrend, kanns nicht anders erklären^^)
SQL:
SELECT Kunde.*,Bestellung.* FROM Kunde RIGHTJOIN Bestellung ON Kunde.BestellungID = Bestellung.ID

3. INNER JOIN
Selektiert nur Kunden welche auch Bestellung haben
SQL:
SELECT Kunde.*,Bestellung.* FROM Kunde INNER JOIN Bestellung ON Kunde.BestellungID = Bestellung.ID

4. OUTER JOIN
Kenn ich garnicht.. sry
 

ruutaiokwu

Top Contributor
hallo Times

vielen dank für dein feedback.

das mit dem join's war "einigermassen" klar. (gemäss code-konvention dürfen wir in der firma keine right-joins verwenden, sondern müssen das statement unkehren... na ja, eigentlich mag ich codekonventionen gar nicht!! :noe:)

die primäre frage war diese:

"jemand hat mir gesagt, dass es bei sql-join's relevant ist wie die reihenfolge der "operanden" beim vergleichsoperator definiert werden. als test-db habe ich die "credit"-db von sql server genommen:"

SELECT * FROM member mbr LEFT JOIN payment pmt ON (pmt.member_no = mbr.member_no)

müsste folgedessen was anderes machen als

SELECT * FROM member mbr LEFT JOIN payment pmt ON (mbr.member_no = pmt.member_no)


ich kann mir aber kaum vorstellen dass das stimmt... jemand behauptet das in unserer firma stur bei left- (und auch right-) joins mache dies einen unterschied...?


p.s.: outer join habe ich in meinem ganzen leben auch noch nie gebraucht. wohl "alles was nicht gemeinsam ist" oder so ;-)
 
Zuletzt bearbeitet:

ruutaiokwu

Top Contributor
was schreibe ich für schräges zeug wenn ich im stress bin? ;-)
->
"und: bei einem "OUTER JOIN" ist es irrelevant welche tabelle beim "SELECT" und welche beim "JOIN" angegeben wird, wahrscheinlich auch beim "OUTER JOIN"...? sehe ich das richtig?"


sollte heissen:

und: bei einem "INNER JOIN" ist es irrelevant welche tabelle beim "SELECT" und welche beim "JOIN" angegeben wird, wahrscheinlich auch beim "OUTER JOIN"...? sehe ich das richtig?


ein schönes wochenende!
 

ceving

Aktives Mitglied
die primäre frage war diese:

SELECT * FROM member mbr LEFT JOIN payment pmt ON (pmt.member_no = mbr.member_no)

müsste folgedessen was anderes machen als

SELECT * FROM member mbr LEFT JOIN payment pmt ON (mbr.member_no = pmt.member_no)


ich kann mir aber kaum vorstellen dass das stimmt... jemand behauptet das in unserer firma stur bei left- (und auch right-) joins mache dies einen unterschied...?

Alles richtig. Die Reihenfolge in der Condition ist egal. Gleich ist Gleich. Gleichung halt.

Entscheidend ist das die Reihenfolge beim Join.

Code:
member left join payment
liefert alle aus member mit nulls in payment, wenn in payment keiner ist, für den die Condition zutrifft.

Und
Code:
payment left join member
liefert alle aus payment mit nulls in member.

Letzteres ist der Right-Join von ersterem.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Tabellenspalte in JTable in der falschen Reihenfolge Datenbankprogrammierung 10
P Derby/JavaDB JPA Reihenfolge Spalten ändern Datenbankprogrammierung 6
G SQL Reihenfolge Datenbankprogrammierung 9
P DB2 Reihenfolge Create Statements Datenbankprogrammierung 2
G Oracle Speichern der Reihenfolge Datenbankprogrammierung 2
M JPA Annotations @ManyToMany + reihenfolge als key Datenbankprogrammierung 15
T ResultSet#next Ungültige Reihenfolge (DB2) Datenbankprogrammierung 5
D Reihenfolge der Abfragen Datenbankprogrammierung 7
R DB2 PreparedStatement Batches ungültige Reihenfolge Datenbankprogrammierung 4
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
B Inner Join ohne SQL Syntax Datenbankprogrammierung 2
S SQL join - NullPointerExeption Datenbankprogrammierung 3
E Mehrere Tabellenspalten mit INNER JOIN verknüpfen Datenbankprogrammierung 1
OnDemand LEFT JOIN id hat Null Datenbankprogrammierung 6
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
K SQL Inner Join - On Klausel Datenbankprogrammierung 10
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
Eldorado MySQL SELECT mit GROUP BY und INNER JOIN Datenbankprogrammierung 2
G Join Abfrage Datenbankprogrammierung 12
S SQL inner join bei >10 Tabellen über 2 Variablen Datenbankprogrammierung 2
T MySQL: Join auf sich selbst schlägt fehlt Datenbankprogrammierung 3
MQue Join n:m Datenbankprogrammierung 9
0x7F800000 MS-SQL Server 2008 Wie benutzt man da NATURAL JOIN / INNER JOIN USING? Datenbankprogrammierung 3
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
T Diverse JDBC Probleme (inner join, rs.last(), update) Datenbankprogrammierung 2
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

Ähnliche Java Themen

Neue Themen


Oben