SQL

Abkürzung für "Structured Query Language"

In den 70er Jahren des 20. Jahrhunderts von der Firma IBM entwickelte Abfragesprache für die relationale Datenbank DB2. Es handelte sich dabei um eine nichtprozedurale (Programmier-)Sprache, die weder Schleifen, Unterprogramme noch Funktionen enthielt.

SQL-Befehle setzen sich aus zwei Teilen zusammen, der Data Definition Language (DDL) zum Aufsetzen einer Datenbankstruktur und der Data Manipulation Language (DML) zur Manipulation der enthaltenen Daten.

Relationale Datenbanken arbeiten mengen- und gruppenorientiert. Wer sich also mit SQL beschäftigt, der muss sich ein wenig in Mengenlehre auskennen. Dr. E. F. Codd entwickelte 1970 Regeln, die eine relationale Datenbank definieren:

  • Ein relationales Datenbankmodell muss in der Lage sein, Datenbanken vollständig über seine relationalen Fähigkeiten zu verwalten.
  • Darstellung von Informationen: Alle Informationen in einer relationalen Datenbank (einschließlich Namen von Tabellen und Spalten) sind explizit als Werte in Tabellen darzustellen.
  • Zugriff auf Daten: Jeder Wert in einer relationalen Datenbank muss durch Kombination von Tabellenname, Primärschlüssel und Spaltenname eindeutig zu finden sein.
  • Behandlung von Nullwerten: Das DBMS behandelt Nullwerte durchgängig als unbekannte oder fehlende Daten und unterscheidet so von Standardwerten. Zahlen können also drei Werte annehmen, 0, einen Wert und NULL für "Wert nicht vorhanden". Man spricht hier auch von der Dreiwertigkeit.
  • Struktur einer Datenbank: Die Datenbank und ihre Inhalte werden in einem sogenannten Systemkatalog auf derselben logischen Ebene wie die Daten selbst - also in Tabellen - beschrieben. Demzufolge lässt sich der Katalog mit Hilfe der Datenbanksprache abfragen.
  • Abfragesprache: Zu einem relationalen System gehört mindestens eine Abfragesprache mit einem vollständigen Befehlssatz für Datendefinition, Manipulation, Integritätsregeln, Autorisierung und Transaktionen.
  • Aktualisieren von VIEWS (Sichten): Alle VIEWS, die theoretisch aktualisiert werden können, lassen sich auch vom System aktualisieren.
  • Abfragen und Bearbeiten ganzer Tabellen: Das DBMS unterstützt nicht nur Abfragen, sondern auch die Operationen für Einfügen, Aktualisieren und Löschen in Form ganzer Tabellen.
  • Physikalische Datenunabhängigkeit: Der logische Zugriff auf die Daten durch Anwendungen muss unabhängig von den physikalischen Zugriffsmethoden oder den Speicherstrukturen der Daten sein.
  • Logische Datenunabhängigkeit: Änderungen der Tabellenstrukturen dürfen keinen Einfluss auf die Logik der Anwendungen haben.
  • Unabhängigkeit der Integrität: Integritätsregeln müssen sich in der Datenbanksprache definieren lassen. Die Regeln müssen im Systemkatalog gespeichert werden. Es darf nicht möglich sein, die Regeln zu umgehen.
  • Verteilungsunabhängigkeit: Der logische Zugriff auf die Daten durch Anwendungen darf sich beim Übergang von einer nicht verteilten zu einer verteilten Datenbank nicht ändern.
  • Kein Unterlaufen der Abfragesprache: Integritätsregeln, die über die Datenbanksprache definiert sind, dürfen sich nicht mit Hilfe von Low-Level Sprachen umgehen lassen.

 

Dr. E. F. Codd hat in SQL alle Elemente der Algebra integriert, um Daten mengenmäßig zu erfassen, zu speichern, und diese in Relation zueinander zu setzen. Hierbei können Schnittmengen, Vereinigungsmengen, Restmengen usw. gebildet und ausgegeben werden. Diese werden durch sogenannte JOINS durchgeführt.

Bei dem Aufbau von einer SQL Datenbank müssen die Daten so aufgeteilt werden, dass sie voneinander verschiedene, eindeutige Datensätze bilden. Das praktische an SQL ist, dass wenn man die Abfragesprache einmal erlernt hat, kann man aus riesigen Datenmengen wirklich alle Informationen auslesen, die man braucht. Zum Beispiel kann man Daten sortieren, verändern, filtern, Statistiken erheben usw. Mit Hilfe von Datenbankschnittstellen, wie z.B. ODBC und ASCII Im-/Export kann man Daten mit beliebigen Datenbanken austauschen und sogar diese mit einbinden. Die ODBC-Schnittstelle dient hier als Datenbankunabhängige Schnittstelle zu Applikationen unter Windows und UNIX.