Studium, Ausbildung und Beruf
 StudiumHome   FAQFAQ   RegelnRegeln   SuchenSuchen    RegistrierenRegistrieren   LoginLogin

SQL-Anfragen
Neues Thema eröffnen   Neue Antwort erstellen
Foren-Übersicht -> Informatik-Forum -> SQL-Anfragen
 
Autor Nachricht
Wusaa
Junior Member
Benutzer-Profile anzeigen
Junior Member


Anmeldungsdatum: 28.08.2006
Beiträge: 72

BeitragVerfasst am: 27 Jan 2008 - 23:12:47    Titel: SQL-Anfragen

Hallo,
habe ein Verständnisproblem bei der folgenden SQL-Anfrage. Ich verstehe nicht ganz was beispielsweise "farhzeug f" bedeutet, warum "f"?
Oder f.verkaeuferid, warum "f.".

Wäre echt ziemlich dankbar wenn mir da jemand weiterhelfen könnte.

Es existieren die folgenden Tabellen:

create table betreuung (
standortid varchar2(10),
verkaeuferid varchar2(10),
beginnBetreuung date,
unique( standortid, verkaeuferid )
);

create table kunde (
kundeid varchar2(10) primary key,
name varchar2(30) not null,
vorname varchar2(30)
);

create table fahrzeug (
fahrzeugid varchar2(10) primary key,
bezeichnung varchar2(30) not null,
preis numeric(10,3) not null,
standortid varchar2(10) references standort( standortid ),
kundeid varchar2(10) references kunde( kundeid ),
verkaeuferid varchar2(10) references verkaeufer( verkaeuferid )
);


Und die Anfragen lautet:

select *
from kunde
where kundeid in (
select distinct f.kundeid
from fahrzeug f
where f.verkaeuferid in (
select distinct v.verkaeuferid
from betreuung v
where verkaeuferid in (
select b.verkaeuferid
from betreuung b
where b.standortid = 's1'
)
)
);


MfG
Akuma
Full Member
Benutzer-Profile anzeigen
Full Member


Anmeldungsdatum: 11.01.2008
Beiträge: 148

BeitragVerfasst am: 28 Jan 2008 - 00:33:48    Titel:

Wenn du mehrere Tabellen abrufst, dann muss SQL auch wissen, von welcher Tabelle es die Felder nehmen soll.
Wirtschaftsinformatiker
Valued Contributor
Benutzer-Profile anzeigen
Valued Contributor


Anmeldungsdatum: 30.06.2006
Beiträge: 7083

BeitragVerfasst am: 28 Jan 2008 - 00:48:49    Titel:

zu Fahrzeug f :

f ist hier quasi eine Abkürzung für die Tabelle Fahrzeug. Immer wenn du dich auf die Tabelle Fahrzeug beziehst, reicht es nun, wenn du einfach nur f schreibst. Ist quasi dazu da, um schreibarbeit zu sparen und um den Code übersichtlicher zu halten.

Was man dabei noch wissen sollte : SQL sieht eine Abfrage als einheit, d.h. wenn irgendwo mal geschrieben wurde "Fahrzeug f", dann weiss SQL auch Zeilen oben drüber, dass f sich auf Fahrzeug bezieht, auch wenn dies eben erst später dem System mitgeteilt wird. In Programmiersprachen ist dies ja anders
Wusaa
Junior Member
Benutzer-Profile anzeigen
Junior Member


Anmeldungsdatum: 28.08.2006
Beiträge: 72

BeitragVerfasst am: 28 Jan 2008 - 01:56:25    Titel:

okai, das hab ich jetzt soweit verstanden. Schonmal Danke dafür.

Habe aber jetzt noch ein kleines Problem. Angenommen ich hab diese beiden Tabellen:

Tabelle: Messe (primärschl.: "messenr")
Tabelle: Messeveranstaltung (fremdschl.: "messenr")


So verbindet man ja die Tabellen, also ein Join:

mv.messenr = m.messenr

spielt es einer rolle ob ich es so schreib:
mv.messenr = m.messenr

oder kann ich es auch so schreiben:

m.messenr = mv.messenr


Also um auf den Punkt zu kommen will ich wissen ob man bei den Joins zuerst die Tabelle nennen muss wo der FS ist und dann den PS oder sollte ich zuerst den PS dann den FS nennen?

MfG
Wirtschaftsinformatiker
Valued Contributor
Benutzer-Profile anzeigen
Valued Contributor


