Erste Seite Zurück Weiter Letzte Seite Übersicht Grafik
SELECT Spaltenliste FROM Tabelle
Groß/Kleinschreibung egal (zumeist)
Strukturierung des Textes egal
Einrückung nützlich
lt. ISO Semikolon am Ende der Anweisung
Reihenfolge der Felder im Abfrageergebnis
SELECT Feld3, Feld1, Feld7 FROM Tabelle;
SELECT Feld [AS] AndererName
FROM Tabelle [AS] AndererTabellenName;
MS: [Namen von Feldern] in eckige Klammern einschließen bei Sonderzeichen,
ISO: “Feld mit Sonderzeichen“ unter Anführungszeichen
Notizen:
Wenden wir uns den einzelnen Teilen des Statements zu:
SELECT <Spaltenliste> FROM Tabelle;
Spaltenliste:
<Spaltenausdruck> [, <Spaltenausdruck>]...
Spaltenausdruck:
Aufgrund der Komplexität soll hier auf die BNF-Darstellung verzichtet werden, sondern eine Beschreibung an ihre Stelle treten: Ein Spaltenausdruck ist ein Ausdruck, der es der Datenbank erlaubt, eine Spalte im Ergebnis darzustellen. Im einfachsten Fall ein Spaltenname einer Tabelle. Aber auch arithmetische Ausdrücke, die mehrere Spalten verknüpfen oder Ausdrücke, die Daten geradezu erzeugen sind hier möglich.
Grundsätzlich ist die Groß/Kleinschreibung dabei sowohl bei den reservierten Wörtern (SELECT, FROM etc.) als auch bei den vorkommenden Namen egal, das ist aber nicht immer: so ist in der Unix z.B: PostgreSQL: Tabellen- und Spaltennamen case-sensitiv)
Auch die Strukturierung des Textes ist grundsätzlich egal: Leerzeichen („Blanks“), Tabulatoren, Zeilenschaltungen und Blockkommentare (/* .... */) haben dieselbe Bedeutung: sie können als Trennung zwischen zwei Elementen („Delimiter“) benützt werden. Das hat zu Folge, dass die Formatierung der Statements völlig beliebig sein kann: Sie können einen 300kB-Text auch auf eine einzige Zeile schreiben, wenn Sie das möchten. Allerdings ist der Nachteil evident: Man wird sich äußerst schwer tun, ein so formatiertes Programm zu lesen. Eine Systematik bei Zeilenumbrüchen und Einrückungen anzuwenden ist also äußerst hilfreich: Die Codelesbarkeit kann dadurch dramatisch verbessert werden (bzw. verschlechtert, wenn man das unterlässt) Das hier Gesagte gilt übrigens heutzutage für beinahe alle Programmiersprachen. COBOLs Zeiten, wo sogar bestimmte Zeilenpositionen eine bestimmte Bedeutung zu kam, sind (endgültig? - hoffentlich) vorbei.
Der ISO-Standard verlangt zu guter Letzt noch ein Semikolon („;“) am Ende der Anweisung, allerdings wird das von su gut wie keinem RDBMS verlangt (Ausnahme: OCELOT). Der Autor bemüht sich, dieses Semikolon trotzdem zu kodieren: Je näher man sich mit seinen Programmen an in Standardnähe aufhält, desto leichter tut man sich im Falle einer Portierung (Verbringung des Codes von einem RDBMS auf ein anderes, also z.B: MS SQL Server => Oracle)
Das Statement legt durch die Spaltenliste die Reihenfolge der Felder im Abfrageergebnis fest:
SELECT Feld3, Feld1, Feld7 FROM Tabelle;
Dabei ist es auch möglich, Spalten für die Ausgabe „umzubenennen“ („Spaltenalias“):
SELECT Feld AS AndererName FROM Tabelle;
[Feldnamen] in eckige Klammern einzuschließen bei Sonderzeichen, Leerzeichen, Bindestrichen,... ist eine MS-Erfindung, der ISO-Standard benützt (nur dafür, nicht für Strings!) doppelte Anführungszeichen:
MS-SQL: select [angemeldet am], [Kunden-Nr] FROM ...
PostgreSQL select "angemeldet am", "Kunden-Nr" FROM ...
Achtung bei vermeintlichen Bindestrichen im Feldnamen:
SELECT Kunden-Nummer FROM Tabelle wird als arithmetischer Ausdruck („Kunden minus Nummer“) ausgewertet und führt höchstwahrscheinlich zu einem Fehler! Hier müsste man Anführungszeichen benützen.
Als spezielle Formulierung sei noch der * in der Spaltenliste erwähnt: Er bedeutet, dass alle Spalten projiziert werden sollen, egal wie sie heißen.
SELECT * FROM Tabelle
holt also alle Spalten der Tabelle, weil da ein Stern steht. Der Befehl holt auch alle Zeilen, aber aus einem anderen Grund: Eine Bedingung, die Zeilen ausfiltern würde (WHERE-Klausel), wurde nicht formuliert.
Tipp: In Produktionscode hat select * nichts verloren: Führen Sie dort immer alle Spalten explizit auf. Das provoziert frühzeitig Fehler, wenn strukturelle Änderungen vorliegen, und das ist genau das Verhalten, das man in einem hochqualitativen System braucht!