SQL

SQL

SQL ist eine Datenbanksprache zur Definition, Abfrage und Manipulation von Daten in relationalen Datenbanken. SQL ist von ANSI und ISO standardisiert und wird von fast allen gängigen Datenbanksystemen unterstützt.

Die Bezeichnung SQL (offizielle Aussprache [ɛskjuːˈɛl], oft aber auch [ˈsiːkwəl]) wird im allgemeinen Sprachgebrauch als Abkürzung für „Structured Query Language“ aufgefasst, obwohl sie laut ANSI-Standard ein eigenständiger Name ist. Die Bezeichnung leitet sich von dem Vorgänger SEQUEL ([ˈsiːkwəl], Structured English Query Language) ab, der von Edgar F. Codd (IBM) in den 1970er Jahren entworfen wurde. SEQUEL wurde später in SQL umbenannt, weil SEQUEL ein eingetragenes Warenzeichen der Hawker Siddeley Aircraft Company war.[1]

Die Syntax von SQL ist relativ einfach aufgebaut und semantisch an die englische Umgangssprache angelehnt. SQL 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.

Inhaltsverzeichnis

Sprachstandard(s)

Die meisten heute verbreiteten Datenbanksysteme implementieren mehr oder weniger große Teile des SQL-Sprachstandards. Dadurch ist es möglich, Anwendungsprogramme zu erstellen, die vom verwendeten Datenbanksystem unabhängig sind. In der Vor-SQL-Zeit gelang dies mit dem System der kompatiblen Schnittstellen. Viele SQL-Implementierungen bieten darüber hinaus noch herstellerspezifische Erweiterungen, die nicht dem Standard-Sprachumfang entsprechen.

Manche SQL-Befehle werden nicht von allen SQL-Implementierungen verstanden. So kann es zum Beispiel vorkommen, dass der „Spaltenalias“ direkt hinter den realen Spaltennamen zu schreiben ist und das dazwischen stehende Wort „AS“ nicht verstanden wird. Auch die Verwendung der UNION-Befehle ist unterschiedlich.

Chronologie:

  • etwa 1975: SEQUEL = Structured English Query Language, der Vorläufer von SQL, wird für das Projekt System R von IBM entwickelt.
  • 1979: SQL gelangt mit Oracle V2 erstmals durch Relational Software Inc. auf den Markt.
  • 1986: SQL1 wird von ANSI als Standard verabschiedet.
  • 1987: SQL1 wird von der Internationalen Organisation für Normung (ISO) als Standard verabschiedet und 1989 nochmals überarbeitet.
  • 1992: Der Standard SQL2 oder SQL-92 wird von der ISO verabschiedet.
  • 1999: SQL3 oder SQL:1999 wird verabschiedet.
  • 2003: SQL:2003 ISO/IEC 9075:2003 wird von der ISO als Nachfolger des SQL:1999-Standards verabschiedet.
  • 2006: SQL:2006 ISO/IEC 9075-14:2006 legt fest, wie SQL in Zusammenhang mit XML verwendet werden kann.
  • 2008: SQL:2008 ISO/IEC 9075:2008 ist die aktuelle Revision des SQL-Standards.

Sprachelemente und Beispiele

SQL-Befehle lassen sich in drei Kategorien unterteilen[2] (Zuordnung nach der Theorie der Datenbanksprachen in Klammern):

Die Bezeichnung SQL bezieht sich auf das englische Wort “query” (deutsch: „Abfrage“). Mit Abfragen werden die in einer Datenbank gespeicherten Daten abgerufen, also dem Benutzer oder einer Anwendersoftware zur Verfügung gestellt.

Das Ergebnis einer Abfrage sieht wiederum aus wie eine Tabelle und kann oft auch wie eine Tabelle angezeigt, bearbeitet und weiterverwendet werden.

Die grundlegenden Befehle und Begriffe werden anhand des folgenden Beispiels erklärt:

ER-Diagramm: SQL-Beispiel.svg
Relationen:
Student
MatrNr Name
26120 Fichte
25403 Jonas
27103 Fauler
hört
MatrNr VorlNr
25403 5001
26120 5001
26120 5045
Vorlesung
VorlNr Titel PersNr
5001 ET 15
5022 IT 12
5045 DB 12
Professor
PersNr Name
12 Wirth
15 Tesla
20 Urlauber

