1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Bessere Projektion erreichen bzw Selektion?

Dieses Thema im Forum "Oracle" wurde erstellt von Tonikum, 26 November 2010.

  1. Tonikum

    Tonikum Neuer Benutzer

    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:[​IMG]


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

    Charly Datenbank-Guru

    AW: Bessere Projektion erreichen bzw Selektion?

    Hallo Tonikum,

    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 ...
    
    Wenn du nur eine Zeile haben willst, musst du entweder die Ergebnismenge auf eine Zeile reduzieren oder die Hobbys auslagern.

    Gruß Charly
     

Diese Seite empfehlen