Die Zugriffssprache SQL

In den folgenden Kapiteln werde ich beliebte SQL Befehle vorstellen. Dafür bedienen wir uns an einer Beispieltabelle:

Die Tabelle heißt Mitarbeiter und enthält die Spalten ID, Name, Vorname, Wohnort, Abteilung und Gehalt.

Beispieltabelle namens Mitarbeiter

Relationale Datenbanken

Zuvor noch eine kleine Vorbemerkung. Es gibt verschiedene Datenbanktypen. Wir wollen uns auf Relationale Datenbanken konzentrieren. Doch was ist eine relationale Datenbank?

Relationale Datenbanken sind das am weitesten verbreitete Datenbankmodell. Sie werden für die Speicherung und Bearbeitung von Daten durch Computersysteme verwendet. Sie speichern Daten in verschiedenen Tabellen (bestehend aus Spalten und Zeilen), die untereinander in Beziehung stehen. Die Spalten der Tabelle werden auch als Attribute bezeichnet und die Zeilen als Tupel. Das den relationalen Datenbanken zugehörige Datenbankmanagementsystem nennt sich RDBMS mit „R“ für „Relational“. Um Daten in relationalen Datenbanken zu manipulieren oder Abfragen durchzuführen, kommt die Datenbanksprache SQL zum Einsatz.


Die verschiedenen Befehle in SQL – DML

Eine wichtige Eigenschaft der Zugriffssprache SQL ist die Abfrage von Daten. SQL fragt nicht wie wir die Daten finden, sondern ausschließlich, welche Daten wir suchen. Dies vereinfacht die Zugriffssprache erheblich und ist einer der Hauptgründe warum sich relationale Datenbanken und insbesondere SQL so schnell verbreitet haben. Für den Anwender hat das vor allem den Vorteil, dass er sich nicht mit komplexen technischen Anweisungen beschäftigen muss, sondern gleich mit einfachen Befehlen z. B. die Datenabfrage starten kann.

Das folgende Kapitel beschäftigt sich mit dem Datenzugriff auf existierende Datenbanken. Diese Befehle umfassten die Datenzugriffssprache DML.


Der Abfragebefehl SELECT

In SQL steht zur Suche und Abfrage von Daten einer Datenbank der Befehl SELECT zur Verfügung. Wollen wir unsere komplette Beispieltabelle ausgegeben bekommen schreiben wir:

Abfragebefehl SELECT *

Jeder Select Befehl enthält den Zusatz FROM und endet mit einem Semikolon. Mit FROM schreiben wir den Namen der Tabelle, die wir ausgeben wollen. Zwischen den Bezeichnern SELECT und FROM geben wir die Attribute (Spaltennamen) an, die wir anzeigen möchten. Das Sternsymbol ist eine Abkürzung und steht für alle Attribute.

Wollen wir nur den Namen und Wohnort aller Mitarbeiter ausgeben, lautet der Befehl:

Abfragebefehl SELECT Auswahl

Die Ausgabe ist folgende:

Tabellenausgabe für den SELECT Auswahl Befehl

Die Bezeichner der SQL Sprache (z.B. SELECT und FROM) dürfen nicht als Spalten- oder Tabellennamen in den Tabellen der Datenbank verwendet werden. Die Schreibweise der Spaltennamen ist jedoch beliebig. Sie können beliebig viele Leerzeichen oder Zeilenwechsel enthalten. Ebenfalls wird in SQL nicht zwischen Groß- und Kleinschreibung unterschieden. Somit könnte man den SELECT Befehl auch wie folgt eintippen:

Beispielsnotation SELECT

Zur Eingabe der Befehle werden benutzerfreundliche Schnittstellen der Datenbankhersteller angeboten, wie beispielsweise SQL Developer. Ich verwende PostgreSQL.

Die Spaltenauswahlliste ist eine Liste von Spaltenbezeichnungen, die durch Kommata voneinander getrennt werden. Hier sind nicht nur Spaltennamen erlaubt, sondern beliebige Ausdrücke. Wenn wir die Namen aller Mitarbeiter und deren Jahresgehalt abfragen wollen, so erhalten wir diese Angabe durch den Befehl:  

SELECT Befehl mit AS und Aggregatsfunktion

Ausgegeben wird nun eine Tabelle mit zwei Spalten, deren Spaltenbezeichnungen Name und Jahresgehalt lauten. Der Bezeichner AS steht für Aliasnamen (Ersatznamen) für die Spalten und Tabellen. In der Ergebnismenge der Abfrage wird das Gehalt nun in der Ausgabespalte als Jahresgehalt (großgeschrieben) bezeichnet. Der Spaltenname der eigentlichen Tabelle ändert sich jedoch dadurch nicht:

Tabellenausgabe

Mit Hilfe von Aggregatsfunktionen ist es möglich Berechnungen auszugeben. Wichtig dafür ist, dass sich die Aggregatsfunktionen auf alle Zeilen beziehen und als Ergebnis genau ein Wert erzeugt wird.

Folgende Aggregratsfunktionen gibt es in SQL

  • AVG (Average)                      Mittelwert ermittelt über alle Zeilen
  • COUNT (Count)                     Anzahl aller Zeilen
  • MAX (Maximum)                   Maximalwert aller Zeilen
  • MIN (Minimum)                     Minimalwert aller Zeilen
  • SUM (Sum)                             Summenwert, summiert über alle Zeilen

Beispiel:

SELECT Befehl mit COUNT(*)

Dieser Befehl zeigt die Anzahl der in der Tabelle gespeicherten Mitarbeiter an:

COUNT(*) Ausgabe

DISTINCT ist ebenfalls ein oft verwendeter Bezeichner. Geben wir DISTINCT mit an werden gleiche Ergebniszeilen nur einmal ausgegeben. Alle ausgegebenen Zeilen sind somit eindeutig. Mit der Angabe ALL werden alle erzeugten Ergebnisse einzeln ausgegeben. Diese Angabe ist standardmäßig eingestellt und kann daher weggelassen werden. Wollen wir nur die Wohnorte der Mitarbeiter ausgeben lassen schreiben wir:

SELECT Befehl mit ALL

Nun werden alle Orte ausgegeben. Wohnen nun zwei Mitarbeiter in dem gleichen Ort wird dieser zweimal ausgegeben. Mit

SELECT Befehl mit DISTINCT

wird nun jeder Ort nur einmal ausgegeben, auch wenn dieser zweimal in der entsprechenden Spalte genannt wird.


Die WHERE-Klausel

Die WHERE-Klausel ist in der Praxis in vielen SELECT Befehlen zu sehen. WHERE bestimmt, dass diejenigen Zeilen selektiert werden sollen, die die entsprechende Bedingung erfüllen. Alle anderen Tupel erscheinen nicht in der Ergebnisrelation. Wollen wir die Namen der Mitarbeiter ausgegeben haben, deren Gehalt größer als 3000 Euro ist, so schreiben wir:

SELECT Befehl mit WHERE

Die Bedingung in der WHERE Klausel ist ein boolescher Ausdruck, der je nach Zeile wahr oder falsch sein kann. Ebenfalls sind Operatoren in der WHERE Klausel zulässig.

Folgende Operatoren werden in SQL verwendet:

  • Boolsche Operatoren             NOT, AND, OR
  • Vergleichsoperatoren            <, <=, >, >=, =, <>
  • Intervalloperator                   [NOT] BETWEEN … AND
  • Enthaltenoperator                 [NOT] IN
  • Ähnlichkeitsoperator             [NOT] LIKE
  • Auswahloperatoren               ALL, ANY, SOME
  • Existenzoperator                   EXISTS
  • Nulloperator                          IS [NOT] NULL

Der Enthaltenoperator entnimmt zum Beispiel die gültigen Werte einer Menge. Sollen nur diejenigen Mitarbeiternamen ausgegeben werden, die genau 2500, 4000 oder 2700 Euro verdienen, sollte folgender Befehl verwendet werden:

SELECT Kommando mit WHERE Bedingung

Die GROUP BY-Klausel

GROUP BY ermöglicht das Zusammenfassen von Zeilen nach bestimmten Eigenschaften und hat eine Ähnlichkeit zum Bezeichner DISTINCT. Jedoch dürfen in der GROUP BY Klausel nur eine Aufzählung von Spaltennamen eingetragen werden. Komplexe Spaltenausdrücke sind nicht erlaubt. Ebenfalls müssen die Spaltennamen auch hinter SELECT aufgelistet sein, sonst ist eine Gruppierung nicht möglich. Wir können daher auch mit GROUP BY die Wohnorte aller Mitarbeiter auflisten, wobei jeder Wohnort nur einmal erscheint:

SELECT Kommando mit GROUP BY

Die ORDER BY-Klausel

Alle Relationen in relationalen Datenbanken sind ungeordnet. Die ORDER BY-Klausel sortiert den kompletten Select Befehl nach entsprechenden Angaben. SQL unterstützt aufsteigendes sowie auch absteigendes Sortieren. Die Sortierreihenfolge wird durch die Angabe der Bezeichner ASC (ascending, aufsteigend) und DESC (descending, absteigend) festgelegt. Bei fehlender Angabe wird immer eine aufsteigende Sortierung vorgenommen. Wollen wir zum Beispiel alle Wohnorte der Mitarbeiter sortiert ausgeben, wobei uns vor allem interessiert, in welchen Orten die meisten Mitarbeiter wohnen, so könnten wir schreiben:

SELECT Bedingung mit GROUP BY und ORDER BY

Zunächst wird absteigend nach der Anzahl sortiert:

Ausgabetabelle für Notation

Bei gleicher Anzahl werden die Wohnorte alphabetisch ausgegeben.


Mutationsbefehle in SQL

Der DELETE Befehl löscht alle Zeilen der angegebenen Relation, die die Bedingung in der WHERE-Klausel erfüllen. Scheidet etwa Frau Rinck aus der Firma aus, so wird der entsprechende Eintrag in der Mitarbeitertabelle durch den folgenden Befehl entfernt:

DELETE Bedingung

Der UPTDATE Befehl ändert bestehende Einträge. Nach dem Bezeichner SET werden die neuen Werte angegeben. Um etwa allen Mitarbeitern, die weniger als 3000 Euro verdienen, eine Gehaltserhöhung von 5 % zukommen zu lassen, genügt ein einziger Update Befehl:

UPDATE Befehl

Unsere neue Tabelle schaut nun wie folgt aus:

Ausgabetabelle

In SQL kann ich Zeilen durch den INSERT Befehl hinzufügen. Nachdem ich einen CREATE Befehl eingetippt habe erhalte ich eine leere Tabelle mit Spaltennamen, jedoch ohne Zeileninhalte. Möchte ich diese nun mit Werten befüllen, schreibe ich INSERT INTO wie folgt:

INSERT Befehl um Tabellenwerte einzupflegen

Wir haben nun sieben Zeilen mit entsprechenden Werten gefüllt. Die Reihenfolge der Angabe in der Spaltenliste und der Auswahlliste muss aufeinander abgestimmt sein. Durch einen UPDATE Befehl kann ich nachträglich einzelne Zeileninhalte (z. B. die Abteilung) hinzufügen oder ändern.

Tabellenausgabe mit INSERT Werten enthalten

Die Beschreibungssprache SQL – DDL

Die Datenbankbeschreibungssprache DDL gibt relativ viele Befehle zum Erzeugen, Ändern und Löschen von Tabellen und Sichten. Hierzu möchte ich im Folgenden die Befehle CREATE, ALTER und DROP vorstellen.

Der wichtige Befehl der Beschreibungssprache ist der Befehl CREATE TABLE. Mit diesem Befehl werden Tabellen angelegt. 

Möchte ich meine Tabelle (siehe Abbildung) erstellen arbeite ich mit folgender Syntax:

CREATE Table Befehl zum Anlegen einer Tabelle

Gebe ich nun meinen SELECT * Befehl ein, wird mir eine Tabelle mit leeren Zeilen (kein Inhalt) ausgegeben. Die Spalten sind durch den CREATE Befehl schon belegt:

Tabelle nach Erstellung ohne Zeileninhalten

Beim Erzeugen einer Tabelle ist es wichtig, für die einzelnen Spalten einen entsprechenden Datentypen zu übergeben. Folgende wichtige Datentypen sind in SQL vorhanden:

  • INTEGER (INT)            Ganzzahl
  • DECIMAL(x,y)             x stellige Zahl mit y Nachkommastellen
  • BIT(n)                          Bitleiste der festen Länge n
  • VARCHAR(n)              Variable Zeichenkette mit bis zu n Zeichen
  • NVARCHAR(n)           International, chinesische Zeichen ebenfalls mit ablegen
  • CHAR(n)                      n lange Zeichenlänge wird reserviert
  • DATE                           Datum (Jahr, Monat, Tag)
  • TIME                           Uhrzeit (Stunde, Minute, Sekunde)

Es gibt noch weitaus mehr Datentypen in SQL, jedoch habe ich mich hier auf eine Auswahl beschränkt.

Wichtig für die Integrität einer Datenbank sind Spalten- und Tabellenbedingungen. Jedes einzelne Attribut kann wahlweise durch eine oder mehrere Bedingungen eingeschränkt werden. Wir können mit diesen Bedingungen den Primärschlüssel (primary key) und alternative Schlüssel festlegen. Ebenfalls können wir festlegen, dass Attribute keine Nullwerte (not null) enthalten dürfen.

Tabellen ändern und löschen

Auch bei einem optimalen Design müssen wir damit rechnen, dass die Datenbankstruktur manchmal an Änderungen in der realen Umgebung angepasst werden muss. Für diese Aufgabe, meist handelt es sich um Erweiterungen, steht der SQL Befehl ALTER TABLE zur Verfügung.

ALTER Befehl mit ADD COLUMN

–> Die Spalte Führungskraft wird mit dem Datentypen VARCHAR(30) hinzugefügt und die Werte werden vorerst auf Null gesetzt

Nun möchte ich die Spalte wieder löschen, da ich die Führungskraft lieber in einer separaten Tabelle aufführen möchte. Dafür schreibe ich:

ALTER Befehlt mit DELETE COLUMN

Wir können mit einem ALTER TABLE Befehl entweder genau ein neues Attribut (Spalte) hinzufügen oder ein bestehendes Attribut entfernen oder eine weitere Tabellenbedingung einfügen oder eine existierende Tabellen- oder Spaltenbedingung löschen.

Mit dem DROP Befehl können wir entweder einzelne Spalten, oder die gesamte Tabelle löschen. Geben wir nun

DROP Befehl zum Löschen der Gesamten Tabelle

ein. Durch diesen Befehl haben wir die komplette Tabelle gelöscht. Tippen wir nun den SELECT * Befehl ein bekommen wir folgende Ausgabe:

Fehlermeldung nach DROP Befehl

Neben den vorgestellten Befehlen gibt es noch viele weitere SQL Befehle. Ziel dieses Abschnittes war es jedoch einen kleinen Einblick in die einfache Handhabung der SQL Statements zu geben, um ein grundlegendes Verständnis zur Theorie und zum Aufbau von SQL-Datenbanken zu vermitteln.


Quellen:

  • SQL-Seminarskript der SPE (Siemens Professional Education School)
  • Schicker, Edwin: Datenbanken und SQL, 5. Auflage
  • Pleyer, Adi: Vorlesungsunterlagen Modul Datenbanken aus dem 3. Semester

Erstelle eine Website wie diese mit WordPress.com
Jetzt starten