Hallo,
ich will aus 3 Tabellen die Lehrer ausgeben, die am Montag unterricht haben, inkl. deren Vorgesetzten. Das könnte ich auf 3 verschiedene Varianten lösen:
SELECT DISTINCT L_NAME, V_ART
FROM Vorgesetzte
INNER JOIN (Lehrer
INNER JOIN Stunden
ON Stunden.ST_L_Lehrer = Lehrer.L_ID)
ON Lehrer.L_L_CHEF = Vorgesetzte.V_L_VORG
WHERE Stunden.ST_STUNDE LIKE 'MO%';
SELECT DISTINCT L_NAME, V_ART
FROM Stunden
INNER JOIN (Lehrer
INNER JOIN Vorgesetzte
ON Lehrer.L_L_CHEF = Vorgesetzte.V_L_VORG)
ON Stunden.ST_L_LEHRER = Lehrer.L_ID
WHERE Stunden.ST_STUNDE LIKE 'MO%';
SELECT DISTINCT L_NAME, V_ART
FROM Stunden, Lehrer, Vorgesetzte
WHERE Lehrer.L_L_CHEF = Vorgesetzte.V_L_VORG
AND Stunden.ST_L_LEHRER = Lehrer.L_ID
AND Stunden.ST_STUNDE LIKE 'MO%';
Alle 3 Anweisungen machen das selbe, aber zumindest die letzte Anweisung sollte entweder effizienter oder weniger effizient als als oberen 3 sein. Welche Vorgehensweise ist stets am besten geeignet? Mit JOINs zu arbeiten, oder mit der Aneinanderreihung wie im letzten Beispiel?
Es ist mir natürlich klar, dass das letzte Beispiel kein LEFT oder RIGHT JOIN zulässt, sondern immer nur ein INNER JOIN simuliert.
Markus