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

Datenbank mit SQL Abfragen, schwere Aufgabe?

Dieses Thema im Forum "Andere Datenbankserver" wurde erstellt von Evelyn_M, 1 Juni 2017.

  1. Evelyn_M

    Evelyn_M Benutzer

    Hallo,

    gegeben ist folgende Datenbank:

    https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

    Ich habe mich mit dem Thema nun beschäftigt und folgende Aufgabe gelöst, siehe Anhang.
    Ich habe folgenden Code verwendet:

    SELECT pr.ProductName,
    pr.Price,
    ca.CategoryName,
    su.SupplierName
    FROM Products pr,
    Suppliers su,
    Categories ca
    WHERE pr.Price > 30
    AND pr.Price < 40
    AND pr.CategoryID = ca.CategoryID
    AND pr.SupplierID = su.SupplierID;


    Ich wollte fragen, ob ich diese Aufgabe so richtig gelöst habe. Benötige dies für die Uni und bin auf eure Hilfe sehr angewiesen, ich habe mir viel mühe gegeben und bei der hitze heute stundenlang die Aufgabe gemacht.

    Vielen Dank.

    Evelyn
     

    Anhänge:

  2. akretschmer

    akretschmer Datenbank-Guru

    Prinzipiell richtig.

    Verbessern kann man die Schreibweise. Statt "from table1, table2, table3 where ... and table1.id=table2.id ..." ist es übersichtlicher, den JOIN (nichts anderes ist das) expliziet zu definieren:
    "select ... from table1 inner join table2 on table1.id=table2.id inner join table3 on ... where ...". Damit sieht man auf einen Blick, wie die Tabellen verbunden sind und trennt dies von der eigentlichen Where-Bedingung.

    Wie gesagt, ist nur übersichtlicher. Die DB macht intern in beiden Varianten dasselbe.
     
  3. Evelyn_M

    Evelyn_M Benutzer

    Vielen Dank. Jetzt habe ich es irgendwie verstanden, war schon am verzweifeln, dass ich es schaffe, aber eigentlich, wenn man das Buch nimmt, kann man alle aufgaben lösen. Aber es ist gut, dass jemand noch drüber schaut und einfach mal bessere lösung präsentiert, es gibt ja viele varianten. den Join zu nutzen macht hier sinn, finde ich.
     
    akretschmer gefällt das.
  4. drdimitri

    drdimitri Datenbank-Guru

    Bei einem Inner Join ist das so, bei einem Outer Join kann man leicht Fehler machen.
    Der Unterschied zwischen dem Komma Join und der Ansi Join Syntax ist nämlich, dass die WHERE Bedingung als Filter nach dem Join ausgeführt wird.
    Beispiel:
    Code:
    select * from tabelle1 tab1 left join tabelle2 tab2 on 
                  (tab1.spalteA = tab2.spalteX and tab2.spalteY='abc')
    where  tab1.spalteB = '12345'
    Diese Abfrage ist nicht identisch mit dieser:
    Code:
    select * from tabelle1 tab1 left join tabelle2 tab2 on 
                  (tab1.spalteA = tab2.spalteX )
    where  tab1.spalteB = '12345'
    and (tab2.spalteY= 'abc' or tab2.spalteY IS NULL)
    Die erste Abfrage liefert auch ein Ergebnis, wenn in tab2.spalteY der Wert 'abc' nicht vorhanden ist. Die Bedingung ist also Teil des Outer Joins.
    Die zweite Abfrage führt den Outer Join aus und prüft danach (also Filter) ob die Spalte tab2.spalteY den Wert 'abc' oder NULL hat. Wenn das nicht der Fall ist, wird kein Ergebnis geliefert.

    Ist ein oft gemachter Fehler bei der Umstellung von alter auf die neue Syntax.
     
    Walter gefällt das.
  5. LionVI

    LionVI Benutzer

    alsooo. mir ist die "alte" Syntax bedeutend lieber. Ich finde die ist einfach sprechender.
     

Diese Seite empfehlen