Announcement

Collapse
No announcement yet.

SQL Abfragen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL Abfragen

    Hallo Ihr,

    ich schreibe morgen eine Klausur und in der ersten Klausur hatte ich eine Datenbank. Die könnt ihr im Image mit den enthaltenden Einträgen sehen. Da sind extra ein zwei fehler vom prof eingebaut,aber die sollen nun ja nicht interessieren. Da das Image schlecht zu erkennen ist, habe ich mal die Relationen angegeben:


    fluege(flugnr.,datum,uhrzeit,ziel,passagiere,code)
    airlines(airlinecode,airlinename)
    zutaten(lagernr,zutatname,bestand)
    enthaeltzutat(mealcode,lagernr,menge)
    gerichte(mealcode,mealname,gewicht)
    bestellungen(datum,flugnr,bestnr,mealcode,anzahl)

    Ich soll nun anfragen per SQL Ausdrücke lösen und habe es versucht. Ich hoffe ihr könnt mal rüber schauen und mir sagen ob es so korekt ist.Die Klausur ist ziemlich wichtig


    Nun soll ich folgende Abfragen mit einem SQL Ausdruck abfangen:

    1. Bestimmen Sie die Gesamtanzahl an Essportionen, die für den 25.07.09 bestellt wurden.

    Lösung: select sum(anzahl)from bestellungen where datum = '2009-07-25';

    2.Ermitteln Sie den Namen aller Airlines, die am 24.07.09 Flüge nach catania anbieten.

    Lösung: select airlinename from airlines inner join fluege on
    airlines.airlinecode = fluege.airlinecode where datum = '2009-07-25'
    and ziel = 'catania';

    3.Erstellen Sie eine Liste , bei der zu jeder Airline angebeben ist, wie viele unterschiedliche Gerichte sie insgesamt anbieten

    Lösung: Da komme ich auf leider nichts!Könnt ihr mir hier helfen?

    4. Geben Sie zu jedem Flug das Gesamtgewicht eder bestellten Essen an

    Lösung: select flugnr,datum,anzahl * gewicht as gesamtgewicht from
    bestellungen inner join gerichte on bestellungen.mealcode =
    gerichte.mealcode;

    5.Wegen erhöhter Nachfrage solln die Anzahl der Portionen an Rührei bei allen Betsellungen um 20% erhöht werden.Geben Sie den entsprechenden Ausdruck an

    Lösung:select anzahl * 1,2 from bestellungen where mealcode = 'RUEI';

    Vielen Dank für eure Hilfe.

    Liebe Grüße

    Kamil
    Attached Files
    Zuletzt editiert von sqlnewbie; 15.09.2009, 08:54.

  • #2
    Bei der Rührei Aufgabej (5) musst Du ein UPDATE verwenden, wenn Du die Datensätze in der Datenbank verändern willst.

    Aufgabe 3 ist eigentlich auch nicht schwer, aber ich kann auf dem eingescannten Blatt leider nichts lesen.
    Prinzipiell so:

    [highlight=sql]
    SELECT airline, COUNT(*) anzahlGerichte
    FROM gerichteDerAirline
    GROUP BY airline
    [/highlight]

    Der Rest liest sich eigentlich ganz vernünftig auch wenns schwer zu prüfen ist, weil man den Zettel nicht lesen kann.

    Comment


    • #3
      Oh,du hast Recht. Ich sehe es jetzt gerade erst das es unscharf ist.Ich habe oben nochmal die Realtionen dazugeschrieben. kannst du nun nochmal eben drüber gucken? Wäre dir echt dankbar!

      Comment


      • #4
        [highlight=sql]
        SELECT a.airlinename, COUNT(*) as anzahl
        FROM gerichte g,
        bestellungen b,
        fluege f,
        airlines a,
        WHERE g.mealcode = b.mealcode AND
        b.flugnr = f.flugnr AND
        f.airlinecode = a.airlinecode
        GROUP BY a.airlinename
        [/highlight]

        So in etwa sollte nummer 3 aussehen, allerdings habe ich noch angenommen, dass fluege und airline über airlinecode verknüpft sind. Da fehlt sonst etwas.

        Comment


        • #5
          Super,danke!Ja,er hat uns das so gegeben und wir mussten die fehler ausmerzen.Die sind auch über Code verbunden.Die anderen sind so richtig?
          Ich muss nun noch Tabellendefinition in DDl angeben. kannst du mir dabei helfen? Ich habe nur das Grundgerüst,aber irgendwie komme ich nicht weiter.

          1. Es gibt keine zwei Airlines mit dem gleichen Airline_code

          Lösung: create table airlines(
          -> airline_code varchar(10) not null,
          -> airline_name varchar(40) not null,
          -> primary key (airline_code));

          Ich glaube ich müsste da noch mit einem UNIQUE arbeiten,aber weiß nicht wie ich es realisieren kann.

          2. Der Lagerbestand von Zutaten darf nie negativ sein.

          Lösung: create tables zutaten (
          -> lager_nr int not null,
          -> zutatname varchar (40) not null,
          -> bestand int not null,
          -> primary key (lager_nr));

          Um das mit Negativ abzufangen,muss ich es glaube ich mit einem CHECK machen,aber das bekomme ich auch nicht hin.

          3. Geben Sie komplette Tabellendefinition von enthaeltZutat an. Achten Sier auf die Schlüssel.

          Lösung: create table enthaeltZutat(
          -> mealcode varchar(10) not null,
          -> lager_nr int not null,
          -> menge int,
          -> constraint mealcode foreign key melacode (melacode)
          -> references gerichte (melacode),
          -> constraint lager_nr foreign key lager_nr (lager_nr)
          -> references zutaten (lager_nr));

          Ein primärschlüssel gibt es hier ja nicht. So müsste dies eigentlich wohl stimmen,oder? Wäre echt dankbar wenn jemand drüber schauen könnte.

          Danke

          Comment


          • #6
            Naja... es kommt drauf an was man als "falsch" versteht. Aber dass zwischen Flug und Airline keine Verknüpfung besteht halte ich für sehr unwahrscheinlich

            Zum 1.: airline_code varchar(10) not null unique

            Zum 2.: bestand int not null CONSTRAINT bestand_positiv CHECK (bestand > 0)

            Die 3. Aufgabe verstehe ich nicht ganz. Was soll denn in der Tabelle drin stehen? Du hast da Gerichte und Mealcodes und Zutaten und Lager alles irgendwie in einer Tabelle. Das verwirrt mich

            Comment


            • #7
              Naja... es kommt drauf an was man als "falsch" versteht. Aber dass zwischen Flug und Airline keine Verknüpfung besteht halte ich für sehr unwahrscheinlich
              Wie meinst du das?

              zu 3: die Tabelle enthält mealcode,lagernr und menge, wobei mealcode und lagernr Fremdschlüssel sind. Was ist denn da falsch?

              Comment


              • #8
                ach ups da hab ich mich verlesen sorry *lach*

                Ach da sind die Namen etwas schlecht gewählt oder bei der Zutat fehlt der Primary Key. Hat Zutat als Primary Key denn Lagernr? Das glaub ich nicht.

                Also müsstest Du in der enthaeltZutat dann auch die ZutatId refenzieren und nicht die Lagernr.

                Ansonsten ist es ok soweit ich das beurteilen kann.

                Comment


                • #9
                  Doch,Zutat hat den Primarykey LagerNr. Im text steht das die LagerNr eindeutig ist.

                  Danke für deine super Unterstützung!

                  Comment


                  • #10
                    Kann aber auch sein, dass LagerNr eindeutig eine Position im Lager definiert und keine Zutat Also ich würd meinen Zutaten PK nicht LagerNr nennen

                    Comment

                    Working...
                    X