Back To Top

Definition von SQL


Datenbanken: Was ist SQL?

Comelio-Blog SQL DefinitionNachdem E.F. Codd seinen Bahnbrechenden Artikel „A relational model of data for large shared data banks“ im Jahre 1970 im amerikanischen Magazin „Communication of the ACM“ (Association of Computer Machinery) veröffentlicht hatte, in dem er das relationale Modell vorstellte, wurde SQL in einer Frühform von IBM entwickelt. Damals wurde es unter dem Namen SEQUEL (Structured English Query Language) für relationale Datenbankmanagementsysteme (RDBMS) eingeführt und sollte eine standardisierte Sprache darstellen, mit der Datenbanken angesprochen und verwaltet werden konnten, ohne eine grafische Benutzeroberfläche zu verwenden.

Dies gestaltete sich in den 1970er Jahren schließlich noch etwas anders als heute. Aus SEQUEL entstand dann später SQL, das aber noch für einige Zeit wie früher ausgesprochen wurde. Im Jahre 1979 entwickelte dann die Relational Software, Inc., die dann später unter dem Namen Oracle Corporation bekannt wurde, das erste Datenbankmanagementsystem, das mit SQL verwaltet werden konnte. In diesem Sinne lässt sich auch verstehen, warum Oracle Wert darauf legt, mit SQL besonders viele Feinheiten zu implementieren und warum die prozedurale Erweiterung eine so große Struktur erreicht hat, Datenbanksysteme wie der MS SQL Server von Microsoft mit Transact SQL (noch) nicht erreicht haben. Wie alle großen Produzenten ist Oracle selbst auch aktiv an der Entwicklung des SQL-Standards beteiligt.

Zu der Zeit, als dieses Buch geschrieben wurde, war dies immer noch der Standard von 1999, der auch unter der Kurzbezeichnung SQL99 in die Annalen der SQL- und Datenbankgeschichte eingegangen ist. In Kürze werden wir sicherlich einen weiteren Standard mit einigen Erweiterungen kennen lernen. Die beiden internationalen Organisationen American International Standards Institute (ANSI) und International Organization for Standardization (ISO) sowie die International Electrotechnical Commission (IEC) sind für die Entwicklung und Verwaltung des Standards verantwortlich. Hier hat sich – insbesondere bei Vergleichen zwischen dem SQL-Standard und den in Datenbanken implementierten Versionen und Varianten –der Begriff ANSI-SQL als Bezeichnung für den normgerechten SQL-Standard herausgebildet. Ein interessantes Kaffeehausgespräch ließe sich also immer auch mit der Frage beginnen, ob sich Hersteller am ANSI-Standard orientieren sollten und mit welchem Deckungsgrad er in einzelnen Systemen umgesetzt worden ist. Ein Standard wird von allen drei Organisationen gleichzeitig veröffentlicht und unterscheidet sich letztendlich nur durch die diversen Namen und Einordnungstechniken der Dokumente, nicht aber im Inhalt. Für den SQL99-Standard wären dies die Dokumente:

  • ANSI X3.135-1999, "Database Language SQL", Parts 1 ("Framework"), 2 ("Foundation") und 5 ("Bindings")
  • ISO/IEC 9075:1999, "Database Language SQL", Parts 1 ("Framework"), 2 ("Foundation") und 5 ("Bindings")

Die Datenbanksprache SQL (Structured Query Language – Strukturierte Abfragesprache) stellt also einen De-facto-Standard für die Datenbankbenutzung in einer programmiersprachenähnlichen Form dar. Zwar gibt es noch andere Möglichkeiten, sich den Daten in einer Datenbank über andere Sprachen und grafische Unterstützungswerkzeuge zu nähern, doch ist SQL eine unverzichtbare Hilfe. Für einen Programmierer ist es ohnehin die einzige Möglichkeit, Daten für Programme und Anwendungen zu erhalten, wobei durch die Standardisierung, die SQL durch die International Organization for Standardization erhalten hat, SQL in fast allen Datenbanken zum Einsatz kommt. Typischerweise stimmt in allen Datenbanken ein Grundteil der Sprachelemente überein, sodass Sie einfache und komplexe Abfragen sowie die Standard(aggregat)funktionen auch in anderen Systemen nutzen können. Im Bereich der Unterabfragen und bei der Bezeichnung der eingebauten Funktionen gibt es zwangsläufig große Unterschiede, da hier jeder Hersteller seine eigene Variation und seine eigene Sicht der Dinge verwendet.

Sprachbereiche und Verwendungsdimensionen

Comelio-Blog SQL DefinitionDie Sprache teilt sich in insgesamt drei Bereiche auf, wobei die Unterteilung weniger auf syntaktischen als auf konzeptionellen und anwendungsbezogenen Unterschieden basiert.

