SQL Datenbankabfragen – SQL
SQL ist eine Datenbankabfragesprache, mit der Daten aus einer Datenbank ausgelesen bzw abgefragt werden können. SQL ist der relationalen Algebra sehr ähnlich. Es gibt einige typische Befehle die immer wieder auftauchen. Ich gebe hier eine grobe Übersicht über die gängigen SQL Abfrageoperatoren.
Mengenoperationen
Es gibt folgende Mengenoperatoren, die relativ üblich in der SQL Abfragesprache sind.
- UNION (Vereinigung)
- EXCEPT oder MINUS für Differenz
- INTERSECT für die Schnittmenge
Falls das Schlüsselwort „ALL“ nicht gegeben ist, werden Duplicate herausgefiltert.
Beispiel für UNION
(SELECT Vorname, Titel FROM aerzte) UNION (SELECT Name,Vorname FROM patienten)
Der „LIKE“ Operator
Neben dem LIKE Operator gibt es natürlich auch das Gegenteil, den „NOT LIKE“ Operator. Den Ausdruck kann man folgender maßen aufbauen:
SELECT Name, Vorname FROM Patienten WHERE Name LIKE "m%"
Gibt nun alle Patienten aus, die den Nachnamen mit „m“ beginnend sind.
% steht für beliebig viele Buchstaben vor oder nach dem Ausdruck & _ steht für genau einen Buchstaben.
Der „IN“ Operator
Mit dem „IN“ Operator kann man prüfen, ob ein Wert in einer Menge enthalten ist. Beispiel:
SELECT * FROM Petienten WHERE Name IN ("Müller", "Meier", "Schmidt")
Der „BETWEEN“ Operator
Der „BETWEEN“ Operator filtert Ergebnisse außerhalb eines bestimmten Wertebereiches aus.
SELECT * FROM Petienten WHERE Datum BETWEEN "2014-12-01" AND "2014-11-01"
Der „CASE“ Operator
Der „CASE“ Operator ist ähnlich einer IF-Abfrage und erstellt eine neue Spalte mit dem Ergebnis der Bedingung.
SELECT Name, Vorname, CASE WHEN EXISTS (SELECT * FROM termine as T WHERE T.PatNr = P.PatNr AND Datum = "2014-04-01") THEN "Ja" ELSE "Nein" END FROM Patienten as P
Die Aggregatfunktionen
Aggregatfunktionen können nicht in der WHERE Klausel stehen. Aggregatfunktionen müssen immer hinter dem SELECT stehen, in der Attributliste. Ausnahme ist GROUP BY, welches ans Ende angehangen wird.
- MAX() -> Gibt das Maximum aus
- MIN() -> Minimum
- SUM() -> Summe der Werte
- AVG() -> Durchschnitt der Werte
- Beliebteste Funktion: COUNT
- GROUP BY -> Gruppiert Tupel
Auswertungsreihenfolge von SQL Statements
Select PLZ, Ort, count(*) AS Zahl FROM Patienten WHERE geschlecht = "m" GROUP BY plz HAVING zahl>1 ORDER BY plz DESC LIMIT 3
- FROM: 1 Große Relation aus allen Kreuzprodukten & Verbünden
WHERE: Selektiert einzelne Tupel nach Spalteninhalt
SELECT: Liefert Spalten und erstellt eventuell neue Spalten durch „COUNT()“ etc - GROUP BY: Gruppiert die Ergebnisse
- HAVING: Sortiert die Ergebnisse die der Bedingung nicht entsprechen aus
- SELECT: Schmeißt alle Spalten weg, die nicht gefordert sind
- ORDER BY: Alles wir durch sortiert
LIMIT: Es werden nur eine bestimmte Anzahl an Ergebnisse ausgegeben
Geschachtelte SQL Anfragen
SELECT Name, Vorname FROM Patienten WHERE PatNr IN ( SELECT PatNr FROM Termine WHERE Datum="2014-04-01" )
Abfragen können somit beliebig tief geschachtelt werden. Diese Abfrage würde alle Patienten ausgeben, die am 1.4.2014 einen Termin in der Arztpraxis haben.