einfachste Abfrage

SELECT *
FROM Student

listet alle Spalten und alle Zeilen der Tabelle Student auf.

Abfrage mit Spaltenauswahl

SELECT MatrNr, Name
FROM Student

listet die Spalten MatrNr und Name aller Zeilen der Tabelle Student auf.

Abfrage mit eindeutigen Werten

SELECT DISTINCT Name
FROM Student

listet nur unterschiedliche Einträge der Spalte Name aus der Tabelle Student auf. Doppelt aufgeführte Namen werden unterbunden.

Abfrage mit Umbenennung

SELECT MatrNr AS Matrikelnummer, Name
FROM Student

listet die Spalten MatrNr und Name aller Zeilen der Tabelle Student auf. MatrNr wird beim Anzeigeergebnis als Matrikelnummer aufgeführt.

Abfrage mit Filter

SELECT VorlNr, Titel
FROM Vorlesung
WHERE Titel = 'ET'

listet VorlNr und Titel aller derjenigen Zeilen der Tabelle Vorlesung auf, deren Titel 'ET' ist.

Die solchermaßen strukturierte, häufig verwendete Anweisung wird nach den Anfangsbuchstaben auch als „SFW-Block“ bezeichnet.

Abfrage mit Filter nach Inhalt

SELECT Name
FROM Student
WHERE Name LIKE 'F%'

listet die Namen aller Studenten auf, deren Namen mit F beginnen. (im Beispiel: Fichte und Fauler).

LIKE kann mit verschiedenen Platzhaltern belegt werden: _ steht für ein fehlendes Zeichen und % steht für eine beliebige Zeichenfolge. So können mit der Abfrage auch Felder nach Inhalt durchsucht werden.

Abfrage mit Filter und Sortierung

SELECT Vorname, Name, StrasseNr, Plz, Ort 
FROM Student 
WHERE Plz = '20095'
ORDER BY Name

listet Vorname, Name, StrasseNr, Plz und Ort aller Studenten aus dem angegebenen Postleitzahlbereich sortiert nach Nachnamen.

Abfrage mit verknüpften Tabellen

SELECT Vorlesung.VorlNr, Vorlesung.Titel, Professor.PersNr, Professor.Name
FROM Professor, Vorlesung
WHERE Professor.PersNr = Vorlesung.PersNr

Die Aufzählung hinter FROM legt die Datenquellen fest: an dieser Stelle können mit Hilfe sogenannter JOINs mehrere Tabellen über Schlüsselfelder miteinander verknüpft werden, so dass Daten aus verschiedenen Tabellen zusammengeführt und angezeigt werden.

Innerer natürlicher Verbund: Alle Datensätze aus den Tabellen Professor und Vorlesung, die den gleichen Wert im Feld PersNr haben. Professoren ohne Vorlesung und Vorlesungen ohne Professor werden damit nicht angezeigt.

Dies ist theoretisch äquivalent zu:

SELECT Vorlesung.VorlNr, Vorlesung.Titel, Professor.PersNr, Professor.Name
FROM Professor INNER JOIN Vorlesung
ON Professor.PersNr = Vorlesung.PersNr

Vorsicht: Nicht alle Implementierungen verstehen die Schlüsselworte „INNER“, „OUTER“ und „JOIN“.

Tabellen können auch ohne Verwendung von Schlüsselfeldern miteinander verknüpft werden:

SELECT Vorlesung.Titel, Professor.Name
FROM Professor, Vorlesung
WHERE Professor.PersNr = Vorlesung.PersNr

Linker äußerer Verbund

SELECT Vorlesung.VorlNr, Vorlesung.Titel, Professor.PersNr, Professor.Name
FROM Professor LEFT OUTER JOIN Vorlesung
ON Professor.PersNr = Vorlesung.PersNr

Äußerer linker Verbund: Alle Datensätze der Tabelle Professor und alle Datensätze aus beiden Tabellen, die den gleichen Wert im Feld PersNr haben. Professoren ohne Vorlesung sind enthalten, Vorlesungen ohne Professor sind nicht enthalten.

Die folgende Abfrage liefert nur diejenigen Datensätze, zu denen kein passender Datensatz im linken äußeren Verbund existiert (alle Professoren, die keine Vorlesungen halten):

SELECT Professor.PersNr, Professor.Name
FROM Professor LEFT OUTER JOIN Vorlesung
ON Professor.PersNr = Vorlesung.PersNr 
WHERE Vorlesung.PersNr IS NULL

Das Gleiche mittels einer Unterabfrage:

SELECT a.PersNr, a.Name
FROM Professor a
WHERE NOT EXISTS (SELECT * FROM Vorlesung WHERE PersNr = a.PersNr)

Gruppierung mit Aggregat-Funktionen

SELECT COUNT(Vorlesung.PersNr) AS Anzahl, Professor.PersNr, Professor.Name
FROM Professor LEFT OUTER JOIN Vorlesung
ON Professor.PersNr = Vorlesung.PersNr
GROUP BY Professor.Name, Professor.PersNr

Äußerer linker Verbund und Gruppierung, Aggregation: Zählt die Anzahl der Vorlesungen pro Professor.

Bemerkung: COUNT(Professor.PersNr) oder COUNT(*) wären falsch (Nullwerte sollen nicht mitgezählt werden).

Zusammenfassung

Zusammengefasst sind die wichtigsten Elemente einer SQL-SELECT-Abfrage wie folgt anzugeben:

SELECT [DISTINCT] Auswahlliste [AS Spaltenalias]
FROM Quelle [AS Tabellenalias]
[WHERE Where-Klausel]
[GROUP BY (Group-by-Attribut)+
[HAVING Having-Klausel]]
[ORDER BY (Sortierungsattribut [ASC|DESC])+];

Erläuterung:

  • DISTINCT gibt an, dass aus der Ergebnisrelation gleiche Ergebnistupel entfernt werden sollen. Es wird also jeder Datensatz nur einmal ausgegeben, auch wenn er mehrfach in der Tabelle vorkommt. Sonst liefert SQL eine Multimenge zurück.
  • Auswahlliste bestimmt, welche Spalten der Quelle auszugeben sind (* für alle) und ob Aggregatfunktionen anzuwenden sind. Wie bei allen anderen Aufzählungen werden die einzelnen Elemente mit Komma voneinander getrennt.
  • 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, also Relationen für die Abfrage umbenannt werden (vgl. Beispiele).
  • Where-Klausel bestimmt Bedingungen, auch Filter genannt, unter denen die Daten ausgegeben werden sollen. In SQL ist hier auch die Angabe von Unterabfragen möglich, so dass SQL streng relational vollständig wird.
  • Group-by-Attribut legt fest, ob unterschiedliche Werte als einzelne Zeilen ausgegeben werden sollen (GROUP BY = Gruppierung) oder aber die Feldwerte der Zeilen durch Aggregationen wie Addition (SUM), Durchschnitt (AVG), Minimum (MIN), Maximum (MAX) zu einem Ergebniswert zusammengefasst werden, der sich auf die Gruppierung bezieht.
  • Having-Klausel ist wie die Where-Klausel, nur dass sich die angegebene Bedingung auf das Ergebnis einer Aggregationsfunktion bezieht, zum Beispiel HAVING SUM (Betrag) > 0.
  • Sortierungsattribut: nach ORDER BY werden Attribute angegeben, nach denen sortiert werden soll. Die Standardvoreinstellung ist ASC, das bedeutet aufsteigende Sortierung, DESC ist absteigende Sortierung.

