You are here

SELECT - Daten abfragen

-- english, deutsch, russian --

Syntax Beschreibung:

    Die SELECT-Anweisungen rufen Daten aus den Tabellen einer oder, in bestimmten Fällen, auch mehrerer Datenbanken ab. SELECT liefert eine Ergebnistabelle, die in diesem Befehl aus den Tabellen der gerade aktiven Datenbank erzeugt wird. Mit SELECT kann mann z.B: nur bestimmte Datensätze einer Tabelle auswählen oder Summen der Felder erzeugen, oder auch eine neue Ergebnistabelle aus mehreren Ausgangstabellen ertsellen.

DISTINCT

    DISTINCT teilt dem DBMS mit nur unterschiedliche Datensätze auszuwählen. Auswahl doppelter Datensätze wird somit vermieden.

    Beispiel:

SELECT DISTINCT vnum
 FROM torder;

Als Ergebnismenge werden hier alle unterschiedlichen Werte des Feldes vnum aus der Tabelle torder selektiert.

FROM { [OUTER] Tabellenname [ Alias ] } [,...]

    Mit FROM wird dem DBMS mitgeteilt aus welchen Tabellen der Datenbank die Datensätze selektiert werden.
    Das Schlüsselwort OUTER wird verwendet, wenn bei der Vernküpfung mehrerer Tabellen, die Daten der führenden Tabelle auch dann angezeigt werden sollen, wenn in den anderen Tabellen keine Daten da sind. Diese werden dann mit OUTER vor dem Tabellennamen gekennzeichnet, die Join-Bedingung bzw. die Tabellenverknüpfung wird bei dieser Syntax in der WHERE-Klausel beschrieben. Siehe weiteres unter der Beschreibung der einzelnen Join-Typen (left join, left outer join, right join, right outer join).

    Beispiel:

SELECT vnum
 FROM torder;

Als Ergebnismenge werden hier die Werte des Feldes vnum aus allen Datensätzen der Tabelle torder selektiert.

WHERE Bedingung

    Mit WHERE kann mann die Auswahl der Datensätze aus den angegebenen Tabellen einschränken.

    Beispiel:

SELECT tkunden.knum, tverkauf.vnum, tverkauf.prov
 FROM tkunden, tverkauf
 WHERE tkunden.vnum=tverkauf.vnum;

Als Ergebnismenge wird hier eine Tabelle aus den Feld knum der Ausgangstabelle tkunden und den Feldern vnum und prov der Ausgangstabelle tverkauf generiert, wo über die WHERE-Bedingung sichergestellt ist, da&szlig in den Datensätzen der Ergebnistabelle nur die zu den knum passenden vnum und prov stehen.

GROUP BY { Feldname | Integer } [,...]

    GROUP BY wird häufig im Zusammenhang mit den Aggregierungs-Funktionen benutzt um diese nur auf bestimmte Gruppen von Datensätzen wirken zu lassen. An Stelle des Feldnamens kann hier die Nummer des Feldes in der Liste der zu selektierenden Felder benutzt werden.

    Beispiel:

SELECT vnum, MAX(preis)
 FROM torder
 GROUP BY vnum;

Als Ergebnismenge werden hier die maximalen Werte des Feldes preis pro gefundene Datensatzgruppe mit gleicher vnum ausgewählt.

HAVING Bedingung

    HAVING wird innerhalb von GROUP benutzt um nur bestimmte Gruppen auszuwählen, die die nachgestellte Begingung erfüllen.

    Beispiel:

SELECT vnum, MAX(preis)
 FROM torder
 GROUP BY vnum
 HAVING AVG(preis)>10

Aus der Ergebnismenge der Gruppierung aller datensästze mit gleicher vnum, wo zu einem Schlüssel vnum alle preise aufsummiert werden, werden hier nur die herausgefiltert, wo der druchschnittliche Preis > 10 ist.

ORDER BY { Feldname | Integer [ ASC|DESC ] } [,...]

    ORDER BY sortiert die Datensätze der Ergebnismenge. Wenn ORDER BY innerhalb des GROUP BY Befehles benutzt wird, dann werden die Datensätze innerhalb der einzelnen Datensatzgruppen sortiert. An Stelle des Feldnamens kann hier die Nummer des Feldes in der Liste der zu selektierenden Felder benutzt werden. ASC sortiert die Datensätze in aufsteigender Reihenfolge, DESC in absteigender.

    Beispiel:

UNION [ALL] SELECT-Befehl

    UNION wird verwendet um zwei oder mehrere Abfragen (SELECT-Befehle) in eine Ergebnistabelle zusammenzuführen. Dabei müssen die Feldlisten der auszuwählenden Felder in den SELECT-Befehlen kompatibel sein. Wenn ALL nicht angegeben ist werden doppelte Datensätze aus dem Ergebniss entfernt. Mit UNION werden die Ergebnisse beider SELECT-Befehle in das Resultat aufgenommen.

    Beispiel:

SELECT vnum, vname
 FROM tverkauf
 WHERE stadt='Berlin'
 UNION
SELECT knum, kname
 FROM tkunden
 WHERE stadt='Berlin'
ORDER BY 1;

Hier wird eine Abfrage-Tabelle erzeugt, die alle v- und knum, sowie v- und kname entählt, wo stadt gleich Berlin ist und das Egrebnis nach der ersten Spalte sortiert ist. Doppelte Datensätze werden eliminiert.

INTERSECT [ALL] SELECT-Befehl

    ANSI DB2 Informix Oracle SQL Server Interbase
    nein ja ja ja ? ?

    INTERSECT wird verwendet um zwei oder mehrere Abfragen (SELECT-Befehle) in eine Ergebnistabelle zusammenzuführen. Dabei müssen die Feldlisten der auszuwählenden Felder in den SELECT-Befehlen kompatibel sein. Wenn ALL nicht angegeben ist werden doppelte Datensätze aus dem Ergebniss entfernt. Mit INTERSECT werden die Datensätze in das Ergebniss aufgenommen, die sowohl im ersten SELECT-Befehl, wie auch im zweitem SELECT-Befehl enthalten sind.

    Beispiel:

SELECT vnum, vname
 FROM tverkauf
 WHERE stadt='Berlin'
 INTERSECT
SELECT knum, kname
 FROM tkunden
 WHERE stadt='Berlin'
ORDER BY 1;

Hier wird eine Abfrage-Tabelle mit allen Verkäufern, die gleichzeitig auch Kunden sind, erzeugt. Das Egrebnis nach der ersten Spalte sortiert ist. Doppelte Datensätze werden eliminiert.

EXCEPT [ALL] SELECT-Befehl

    Wichtig: in einigen SQL-Dialekten wird anstatt EXCEPT - MINUS oder DIFFERENCE verwendet, die Syntax bleibt aber gleich.

    ANSI DB2 Informix Oracle SQL Server Interbase
    nein ja nein ? ? ?

    EXCEPT wird verwendet um zwei oder mehrere Abfragen (SELECT-Befehle) in eine Ergebnistabelle zusammenzuführen. Dabei müssen die Feldlisten der auszuwählenden Felder in den SELECT-Befehlen kompatibel sein. Wenn ALL nicht angegeben ist werden doppelte Datensätze aus dem Ergebnis entfernt. Mit EXCEPT werden die Datensätze in das Ergebniss aufgenommen, die im ersten SELECT-Befehl enthalten sind, aber nicht im zweitem SELECT-Befehl vorkommen.

    Beispiel:

SELECT vnum, vname
 FROM tverkauf
 WHERE stadt='Berlin'
 EXCEPT
SELECT knum, kname
 FROM tkunden
 WHERE stadt='Berlin'
ORDER BY 1;

Hier wird eine Abfrage-Tabelle mit allen Verkäufern, die nicht gleichzeitig auch Kunden sind, erzeugt. Das Egrebnis nach der ersten Spalte sortiert ist. Doppelte Datensätze werden eliminiert.

INTO TEMP Tabellenname

    ANSI DB2 Informix Oracle SQL Server Interbase
    nein ja ja ? nein nein

    INTO {TEMP|SCRATCH} wird verwendet um eine temporäre Tabelle zu erzeugen, die nach Beenden der SQL-Session gelöscht wird. Wird häfig zur optimierung von Abfragen verwendet.

Categories: