Bessere Projektion erreichen bzw Selektion?

Tonikum

Neuer Benutzer
Beiträge
2
Hallo.
Bin hier neu in dem Forum und sieht ja recht cool hier aus.
Habe mich heute Abend an die PRESIDENT-Datenbank von Oracle drangesetzt, um etwas SQL zu lernen.

Die Frage wo ich gerade Probleme habe ist:
Gebt alle in der Datenbank verfügbaren Informationen über
'Obama B H' aus.

Kurze Beschreibung von meiner Seite zur Erläuterung:
Es gibt drei Relationen: Pres_Hobby, President und Pres_Marriage
Der Fremdschlüssel, der Beziehung der drei Relationen wäre "Pres_Name", der den Attributswert als Selektionsbedingung 'Obama B H' haben soll.

Ich habe eine Lösung herausbekommen, die zwar ok wäre und bei Ersetzung des * durch alle nötigen SELECT Attribute auch das Korrekte ausgeben würde, aber ich würde das gerne vereinfachen bzw optimiert haben.

SELECT *
FROM PRES_Hobby H, President P, Pres_Marriage M
WHERE P.PRES_Name='Obama B H' AND H.PRES_Name='Obama B H' AND M.Pres_Name='Obama B H'


Ausgabe:
lsungy.jpg



dabei könnte man das Sternchen wie gesagt durch die benötigten Attribute austauschen.

Frage: Kann man eventuell einen Durchschnitt oder eine EXCEPT Hinzufügung oder Ergänzung das Problem lösen, dass
3x PRES_Name Spalten in der Auswahl sind?
Also damit man * behält und sagt "ALLES außer zwei doppelte Pres_name-Spalten"?


Frage2: Da der Präsident drei Hobbys hat, kann man die Anzahl der Tupel nicht reduzieren und kriegt somit drei Tupel heraus?
D.h. Es ginge nur, wenn man Hobby aus der Selektion nehmen würde und seperat aufführen in einer eigenen Relation?

Danke für hoffentlich etwas Erleuchtung
 
Werbung:
AW: Bessere Projektion erreichen bzw Selektion?

Hallo Tonikum,

Frage: Kann man eventuell einen Durchschnitt oder eine EXCEPT Hinzufügung oder Ergänzung das Problem lösen, dass
3x PRES_Name Spalten in der Auswahl sind?
Also damit man * behält und sagt "ALLES außer zwei doppelte Pres_name-Spalten"?

Du solltest dein SELECT zu einem inner join umschreiben.

Ich zeige es dir mal über die WHERE-Kausel:

Code:
SELECT * 
FROM President P, Pres_Marriage M, PRES_Hobby H
WHERE H.PRES_Name = P.PRES_Name
AND M.PRES_Name = P.PRES_Name
AND P.PRES_Name='Obama B H'

und mit JOIN:

Code:
SELECT * 
FROM President P
JOIN Pres_Marriage M ON M.PRES_Name = P.PRES_Name
JOIN PRES_Hobby H ON H.PRES_Name = P.PRES_Name
WHERE P.PRES_Name='Obama B H'

Das hat den Vorteil das du nur noch einmal nach Obama fragen musst.

Bei der Spaltenauswahl kannst du jetzt angeben was du haben willst.

so etwa:

Code:
SELECT M.Spalte2, M.Splate4,  M.Spalte2, P.SPalte1, H.Splate6  
FROM ...

Frage2: Da der Präsident drei Hobbys hat, kann man die Anzahl der Tupel nicht reduzieren und kriegt somit drei Tupel heraus?
D.h. Es ginge nur, wenn man Hobby aus der Selektion nehmen würde und seperat aufführen in einer eigenen Relation?

Wenn du nur eine Zeile haben willst, musst du entweder die Ergebnismenge auf eine Zeile reduzieren oder die Hobbys auslagern.

Gruß Charly
 
Zurück
Oben