Mengenoperatoren können auf mehrere SELECT-ABFRAGEN angewandt werden, die gleich viele Attribute haben und bei denen die Datentypen der Attribute übereinstimmen:

  • UNION vereinigt die Ergebnismengen. In einigen Implementierungen werden mehrfach vorkommende Ergebnistupel wie bei DISTINCT entfernt, ohne dass "UNION DISTINCT" geschrieben werden muss bzw. darf.
  • UNION ALL vereinigt die Ergebnismengen. Mehrfach vorkommende Ergebnistupel bleiben erhalten. Einige Implementierungen interpretieren aber "UNION" wie "UNION ALL" und verstehen das "ALL" möglicherweise nicht und geben eine Fehlermeldung aus.
  • EXCEPT liefert die Tupel, die in einer ersten, jedoch nicht in einer zweiten Ergebnismenge enthalten sind. Mehrfach vorkommende Ergebnistupel werden entfernt.
  • MINUS ist ein analoger Operator wie EXCEPT, der von manchen SQL-Dialekten alternativ benutzt wird.
  • INTERSECT liefert die Schnittmenge zweier Ergebnismengen. Mehrfach vorkommende Ergebnistupel werden entfernt.

Redundanz

Hauptartikel: Normalisierung (Datenbank)

Ein Grundsatz des Datenbankdesigns ist, dass in einer Datenbank keine Redundanzen auftreten sollen. Dies bedeutet, dass jede Information, also z. B. eine Adresse, nur genau einmal gespeichert wird.

Beispiel: in der Teilnehmerliste einer Vorlesung werden die Adressen nicht erneut erfasst, sondern nur indirekt über die Matrikelnummer. Um dennoch eine Teilnehmerliste mit Adressen zu erstellen, erfolgt eine SELECT-Abfrage, in der die Teilnehmertabelle mit der Studententabelle verknüpft wird (siehe oben: JOIN).

In manchen Fällen ist die Performance einer Datenbank besser, wenn sie nicht (vollständig) normalisiert wird. In diesem Falle werden in der Praxis oft Redundanzen bewusst in Kauf genommen, um zeitaufwändige und komplexe Joins zu verkürzen und so die Geschwindigkeit der Abfragen zu erhöhen. Man spricht auch von einer Denormalisierung einer Datenbank. Wann (und ob überhaupt) eine Denormalisierung sinnvoll ist, ist umstritten und hängt von den Umständen ab.

Schlüssel

Hauptartikel: Schlüssel (Datenbank)

Während die Informationen auf viele Tabellen verteilt werden müssen, um Redundanzen zu vermeiden, sind Schlüssel das Mittel, um diese verstreuten Informationen miteinander zu verknüpfen.

So hat in der Regel jeder Datensatz eine eindeutige Nummer oder ein anderes eindeutiges Feld, um ihn zu identifizieren. Diese Identifikationen werden als Schlüssel bezeichnet.

Wenn dieser Datensatz in anderen Zusammenhängen benötigt wird, wird lediglich sein Schlüssel angegeben. So werden bei der Erfassung von Vorlesungsteilnehmern nicht deren Namen und Adressen, sondern nur deren jeweilige Matrikelnummer erfasst, aus der sich alle weiteren Personalien ergeben.

So kann es sein, dass manche Datensätze nur aus Schlüsseln (meist Zahlen) bestehen, die erst in Verbindung mit Verknüpfungen verständlich werden. Der eigene Schlüssel des Datensatzes wird dabei als Primärschlüssel bezeichnet. Andere Schlüssel im Datensatz, die auf die Primärschlüssel anderer Tabellen verweisen, werden als Fremdschlüssel bezeichnet.

Schlüssel können auch aus einer Kombination mehrerer Angaben bestehen. Z. B. können die Teilnehmer einer Vorlesung durch die eindeutige Kombination von Vorlesungsnummer und Studentennummer identifiziert werden, so dass die doppelte Anmeldung eines Studenten zu einer Vorlesung ausgeschlossen ist.

Referentielle Integrität

Hauptartikel: Referentielle Integrität

Referentielle Integrität bedeutet, dass Datensätze, die von anderen Datensätzen verwendet werden, in der Datenbank auch vollständig vorhanden sind.

Im obigen Beispiel bedeutet dies, dass in der Teilnehmertabelle nur Matrikel-Nummern gespeichert sind, die es in der Studenten-Tabelle auch tatsächlich gibt.