Anmeldungsdatum: 30.06.2006
Beiträge: 7083

BeitragVerfasst am: 28 Jan 2008 - 02:03:12    Titel:

das ist völlig egal. Je nach SQL Dialekt ist es so, dass intern quasi das Kreuzprodukt der beiden Tabellen vor einem Join gebildet wird und zu einer neuen Tabelle zusammen gebaut.

D.h. jeder Eintrag der einen Tabelle wird mit jedem der anderen kombiniert.

in der where klausel ( z.b. where mv.messenr = m.messenr ) werden dann diese Zeilen der neuen Tabelle ausgewählt, auf die die Wehrklausel zutrifft.

Und das sind dann eben genau die gesuchten Zeilen, eben die Messeveranstalltung wird dann an die Messe gehängt, die die gleiche Messenummer haben
Wusaa
Junior Member
Benutzer-Profile anzeigen
Junior Member


Anmeldungsdatum: 28.08.2006
Beiträge: 72

BeitragVerfasst am: 28 Jan 2008 - 12:13:07    Titel:

Danke, das hat mir sehr weitergeholfen.

Kann gut sein dass ich im laufe des Tages nochmals was fragen muss Very Happy
Wusaa
Junior Member
Benutzer-Profile anzeigen
Junior Member


Anmeldungsdatum: 28.08.2006
Beiträge: 72

BeitragVerfasst am: 28 Jan 2008 - 14:20:48    Titel:

Zitat:

Und die Anfragen lautet:

select *
from kunde
where kundeid in (
select distinct f.kundeid
from fahrzeug f
where f.verkaeuferid in (
select distinct v.verkaeuferid
from betreuung v
where verkaeuferid in (
select b.verkaeuferid
from betreuung b
where b.standortid = 's1'
)
)
);


das ist doch auch nichts anderes als ein join, oder?
Warum macht man eigenlich einmal "betreuung v" und "betreuung b"?

MfG
Wusaa
Junior Member
Benutzer-Profile anzeigen
Junior Member


Anmeldungsdatum: 28.08.2006
Beiträge: 72

BeitragVerfasst am: 28 Jan 2008 - 22:19:42    Titel:

Gibt es eigentlich eine Art "allgemeine" vorgehensweise wie man beispielsweise bei einer Anfrage diejenigen Tabellen bzw. Spalten die gefragt sind rausfinden kann?

tu mir da irgendwie immer schwer.
-=rand=-
Senior Member
Benutzer-Profile anzeigen
Senior Member


Anmeldungsdatum: 21.03.2005
Beiträge: 961

BeitragVerfasst am: 01 Feb 2008 - 21:52:55    Titel:

Um ein SQL Statement zu formulieren, geht man am besten so vor:

ein konkretes Beispiel wäre:
Du hast eine Tabelle User (mit UserId als P-Schlüssel und noch einem Namen, Vornamen, etc....), eine Tabelle Produkt (mit ProduktId, Name,...) und eine Tabelle Einkauf (in dieser Tabelle gibt es eine EinkaufsId, UserId (Fremdschlüssel), ProduktId (Fremdschlüssel), Anzahl)

Nun willst du zb ein Statement formulieren, welches dir ausgibt, welche Produkte Der User mit der Id "1234" gekauft hat, also den Namen des Produkts sowie die Anzahl.

Du beginnst mit dem aufschreiben der "FROM Klausel", das bedeutet, du überlegst dir, welche Tabellen du für das Statement benötigst.
FROM Kunde k, Produkt p, Einkauf e

jetzt überlegst du dir was du denn ausgeben willst, das wäre hier:
SELECT k.name, p.name, e.anzahl

und dann noch die Bedingung für das Statement
WHERE k.userId='1234' AND k.userId=e.userId AND e.produktId=p.produktId

also letztlich das Statement:

SELECT k.name, p.name, e.anzahl
FROM Kunde k, Produkt p, Einkauf e
WHERE k.userId='1234' AND k.userId=e.userId AND e.produktId=p.produktId

das mal als kleines Beispiel, hoffe ich hab keinen fehler reingebaut, ist nicht getestet....

Gruß
Beiträge der letzten Zeit anzeigen:   
Foren-Übersicht -> Informatik-Forum -> SQL-Anfragen
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

Chat :: Nachrichten:: Lexikon :: Bücher :: Impressum