|

|
SQL (manchmal ausgeschrieben als Structured Query Language - Strukturierte Abfragesprache) ist eine Programmiersprache zur Definition, Abfrage und Manipulation von Daten für relationale Datenbanken. SQL ist von ANSI und ISO standardisiert und wird von fast allen gängigen Datenbanksystemen unterstützt.
SQL hat eine relativ einfache Syntax, die an die englische Umgangssprache angelehnt ist, und stellt eine Reihe von Befehlen zur Definition von Datenstrukturen nach der relationalen Algebra, zur Manipulation von Datenbeständen (Einfügen, Bearbeiten und Löschen von Datensätzen) und zur Abfrage von Daten zur Verfügung. Durch seine Rolle als Quasi-Standard ist SQL von großer Bedeutung, da eine weitgehende Unabhängigkeit von der benutzten Software erzielt werden kann. Die meisten SQL-Implementierungen bieten darüber hinaus allerdings noch herstellerspezifische Erweiterungen, die nicht dem Standard-Sprachumfang entsprechen, was zur Folge hat, dass von den Herstellern parallel entwickelte gleiche Funktionen unterschiedliche Sprachelemente benutzen.
Die meisten heute verbreiteten Datenbanksysteme, wie etwa DB2, Informix, Microsoft SQL Server, MaxDB, MySQL, Oracle, PostgreSQL, Borland Interbase, Firebird, Sybase, SQLite oder Microsoft Access implementieren Teile des SQL Sprachstandards. Dadurch ist es möglich, Anwendungen zu erstellen, die vom verwendeten Datenbanksystem unabhängig sind. In der Vor-SQL-Zeit gelang dies mit dem System der kompatiblen Schnittstellen.
1986 wurde der erste SQL-Standard vom ANSI verabschiedet (welcher dann 1987 von der ISO ratifiziert wurde). 1992 wurde der Standard deutlich überarbeitet und als SQL-92 (oder auch SQL2) veröffentlicht. Alle aktuellen Datenbanksysteme halten sich im wesentlichen an diese Standardversion. Die neuere Version SQL:1999 (ISO/IEC 9075:1999, auch SQL3 genannt) ist noch nicht in allen Datenbanksystemen implementiert. SQL:2003 ist noch weitgehend unimplementiert.
SQL-Befehle lassen sich in vier Kategorien unterteilen (Zuordnung nach der Theorie der Datenbanksprachen in Klammern):
* Befehle zur Definition des Datenbankschemas (DDL)
* Datenabfrage mit SELECT (DQL)
* Befehle zur Datenmanipulation = Ändern, Einfügen, Löschen (DML)
* Befehle für die Rechteverwaltung (DCL)
* DISTINCT gibt an, dass aus der Ergebnisrelation gleiche Ergebnistupel entfernt werden sollen. Sonst liefert SQL eine Multimenge zurück.
* Auswahlliste bestimmt, welche Spalten der Quelle auszugeben sind (* für alle) und ob Aggregatfunktionen anzuwenden sind.
* Quelle gibt an, wo die Daten herkommen. Es können Relationen und Sichten angegeben werden und miteinander als kartesisches Produkt oder als Verbund (JOIN, ab SQL-92) verknüpft werden. Mit der zusätzlichen Angabe eines Namens können Tupelvariablen besetzt werden, d. h. Relationen für die Abfrage umbenannt werden (vgl. Beispiele).
* Where-Klausel bestimmt Bedingungen, unter denen die Daten ausgegeben werden sollen. In SQL (außer MySQL <4.1) ist hier auch die Angabe von Unterabfragen möglich, so dass SQL streng relational vollständig wird.
* Group-by-Attribut listet Attribute auf, deren Werte festlegen, welche Tupel zu Gruppen zusammengefasst werden sollen. Auf jede Gruppe werden Aggregatfunktionen angewendet. Fehlt diese Klausel, werden Aggregationsfunktionen auf alle Tupel angewendet, d. h. die gesamte Ergebnismenge bildet eine Gruppe.
* Having-Klausel ist wie die Where-Klausel, nur dass hier auf Aggregationsfunktionen zugegriffen wird (z. B. HAVING sum(Betrag)>0).
* Sortierungsattribut: nach ORDER BY werden Attribute angegeben, nach denen sortiert werden soll. ASC gibt dabei aufsteigende (Standard), DESC absteigende Sortierung an. Ein Sortierungsattribut muss nicht in der Auswahlliste vorkommen.
Mengenoperatoren können auf mehrere SFW-Blöcke angewandt werden, die gleich viele Attribute haben und bei denen die Datentypen der Attribute übereinstimmen:
* UNION vereinigt die Ergebnismengen. Mehrfach vorkommende Ergebnistupel werden wie bei DISTINCT entfernt.
* UNION ALL vereinigt die Ergebnismengen. Mehrfach vorkommende Ergebnistupel bleiben erhalten.
* EXCEPT liefert die Tupel, die in A, jedoch nicht in B enthalten sind. Mehrfach vorkommende Ergebnistupel werden entfernt.
* MINUS ist ein analoger Operator für EXCEPT, der von manchen SQL-Dialekten alternativ benutzt wird.
* INTERSECT liefert die Schnittmenge zweier Ergebnismengen. Mehrfach vorkommende Ergebnistupel werden entfernt.
zurück
|