Diese wichtige Funktionalität kann (und sollte) bereits von der Datenbank überwacht werden, so dass z. B.

  • nur vorhandene Matrikelnummern in die Teilnehmertabelle eingetragen werden können,
  • der Versuch, den Datensatz eines Studenten, der schon eine Vorlesung belegt hat, zu löschen, entweder verhindert wird (Fehlermeldung) oder der Datensatz auch gleich aus der Teilnehmertabelle entfernt wird (Löschweitergabe) und
  • der Versuch, die Matrikelnummer eines Studenten, der schon eine Vorlesung belegt hat, zu ändern, entweder verhindert wird (Fehlermeldung) oder der Eintrag in der Teilnehmertabelle gleich mitgeändert wird (Aktualisierungsweitergabe).

Widersprüchlichkeit von Daten wird allgemein als Dateninkonsistenz bezeichnet. Diese besteht, wenn Daten bspw. die Integritätsbedingungen (z. B. Constraints oder Fremdschlüsselbeziehungen) nicht erfüllen.

Ursachen für Dateninkonsistenzen können Fehler bei der Analyse des Datenmodells, fehlende Normalisierung des ERM oder Fehler in der Programmierung sein.

Zum letzteren gehören die Lost-Update-Phänomene sowie die Verarbeitung von zwischenzeitlich veralteten Zwischenergebnissen. Dies tritt vor allem bei der Online-Verarbeitung auf, da dem Nutzer angezeigte Werte nicht in einer Transaktion gekapselt werden können.

Beispiel:
Transaktion A liest Wert x
Transaktion B verringert Wert x um 10
Transaktion A erhöht den gespeicherten Wert von x um eins und schreibt zurück
Ergebnis x' = x+1
Die Änderung von B ist verloren gegangen

SQL-Datentypen

Hauptartikel: Datentypen

In den oben vorgestellten Befehlen create table und alter table wird bei der Definition jeder Spalte angegeben, welchen Datentyp die Werte dieser Spalte annehmen können. Dazu liefert SQL eine ganze Reihe standardisierter Datentypen mit. Die einzelnen DBMS-Hersteller haben diese Liste jedoch um eine Unzahl weiterer Datentypen erweitert. Die wichtigsten Standarddatentypen sind:

integer
Ganze Zahl (positiv oder negativ), wobei je nach Zahl der verwendeten Bits Bezeichnungen wie smallint, tinyint oder bigint verwendet werden. Die jeweiligen Grenzen und die verwendete Terminologie sind vom Datenbanksystem definiert.
numeric (n, m) oder decimal (n, m)
Festkommazahl (positiv oder negativ) mit insgesamt maximal n Stellen, davon m Nachkommastellen. Wegen der hier erfolgenden Speicherung als Dezimalzahl ist eine besonders für Geldbeträge notwendige Genauigkeit gegeben.
float (m)
Gleitkommazahl (positiv oder negativ) mit maximal m Nachkommastellen.
real
Gleitkommazahl (positiv oder negativ). Die Genauigkeit für diesen Datentyp ist jeweils vom Datenbanksystem definiert.
double oder double precision
Gleitkommazahl (positiv oder negativ). Die Genauigkeit für diesen Datentyp ist jeweils vom Datenbanksystem definiert.
float und double
sind für technisch-wissenschaftliche Werte geeignet und umfassen auch die Exponentialdarstellung. Wegen der Speicherung im Binärformat sind sie aber für Geldbeträge nicht geeignet, weil sich beispielsweise der Wert 0,10 € (entspricht 10 Cent) nicht exakt abbilden lässt.
character (n) oder char (n)
Zeichenkette Text mit n Zeichen.
varchar (n) oder character varying (n)
Zeichenkette (also Text) von variabler Länge, aber maximal n druckbaren und/oder nicht druckbaren Zeichen. Die Variante varchar2 ist für Oracle spezifisch, ohne dass sie sich tatsächlich unterscheidet.
date
Datum (ohne Zeitangabe)
time
Zeitangabe (evtl. inklusive Zeitzone)
timestamp
Zeitstempel (umfasst Datum und Uhrzeit; evtl. inklusive Zeitzone), meistens mit Millisekundenauflösung, teilweise auch mikrosekundengenau
boolean
Boolesche Variable (kann die Werte true(wahr) oder false (falsch) annehmen). Dieser Datentyp ist laut SQL:2003 optional und nicht alle DBMS stellen diesen Datentyp bereit.
blob (n) oder binary large object (n)
Binärdaten von maximal n Bytes Länge.
clob (n) oder character large object (n)
Zeichenketten mit maximal n Zeichen Länge.