Datendefinitionssprache (DDL, Data Definition Language)
Für die Definition von Schema-Objekten wie Tabellen, Schemata, Domänen, Sichten und Indizes) verwendet man Befehle wie CREATE [OR REPLACE] und DROP für die Definition und Löschung sowie ALTER, ADD oder RENAME für die Änderung der Objekteigenschaften. Diese Befehle haben Sie im vorigen Kapitel kennen gelernt, sofern sie nicht automatisch über die grafische Benutzeroberfläche generiert wurden.
Datenkontrollsprache (DCL, Data Control Language)
Nach der Erstellung von Benutzern und Rollen mit ihren Kennwörtern über die von der DDL bereitgestellten Befehle wie CREATE oder DROP organisiert man die Rechtestruktur mit Befehlen wie GRANT oder REVOKE. Diese Rechte beziehen sich auf die anderen Befehle der drei Sprachbereiche zur Einrichtung von Schema-Objekten oder zu ihrer Verwendung. Im Rahmen der Datenmanipulationssprache könnte man mit DCL-Befehlen sehr fein bestimmen, welche Aktivitäten bzw. Befehle ein Rolleninhaber in einer Tabellen und ihren Spalten ausüben bzw. verwenden darf.
Datenmanipulationssprache (DML, Data Manipulation Language)
Für die Untersuchung von Daten über Abfragen sowie für ihre Aktualisierung und Löschung bietet die DML Befehle wie z. B. SELECT, INSERT, UPDATE oder DELETE an.

Die Syntaxkonzeption von SQL ist verblüffend einfach; die Komplexität, die Abfragen bisweilen erhalten können und die Kombinationsmöglichkeiten der einzelnen Sprachbereiche sind jedoch ebenso verblüffend vielfältig. In diesem Kapitel konzentrieren wir uns lediglich auf die Abfragemöglichkeiten. Genauso gut hätten wir dem Kapitel den Namen „Das allmächtige SELECT“ geben können, da dieser Befehl alle Abfragen einleitet. Hierbei ist es egal, ob es sich um eine allein stehende Abfrage oder um eine Unterabfrage in einer Abfrage, um einen Einfügebefehl mit INSERT, eine Aktualisierung mit UPDATE oder eine Löschoperation mit DELETE handelt“. Gleiches gilt für die Formulierung von Bedingungen. Die im Rahmen der Abfragen vorgestellte Syntax zur Formulierung von Bedingungen lässt sich nicht nur in Abfragen, sondern auch in den anderen Bereichen verwenden. Dadurch erhält man eine große Anzahl von Werkzeugen, die an unterschiedlichsten Stellen wieder allein oder in Kombination eingesetzt werden können. Dies wollen wir gegen Ende des Kapitels zeigen, wenn wir auf die anderen Befehle noch einmal kurz eingehen und zeigen, welche Möglichkeiten sie mit den hier vorgestellten Abfragetechniken bieten.

Anwendungsbereiche und Grundkonzeption

