SQL Grundkurs


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




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 eleminieren, 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 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 der 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 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 Datumswerte
- MAX (vom engl. maximum = Maximum): nimmt den höchsten Wert von Texten, numerischen Werten oder Datumswerte
- MIN (vom engl. minimum = Minimum): nimmt kleinsten Wert von Texten, numerischen Werten oder Datumswerte
- 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 dem 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 !





Allgemeines

Einführungsphase

Mitarbeiter

Aufträge

Proben

Probenvorlage

Berichte

Berichtstabellen Editor

ADM

Kunden

Kundenzone (optional)

Anlagen

Angebote

Rechnungen

Parameter

Rechnen mit Parametern

Schnittstellen

Webservice

Prüfpläne / Grenzwerte / Spezifikationen

Dokumentenlenkung

Prüfmittel

Material

Mitarbeiterschulungen

8D-Report

Sonstiges

Fragen und Antworten

Lieferantenbewertung

Dateiverwaltung

Auswertungen