Wenn es die Tabellendefinition erlaubt, können Attribute auch den Wert NULL annehmen, wenn kein Wert bekannt ist oder aus anderen Gründen kein Wert gespeichert werden soll. Der NULL-Wert ist von allen anderen möglichen Werten des Datentyps verschieden.

Transaktion, Commit und Rollback

Hauptartikel: Transaktion (Informatik)

Eine Transaktion bezeichnet eine Menge von Datenbankänderungen, die zusammen ausgeführt werden (müssen). So ist beispielsweise die Buchung (als Transaktion) eines Geldbetrags durch zwei atomare Datenbankoperationen „Abbuchen des Geldbetrages von Konto A“ und „Buchung des Geldbetrages auf Konto B“ gekennzeichnet. Kann die vollständige Abarbeitung der elementaren Datenbankoperationen der Transaktion nicht durchgeführt werden (z. B. aufgrund eines Fehlers), müssen alle durchgeführten Änderungen an dem Datenbestand auf den Ausgangszustand zurückgesetzt werden.

Der Vorgang, der alle Änderungen einer Transaktion zurücksetzt, wird als Rollback bezeichnet. Der Begriff Commit bezeichnet das Ausführen einer Transaktion. Transaktionen sind eine Möglichkeit, die Konsistenz des Datenbestandes zu sichern. Im Beispiel der doppelten Kontenführung wird durch das Verhindern von ungültigen Teilbuchungen eine ausgeglichene Kontobilanz gewährleistet.

Datenbanken erlauben es zum Teil, bestimmte Befehle außerhalb einer Transaktion auszuführen. Darunter fällt insbesondere das Laden von Daten in Tabellen oder das Exportieren von Daten mittels Utilities. Manche DBMS erlauben das temporäre Abschalten der Transaktionslogik sowie einiger Kontrollen zur Erhöhung der Verarbeitungsgeschwindigkeit. Dies muss allerdings meist durch einen expliziten Befehl erzwungen werden, um ein versehentliches Ändern von Daten außerhalb einer Transaktion zu vermeiden. Solche Änderungen können, falls eine Datenbankwiederherstellung erforderlich ist, zu schweren Problemen oder gar Datenverlusten führen. Eine Transaktion wird mit der SQL-Anweisung Commit beendet. Alle Änderungen der Transaktion werden persistent gemacht, und das DBMS stellt durch geeignete (interne) Mittel (z. B. Logging) sicher, dass diese Änderungen nicht verloren gehen.

Mit dem Befehl Rollback wird eine Transaktion ebenfalls beendet, es werden jedoch alle Änderungen seit Beginn der Transaktion rückgängig gemacht. Das heißt, der Zustand des Systems (in Bezug auf die Änderungen der Transaktion) ist der gleiche wie vor der Transaktion.

Programmieren mit SQL

Programmierschnittstelle

SQL ist keine Turing-vollständige Programmiersprache, ermöglicht also nicht die Realisierung von beliebigen Computerprogrammen. Sie kann aber mit anderen Programmiersprachen kombiniert werden, um eine Programmierung im engeren Sinne zu ermöglichen. Hierfür gibt es unterschiedliche Techniken.

Statisches und dynamisches SQL

Unabhängig von der verwendeten Programmiertechnik wird zwischen statischem und dynamischem SQL unterschieden.

  • Bei statischem SQL ist die SQL-Anweisung dem Datenbanksystem zum Zeitpunkt der Programmübersetzung bekannt und festgelegt (z. B. wenn die Abfrage eines Kontos vorformuliert ist und zur Laufzeit nur die Kontonummer eingesetzt wird).
  • Bei dynamischem SQL ist die SQL-Anweisung dem Datenbanksystem erst zum Zeitpunkt der Programmausführung bekannt (z. B. weil der Benutzer die komplette Abfrage eingibt). So sind z. B. alle SQL-Anweisungen, die mittels SQL/CLI oder JDBC ausgeführt werden grundsätzlich dynamisch. Ausgeführt werden dynamische SQL-Anweisungen im Allgemeinen mit execute immediate (SQL-String).

