Kleines Nachschlagewerk Informatik
Einfache SQL-Abfragen
Worum geht es?
Das Abfragen von Daten ist, wie man sehen wird, eine Kunst. Um die Formulierung dieser Abfragen geht es im Folgenden.
Struktur
SQL-Anfragen haben immer eine Struktur und diese ist stark an die natürliche Sprache angelehnt. Man kann ihre Struktur so verallgemeinern:

      GIB Tabellenspalten VON Tabellen WOBEI etwas gilt
            
Der letzte Teil muss nicht unbedingt angegeben werden. Lässt man ihn weg, bekommt man alle Daten. Sind in einer Tabelle namens Mitarbeiter Vorname, Nachname und Gehalt gespeichert - Mitarbeiter( ID , Vorname, Nachname, Gehalt) - , liefert

      SELECT Vorname, Nachname FROM Mitarbeiter
            
alle Vornamen. Spannender wird es jedoch, wenn man die Suche eingrenzt und z.B. nur die Personen haben will, die Müller heißen.

      SELECT Vorname, Nachname FROM Mitarbeiter WHERE Nachname='Müller'
            
Alles! (*)
Möchte man nicht einzelne Spalten auswählen, kann man mit dem Stern (*) alles auswählen.

      SELECT * FROM Mitarbeiter
            
ALL hat die gleiche Bedeutung wie *.
Vergleiche
Möchte man spezielle Datensätze auswählen, kann man mit WHERE Bedingungen angeben. Im einfachsten Fall sind dies Vergleiche. Wie man alle Müllers erhält, wurde schon gezeigt. Numerische Werte lassen sich ebenso vergleichen. So kann man alle Mitarbeiter erhalten, die weniger als 3000 Euro verdienen:

      SELECT Vorname, Nachname, Gehalt FROM Mitarbeiter WHERE Gehalt < 3000
            
Weiterhin gibt es noch die Relationszeichen >, =, >=, <= und <> (ungleich).
Verknüpfungen (and, or, not)
Vergleiche lassen sich - analog zu Programmiersprachen - logisch verknüpfen. Es gibt wieder eine UND-, eine ODER-Verknüpfung und eine Negation: and, or, not.

Möchte man prüfen, ob es im Clan der Müllers jemanden gibt, der mehr als 5000 Euro verdient, kann man schreiben:

      SELECT Vorname, Nachname, Gehalt FROM Mitarbeiter
          WHERE Gehalt > 5000 and Nachname = 'Müller'
            
Bereiche (between)
Möchte man eine Bereich abfragen, schreibt man (z.B. wenn man alle Personen, die zwischen 2000 und 3000 Euro verdienen, haben möchte):

      SELECT Vorname, Nachname, Gehalt FROM Mitarbeiter
          WHERE Gehalt >= 2000 and Gehalt <= 3000
            
Mit dem between-Operator ist eine alternative Variante, die sich wohl eher an Nichtprogrammierer wendet, möglich:

      SELECT Vorname, Nachname, Gehalt FROM Mitarbeiter
          WHERE Gehalt between 2000 and 3000
            
Platzhalter (like)
Nicht immer sind die genauen Schreibweisen bekannt. Hier hilft der like-Operator in Verbindung mit einem Platzhalterzeichen. Der Unterstrich steht für ein, das Prozentzeichen für mehrere Buchstaben. Möchte man alle Personen haben, deren Vorname Erik oder Eric ist, schreibt man:

      SELECT Vorname, Nachname FROM Mitarbeiter
          WHERE Vorname like 'Eri_'
            
Dagegen liefert

      SELECT Vorname, Nachname FROM Mitarbeiter
          WHERE Vorname like 'Eri%'
            
auch Erich.
Mehrfache Tests (in)
Bisher wurden einzelne Werte (z.B. Namen) abgefragt. Man kann aber auch nach allen Personen, die Müller oder Schulze heißen, fragen:

      SELECT Vorname, Nachname FROM Mitarbeiter WHERE Nachname in ('Schulze', 'Müller')
            
Nicht initialisiert (is)
In Datenbanken (im Gegensatz zu den meisten Programmiersprachen) gibt es den Wert "Nicht initialisiert": NULL. Man erfragt ihn mit is. Möchte man alle Personen, deren Gehalt nicht angegeben wurde, schreibt man:

      SELECT Vorname, Nchname FROM Mitarbeiter WHERE Gehalt is NULL
            
Berechnete Spalten
Das Ergebnis einer Anfrage kann auch Spalten enthalten, die nicht in der Tabelle vorkommen, also erst berechnet werden. Unterstützt werden die vier Grundrechenarten: +, *, -, und /.

Möchte man den Stundenlohn ausgeben, hat aber nur Gehalt und Wochenarbeitszeit gespeichert, dann kann man dies folgendermaßen angeben:

      SELECT Nachname, Vorname, Gehalt / (4 * Wochenstunden) FROM Mitarbeiter
            
Dopplungen vermeiden
In der Ergebnisspalte können auch Daten mehrfach auftreten. Hat man beispielsweise in einer Tabelle die Gewinner der Skatwettbewerbe der letzten Jahre, wird eine Namensabfrage, sofern ein Spieler mehrfach das Turnier gewonnen hat, viele gleichartige Ergebnisse bringen.

Die Angabe von distinct vermeidet dies:

      SELECT distinct Nachname, Vorname FROM Skatturnier