Weiter Zurück [Inhalt] Online Suche im Handbuch

7. Die Geschichte von SQL

SQL steht für Structured Query Language und wurde Ende der 70´er Jahre bei IBM in San Jose, Kalifornien als Abfragesprache für die relationale Datenbank DB2 entworfen. Es handelte sich hier ursprünglich um eine nichtprozedurale Sprache, die also keine Schleifen, Unterprogramme, Funktionen und Funktionsübergabeparameter u.s.w. enthält.

Hier ein Überblick nochmals über die Programmiersprachen der verschiedenen Generationen:

  1. Generation: Maschinensprache. Diese stellt die unterste Ebene der Programmiersprachen dar. Sie besteht nur aus Zahlen, dementsprechend sind die Programme völlig unleserlich und schwer zu erstellen, jedoch laufen die Programme sehr schnell ab. Hier ein Beispiel der HEX-Notation: A900

  2. Gereration: Assembler Sprachen. Diese orientieren sich gewöhnlich an den Maschinenbefehlen des Prozessors: MOV AX,0 bedeutet dasselbe, wie A900, jedoch lassen sich diese Befehle einfacher merken. Komfortable Compiler (Übersetzer in Maschinensprache) beherrschten schon Schleifen, Sprungmarken und Unterprogramme. Damit wurde die Lesbarkeit sehr erhöht. Wer heutzutage Assembler z.B. unter LINUX kennen lernen möchte, der braucht einfach nur ein kleines C-Programm mit der Option -S übersetzen. Die GNU Assembler sowie alle GNU Compiler (C,C++, PASCAL, FORTRAN ....) übersetzen die Befehle einer Hochsprache zuerst in eine allgemeingültige Assemblersprache, bevor diese dann in die prozessorspezifische Assemblersprache und dann in Maschinensprache übersetzt wird. Dies hat die völlige Unabhängigkeit des Prozessors erst ermöglicht, wie man z.B. an LINUX sehen kann.

  3. Generation: Höhere Programmiersprachen, wie z.B. BASIC, PASCAL, C. C++, ADA, Fortran... Diese sind schon an die menschlichen Denkweisen angepasst und ermöglichen, sofern man sich an einen Standard hält, den Austasch des Quellcodes zwischen verschiedenen Betriebssystemen und Prozessoren.

  4. Generation: Nichtprozedurale Programmiersprachen (4GL) bescheiben nicht mehr, wie ein Problem gelöst werden soll, sondern nur noch welches speziele Problem gelöst werden soll. Diese Programmiersprachen sind natürlich nur für ganz spezielle Probleme konzipiert worden. Hierzu zählen SQL, NATURAL u.s.w.

  5. Generation: KI Sprachen (Künstliche Intelligenz) erarbeiten Lösungen mit Hilfe von bestimmten Regeln, die definiert wurden. Hierzu sind ausgefeilte backtracking Mechanismen implementiert wurden, die bei der Suche nach Problemen, falls eine Sackgasse beschritten wurde, selbstständig aus diesen herausfinden können. Leider sind diese Sprachen noch etwas langsam. Hierzu zählen LISP (EMACS), PROLOG und SMALLTALK.

SQL ist also in dem Sinne keine Programmiersprache und dementsprechend einfach zu erlernen. Die SQL Befehle setzen sich aus zwei Teilen zusammen, der Data Definition Language (DDL) und der Data Manipulation Laguage (DML). Die DDL dient dem Aufsetzen der Datenbankstruktur, die DML dient der Manipulation der darin enthaltenen Daten.

