Buchgenerator (deaktivieren)

Einführung in SQL: Ausführliche SELECT-Struktur

Aus Wikibooks

Wechseln zu: Navigation, Suche


Dieses Kapitel erläutert die vollständige Syntax des SELECT-Befehls. Anstelle von Beispielen gibt es Verweise auf diejenigen Kapitel, die die betreffenden Klauseln genauer behandeln.

In diesem Kapitel benutze ich vorzugsweise die englischen Begriffe aus der SQL-Dokumentation.

Bitte beachten Sie: Der SELECT-Befehl bietet so umfangreiche Möglichkeiten, dass ich auch bei dieser Übersicht nicht alle Einzelheiten vorstellen kann.

Inhaltsverzeichnis

[Bearbeiten] Allgemeine Syntax

Der SELECT-Befehl wird als <query specification> oder <select expression>, also Abfrage-Ausdruck bezeichnet und setzt sich grundsätzlich aus diesen Bestandteilen zusammen:

 SELECT 
   [ DISTINCT | ALL ] 
     <select list>
     FROM <table reference list>
   [ <where clause> ]
   [ <group by clause> ]
   [ <having clause> ]
   [ UNION [ALL] <query specification> ]
   [ <order by clause> ]

Diese Bestandteile setzen sich je nach Situation aus weiteren einfachen oder komplexen Bestandteilen zusammen und werden in den folgenden Abschnitten erläutert.

Unbedingt erforderlich sind:

  • das Schlüsselwort SELECT
  • eine Liste von Spalten
  • das Schlüsselwort FROM mit einem oder mehreren Verweisen auf Tabellen

Alle anderen Bestandteile sind optional, können also auch weggelassen werden. Wenn sie benutzt werden, müssen sie in genau dieser Reihenfolge verwendet werden.


[Bearbeiten] Set Quantifier – Mengenquantifizierer

Als Mengenquantifizierer stehen DISTINCT und ALL zur Verfügung.

Außerdem ist es sehr oft möglich (wenn auch nicht im SQL-Standard vorgeschrieben), das Ergebnis auf eine bestimmte Anzahl von Zeilen zu beschränken, z.B. FIRST 3 oder LIMIT 7.

Erläuterungen dazu finden sich im Kapitel Nützliche Erweiterungen.


[Bearbeiten] Select List – Auswahlliste

Die Liste der Spalten, die ausgewählt werden sollen, wird angegeben durch den Asterisk oder mit einer <column list>.

[Bearbeiten] Asterisk *

Der Asterisk, d.h. das Sternchen *, ist eine Kurzfassung für die Liste aller Spalten (Felder) einer einzelnen Tabelle.

 *

Wenn mehrere Tabellen verknüpft werden, ist der Asterisk zusammen mit dem Namen oder dem Alias einer Tabelle anzugeben.

 <Tabellenname>.*   /* oder */
 <Tabellen-Alias>.*

Erläuterungen dazu finden sich in allen Kapiteln, die sich mit Abfragen befassen.


[Bearbeiten] Column List

Die <Spaltenliste> ist eine Liste von einem oder mehreren Elementen, die in der SQL-Dokumentation als <select sublist> bezeichnet werden:

 <select sublist> [ , <select sublist> , <select sublist> , ... ]

Jedes einzelne Element ist eine Spalte einer Tabelle oder eine abgeleitete Spalte <derived column> – siehe den nächsten Abschnitt. Jedem Element kann ein Spalten-Alias zugewiesen, das Wort AS kann dabei auch weggelassen werden:

 <element> [ [AS] <column name> ]

Bei Spalten aus Tabellen wird einfach deren Name angegeben. Wenn mehrere Tabellen verknüpft werden und ein Spaltenname nicht eindeutig ist, ist der Spaltenname zusammen mit dem Namen oder dem Alias einer Tabelle anzugeben.

 <spaltenname>                   /* oder */
 <Tabellenname>.<spaltenname>    /* oder */
 <Tabellen-Alias>.<spaltenname>

Hinweis: In manchen DBMS darf der Tabellenname nicht mehr benutzt werden, wenn ein Tabellen-Alias angegeben ist.

Erläuterungen dazu finden sich in allen Kapiteln, die sich mit Abfragen befassen.

[Bearbeiten] Derived Column

Eine abgeleitete Spalte bezeichnet den Wert, der von einem <value expression> zurückgeliefert wird. Das kann ein beliebiger Ausdruck sein, der genau einen Wert als Ergebnis hat: vor allem eine Funktion oder eine passende Unterabfrage.

Erläuterungen dazu finden sich vor allem in Berechnete Spalten und Unterabfragen.


[Bearbeiten] Table Reference List – Tabellen-Verweise

Als Bestandteil der FROM-Klausel werden die beteiligten Tabellen und Verweise darauf aufgeführt:

 FROM <reference list>     /* nämlich */
 FROM <reference1> [ , <reference2> , <reference3> ... ]

In der <Tabellenliste> stehen eine oder (mit Komma getrennt) mehrere Verweise (Referenzen); diese können direkt aus der Datenbank übernommen oder auf verschiedene Arten abgeleitet werden.

Jede dieser Varianten kann erweitert werden:

 <reference> [ [ AS ] <Alias-Name>
               [ ( <derived column list> ) ] ]

Mit AS kann ein Alias-Name dem Verweis hinzugefügt werden; das Schlüsselwort AS kann auch entfallen. Diesem Tabellen-Alias kann (je nach DBMS) in Klammern eine Liste von Spaltennamen hinzugefügt werden, die anstelle der eigentlichen Spaltennamen angezeigt werden sollen.

Die folgenden Varianten sind als Verweise möglich.


[Bearbeiten] Tabellen, Views

In erster Linie stehen die Tabellen der Datenbank sowie die Views (fest definierte Sichten) zur Verfügung.

Erläuterungen dazu finden sich in allen Kapiteln, die sich mit Abfragen befassen, sowie in Erstellen von Views.

[Bearbeiten] Derived Table – Abgeleitete Tabellen

Vor allem können Unterabfragen wie eine Tabelle benutzt werden.

Hinweis: Es gibt noch eine Reihe weiterer Varianten, mit denen aus vorhandenen Tabellen andere Tabellen "vorübergehend" abgeleitet werden können. Da diese je nach DBMS unterschiedlich benutzt werden, würde es zu weit führen (und die Übersicht zu kompliziert machen); ich verzichte deshalb auf eine vollständige Übersicht.

Erläuterungen dazu finden sich im Kapitel Unterabfragen.

[Bearbeiten] Joined Table – Verknüpfte Tabelle

Wie eine Tabelle kann auch eine Verknüpfung verwendet werden. Dabei handelt es sich um eine Teilmenge des kartesischen Produkts zweier Tabellen, die nach bestimmten Bedingungen verbunden werden.

Erläuterungen dazu finden sich im Kapitel Mehrere Tabellen.


[Bearbeiten] Where Clause – WHERE-Klausel

Mit der WHERE-Klausel wird eine Suchbedingung festgelegt, welche Zeilen der Ergebnistabelle zur Auswahl gehören sollen. Dieser Filter wird zuerst erstellt; erst anschließend werden Bedingungen wie GROUP BY und ORDER BY ausgewertet.

 WHERE <search condition>

Die Suchbedingung <search condition> ist eine Konstruktion mit einem eindeutigen Prüfergebnis: Entweder die Zeile gehört zur Auswahl, oder sie gehört nicht zur Auswahl. Es handelt sich also um eine logische Verknüpfung von einer oder mehreren booleschen Variablen.

Erläuterungen zu den folgenden Einzelheiten finden sich vor allem im Kapitel WHERE-Klausel im Detail sowie im Kapitel Unterabfragen.

[Bearbeiten] Eine einzelne Suchbedingung

Eine Suchbedingung hat eine der folgenden Formen, deren Ergebnis immer WAHR oder FALSCH (TRUE bzw. FALSE) lautet:

 <wert1> [ NOT ] <operator> <wert2>
 <wert1> [ NOT ] BETWEEN <wert2> AND <wert3>
 <wert1> [ NOT ] LIKE <wert2> [ ESCAPE <wert3> ]
 <wert1> [ NOT ] CONTAINING <wert2>
 <wert1> [ NOT ] STARTING [ WITH ] <wert2>
 <wert1> IS [ NOT ] NULL
 <wert1> [ NOT ] IN <werteliste>
 EXISTS <select expression>
 NOT <search condition>

