SQL - Structured Query Language
1970 schrieb E.F. Codd seinen grundlegenden Artikel „A relational model of data for large data banks“ in den Comm. ACM1, der als Grundlage für das relationale Datenmodell und die relationale Algebra angesehen werden kann. Damals gab es schon erste Überlegungen, wie man diese Ideen und Modelle eines relationalen Systems implementieren könnte. Vorläufer der Sprache SQL war die Sprache SEQUEL, die bei der IBM im Rahmen des Projekts System R entwickelt wurde. 1981 gelangte diese Sprache mit SQL/Data Systems erstmalig auf den Markt. Schon bald folgten andere Datenbanksysteme, u.a. DB2 und Oracle. Der Ansatz der IBM setzte sich wegen seiner Mächtigkeit letztendlich durch. 1980 begannen die Arbeiten am ersten Standard, bekannt unter SQL1, der 1986 von der ANSI (American National Standard Institute) und 1989 von der ISO-Behörde (Internationales Institut für Normung) verabschiedet wurde. SQL hat sich im Laufe der Zeit zu einer sehr umfangreichen Datenbanksprache entwickelt, die in den verschiedenen ANSI-SQL-Standards SQL1 (1986), SQL2 (1991-1992) und SQL3 (1999-2003) beschrieben wird. Letzte Überarbeitungen wurden 2011 spezifiziert.
SQL ist eine deklarative Sprache, bei der die Programmierer die Ergebnismenge einer Anfrage oder Manipulation beschreiben, also das "was" spezifizieren, nicht aber das "wie" diese Daten ermittelt werden können. Da ein Prozessor jedoch genaue Vorgaben benötigt, in welcher Reihenfolge er welche Aktionen durchführen soll, werden SELECT- und DML-Anweisungen vom DBMS in eine prozedurale Syntax übersetzt, die kann z.B. eine Variante der relationalen Algebra sein. Bei Oracle wird dieser Übersetzungskomponente als Optimizer bezeichnet.
Zwischen der relationale Algebra und SQL bestehen eine Reihe von Analogien - hier nur ein beispielhafter Auszug:
relationale Algebra | SQL |
Relation | Tabelle? |
Attribut | Spalte |
Tupel | Datensatz |
Integritätsart | CONSTRAINT |
Projektion,Selektion,Umbenennung | SELECT-Ausdruck |
Union,Differenz,Durchschnitt | Anfragemengenausdruck |
Join | Join-Typ-SQL |
Kartesisches-Produkt | Kartesisches-Produkt-SQL? |
Division | Doppeltes NOT EXISTS |
Reihenfolgeunabhängigkeit? | Reihenfolgeunabhängigkeit? |
Auch wenn SQL weitgehend als eine Implementierung der relationale Algebra angesehen werden kann, so gibt es doch einen sehr zentralen Unterschied: Die relationale Algebra basiert auf der Idee, Relationen sind Mengen und Tabellen in SQL sind Multimengen. Duplikate, also wertgleiche Datensätze, sind explizit erlaubt in SQL und werden nicht automatisch eliminiert wie in der relationalen Algebra. Wenn z.B. in einer SELECT-Anfrage Duplikate unterdrückt werden sollen, so muss z.B. mit der Option DISITNCT gearbeitet werden.
Die Sprachbestandteile von SQL1
- Datendefinitionssprache (Data Definition Language, DDL) mit den Anweisungen CREATE TABLE, CREATE VIEW etc.
- Sprache zur Definition von Speicherstrukturen, Benutzerrechten und anderen Verwaltungsaufgaben (Data Storage Definition Language, DSDL, und Data Administration Language, DAL?) mit den Anweisungen COMMIT, ROLLBACK, GRANT und REVOKE
- Datenmanipulationssprache (Data Manipulation Language, DML) mit den Anweisungen INSERT, UPDATE und DELETE
- Datenabfragesprache (Data Query Language, DQL) mit Varianten der SELECT-Anweisung
Die Sprachbestandteile von SQL2
1991 wurde ein weiterer SQL-Standard, SQL2, verabschiedet, der z.B. die Domänen, einige neue Datentypen (BLOBS, VARCHAR, DATE, TIME, TIMESTAMP, BOOLEAN) sowie die Veränderungen von Tabellen mit ALTER-TABLE und Transaktionen zum Inhalt hat. Auch die Möglichkeit, Integritätsprüfungen vorzunehmen, gab es schon. Dazu gehören die Vereinbarung von CHECK-Klauseln, um Gültigkeitsprüfungen für einzufügende Werte vorzunehmen und das Festlegen von Primärschlüsseln. Fremdschlüsseln und Zweitschlüsseln. In der DQL—Sprache wurden die verschiedenen Join-Operatoren (INNER-JOlN, OUTER-JOlN) ergänzt. Die meisten Datenbanksysteme unterstützen bis heute diesen Standard nicht vollständig. andererseits gehen sie in vielen Punkten weit über dem Standard hinaus.
Die Sprachbestandteile von SQL3 (SQL2003-Standard)
Neuerungen in SQL.2003 sind insbesondere:
- Neue Datentypen: BIGINT und XML-Typ (als völlig neuer Bestandteil)
- Generierte Spalten und Sequenzgeneratoren CREATE-SEQUENCE
- Generierte Tabellen mit CREATE TABLE AS SELECT und CREATE TABLE LIKE
- Tabellenwertige Funktionen, d.h. persistent gespeicherte Funktionen, die als Rückgabewert eine Tabelle haben
- Der MERGE-Operator?, um Tabelleninhalte zu verschmelzen
- SQLJ und JDBC.3.0 {teilweise schon in SQL:1999)
- Objektrelationale Erweiterungen (benutzerdefinierte Typen schon in SQL199Q) und insbesondere der Kollektionstyp MULTISET in SQL 2003
- Definition von Stored Procedures und Datenbanktriggern (PSM, Persistent Storage Modules) schon in SQL1999
- SUBQUERYS in CHECK-Bedingungen und ASSERTIONS (SQL1999)
Der aktuelle SQL-Standard SQL:2008-Standard wurde im Juli 2008 verabschiedet und besteht aus folgenden Teilen:
ANSI/ISO/IEC 9075:2008, "Database Language SQL":
- Part 1 ("SQL/Framework"),
- Part 2 ("SQL/Foundation"),
- Part 3 ("SQL/CLI") (Call-Level Interface),
- Part 4 ("SQL/PSM") (Persistent Stored Modules),
- Part 9 ("SQL/MED") (Management of External Data),
- Part 10 ("SQL/OLB")(Object Language Bindings),
- Part 11 ("SQL/Schemata") (Information and Definition Schemas),
- Part 13 ("SQL/JRT") (SQL Routines and Types using the Java Programming Language) und
- Part 14 ("SQL/XML") (XML-Related Specifications).
Daneben gibt es noch den SQL/MM-Standard, ein eigener Standard für Medienobjekte, der aus folgenden Teilen besteht:
ANSI/ISO/IEC 13249-1:2008, "SQL/MM":
- Part 1 ("Framework"),
- Part 2 ("Full Text"),
- Part 3 ("Spatial"),
- Part 5 ("Still Image") und
- Part 6 ("Data Mining").
siehe auch: Multi-Media-Datentyp, Integritätsart
Quellen:
- Quellen/Standards in http://www.wiscorp.com/SQLStandards.html und http://www.jcc.com/sql.htm
- ANSI/ISO/IEC 9075-1:2003. Part 1 "SQL/Framework", ISO International Organization for Standardization / ANSI American National Standards Institute, September 2003
- ANSI/ISO/IEC 9075-2:2003. Part 2 "SQL/Foundation", ISO International Organization for Standardization / ANSI American National Standards Institute, Dezember 2003
- Elmasri, Ramez/Navathe, Shamkant B.: "Grundlagen von Datenbanksystemen" , Pearson Studium, München, 2002, ISBN 3-8273-7021-3
- Faeskorn-Woyke, Heide/Bertelsmeier, Birgit/Riemer, Petra/Bauer, Elena: "Datenbanksysteme - Theorie und Praxis mit SQL2003, Oracle und MySQL", Pearson Education, München, 2007, ISBN 978-3-8273-7266-6
- Kemper, Alfons/Eickler, André: "Datenbanksysteme", Oldenbourg, München, 2009, 978-3-486-59018-0
- Melton, Jim/Simon, Alan R.: "SQL: 1999 - Understanding Relational Language Components", Morgan Kaufmann, San Francisco, 2001, ISBN 1558604561
- Oracle® Database SQL Language Reference 11g Release 2 (11.2), E17118-03, August 2010, http://download.oracle.com/docs/cd/E11882_01/server.112/e17118.pdf
- Saake, Gunter/Sattler, Kai-Uwe/Heuer, Andreas: "Datenbanken - Konzepte und Sprachen", mitp-Verlag, Redline GmbH, Heidelberg, 2007, ISBN 3-8266-1664-2
- Vossen, Gottfried: "Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme", Oldenbourg, München, 2008, ISBN 978-3-486-27574-2