Hans0001 Geschrieben 8. Mai 2009 Geschrieben 8. Mai 2009 Gegeben ist folgendes relationales Schema: Buch(BuchID, AID->Autor, Titel) Autor(AutorID, Vorname, Nachname) Gesucht ist ein SQL Query der folgende Frage beantwortet: "Welche Bücher wurden von Autoren mit dem Vornamen "Peter" geschrieben ? Variante 1 (Natural Join): SELECT BuchID FROM Buch,Autor WHERE AID = AuthorID AND Vorname='Peter' Variante 2 (IN): SELECT BuchID FROM Buch WHERE AID IN (SELECT AutorID FROM Autor WHERE Vorname='Peter' ______________________________________________________________ Nun zur Frage: Gibt es einen Unterschied zwischen den beiden Varianten oder werden sie intern gleich umgesetzt bzw. ist eine von beiden peformanter ?
T3D Geschrieben 8. Mai 2009 Geschrieben 8. Mai 2009 Gegeben ist folgendes relationales Schema: Buch(BuchID, AID->Autor, Titel) Autor(AutorID, Vorname, Nachname) Gesucht ist ein SQL Query der folgende Frage beantwortet: "Welche Bücher wurden von Autoren mit dem Vornamen "Peter" geschrieben ? Variante 1 (Natural Join): SELECT BuchID FROM Buch,Autor WHERE AID = AuthorID AND Vorname='Peter' Variante 2 (IN): SELECT BuchID FROM Buch WHERE AID IN (SELECT AutorID FROM Autor WHERE Vorname='Peter' ______________________________________________________________ Nun zur Frage: Gibt es einen Unterschied zwischen den beiden Varianten oder werden sie intern gleich umgesetzt bzw. ist eine von beiden peformanter ? setz mal vor deine SELECT befehl ein "explain" das zeigt dir an was der SQL macht hab das ganze gerade mal durchgespielt.. allerdings mit nem anderen bsp und bin darauf gekommen das variante 1 die schnellere von beiden ist aber versuch das mit explain mal selbst nachzuvollziehn
toobeee Geschrieben 15. Mai 2009 Geschrieben 15. Mai 2009 SELECT BuchID FROM Buch,Autor WHERE AID = AuthorID AND Vorname='Peter' das bildet doch das kartesiche Produkt und ist kein natural join?! natural join: select buchid from buch natural join autor where AID = AuthorID AND Vorname='Peter' (ich weis jetzt nicht in welcher tabelle welche felder drin sind) inner join select buchid from buch b inner join autor a on b.aid = a.authorid and a.vorname = 'Peter'
_n4p_ Geschrieben 16. Mai 2009 Geschrieben 16. Mai 2009 SELECT BuchID FROM Buch,Autor WHERE AID = AuthorID AND Vorname='Peter' das bildet doch das kartesiche Produkt und ist kein natural join?! richtig deine select sind allerdings vollkommen gleichwertig in den meisten fällen sind joins schneller als subselects die das "gleiche" tun. braucht ein join allerdings ein DISTINCT und ein subquery nicht sind beide etwa gleich schnell. dafür sind subquerys in den meisten fällen leichter zu lesen ^^
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden