Daten aus einer Tabelle einer Datenbank abzufragen, ist eine Read-only-Operation, d. h. der aktuell gespeicherte Datenbestand wird dabei
nicht verändert. Der SQL-Befehl für eine Datenbankabfrage lautet SELECT. Mit Hilfe von
SELECT kann der Inhalt einer oder mehrerer Tabellen ausgegeben werden.
Ein SELECT-Befehl besteht aus den in untenstehender Tabelle "Elemente eines SELECT-Befehls" dargestellten,
teilweise optionalen Elementen. Das in folgender Abbildung dargestellte Beispiel enthält einen einfachen SQL-Befehl (auch:
SQL-Statement) zur Abfrage aller Länder und ihrer Hauptstädte aus der Beispieldatenbank
Country.
| Ergebnis (Auszug) | |
|---|---|
| Name | Capital |
| Australia | Canberra |
| Bolivia | La Paz |
| Brazil | Brasilia |
| Canada | Ottawa |
| ... | ... |
Ein gültiges SELECT-Statement besteht mindestens aus den Elementen SELECT
und FROM. Alle anderen Elemente sind optional. Das Ende eines
SELECT-Statements wird durch ein Semikolon ";" markiert. Das Ergebnis von
SELECT ist eine virtuelle Tabelle, die alle Datensätze der Ergebnismenge enthält. Welche Spalten
in der Ergebnistabelle enthalten sind, wird im SELECT-Statement definiert. Die Ergebnistabelle kann zum
Beispiel bei verschachtelten SELECT-Statements wie eine Datenbanktabelle weiterverwendet werden, sie wird
jedoch nicht in der Datenbank gespeichert.
| Elemente eines SELECT-Befehls | |
|---|---|
| Elemente von SELECT | Beschreibung |
SELECT liste der spalten |
Namen der Spalten, die ausgegeben werden sollen; mit * werden alle Spalten der angefragten Tabelle ausgegeben; die Reihenfolge der Spalten entspricht der Reihenfolge der Spalten der angefragten Tabelle |
FROM tabelle |
Name der Tabelle, in der gesucht wird; später werden auch Anfrage an mehrere Tabellen gestellt |
optional:WHERE auswahlbedingung |
Bedingungen, die erfüllt sein müssen, damit ein Datensatz bei der Ermittlung der Antwort berücksichtigt wird; schränkt die Ergebnismenge ein |
optional:GROUP BY liste von spalten |
Fasst Elemente des Ergebnisses in Gruppen zusammen, für die gezielte Einschränkungen oder Berechnungen erfolgen können |
optional, falls eingesetzt immer zusammen mitGROUP BY: |
Bedingungen, die von Elementen einer Gruppe erfüllt sein müssen |
optional:ORDER BY liste von spalten |
Sortierkriterium, nach denen das Ergebnis dieser Abfrage sortiert wird |
Das Statement SELECT erwartet als Parameter eine Liste von Spalten, die im Ergebnis angezeigt werden
sollen. Sollen alle Spalten ausgegeben werden, so wird das mit dem Zeichen * formulierten. Folgendes Statement gibt den gesamten Inhalt
der Tabelle Country. aus:
SELECT * FROM Country;
| Ergebnis (Auszug) | |||||||
|---|---|---|---|---|---|---|---|
| Name | Code | Capital | Province | Area | Population | Continent | Percentage |
| Australia | AUS | Canberra | Australia Capital Territory | 7686850 | 18260863 | Australia/Oceania | 100 |
| Bolivia | BOL | La Paz | Bolivia | 1098580 | 7165257 | America | 100 |
| Brazil | BR | Brasilia | Distrito Federal | 8511960 | 162661214 | America | 100 |
| Canada | CDN | Ottawa | Ontario | 9976140 | 28820671 | America | 100 |
| ... | ... | ... | ... | ... | ... | ... | ... |
Häufig kommt es vor, dass in der Ergebnismenge einer Datenbankanfrage Datensätze mehrfach vorkommen. Ein typisches Beispiel ist das
mehrfache Vorkommen von Orten oder Postleitzahlen in einem Kundendatenbestand. Falls nur die Menge der Orte relevant ist, aus denen die
Kunden stammen, stören doppelte Vorkommen. Insbesondere dann, wenn die Anzahl von eindeutigen Ergebnisdatensätzen benötigt
wird, beispielsweise die Anzahl der Orte im Kundenbestand. Identische Datensätze im Ergebnis einer SQL-Anfrage können mit
DISTINCT zusammengefasst werden. Identisch bedeutet, dass alle Attribute eines Datensatzes identisch
sind. Folgendes Beispiel gibt alle in der Liste der Länder vertretene Kontinente aus.
SQL-StatementSELECT DISTINCT Continent FROM Country;
| Ergebnis |
|---|
| Continent |
| Australia/Oceania |
| America |
| Asia |
| Europe |
| Africa |
Ohne DISTINCT würde für jeden Datensatz in der Tabelle das Attribut Continent ausgegeben.
Mit DISTINCT werden alle mehrfach vorkommenden Kontinente auf einen Datensatz reduziert.