Joins mit expliziter Bedingung
Die meisten qualifizierten Joins haben eine ON
-Klausel mit einer expliziten Bedingung, die jeder gültige boolesche Ausdruck sein kann, aber normalerweise einen Vergleich zwischen den beiden beteiligten Quellen beinhaltet.
Sehr oft ist die Bedingung ein Gleichheitstest (oder eine Reihe von AND
-verknüpften Gleichheitstests) mit dem Operator “=
”.Joins wie diese heißen equi-joins.(Die Beispiele im Abschnitt über innere und äußere Verknüpfungen waren alle Gleichverknüpfungen.)
Beispiele für Joins mit einer expliziten Bedingung:
/* Wählen Sie alle Detroit-Kunden aus, die einen Kauf getätigt haben
2013, zusammen mit den Kaufdetails: */
select * from customers c
join sales s on s.cust_id = c.id
where c.city = 'Detroit' and s.year = 2013;
/* Wie oben, aber auch nicht kaufende Kunden: */
select * from customers c
left join sales s on s.cust_id = c.id
where c.city = 'Detroit' and s.year = 2013;
/* Wählen Sie für jeden Mann die Frauen aus, die größer sind als er.
Männer, für die es keine solche Frau gibt, werden nicht berücksichtigt. */
select m.fullname as man, f.fullname as woman
from males m
join females f on f.height > m.height;
/* Wählen Sie alle Schüler mit ihrer Klasse und ihrem Mentor aus.
Auch Schüler ohne Mentor werden einbezogen.
Schüler ohne Klasse werden nicht berücksichtigt. */
select p.firstname, p.middlename, p.lastname,
c.name, m.name
from pupils p
join classes c on c.id = p.class
left join mentors m on m.id = p.mentor;