Relationale Datenbanken arbeiten Mengen - und Gruppenorientiert. Wer sich also mit SQL beschäftigt, der muß sich ein wenig in Mengenlehre auskennen. Insbesondere das Studium der INNER/OUTER/LEFT JOINS ist sehr wichtig, um Datenmengen zu handeln. SQL Datenbanken gehören alle zu den relationalen Datenbanken. Dr. E.F. Codd entwickelte 1970 Regeln, die eine relationale Datenbank definieren:

  1. Ein relationales DBMS muß in der Lage sein, Datenbanken vollständig über seine relationalen Fähigkeiten zu verwalten.

  2. Darstellung von Informationen: Alle Informationen in einer relationalen Datenbank (einschließlich Namen von Tabellen und Spalten) sind explizit als Werte in Tabellen darzustellen.

  3. Zugriff auf Daten: Jeder Wert in einer relationalen Datenbank muß durch Kombination von Tabellenname, Primärschlüssel und Spaltenname eindeutig zu finden sein.

  4. 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.

  5. 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äßt sich der Katalog mit Hilfe der Datenbanksprache abfragen.

  6. Abfragesprache: Zu einem relationalen System gehört mindestens eine Abfragesprache mit einem vollständigen Befehlssatz für Datendefinition, Manipulation, Integritätsregeln, Autorisierung und Transaktionen.
  7. Aktualisieren von VIEWS (Sichten): Alle VIEWS, die theoretisch aktualisiert werden können, lassen sich auch vom System aktualisieren.

  8. 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.
  9. Physikalische Datenunabhängigkeit: Der logische Zugriff auf die Daten durch Anwendungen muß unabhängig von den physikalischen Zugriffsmethoden oder den Speicherstrukturen der Daten sein.

  10. Logische Datenunabhängigkeit: Änderungen der Tabellenstrukturen dürfen keinen Einfluß auf die Logik der Anwendungen haben.

  11. 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.

  12. Verteilungsunabhängigkeit: Der logische Zugriff auf die Daten durch Anwendungen darf sich beim Übergang von einer nicht verteilten zu einer verteilten Datenbank nicht ändern.

  13. 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 hier 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 u.s.w. gebildet und ausgegeben werden. Diese werden durch sogenannte JOINS, siehe Kapitel JOINS, durchgeführt.

Bei dem Aufbau von einer SQL Datenbank müssen die Daten so aufgeteilt werden, daß sie voneinander verschiedene, eindeutige Datensätze bilden. Dieser Prozeß wird in Kapitel Normalisierung beschrieben, und ist ein unentbehrlicher Schritt vor der eigentlichen Implementierung einer Datenbank. Hierzu werden, wie in Kapitel Entity Relationship Diagramme (ER) beschrieben, ER - Diagramme erstellt. Ein solches Diagramm ist für die Entwurfsphase einer Datenbank unentbehrlich. Aus einem ER - Diagramm wird das Relationenmodell nach E.F. Codd entwickelt, wie in Kapitel Relationenmodell beschrieben. Eine saubere Vorarbeit erspart später viele Änderungen bei Datenformaten und Schnittstellen zur SQL-Datenbank.

Mit ANSI-92 SQL wurde ein gemeinsamer Standard geschaffen, an den sich PostgreSQL (für welches alle Beipiele hier im Handbuch ebenso gelten) z.B. hält. Leider gibt es hier verschiede Ebenen des Sprachunmfages: Entry, Intermediate und Full. Zur Erfüllung des vollen Sprachumfanges müssen folgende Merkmale erfüllt sein:

Im Grunde erfüllen nur wenige SQL - Datenbanken den Standard "full". Dennoch kann man auch mit diesen hervorragend arbeiten, da es viele Umsschreibungen gibt, wie in Kapitel Workarounds beschrieben ist. In der Praxis hat jede Datenbank ihre Eigenheiten, sodaß oftmals der Wechsel zwischen den Datenbanken nicht einfach möglich ist.

Mit der Abfragesprache SQL können folgende Operationen mit den Daten ausgeführt werden:

Die Sprache SQL ist im Laufe der Zeit um einige Kategorien von besonderen Funktionen erweitert worden, von denen man fast alle auch in MySQL wiederfinden:

Als Klauseln (clauses) bezeichnet man bei SQL z.B.:

Diese Klauseln sind alle Optionen des Befehls SELECT, dessen vielen Parameter in Kapitel SELECT beschrieben ist, und dienen dazu, Mengen zu beschränken, zu sortieren und deren Ausgabe zu ordnen.

Das praktische an SQL ist, daß wenn man die Abfragesprache einmal erlernt hat (so schwer ist es wirklich nicht), kann man aus riesigen Datenmengen wirklich alle Informationen auslesen, die man braucht. Z.B. kann man Daten sortieren, verändern, filtern, Statistiken erheben, u.s.w. 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, genauer in Kapitel ODBC - Schnittstelle beschrieben, dient hier als Datenbank unabhängige Schnittstelle zu Applikationen unter Windows und UNIX.


Weiter Zurück [Inhalt] Online Suche im Handbuch