Bei dynamischem SQL muss das Datenbanksystem die SQL-Anweisung zur Laufzeit des Programms interpretieren und den Zugriffspfad optimieren. Da dieser so genannte Parse-Vorgang Zeit in Anspruch nimmt, puffern viele Datenbanksysteme die bereits geparsten SQL-Anweisungen, um so, falls sie sich wiederholen, die Zeit für ein erneutes Parsen zu sparen. Bei statischem SQL kann schon bei der Übersetzung der Programme bzw. beim Binden der SQL-Anweisungen an eine Datenbank (so genanntes Bind der SQL-Befehle) der optimale Zugriffsweg bestimmt werden. Damit sind kürzestmögliche Laufzeiten der Anwendungsprogramme möglich, allerdings muss der Zugriffsweg aller betroffenen Programme neu bestimmt werden, wenn sich Voraussetzungen (z. B. Statistiken) ändern (Rebind). Die Bind-Phase ist heute vor allem im Großrechner-Umfeld bekannt, die meisten Datenbanksysteme optimieren hingegen zur Laufzeit.

Erweiterungen

Es existiert eine Vielzahl von Erweiterungen des SQL-Standards.

SQL/XML ist ein ANSI- und ISO-Standard (ISO/IEC 9075-14:2006), der es ermöglicht, XML-Dokumente in SQL-Datenbanken zu speichern, mit XPath und XQuery abzufragen und relationale Datenbankinhalte als XML zu exportieren.[3] Der ISO-Standard ist nicht frei verfügbar, jedoch gibt es ein Zip-Archiv mit einem Entwurf von 2008.[4]

SQL/PSM ist ein ISO-Standard, der SQL um prozedurale Programmierkonstrukte erweitert. Sie bietet viele Erweiterungen zu den Standard-SQL-Sprachelementen. Sie erlaubt unter anderem das Programmieren von Schleifen (FOR, WHILE, REPEAT UNTIL, LOOP), Cursor, Exception-Handling, Trigger und eigenen Funktionen. Oracle implementiert diese Funktionalität unter dem Namen PL/SQL, DB2 verwendet den Begriff SQL/PL, PostgreSQL nennt es PL/pgSQL.

Siehe auch

Literatur

  • Donald D. Chamberlin, Raymond F. Boyce: SEQUEL: A Structured English Query Language. SIGMOD Workshop, Vol. 1 1974: 249-264
  • Donald D. Chamberlin, Morton M. Astrahan, Kapali P. Eswaran, Patricia P. Griffiths, Raymond A. Lorie, James W. Mehl, Phyllis Reisner, Bradford W. Wade: SEQUEL 2: A Unified Approach to Data Definition, Manipulation, and Control. IBM Journal of Research and Development 20(6): 560-575(1976)
  • Günter Matthiessen, Michael Unterstein: Relationale Datenbanken und SQL – Konzepte der Entwicklung und Anwendung. Addison-Wesley, ISBN 3-8273-2085-2.
  • Edwin Schicker: Datenbanken und SQL – Eine praxisorientierte Einführung. Teubner, ISBN 3-519-02991-X.
  • Oliver Bartosch, Markus Throll: Einstieg in SQL. Galileo Press, ISBN 3-89842-497-9.
  • Daniel Warner, Günter Leitenbauer: SQL. Franzis, ISBN 3-7723-7527-8.
  • Faeskorn-Woyke, H., B.Bertelsmeier, P.Riemer, E. Bauer: Datenbanksysteme, Theorie und Praxis mit SQL2003, Oracle und MySQL.Pearson-Studium, ISBN 978-3-8273-7266-6.
  • Jörg Fritze, Jürgen Marsch: Erfolgreiche Datenbankanwendung mit SQL3. Praxisorientierte Anleitung – effizienter Einsatz – inklusive SQL-Tuning. Vieweg Verlag, ISBN 3-528-55210-7.
  • Can Türker: SQL 1999 & SQL 2003. Dpunkt Verlag, ISBN 3-89864-219-4.
  • Gregor Kuhlmann, Friedrich Müllmerstadt: SQL. Rowohlt, ISBN 3-499-61245-3.
  • Michael J. Hernandez, John L. Viescas: Go To SQL. Addison-Wesley, ISBN 3-8273-1772-X.
  • A. Kemper, A. Eickler: Datenbanksysteme – Eine Einführung. Oldenbourg, ISBN 3-486-25053-1.
  • Marcus Throll, Oliver Bartosch: Einstieg in SQL 2008. 2. Auflage, Galileo Computing, ISBN 978-3-8362-1039-3 inklusive Übungssoftware SQL-Teacher
  • Marco Skulschus: SQL und relationale Datenbanken Comelio Medien, ISBN 978-3-939701-11-8.
  • Michael Wagner: SQL/XML:2006 - Evaluierung der Standardkonformität ausgewählter Datenbanksysteme 1. Auflage, Diplomica Verlag, ISBN 3-8366-9609-6.

