Zum Inhalt springen

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


Empfohlene Beiträge

Geschrieben

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 ?

Geschrieben
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 ;)

Geschrieben

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'

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

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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