Anstelle eines Wertes kann auch ein Wertausdruck <value expression> stehen, also eine Unterabfrage, die genau einen Wert als Ergebnis liefert.

Anstelle einer Werteliste kann auch ein Auswahl-Ausdruck <select expression> stehen, also eine Unterabfrage, die eine Liste mehrerer Werte als Ergebnis liefert.

Als <operator> sind folgende Vergleiche möglich, und zwar sowohl für Zahlen als auch für Zeichenketten und Datumsangaben:

 =  <  >  <=  >=  <>

[Bearbeiten] Mehrere Suchbedingungen

Mehrere Suchbedingungen können miteinander verbunden werden:

 NOT <search condition> 
 <search condition1> OR  <search condition2>
 <search condition1> AND <search condition2>

Bitte beachten Sie: NOT hat die stärkste Verbindung und wird zuerst ausgewertet. Danach hat AND eine stärkere Verbindung und wird als nächstes ausgewertet. Erst zum Schluss kommen die OR-Verbindungen. Um Unklarheiten zu vermeiden, wird dringend empfohlen, eine Suchbedingung in Klammern zu setzen, um Prioritäten deutlich zu machen.


[Bearbeiten] Group By Clause – GROUP BY-Klausel

Mit der GROUP BY-Klausel werden alle Zeilen, die in einer oder mehreren Spalten den gleichen Wert enthalten, in jeweils einer Gruppe zusammengefasst. Dies macht in der Regel nur dann Sinn, wenn in der Spaltenliste des SELECT-Befehls eine gruppenweise Auswertung, also eine der Spaltenfunktionen enthalten ist.

Die allgemeine Syntax lautet:

 GROUP BY <Spaltenliste>

Die Spaltenliste enthält, durch Komma getrennt, die Namen von einer oder mehreren Spalten. Bei jeder Spalte kann eine eigene Sortierung (siehe Datentypen) angegeben werden:

   <Spaltenname>
   -- oder
   <Spaltenname> COLLATE <Collation-Name>

Erläuterungen dazu finden sich vor allem im Kapitel Gruppierungen.


[Bearbeiten] Having Clause – HAVING-Klausel

Die HAVING-Klausel dient dazu, nicht alle ausgewählten Zeilen in die Ausgabe zu übernehmen, sondern nur diejenigen, die den zusätzlichen Bedingungen entsprechen. Sie wird in der Praxis überwiegend als Ergänzung zur GROUP BY-Klausel verwendet und folgt ggf. direkt danach.

 HAVING <bedingungsliste>

Erläuterungen dazu finden sich im Kapitel Gruppierungen.


[Bearbeiten] Union Clause – UNION-Klausel

Mit der UNION-Klausel werden mehrere eigentlich getrennte Abfragen zusammengefasst, um ein einheitliches Ergebnis zu liefern. Dabei sind die einzelnen Bedingungen zu komplex, um sie zusammenzufassen; oder sie können nicht sinnvoll verbunden werden. Es setzt eine weitgehend identische Spaltenliste voraus.

 SELECT <spaltenliste1> FROM <tabellenliste1> WHERE <bedingungsliste1>
 UNION
 SELECT <spaltenliste2> FROM <tabellenliste2> WHERE <bedingungsliste2>

Erläuterungen dazu finden sich im Kapitel Nützliche Erweiterungen.


[Bearbeiten] Order By Clause – ORDER BY-Klausel

Mit der ORDER BY-Klausel werden die Datensätze der Ergebnismenge in eine bestimmte Reihenfolge gebracht.

Erläuterungen dazu finden sich in allen Kapiteln, die sich mit Abfragen befassen.


[Bearbeiten] Zusammenfassung

In diesem Kapitel erhielten Sie einen vollständigen Überblick über die Syntax des SELECT-Befehls:

  • Die Listen der gewünschten Spalten und der beteiligten Tabellen sind Pflichtangaben, alle anderen Klauseln sind optional.
  • Für die Verknüpfung mehrerer Tabellen gibt es einen (traditionellen) einfachen Weg und den (modernen) Weg über JOIN.
  • Die WHERE-Klausel ermöglicht komplexe Bedingungen darüber, welche Datensätze abgefragt werden sollen.
  • Mit Gruppierung, Sortierung und Zusammenfassung gibt es weitere Möglichkeiten für Abfragen.


[Bearbeiten] Übungen


Persönliche Werkzeuge