Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Meine Fragen zu SQL

Dieses Thema im Forum "PostgreSQL" wurde erstellt von Laura123, 22 April 2017.

  1. Laura123

    Laura123 Neuer Benutzer

    Hallo,
    ich beschäftige mich gerade mit SQL und komme im Moment nicht weiter.
    Ich würde mich über Hilfe eurerseits sehr freuen.

    1) Wozu ist der Befehl ON da?
    2) Wozu ist der Befehl USING da?
    3) Wann benutzt man WHERE, ON und USING?
    4) Wird GROUP BA nur bei Aggregatfunktionen verwendet?
    5) Wozu ist der Befehl COALESCE da?
    6) Wozu ist der Befehl SET da?
    7) Wozu ist der Befehl IN da?
    8) Wozu ist der Befehl UNION da?
    9) Wozu ist der Befehl ANY da?
    10) Wozu ist der Befehl ARE da?
    11) Wann benutzt man HAVING?
    12) Wozu ist der Befehl WHEN da?
    13) Wozu ist der Befehl THEN da?



    Vielen Dank im Voraus :)
     
  2. drdimitri

    drdimitri Datenbank-Guru

    Ist das die Hausaufgabe eines Lehrers der sich auch grade begonnen hat sich mit SQL zu beschäftigen?
     
  3. Laura123

    Laura123 Neuer Benutzer

    Ich bekomme nie Hausaufgaben allerdings schreibe ich darüber eine Prüfung.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Du hast PostgreSQL. Nutze es! Deine Fragen werden eigentlich alle beantwortet, wenn Du in psql die Hilfe zu z.B. SELECT oder DELETE aufrufst:

    Code:
    test=# \h select
    Anweisung:  SELECT
    Beschreibung: liest Zeilen aus einer Tabelle oder Sicht
    Syntax:
    [ WITH [ RECURSIVE ] With-Anfrage [, ...] ]
    SELECT [ ALL | DISTINCT [ ON ( Ausdruck [, ...] ) ] ]
      [ * | Ausdruck [ [ AS ] Ausgabename ] [, ...] ]
      [ FROM From-Element [, ...] ]
      [ WHERE Bedingung ]
      [ GROUP BY Gruppierelement [, ...] ]
      [ HAVING Bedingung [, ...] ]
      [ WINDOW Fenstername AS ( Fensterdefinition ) [, ...] ]
      [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] Select ]
      [ ORDER BY Ausdruck [ ASC | DESC | USING Operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
      [ LIMIT { Anzahl | ALL } ]
      [ OFFSET Start [ ROW | ROWS ] ]
      [ FETCH { FIRST | NEXT } [ Anzahl ] { ROW | ROWS } ONLY ]
      [ FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF Tabellenname [, ...] ] [ NOWAIT | SKIP LOCKED ] [...] ]
    
    wobei From-Element Folgendes sein kann:
    
      [ ONLY ] Tabellenname [ * ] [ [ AS ] Alias [ ( Spaltenalias [, ...] ) ] ]
      [ TABLESAMPLE Stichprobenmethode ( Argument [, ...] ) [ REPEATABLE ( Startwert ) ] ]
      [ LATERAL ] ( Select ) [ AS ] Alias [ ( Spaltenalias [, ...] ) ]
      With-Anfragename [ [ AS ] Alias [ ( Spaltenalias [, ...] ) ] ]
      [ LATERAL ] Funktionsname ( [ Argument [, ...] ] )
      [ WITH ORDINALITY ] [ [ AS ] Alias [ ( Spaltenalias [, ...] ) ] ]
      [ LATERAL ] Funktionsname ( [ Argument [, ...] ] ) [ AS ] Alias ( Spaltendefinition [, ...] )
      [ LATERAL ] Funktionsname ( [ Argument [, ...] ] ) AS ( Spaltendefinition [, ...] )
      [ LATERAL ] ROWS FROM( Funktionsname ( [ Argument [, ...] ] ) [ AS ( Spaltendefinition [, ...] ) ] [, ...] )
      [ WITH ORDINALITY ] [ [ AS ] Alias [ ( Spaltenalias [, ...] ) ] ]
      From-Element [ NATURAL ] Verbundtyp From-Element [ ON Verbundbedingung | USING ( Verbundspalte [, ...] ) ]
    
    und Gruppierelement eins der folgenden sein kann:
    
      ( )
      Ausdruck
      ( Ausdruck [, ...] )
      ROLLUP ( { Ausdruck | ( Ausdruck [, ...] ) } [, ...] )
      CUBE ( { Ausdruck | ( Ausdruck [, ...] ) } [, ...] )
      GROUPING SETS ( Gruppierelement [, ...] )
    
    und With-Anfrage ist:
    
      With-Anfragename [ ( Spaltenname [, ...] ) ] AS ( Select | values | insert | update | delete )
    
    TABLE [ ONLY ] Tabellenname [ * ]
    
    test=#
    test=# \h delete
    Anweisung:  DELETE
    Beschreibung: löscht Zeilen einer Tabelle
    Syntax:
    [ WITH [ RECURSIVE ] With-Anfrage [, ...] ]
    DELETE FROM [ ONLY ] Tabellenname [ * ] [ [ AS ] Alias ]
      [ USING Using-Liste ]
      [ WHERE Bedingung | WHERE CURRENT OF Cursor-Name ]
      [ RETURNING * | Ausgabeausdruck [ [ AS ] Ausgabename ] [, ...] ]
    
    test=#
    
    coalesce() ist eine Funktion, die den ersten Nicht-NULL-Wert liefert. WHEN un dTHEN brauchst Du für konditionale Entscheidungen.

    Dir die ganze Doku hier vorzulesen hab ich keinen Bock. Lies die Doku doch bitte selber, sie ist sehr ausführlich.
    PostgreSQL: Documentation: 9.6: PostgreSQL 9.6.2 Documentation
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Was hälst Du davon, wenn Du jetzt mal versuchst, Deine Fragen selber zu beantworten? Z.B. für die einzelnen Befehle ein Beispiel zu finden? Wir schauen dann, ob das so stimmt. Glaube mir, so lernst Du das am schnellsten ;-)
     
    Walter gefällt das.
  6. Laura123

    Laura123 Neuer Benutzer

    Ich habe mich schon informiert, allerdings verstehe ich nicht die Bedeutungen. Vielleicht könntet ihr mir das verständlicher erklären.


    Using= In Kürze, verwenden Sie ON für die meisten Dinge, aber USING ist eine praktische Kurzschrift für die Situation, wo die Spaltennamen die gleichen sind.

    in = Mit dem IN-Operator können Sie mehrere Werte in einer WHERE-Klausel angeben.Der IN-Operator ist eine Kurzschrift für mehrere OR-Bedingungen.

    Union = Der UNION-Operator wird verwendet, um die Ergebnismenge von zwei oder mehr SELECT-Anweisungen zu kombinieren.Jede SELECT-Anweisung innerhalb der UNION muss die gleiche Anzahl von Spalten habenDie Spalten müssen auch ähnliche Datentypen haben. Die Spalten in jeder SELECT-Anweisung müssen auch in der gleichen Reihenfolge sein.

    Any = Wenn mehr als eine Ergebniszeile in einem Subselect vorhanden sein können, muss statt dem Gleichheitszeichen eine andere Operation wie IN, ALL, ANY oder EXISTS verwendet werden.
    Die ANY- und ALL-Operatoren werden mit einer WHERE- oder HAVING-Klausel verwendet.
     
  7. akretschmer

    akretschmer Datenbank-Guru

    using:
    Code:
    test=*# create table master(id int primary key);
    CREATE TABLE
    test=*# create table detail (id int references master);
    CREATE TABLE
    test=*# select * from master left join detail on master.id=detail.id;
     id | id
    ----+----
    (0 Zeilen)
    test=*# select * from master left join detail using (id);
     id
    ----
    (0 Zeilen)
    
    test=*#
    
    in:
    Code:
    test=*# select * from master where id = 1 or id = 2 or id = 3;
     id
    ----
    (0 Zeilen)
    
    test=*# select * from master where id in (1,2,3);
     id
    ----
    (0 Zeilen)
    
    union:
    Code:
    test=*# create table demo1 as select s, random() from generate_series(1,5) s;
    SELECT 5
    test=*# create table demo2 as select r, random() from generate_series(10,15) r;
    SELECT 6
    test=*# select * from demo1 union all select * from demo2;
     s  |  random   
    ----+-------------------
      1 |  0.50024684984237
      2 | 0.334895689506084
      3 | 0.588207213208079
      4 | 0.359569872263819
      5 |  0.1039301995188
     10 | 0.191629528999329
     11 |  0.42248508753255
     12 | 0.471251492388546
     13 | 0.662427303381264
     14 | 0.188919430132955
     15 | 0.436593872494996
    (11 Zeilen)
    
    test=*#
    

    für any fällt mir grad kein sonderlich sinnvolles Beispiel ein...
    Code:
    test=*# create table artikel (id int primary key, name text);
    CREATE TABLE
    test=*# create table bestellungen (id int , artikel int references artikel);
    CREATE TABLE
    test=*# insert into artikel select s, 'artikel ' || s::text from generate_series(1, 100) s;
    INSERT 0 100
    test=*# insert into bestellungen (id, artikel) select x, (random()*99)::int+1 from generate_series(1, 20) x;
    INSERT 0 20
    test=*# select * from artikel where id = any (select artikel from bestellungen );
     id |  name   
    ----+------------
     18 | artikel 18
     31 | artikel 31
     33 | artikel 33
     34 | artikel 34
     36 | artikel 36
     41 | artikel 41
     42 | artikel 42
     44 | artikel 44
     56 | artikel 56
     58 | artikel 58
     59 | artikel 59
     64 | artikel 64
     65 | artikel 65
     69 | artikel 69
     77 | artikel 77
     79 | artikel 79
     83 | artikel 83
     84 | artikel 84
    (18 Zeilen)
    
    test=*#
    
    spiel doch einfach selber mal mit solchen Abfragen, das tut nicht weh...
     
    Walter gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden