Datenbanken mit SQL bewirtschaften

Einblick in die strukturierte Abfragesprache SQL

Datensammlungen oder Datenbanken müssen gepflegt werden, wenn sie nicht an Wert verlieren sollen. Alte, ungültige oder falsche Daten bereiten keine Freude - sie stellen sogar ein Risiko dar. Eine Datenbank bringt nur dann einen hohen Nutzen, wenn mit Hilfe einer Abfragesprache auch Daten aus der Sammlung extrahiert oder aktualisiert werden können.

Die ursprüngliche Entwicklung von SQL hat - wie vieles in der Geschichte der Informatik - bei IBM begonnen. In den Jahren 197x haben einige eifrige Ingenieure bei IBM einen Dialekt entwickelt, mit dem Befehle an einen Datenbank-Server gesendet werden können um Daten herauszufiltern. Ein kurzer geschichlicher Rückblick auf die Datenbank-Geschichte:
  • 1970: E. F. Codd: Entwicklung eines ersten Modells von relationalen Datenbanken
  • 1974: Erste Beschreibung von IBMs SEQUEL («Structured English QUEry Language») als DBMS für relationale Datenbanken.
  • 1979: Oracle bringt das erste kommerzielle DBMS für relationale Datenbanken auf den Markt
  • 1981: IBM bringt SQL/DS auf den Markt (Eigentlich handelt es sich um «SEQUEL», da dieses Warenzeichen aber schon eingetragen war wurde der Name auf SQL geändert)
  • 1982: ANSI bildet ein SQL Standard Committee
  • 1986: ANSI SQL Standard veröffentlicht als SQL1 (heute bekannt unter dem Namen «SQL-86»)
  • 1987: ISO SQL Standard veröffentlicht
  • 1992: Microsoft bringt ODBC auf den Markt
  • 1992: ANSI SQL2 («SQL-92») Standard ratifiziert
  • 1993: Erste ODBC-Produkte mit SQL-Unterstützung auf dem Markt 

SQL kommt im Zusammenhang mit einem DBMS oder RDBMS zum Einsatz. DBMS steht für Datenbank-Management-System, RDBMS für Relationales DBMS.

Was ist SQL?
Das Kürzel SQL bedeutet «Structured Query Language» oder «Strukturierte Abfragesprache». SQL ist eine Teilsprache, das heisst sie kann nicht alleinstehend, sondern nur in Verbindung mit einer anderen Programmiersprache oder einem speziellen Datenbankprogramm verwendet werden.

Weiterhin ist SQL keine prozedurale Computersprache wie BASIC, C, PASCAL, MODULA usw. Mit einem SQL-Befehl wird nicht definiert wie der Computer die Aufgabe erfüllen soll sondern man definiert nur was man gerne tun möchte. Das Data Base Management System (DBMS) nimmt den Befehl entgegen und bestimmt dann die Art und Weise, wie die Aufgabe möglichst effizient erfüllt werden soll. Mit SQL kann man sowohl ad hoc Datenbankanfragen durchführen als auch Programme für immer wiederkehrende Routinen schreiben.

Ein einfacher SELECT-Befehl um alle Datensätze mit allen Feldern aus einer Tabelle ADRESSEN aufzulisten sieht wie folgt aus:
SELECT * FROM ADRESSEN
Damit diese Abfrage zu einem Ergebnis führt, muss eine Datenbank vorhanden sein, welche eine Tabelle mit dem Namen «Adresse» beinhaltet. Das Resultat jeder erfolgreichen Datenbank-Abfrage mit SQL ist eine neue temporäre Tabelle, ein sogenannter SQL-Cursor. Die Grundstruktur eines SQL-SELECT-Befehls beinhaltet immer die Quelle der zu selektierenden Daten (Tabellennamen), für die Quellenangabe wird das Schlüsselwort FROM verwendet.

SQL-Beispiele mit Microsoft Query
Für die folgenden Beispiele wird eine Tabelle mit Angaben zu amerikanischen Präsidenten als Beispiel verwendet. Die Abfragen werden im Programm Microsoft Query ausgeführt. Microsoft Query ist ein kleines und handliches Programm das mittels verschiedener Datenbank-Treiber (ODBC, Open DataBase Connectivity) zahlreiche Datenquellen ansprechen kann.

Beispiel einer Datenbank-Abfrage - unterstützt mit einem SQL-Assistenten in Microsoft Query.

Auch bei dieser Datenbank können alle Datensätze mit allen Datenfeldern über das folgende einfache SQL-Statement abgerufen werden:

SELECT * FROM PRESIDENT

Diese einfache Abfrage wird vom ODBC-Treiber (übernimmt die Rolle des DBMS) von Microsoft Query überprüft und automatisch in folgende komplexere bzw. genauere Abfrage übersetzt.

SELECT PRESIDENT.PRES_NAME, PRESIDENT.GEBDATUM, PRESIDENT.PRALTER, PRESIDENT.GEBSTAAT, PRESIDENT.DIENSTJAHRE, PRESIDENT.PARTEI FROM USAPRES98.PRESIDENT PRESIDENT

Jeder Feldname wird nach dem Schema TABELLE.FELDNAME um den Namen der Tabelle erweitert, dadurch kann ausgeschlossen werden, dass Konflikte mit gleichlautende Feldnamen aus anderen Tabellen entstehen. Nun soll eine SQL-Abfrage aufgebaut werden um aus der Tabelle nur die Demokraten herauszufiltern. Das bedeutet dass alle Datensätze angezeigt werden sollen die im Feld «Partei» den Eintrag «Democratic» haben.

SELECT PRESIDENT.PRES_NAME, PRESIDENT.GEBDATUM, PRESIDENT.PRALTER, PRESIDENT.GEBSTAAT, PRESIDENT.DIENSTJAHRE, PRESIDENT.PARTEI, PRESIDENT.PARTEI FROM USAPRES98.PRESIDENT PRESIDENT WHERE (PRESIDENT.PARTEI='Democratic')

Bei dieser Abfrage sind drei typische Schlüsselworte des SQL-Befehls sichtbar:
  • SELECT als Befehlswort, es handelt sich um eine Abfrage
  • FROM zur Angabe der Datenquelle bzw. der Tabelle(n)
  • WHERE zur Angabe der Auswahl-Kriterien

In Microsoft Query können alle komplexen Datenbank-Abfragen mittels Drag & Drop zusammengestellt werden. Den generierten SQL-Befehl kann der Benutzer über eine Option im Menü Ansicht einschalten und so die Sprache SQL Schritt für Schritt erlernen.

Der SELECT-Befehl ist der wichtigste Bestandteil der Sprache SQL, deshalb sind in diesem Glossar auch weitere Beispiele im Umgang mit SELECT dokumentiert. Die Beispiele wurden mit der Datenbank Oracle (Front-End «SQL Plus») geprüft.


Übersicht der SQL-Befehle
SQL ist eine sehr mächtige Sprache im Bereich der Datenbanken, das Verzeichnis der ANSI-SQL-Befehle kennt verschiedene Familien.
  • Die DDL (Data Defintion Language) beinhaltet Befehle zur Erstellung zum löschen oder modifizieren einer Datenbank.
  • Die DML oder Data Manipulation Language kann Datensätze hinzufügen, löschen, aktualisieren oder auswählen bzw. abfragen.
  • Die DCL (Data Control Language) beinhaltet Befehle zur Sicherheit (beispielsweise Zugriffsrechte oder Transaktions-Management) und Integrität der Datenbank.
Die wichtigsten Befehle aus den 3 SQL-Befehlsfamilien werden nachfolgende kurz aufgelistet:

DDL - Data Defintion Language
  • CREATE SCHEMA
  • CREATE DOMAIN
  • CREATE TABLE
  • CREATE VIEW
  • CREATE ASSERTION
  • CREATE CHARACTER SET
  • CREATE COLLATION
  • CREATE TRANSLATION

Anmerkung: Ein Befehl zur Index-Erstellung wie CREATE INDEX fehlt.

DML - Data Manipulation Language
  • INSERT: Hinzufügen von neuen Datensätzen
  • UPDATE: Aktualisieren von vorhandenen Daten (überschreiben)
  • DELETE: Löschen von bestehenden Datensätzen
  • DROP TABLE: Löschen von Tabellen
  • SELECT: Auswählen oder Abfragen von Datensätzen
DCL - Data Control Language
  • COMMIT: führt die Änderungen an einer Datenbank endgültig durch, führt zum Abschluss einer Transaktion
  • ROLLBACK: solange eine Änderung noch nicht mit COMMIT abgeschlossen ist, kann der ursprüngliche Zustand der Datenbank mit ROLLBACK wieder hergestellt werden
  • GRANT: erlaubt dem Nutzer bestimmte Aktionen an der Datenbank
  • REVOKE: entzieht mit GRANT verliehene Zugriffsrechte

Die Elemente der DCL werden als Befehle der Transaktionsumgebung bezeichnet. In einer Transaktionsumgebung wird für jede Änderungen an den Daten eine Transaktion eröffnet, nach Abschluss der Änderung quittiert das DBMS den Erhalt der Daten, mittels COMMIT wird die Transaktion bzw. Änderung abgeschlossen.

Kommt es während der Bearbeitung zu einem System- oder Netzwerkausfall (beispielsweise Verlust der Internet-Verbindung in mobilem Einsatz) oder werden die Daten unvollständig übertragen, wird das DBMS angewiesen einen ROLLBACK durchzuführen.