Sprachbereiche von SQLSQL stellt als Sprache und als Konzept einen Standard dar, sodass mit seiner Syntax beliebige Datenbanken, in die SQL integriert ist, steuerbar sind. Dies umfasst meistens den Bereich von Standard-SQL und bildet auch das Ziel des gesamten Standardisierungsprozesses, um den überaus wichtigen Bereich der Datenverwaltung, -speicherung und -untersuchung weltweit konzeptionell zu steuern. Hierbei lassen sich einige grundlegende Dimensionen in der Sprachverwendung feststellen, die zugleich auch einen deutlichen Gegensatz zu anderen (richtigen, eigentlichen) Programmiersprachen darstellen und SQL von diesen abgrenzen:

  • Mit den Befehlen von SQL lässt sich eine Datenbank direkt steuern, sodass es mehr wie eine Anweisungs- als eine Programmiersprache erscheint und auch – aus der Perspektive von anderen Programmiersprachen betrachtet – tatsächlich keine wirkliche Programmiersprache darstellt. Dies mag aber auch ein informationswissenschaftlichs Kaffeehausthema sein, das wir hier nicht weiter verfolgen wollen. Wichtig ist auf jeden Fall die Tatsache, dass die einzelnen Befehle typischerweise ohne weitere Zusätze über ein Texterfassungswerkzeug an die Datenbank weitergegeben und von dieser ausgeführt werden.
  • SQL besitzt keine Variablendeklaration, keine Kontrollstrukturen und keine Möglichkeiten, Prozeduren und Funktionen oder gar Klassen und Objekte zu erzeugen. Teilweise sind dies Forderungen, die vom Standard ISO/IEC 9075-5: 1996 zu PSM (persistent stored modules) optional in die Sprache eingeführt wurden. PL/SQL ist eine Implementationsvariante von diesen gespeicherten, persistenten Modulen, mit denen komplexe datenbanknahe Anwendungen in Form einer „richtigen“ Programmiersprache in der Datenbank erstellt, gespeichert und dort aufgerufen werden können.
  • Stattdessen greift SQL in seiner Eigenschaft als Datenuntersprache (Data Sublanguage) auf Mengen zu und basiert auf den beiden Konzepten der Relationalgebra und des Relationenkalküls. In diesem Sinne bietet SQL direkte Zugriffsmöglichkeiten auf Datenmengen auf einer logischen Ebene, wobei gerade nicht die Art und Weise, wie auf die Daten zugegriffen werden soll, definiert werden muss, sondern lediglich die Bedingungen, die die Daten erfüllen sollen, um in eine gewünschte Ergebnismenge (entweder als zu verarbeitende oder als zu lesende Menge) übernommen zu werden. Letztendlich vereinfachen die Integration von SQL und die automatische und optimierte Ausführung des SQL-Interpreten im Datenbanksystem die Beschaffung der gewünschten Daten. Bei sehr großen Abfragemengen, großen Tabellen und hochkomplizierten Abfragebedingungen und Tabellenverknüpfungen erlauben es die Datenbanksysteme jedoch, teilweise auf die Optimierungsbedingungen einzugehen und diese zu modifizieren.
  • Da SQL den zurzeit gültigen Standard in der Datenbanklandschaft und -theorie darstellt und dies wohl auch noch bis ans Ende unserer Tage so sein wird, wurde bei der Entwicklung von neuen Programmiersprachen, die nach dem kometenhaften Bedeutungsaufschwung von SQL entwickelt wurden, stets darauf geachtet, dass SQL direkt in die Sprache eingebettet werden kann. Dies wird meistens über eine spezielle Funktion oder Methode gelöst, die einen SQL-Text aufnimmt und dann an eine beliebige Datenbank weitersendet und das Ergebnis in einer Variable mit einer geeigneten Struktur erwartet, sodass es von der aufrufenden Umgebung bzw. der eingesetzten Sprache weiterverarbeitet werden kann. An SQL kommt also wirklich nicht einmal der vorbei, der nur eine einzige, winzige Abfrage an eine Datenbank senden und Daten von ihr zurückerhalten möchte. Zu diesem Punkt werden Sie im letzten Kapitel einige Beispiele dafür finden, wie Sie aus anderen Programmiersprachen auf Oracle zugreifen. Dabei haben wir uns auf Oracle-Spezifika beschränkt, da es für viele große Sprachen allgemeine Datenbankschnittstellen gibt – die natürlich ebenfalls SQL erwarten.
  • Mit der gleichen Begründung lässt sich auch erklären, warum das erst in den letzten Jahren ebenfalls kometenhaft aufgestiegene Konzept von XML gleichfalls über SQL oder zumindest SQL-ähnliche Sprachkonstrukte in der Datenbank durchsucht und verwendet werden kann. Teilweise haben sich hier neue Konzepte wie XQuery oder XSQL herausgebildet, die für die Besonderheiten von XML-basierten Daten geschaffen wurden, die aber mit SQL-Verständnis und einem SQL-geschulten Auge als SQL-ähnlich erscheinen.

Erscheinungsformen von SQL

Sprachbereiche von SQLAn den wohlklingenden Unterüberschriften lässt sich bereits unsere Hochachtung vor SQL erkennen, sodass wir gezwungen sind, langsam wieder auf den Boden der Datenbank-Tatsachen zurückzukommen. Dies gelänge nicht besser als mit einigen Überlegungen zu den Erscheinungsformen von SQL in unserem Lieblingsdatenbanksystem. Hier mischt sich ein mikroskopisch kleiner Wermutstropfen in unsere Passion, da abgesehen vom Standard-SQL-Bereich viele Befehle, Funktionen und Klauseln Oracle-spezifisch sind. Dies ist nicht Oracle an sich anzulasten, ist ein leidiges Phänomen, das auch in allen anderen Systemen auftritt.

Im gesamten Bereich der Abfragen, der grundlegenden Transaktionsbefehle und auch der grundlegenden Befehle für das Anlegen von Schema-Objekten (außer den Speicherplatzoptionen) deckt sich das SQL von Oracle mit ANSI-SQL bzw. mit dem SQL in anderen Datenbanksystemen. Im Bereich der eingebauten Funktionen jedoch werden Sie im Vergleich zu anderen Systemen schnell feststellen, dass einerseits besonders viele Funktionen mit beeindruckenden Eigenschaften vorhanden sind, dass Sie diese aber in vielen Fällen nur in Oracle unter diesem Namen vorfinden. SQL-Syntax, die diese Funktionen verwendet, muss also im Regelfall an andere Umgebungen angepasst werden bzw. benötigt eine Anpassung, wenn sie aus anderen Systemen in Oracle zum Einsatz kommen soll. Der gesamte Bereich von PL/SQL schließlich überrundet die Möglichkeiten in anderen Systemen um Längen, stellt allerdings notwendigerweise eine ganz eigene Programmiersprache mit eigener Syntax auf der Basis von Ada dar.