Zum Inhalt springen

Beispiel mit "Natural Join" und "IN" intern unterschiedlich umgesetzt ?


Hans0001

Empfohlene Beiträge

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 ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :P

und bin darauf gekommen das variante 1 die schnellere von beiden ist

aber versuch das mit explain mal selbst nachzuvollziehn ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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'

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...