Weblinks

Wikibooks Wikibooks: SQL – Lern- und Lehrmaterialien

Einzelnachweise

  1. Diskussion über System R und zur Namensänderung von SEQUEL zu SQL
  2. Die SQL-Normen als PDF, abgerufen am 6. Februar 2010
  3. SQLX
  4. Zip-Archiv mit einer SQL/XML-Entwurfsversion von 2008

Wikimedia Foundation.

Игры ⚽ Нужно решить контрольную?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • SQL-92 — SQL (das Kürzel für Structured Query Language; offizielle Aussprache [ɛskjuːˈɛl], häufig auch [ˈsiːkwəl] →SEQUEL), ist eine Datenbanksprache zur Definition, Abfrage und Manipulation von Daten in relationalen Datenbanken. SQL ist von ANSI und ISO… …   Deutsch Wikipedia

  • SQL-99 — SQL (das Kürzel für Structured Query Language; offizielle Aussprache [ɛskjuːˈɛl], häufig auch [ˈsiːkwəl] →SEQUEL), ist eine Datenbanksprache zur Definition, Abfrage und Manipulation von Daten in relationalen Datenbanken. SQL ist von ANSI und ISO… …   Deutsch Wikipedia

  • SQL — Класс языка: Мультипарадигмальный Появился в: 1974 Автор(ы): Дональд Чэмбэрлин Рэймонд Бойс Релиз: SQL:2008 (2008) Типизация данных …   Википедия

  • SQL — Desarrollador(es) IBM ISO/IEC 9075 1:2008 Información general Paradigma Multiparadigma …   Wikipedia Español

  • SQL-92 — SQL 92  третья версия языка запросов к базам данных SQL. В отличие от стандарта SQL 89, третья версия стала весьма существенным обновлением языка. За исключением некоторых мелких противоречий стандарт SQL 89 практически полностью совместим… …   Википедия

  • Sql.ru — SQL.ru …   Википедия

  • SQL —   [Abk. für Structured Query Language, dt. »strukturierte Abfragesprache«, Aussprache wie »siekwell« oder »es ku el«], eine seit den frühen 1970er Jahren von IBM unter dem Namen Sequel entwickelte Abfragesprache zur Bearbeitung der Inhalte… …   Universal-Lexikon

  • SQL-92 — was the third revision of the SQL database query language. Unlike SQL 89, it was a major revision of the standard. For all but a few minor incompatibilities, the SQL 89 standard is forwards compatible with SQL 92.New Features* SQL Agent * New… …   Wikipedia

  • SQL PL — stands for Structured Query Language Procedural Language and was developed by IBM as a set of commands that extend the use of SQL in the DB2 UDB database system. [ [http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.ud… …   Wikipedia

  • SQL/MM — est une norme pour contrôler des données spatiales dans des systèmes de bases de données relationnelles. Portail de l’informatique Ce document provient de « SQL/MM ». Catégorie : Base de données …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”