Mit dem SQL Grundkurs werden Ihnen die Basics der Datenbanksprache SQL vermittelt. Dieser ist für alle Labordatenbankbenutzer gedacht, die noch nie mit SQL gearbeitet haben und die Grundlagen der Sprache schnell und einfach lernen möchten.
Inhaltsverzeichnis:
1. Einführung: Was ist SQL?
2. Befehl SELECT
3. Befehl DISTINCT
4. Befehl WHERE
5. AND & OR Operatoren
6. IN Operator
7. BETWEEN Befehl
8. Befehl LIKE
9. Befehl ORDER BY
10. Befehl GROUP BY
11. Befehl HAVING
12. Befehl JOIN
13. Weiterführender Link
1. Einführung: Was ist SQL?
SQL (
Structured
Query
Language) ist eine Datenbanksprache, mit der in Datenbanken Strukturen erstellt bzw. die dort vorhandenen Daten bearbeitet und abgefragt werden können. So können mit bestimmten Befehlen alle Daten in der Labordatenbank abgerufen und dem Nutzer bereitgestellt werden.
SQL basiert auf der relationalen Algebra und ist die Standardsprache, wenn es um Datenbanken geht. Viele SQL Befehle stammen aus der englischen Sprache und sind daher einfach zu erlernen.
2. Befehl SELECT
Der SQL Befehl
SELECT
bildet die Basis für viele SQL Abfragen einer Datenbank. Damit ist es möglich Daten aus einer oder auch mehreren Tabellen (s.
JOIN) abzufragen. Es wird definiert, welche Spalten einer bestimmten Tabelle nach Ausführung der Abfrage dargestellt werden sollen.
Die Syntax ist folgendermaßen aufgebaut:
SELECT
Spaltenname1, Spaltenname2, Spaltenname+n
FROM
Tabellenname
Als Beispiel wird die Tabelle
samples aus der Labordatenbank verwendet:
Um sich in der Labordatenbank aus der Tabelle
samples die Spalten
name und
description (rot markiert) ausgeben zu lassen, wird folgender Befehl verwendet:
SELECT
name AS Probe,
description AS Bezeichnung
FROM samples
LIMIT 5
! In der Zeile vor dem FROM
wird am Ende kein Komma mehr gesetzt !
Hier wird nun zusätzlich noch der SQL Befehl
LIMIT
benutzt, um in den Beispiel die Ergebnistabelle auf fünf Zeilen einzugrenzen.
So kann generell die Anzahl der Zeilen für die Ausgabe der Tabelle limitiert werden. Des Weiteren werden die Spaltenbezeichnungen mit dem SQL Befehl
AS
umbenannt. Dieser Befehl kann optional verwendet werden.
Ausgabe der Labordatenbank Auswertung:
3. Befehl DISTINCT
Der SQL Befehl
DISTINCT
wird benutzt, um Redundanzen, also mehrfach auftretende Werte, zu eliminieren, damit diese in der Tabelle nur einmal angezeigt werden.
Mit
DISTINCT
wird die zu prüfende Spalte definiert. Der Befehl wird bei einer SQL Abfrage direkt hinter
SELECT
gesetzt.
Die Syntax ist folgendermaßen aufgebaut:
SELECT DISTINCT
Spaltenname
FROM
Tabellenname
Um sich in der Labordatenbank aus der Tabelle
samples die Spalte
description redundanzfrei ausgeben zu lassen, wird folgender Befehl verwendet:
SELECT DISTINCT description
FROM samples
LIMIT 5
So wird aus der Tabelle
samples:
mit dem zusätzlichen SQL Befehl
DISTINCT
folgendes Ergebnis angezeigt:
Die doppelt auftretende Zeile mit Testprobe 4 wird nun in der ausgewählten Spalte
description nur noch einmal angezeigt. Da in der Labordatenbank Proben-, Auftrags- und Kundennummern nicht doppelt vergeben werden, wird bei einer SQL Abfrage in der Auswertung dieser Befehl nicht so häufig verwendet werden.
4. Befehl WHERE
Der SQL Befehl
WHERE
wird verwendet, wenn bei einer SQL Abfrage nur bestimmte Datensätze aus einer Datenbank dargestellt werden sollen. Die
WHERE
Bedingung funktioniert wie ein Filter, so dass nur Ergebnisse, die bestimmte Kriterien erfüllen, ausgegeben werden.
Die Syntax ist folgendermaßen aufgebaut:
SELECT
Spaltenname
FROM
Tabellenname
WHERE
Spaltenname = Wert
Mit
WHERE
wird definiert, welche Bedingung erfüllt werden soll, um ein bestimmtes Ergebnis zu erhalten.
Folgende Vergleichsoperatoren können verwendet werden:
- gleich (=), ungleich (<>, !=)
- größer als (>), kleiner als (<)
- größer oder gleich (>=) und kleiner oder gleich(<=)
Um sich in der Labordatenbank aus der Tabelle
samples die Spalten
name (Bedingung: nur Proben mit einer Probennummer > 210034) und
description ausgeben zu lassen, wird folgender Befehl verwendet:
SELECT
name AS Probe,
description AS Bezeichnung
FROM samples
WHERE name > 210034
LIMIT 5
Ausgabe der Labordatenbank Auswertung:
In der Labordatenbank ist eine gängige
WHERE
Bedingung:
WHERE visible_to != 'deleted'
Diese Bedingung ist wichtig, wenn gelöschte Proben ausgeblendet werden sollen.
Um eine gesamte Auswertung nach Zeiträumen zu filtern, kann folgende
WHERE
Bedingung benutzt werden:
WHERE date BETWEEN _FROMDATE_ AND _TILLDATE_
Der Filter wird dann in der Labordatenbank über der Auswertung angezeigt:
5. AND & OR Operatoren
Um mehrere
WHERE
Bedingungen zu verwenden, bzw. um Abfrageergebnisse weiter einzugrenzen, müssen die SQL Operatoren
AND
&
OR
eingebaut werden. Dabei wird mit dem Operator
AND
SQL Bedingungen zusammengefügt und mit dem SQL Operator
OR
zwischen zwei oder mehreren SQL Bedingungen unterschieden.
Die Syntax mit
WHERE
und
AND
ist folgendermaßen aufgebaut:
SELECT
Spaltenname
FROM
Tabellenname
WHERE
Spaltenname1 = Wert1
AND
Spaltenname2 = Wert2
Die Syntax mit
WHERE
und
OR
ist folgendermaßen aufgebaut:
SELECT
Spaltenname
FROM
Tabellenname
WHERE
Spaltenname1 = Wert1
OR
Spaltenname2 = Wert2
! Bei einer SQL Abfrage hat AND
Vorrang gegenüber OR
!
Um sich in der Labordatenbank aus der Tabelle
samples die Spalten
name (Bedingung: nur Proben mit einer Probennummer > 210033 und < 210037) und
description ausgeben zu lassen, wird folgender Befehl verwendet:
SELECT
name AS Probe,
description AS Bezeichnung
FROM samples
WHERE name > 210033
AND name < 210037
Ausgabe der Labordatenbank Auswertung:
Um sich in der Labordatenbank aus der Tabelle
samples die Spalten
name (Bedingung: nur Proben mit einer Probennummer < 210034 oder > 210036) und
description ausgeben zu lassen, wird folgender Befehl verwendet:
SELECT
name AS Probe,
description AS Bezeichnung
FROM samples
WHERE name < 210034
OR name > 210036
Ausgabe der Labordatenbank Auswertung:
6. IN Operator
Der SQL Operator
IN
wird mit einer
WHERE
Bedingung verwendet, um mehrere Abfrageergebnisse in einem SQL Befehl zusammenzufügen. So wird verhindert, dass z.B. mehrere
OR
Operatoren bei einer SQL Abfrage eingebaut werden müssen.
Mit der Kombination aus dem SQL Operator
IN
und
NOT
können ebenfalls Ergebnismengen ausgeschlossen werden.
Die Syntax mit
WHERE
und
IN
ist folgendermaßen aufgebaut:
SELECT
Spaltenname
FROM
Tabellenname
WHERE
Spaltenname
IN
('Wert1', 'Wert2')
Um sich in der Labordatenbank aus der Tabelle
samples die Spalten
name (Bedingung: nur Proben mit der Nummer 210034 und 210036) und
description ausgeben zu lassen, wird folgender Befehl verwendet:
SELECT
name AS Probe,
description AS Bezeichnung
FROM samples
WHERE name
IN ('210034', '210036')
Ausgabe der Labordatenbank Auswertung:
7. BETWEEN Befehl
Der SQL Befehl
BETWEEN
wird mit einer
WHERE
Bedingung verwendet, um in einen bestimmten Bereich Ergebnisse abzufragen.
Der SQL Befehl
BETWEEN
wird oft benutzt, um z.B. Abfrageergebnisse in einem bestimmten Datumsbereich anzeigen zu lassen.
Die Syntax mit
WHERE
und
BETWEEN
ist folgendermaßen aufgebaut:
SELECT
Spaltenname
FROM
Tabellenname
WHERE
Spaltenname
BETWEEN
'DATUM1'
AND
'DATUM2'
Um sich in der Labordatenbank aus der Tabelle
samples die Spalten
name und
description für einen gewünschten Zeitraum zu filtern, wird folgender Befehl verwendet:
SELECT
name AS Probe,
description AS Bezeichnung
FROM samples
WHERE date
BETWEEN _FROMDATE_ AND _TILLDATE_
Der Filter wird über der Auswertung angezeigt.
Ausgabe der Labordatenbank Auswertung:
Da das Datum in der Labordatenbank als Unixzeit gespeichert ist, wird der ausgewählte Zeitraum als Unixtimestamp in _FROMDATE_ und _TILLDATE_ eingesetzt.
Um sich in der Labordatenbank aus der Tabelle
samples die Spalte
date im Datumsformat TT.MM.YY mit dem Spaltenname
Eingang ausgeben zu lassen, muss die SQL Funktion
FROM_UNIXTIME
verwendet werden:
SELECT
name AS Probe,
description AS Bezeichnung,
FROM_UNIXTIME(date, '%d.%m.%Y') as Eingang
FROM samples
Ausgabe der Labordatenbank Auswertung:
! Um das Datum aus DDF Feldern zu formatieren wird folgender Befehl benutzt: DATE_FORMAT(DDF_DATUM, '%d.%m.%y') !
8. Befehl LIKE
Der SQL Befehl
LIKE
wird mit einer
WHERE
Bedingung verwendet, um Ergebnisse auf Grundlage eines definierten Musters abzufragen. Der Befehl
LIKE
differenziert sich damit von dem Operator
IN
(fester Suchbegriff) und dem SQL Befehl
BETWEEN
(Bereichssuche).
Der SQL Befehl
LIKE
wird oft in Texten verwendet, um mit regulären Mustern nach Ergebnissen zu suchen.
Die Syntax mit
WHERE
und
LIKE
ist folgendermaßen aufgebaut:
SELECT
Spaltenname
FROM
Tabellenname
WHERE
Spaltenname
LIKE
'Muster'
Das ‚MUSTER‘ kann dabei folgende Strukturen enthalten:
- 'A_Z': Alle Zeichenketten, die mit ‚A‘ beginnen, ein Folgezeichen enthalten und mit ‚Z‘ enden.
- 'ABC%': Alle Zeichenketten, die mit ‚ABC‘ beginnen.
- '%XYZ': Alle Zeichenketten, die auf ‚XYZ‘ enden.
- '%AB%': Alle Zeichenketten, die an irgendeiner Stelle das Muster ‚AB‘ enthalten.
Um sich z.B. in der Labordatenbank aus der Tabelle
samples die Spalten
name und
description ausgeben zu lassen, bei denen die Bezeichnung mit "T" beginnt, 9 Folgezeichen enthält und auf "1" endet, wird folgender Befehl verwendet:
SELECT
name AS Probe,
description AS Bezeichnung
FROM samples
WHERE description
LIKE 'T_________1'
Ausgabe der Labordatenbank Auswertung:
9. Befehl ORDER BY
Der SQL Befehl
ORDER BY
wird verwendet, um Ergebnisse nach einer definierten Reihenfolge zu sortieren.
Die Syntax mit
ORDER BY
ist folgendermaßen aufgebaut:
SELECT
Spaltenname
FROM
Tabellenname
ORDER BY
Spaltenname Sortierungsparameter
Der Sortierungsparameter kann dabei folgende Strukturen enthalten:
- ASC: die Spalte wird aufsteigend sortiert (ASC vom engl. ascending = aufsteigend)
- DESC: die Spalte wird absteigend sortiert (DESC vom engl. descending = absteigend)
Um sich z.B. in der Labordatenbank aus der Tabelle
samples die Spalten
name und
description ausgeben zu lassen und dabei die Spalte
description absteigend zu sortieren, wird folgender Befehl verwendet:
SELECT
name AS Probe,
description AS Bezeichnung
FROM samples
ORDER BY description DESC
Ausgabe der Labordatenbank Auswertung:
10. Befehl GROUP BY
Der SQL Befehl
GROUP BY
wird verwendet, um Ergebnisse zu gruppieren. Der Befehl legt fest, welche Datenmenge gruppiert werden soll, dabei können mehrere Spalten gruppiert werden.
GROUP BY
kann auch mit einer
WHERE
Bedingung benutzt werden.
Die Syntax mit
GROUP BY
ist folgendermaßen aufgebaut:
SELECT
Spaltenname
FROM
Tabellenname [
WHERE
Bedingung]
GROUP BY
Spaltenname
Der SQL Befehl
GROUP BY
wird häufig in Verbindung mit einer Aggregatfunktion verwendet.
Zu den Aggregatfunktionen gehören folgende Befehle:
- AVG (vom engl. average = Durchschnitt): nimmt den Durchschnitt von numerischen Werten
- COUNT (vom engl. count = zählen): Zählung der Datensätze von Texten, numerischen Werten oder Datumswerten
- MAX (vom engl. maximum = Maximum): nimmt den höchsten Wert von Texten, numerischen Werten oder Datumswerten
- MIN (vom engl. minimum = Minimum): nimmt den kleinsten Wert von Texten, numerischen Werten oder Datumswerten
- SUM (vom engl. sum = Summe): summiert die Einträge von numerischen Werten
Die Syntax mit
GROUP BY
in Kombination mit einer Aggregatfunktion ist folgendermaßen aufgebaut:
SELECT
Spaltenname,
COUNT
(Spaltenname)
FROM
Tabellenname
GROUP BY
Spaltenname
! Vor dem COUNT
steht ein Komma und dahinter kommt kein Leerzeichen zur Klammer !
Um sich in der Labordatenbank aus der Tabelle
samples die Anzahl der Proben pro Tag ausgeben zu lassen, wird mit folgendem Befehl das Datum gruppiert und die Anzahl der Proben mit diesem Datum gezählt:
SELECT
FROM_UNIXTIME(date, '%d.%m.%Y') AS Eingang,
COUNT(date) AS 'Anzahl Proben'
FROM samples
GROUP BY date
! Die Schreibweise für das Datum wurde unter BETWEEN erläutert !
Ausgabe der Labordatenbank Auswertung:
11. Befehl HAVING
Mithilfe des SQL Befehls
HAVING
wird eine gruppierte Ergebnismenge eingeschränkt.
HAVING
stellt die
WHERE
Bedingung in einem
GROUP BY
Befehl dar. Eine
WHERE
Bedingung kann nicht mit Aggregatfunktionen kombiniert werden, daher wird bei
GROUP BY
der Befehl
HAVING
verwendet.
Die Syntax des Befehls
HAVING
in Kombination mit
GROUP BY
und einer Beispiel Aggregatfunktion ist folgendermaßen aufgebaut:
SELECT
Spaltenname,
COUNT
(Spaltenname)
FROM
Tabellenname
GROUP BY
Spaltenname
HAVING
Ausdruck
! HAVING
steht immer hinter GROUP BY
. Eine ggf. benutzte WHERE
Bedingung in der SQL Abfrage muss vor dem GROUP BY
stehen !
Um sich in der Labordatenbank aus der Tabelle
samples die Anzahl der Proben pro Tag (Bedingung: nur Tage mit > 3 Proben) ausgeben zu lassen, wird mit folgendem Befehl das Datum gruppiert und die Anzahl der Proben mit diesem Datum gezählt:
SELECT
FROM_UNIXTIME(date, '%d.%m.%Y') AS Eingang,
COUNT(date) AS 'Anzahl Proben'
FROM samples
GROUP BY date
HAVING COUNT(date) >3
Ausgabe der Labordatenbank Auswertung:
12. Befehl JOIN
Der SQL Befehl
JOIN
wird verwendet, um Informationen aus verschiedenen Tabellen bei einer SQL Abfrage zu erhalten. Mithilfe von
JOIN
können Tabellen verknüpft werden, die über gemeinsame Datensätze in Beziehung miteinander stehen. Die Verknüpfung der zu vergleichenden Spalten aus den gewünschten Tabellen erfolgt über eine
ON
Bedingung und die Definition der
JOIN
Art.
Es gibt sechs verschiedene
JOIN
Typen:
- Cross-Join
- Inner Join
- Natural Join
- Left Join
- Right Join
- Full Outer Join
Für Auswertungen in der Labordatenbank sind die
JOIN
Arten Inner und Left relevant.
Um die Ergebnismenge einzugrenzen, kann auch hier eine
WHERE
Bedingung verwendet werden.
INNER JOIN
und
LEFT JOIN
:
Bei einer "normalen"
JOIN = INNER JOIN
SQL Abfrage werden nur Ergebnisse angezeigt, die in beiden Tabellen vorkommen.
Mit einem
LEFT JOIN
werden alle Ergebnisse der
FROM
Tabelle angezeigt und die dazugehörigen, sofern vorhanden, Ergebnisse der gejointen Tabelle.
(Bsp. siehe Anleitung:
SQL JOINs)
Die Labordatenbank basiert auf folgender Datenstruktur bzw. Tabellenverknüpfung:
Eine detaillierte Verknüpfung der Spalten der verschiedenen Tabellen in der Labordatenbank für die Bereiche Kunde-Auftrag-Probe-Ergebnis-Parameter-Spezifikation stellt folgende Abbildung dar:
Die Syntax mit
JOIN
ist folgendermaßen aufgebaut:
SELECT
Tabellenname1.Spaltenname, Tabellenname2.Spaltenname...
FROM
Tabellenname1
JOIN
Tabellenname2
ON
Tabellenname1.SpaltennameVerknüpfung = Tabellenname2.id
! In der Labordatenbank sind alle Tabellen in der Mehrzahl (Tabs), die Spaltenbezeichnungen meist in der Einzahl (Tab). Dies erleichtert die Unterscheidung zwischen Tabellenbezeichnung und Spaltenbezeichnung !
Wenn z.B. die Tabelle
orders mit der Tabelle
samples verknüpft werden soll, kann in der Abbildung
Verknüpfung der Tabellen in der LDB geschaut werden, über welche Spalten die beiden Tabellen miteinander verbunden sind. In dem Bild sind die Spalten, die verknüpft werden können, farblich gleich markiert. D.h. die Spalte
id bei der Tabelle
orders (= orders.id) kann mit der Spalte
order_id bei
samples (= samples.order_id), hier beide grün markiert, über ein
JOIN
Befehl verknüpft werden.
Um sich in der Labordatenbank aus der Tabelle
samples die Spalte
name und
description und aus der Tabelle
orders die zugehörige Spalte
name ausgeben zu lassen, wird folgender Befehl verwendet:
SELECT
samples.name AS Probe,
samples.description AS Bezeichnung,
orders.name AS Auftrag
FROM samples
JOIN orders ON samples.order_id = orders.id
LIMIT 5
Ausgabe der Labordatenbank Auswertung:
! Bei Verwendung vom Befehl JOIN
bzw. bei einer Abfrage aus verschiedenen Tabellen muss bei SELECT
Spaltenname immer der Tabellenname mit angegeben werden: Tabellenname.Spaltenname !
13. Weiterführender Link
Weitere SQL-Befehle und auch Hilfestellungen finden Sie unter folgendem Link:
MySQL Funktionen und Operatoren