Die SELECT-Anweisung ist fundamental für jedes Auswählen von Daten und stellt diese in Form einer virtuellen Tabelle
zur Verfügung. Diese virtuelle Tabelle, auch Recordset genannt, also eine Menge (= Set) von Records (= Datenzeilen, Datensätzen),
existiert zunächst nur temporär im Arbeitsspeicher und wird nach dem Ende der Befehlsausführung verworfen.
Wird SELECT ohne weitere Ergänzungen verwendet, so werden die Daten angezeigt. Die Ausgabe kann auch mit SELECT ... INTO ... FROM in
eine neue Tabelle kopiert oder mit INSERT INTO ... SELECT ... zu einer bestehenden Tabelle hinzugefügt werden.
Syntax
SELECT [DISTINCT]
<Name einer Spalte>
<Konstante>
<Berechnung>
<einer der obigen Ausdrücke> As Spaltenalias
[, weitere der obigen Ausdrücke]
FROM <Ausdruck, der eine Tabelle zurückgibt> As Tabellenalias
[WHERE ...]
[GROUP BY ...]
[HAVING ...]
[UNION [ALL]]
[Weitere SELECT-Anweisung, welche dieselbe Zahl von
Spalten und Datentypen liefert]
[ORDER BY [Order-By-Ausdruck] ASC | DESC]]
[, weitere Sortierungen]
Dies ist die grundlegende Syntax des SELECT-Befehls. Details zu den Ausdrücken nach FROM, WHERE,
GROUP BY und HAVING finden Sie in den Abschnitten über JOIN, WHERE und GROUP BY. Die hiesigen Beispiele behandeln nur
den Abschnitt zwischen SELECT und FROM.
SELECT <Name einer Spalte - wie oben >
INTO <neue Tabelle>
FROM <Ausdruck, der eine Tabelle zurückgibt> As Tabellenalias
Beispiele
SELECT A_NR,
A_NAME,
A_PREIS
FROM ARTIKEL
Einfache, kommagetrennte Auflistung der gewünschten Spalten, die im Tabellen-Ausdruck vorkommen. Ohne
Alias für die Tabelle.
SELECT A.A_NR,
A.A_NAME,
A.A_PREIS
FROM ARTIKEL As A
ORDER BY A.A_PREIS
Dasselbe wie im ersten Beispiel, aber mit Aliasname A für die Tabelle und aufsteigender Sortierung nach
der Spalte A_PREIS.
SELECT A_NR,
A_PREIS As Netto,
0.19 As MwSt,
A_PREIS * 1.19 As Brutto
FROM ARTIKEL
ORDER BY A_PREIS DESC
Hier werden Alias-Ausdrücke für die Spalten verwendet - das Ergebnis kennt die drei Spalten
Netto, MwSt und Brutto. MwSt ist ein konstanter Wert, in der Spalte Brutto wird der Inhalt
von A_PREIS multipliziert mit einer Konstanten. Da ein
solches Ergebnis keinen Spaltennamen hat, sollte dieser anschließend festgelegt werden. Das Ergebnis
wird nach A_PREIS absteigend sortiert.
SELECT A.* FROM ARTIKEL As A
ORDER BY A.A_NAME ASC,
A.A_PREIS DESC
Hier wird für die Tabelle ein Alias A verwendet und mit * sämtliche Spalten ausgewählt. Das Ergebnis
wird aufsteigend nach den Artikel-Namen, absteigend nach den Artikel-Preisen sortiert.
SELECT DISTINCT A.A_NAME
FROM ARTIKEL As A
Das Schlüsselwort DISTINCT entfernt alle mehrfach vorkommenden Zeilen mit Ausnahme einer. Diese Abfrage
liefert deshalb nicht vier Zeilen mit doppeltem 'Oberhemd', sondern nur drei Zeilen zurück, eine Zelle
mit dem Wert 'Oberhemd' wurde entfernt.
SELECT A.A_NAME
FROM ARTIKEL As A
UNION
SELECT B.V_NAME
FROM VERTRETER As B
Diese inhaltlich merkwürdige Abfrage liefert alle Artikel- und alle Vertreter-Namen in einer
einzigen Liste aus. Da ALL fehlt, werden sechs Zeilen ausgegeben, das doppelte 'Oberhemd' wird nur
einfach in das Resultset übernommen. Beachten Sie, daß die Datentypen übereinstimmen müssen und daß
jede einzelne SELECT-Abfrage dieselbe Zahl von Spalten zurückliefern muß. Die Spaltennamen müssen
allerdings nicht übereinstimmen, bei den SELECT-Anweisungen ab der zweiten Abfrage kann auf ALIAS-Namen
verzichtet werden.
SELECT V.*
INTO [Kopie-von-Vertreter]
FROM VERTRETER As V
Dies transferiert die virtuelle Tabelle in ein reales neues Tabellenobjekt. Zunächst wird die neue Tabelle 'Kopie-von-Vertreter'
erstellt und anschließend mit den Zeilen gefüllt, die von der SELECT-Anweisung zurückgegeben wurden. Ergänzt man diese
Abfrage um eine WHERE-Klausel 0 = 1, so werden keine Zeilen kopiert, es wird jedoch eine neue leere Tabelle erstellt.
Bemerkungen
Machen Sie es dem Sql-Parser möglichst einfach. Verwenden Sie Alias-Namen für Tabellen,
dann können die Spalten rascher identifiziert werden, es muß nicht erst ermittelt werden, von welcher
Tabelle diese Spalte stammt.
Wenn der Spalten-, Alias- oder Tabellenname Sonderzeichen, etwa ein Leerzeichen oder Minus (-) enthält, so
schließen Sie den Ausdruck in eckige Klammern ein. Beispiel:
Select A.A_PREIS * 1.19 As [Aktueller Bruttopreis]
FROM ARTIKEL As A
Soll ein konstanter Text angegeben werden, so setzen Sie diesen in einfache Hochkommata. Beispiel
SELECT A.A_NAME, 'aktuell' As Info
FROM ARTIKEL As A
Dies liefert zwei Spalten, die erste Spalte heißt 'A_NAME', die zweite 'Info'. Das Ergebnis enthält
vier Zeilen, in der ersten Spalte stehen die Werte aus der Tabelle, die zweite Spalte enthält viermal
den Text 'aktuell'.
Benötigen Sie eine zusätzliche Zahl, etwa beim Vereinigen zweier Tabellen mit UNION, so können
Sie diese einfach notieren:
SELECT A.A_NAME, 1 As [Index]
FROM ARTIKEL As A
UNION
SELECT B.V_NAME, 2
FROM VERTRETER As B
Eine solche Technik kann nützlich sein, wenn mit
UNION die Ausgaben mehrerer SELECT-Anweisungen zusammengefügt werden und eine Information benötigt wird, aus welchem
SELECT-Abschnitt die einzelne Zeile stammt.
Hinter FROM folgt ein Ausdruck, der eine Tabelle zurückgibt. Dies kann, wie in den obigen Beispielen,
eine einfache Tabelle sein, das Ergebnis einer JOIN-Verknüpfung oder einer Unterabfrage. Ferner lassen es
manche Datenbanksysteme zu, daß der FROM-Abschnitt fehlt. In diesem Fall wird genau eine Zeile ausgegeben.
Beim Sortieren auf dem MS-SQLServer kann der Aliasname in der ORDER-BY-Klausel angegeben werden.
Access dagegen versteht diesen Namen nicht, so daß bei der Sortierung nach dem Ergebnis einer Rechenoperation
diese erneut notiert werden muß.
Verwendet man die Technik 'SELECT ... INTO ... FROM ...', um eine neue Tabelle zu erzeugen und enthält die
ursprüngliche Tabelle eine automatisch hochzählende ID (Identity(1,1)), so wird dieser spezielle Spaltentyp auch in der
Zieltabelle erzeugt. Soll dies vermieden werden, kann zur Identitätsspalte 0 hinzugefügt und der Spaltenname als Alias
notiert werden:
SELECT U.Umsatz_Nr + 0 As [Umsatz_Nr], U.A_Nr
Into [Umsatz-Kopie]
FROM UMSATZ As U
Nun wird die Spalte Umsatz_Nr der neuen Tabelle als Integer definiert.
Link zur hiesigen Seite als QR-Code
Kontaktformular:
Schreiben Sie mir und wir bauen gemeinsam Ihre neue Web-Datenbank!
Mit dem Klick auf den Button stimmen Sie zu, daß Cookies in Ihrem Browser gespeichert werden. Informationen zu den gespeicherten Cookies finden Sie unter Datenschutz#Cookies.Bei Fragen zur Technik wenden Sie sich bitte an Server-Daten - Web-Datenbank-Lösungen