SELECT und FROM
Jede Abfrage besteht aus mindestens zwei Teilen: was du sehen willst und woher es kommt.
Die Projektion
Das Auswählen von Spalten heißt Projektion. Der Stern * steht für „alle Spalten".
Die Reihenfolge im SELECT bestimmt die Reihenfolge im Ergebnis – sie muss nicht der Reihenfolge in der Tabelle entsprechen.
a) Führe alle drei Anweisungen aus. Wie viele Zeilen liefert jede?
b) Schreibe eine Abfrage, die herkunftsland vor name ausgibt.
c) Warum liefern alle drei Anweisungen gleich viele Zeilen, obwohl die dritte nur eine Spalte hat?
In der Theorie der Relationen entfernt die Projektion doppelte Tupel – eine Relation ist ja eine Menge. SQL macht das nicht von selbst: SELECT herkunftsland FROM band liefert 22 Zeilen, obwohl es nur 8 verschiedene Länder gibt.
Der Grund ist praktischer Natur: Doppelte zu entfernen kostet Rechenzeit, und meistens braucht man sie nicht entfernt. Wer sie loswerden will, sagt es ausdrücklich – dazu kommen wir in der Lektion über Sortieren und Begrenzen.
Spalten benennen
Die Spaltenüberschrift im Ergebnis lässt sich ändern:
Ein solcher Ersatzname heißt Alias. Das Schlüsselwort AS darf man weglassen, aber mit AS liest es sich deutlich besser – gerade wenn viele Spalten aufgezählt werden. Schreibe AS.
Syntax und Semantik
Zwei Begriffe, die du sauber auseinanderhalten solltest:
Die Syntax einer Sprache legt fest, welche Zeichenfolgen überhaupt gültige Anweisungen sind. Ein Verstoß gegen die Syntax führt zu einer Fehlermeldung – die Anweisung läuft gar nicht erst.
Die Semantik legt fest, was eine gültige Anweisung bedeutet, also welches Ergebnis sie liefert.
Der Unterschied wird an einem Beispiel klar:
a) Die Abfrage oben enthält einen Tippfehler. Öffne den Reiter Fehler und lies die Meldung. Handelt es sich um einen Syntax- oder um einen Semantikfehler?
b) Repariere den Tippfehler.
c) Diese beiden Abfragen sind beide syntaktisch korrekt, liefern aber Verschiedenes:
SELECT name FROM band;
SELECT name FROM buehne;
Erkläre damit den Unterschied zwischen Syntax und Semantik in eigenen Worten.
Tipp: Woran erkennt man den Unterschied?
Frag dich: Kann der Rechner den Fehler allein durch Ansehen der Anweisung finden, ohne die Datenbank zu kennen? Wenn ja, ist es ein Syntaxfehler.