www.wikidata.de-de.nina.az
Dieser Artikel behandelt die Datenbanksprache Zu weiteren Bedeutungen siehe SQL Begriffsklarung SQL offizielle Aussprache ɛskjuːˈɛl mitunter auch ˈsiːkwel auf Deutsch auch haufig die deutsche Aussprache der Buchstaben ist eine Datenbanksprache zur Definition von Datenstrukturen in relationalen Datenbanken sowie zum Bearbeiten Einfugen Verandern Loschen und Abfragen von darauf basierenden Datenbestanden Die Sprache basiert auf der relationalen Algebra ihre Syntax ist relativ einfach aufgebaut und semantisch an die englische Umgangssprache angelehnt Ein gemeinsames Gremium von ISO und IEC standardisiert die Sprache unter Mitwirkung nationaler Normungsgremien wie ANSI oder DIN Durch den Einsatz von SQL strebt man die Unabhangigkeit der Anwendungen vom eingesetzten Datenbankmanagementsystem an Die Bezeichnung SQL wird im allgemeinen Sprachgebrauch als Abkurzung fur Structured Query Language auf Deutsch Strukturierte Abfrage Sprache aufgefasst obwohl sie laut Standard ein eigenstandiger Name ist Die Bezeichnung leitet sich von dem Vorganger SEQUEL ˈsiːkwel Structured English Query Language ab welche mit Beteiligung von Edgar F Codd IBM in den 1970er Jahren von Donald D Chamberlin und Raymond F Boyce entwickelt wurde SEQUEL wurde spater in SQL umbenannt weil SEQUEL ein eingetragenes Warenzeichen der Hawker Siddeley Aircraft Company ist 1 Inhaltsverzeichnis 1 Sprachelemente und Beispiele 1 1 Einfache Abfrage 1 2 Abfrage mit Spaltenauswahl 1 3 Abfrage mit eindeutigen Werten DISTINCT 1 4 Abfrage mit Umbenennung AS 1 5 Abfrage mit Filter WHERE 1 6 Abfrage mit Filter nach Inhalt WHERE LIKE 1 7 Abfrage mit Filter und Sortierung ORDER BY 1 8 Abfrage mit verknupften Tabellen und INNER JOIN 1 9 Linker ausserer Verbund LEFT OUTER JOIN 1 10 Gruppierung mit Aggregat Funktionen GROUP BY 1 11 Zusammenfassung eines SELECT 1 12 Einfugen von Datensatzen INSERT INTO VALUES 1 13 Andern von Datensatzen UPDATE 1 14 Loschen von Datensatzen DELETE 1 15 Zusammenfassung von INSERT UPDATE und DELETE 2 Datendefinition 2 1 Datenbanktabelle CREATE TABLE 2 2 Datenbankindex CREATE INDEX 2 3 Sicht CREATE VIEW 2 4 Zusammenfassung von CREATE TABLE CREATE INDEX und CREATE VIEW 3 Redundanz 4 Schlussel 5 Referenzielle Integritat 6 SQL Datentypen 7 Transaktion Commit und Rollback 8 Programmieren mit SQL 8 1 Programmierschnittstelle 8 2 Statisches und dynamisches SQL 9 Chronologie 10 Sprachstandard 11 Erweiterungen 12 Literatur 13 Weblinks 14 Siehe auch 15 EinzelnachweiseSprachelemente und Beispiele Bearbeiten nbsp Bestandteile von SQLSQL Befehle lassen sich in funf Kategorien unterteilen Zuordnung nach der Theorie der Datenbanksprachen in Klammern Data Query Language DQL Befehle zur Abfrage und Aufbereitung der gesuchten Informationen wird auch als Untermenge der DML klassifiziert Data Manipulation Language DML Befehle zur Datenmanipulation Andern Einfugen Loschen von Datensatzen und lesendem Zugriff Data Definition Language DDL Befehle zur Definition des Datenbankschemas Erzeugen Andern Loschen von Datenbanktabellen Definition von Primarschlusseln und Fremdschlusseln Data Control Language DCL Befehle fur die Rechteverwaltung Transaction Control Language TCL Befehle fur die TransaktionskontrolleDie 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 Verfugung gestellt Das Ergebnis einer Abfrage sieht wiederum aus wie eine Tabelle und kann oft auch wie eine Tabelle angezeigt bearbeitet und weiterverwendet werden Siehe auch Datenbanktabelle Die grundlegenden Befehle und Begriffe werden anhand des folgenden Beispiels erklart ER Diagramm nbsp Relationen Student MatrNr Name26120 Fichte25403 Jonas27103 Fauler hoert MatrNr u VorlNr u 25403 500126120 500126120 5045 Vorlesung VorlNr Titel PersNr5001 ET 155022 IT 125045 DB 12 Professor PersNr Name12 Wirth15 Tesla20 UrlauberEinfache Abfrage Bearbeiten SELECT FROM Student listet alle Spalten und alle Zeilen der Tabelle Student auf Ergebnis MatrNr Name26120 Fichte25403 Jonas27103 FaulerAbfrage mit Spaltenauswahl Bearbeiten SELECT VorlNr Titel FROM Vorlesung listet die Spalten VorlNr und Titel aller Zeilen der Tabelle Vorlesung auf Ergebnis VorlNr Titel5001 ET5022 IT5045 DBAbfrage mit eindeutigen Werten DISTINCT Bearbeiten SELECT DISTINCT MatrNr FROM hoert listet nur unterschiedliche Eintrage der Spalte MatrNr aus der Tabelle hoert auf Dies zeigt die Matrikelnummern aller Studenten die mindestens eine Vorlesung horen wobei mehrfach auftretende Matrikelnummern nur einmal ausgegeben werden Ergebnis MatrNr2540326120Abfrage mit Umbenennung AS Bearbeiten 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 aufgefuhrt Ergebnis Matrikelnummer Name26120 Fichte25403 Jonas27103 FaulerAbfrage mit Filter WHERE Bearbeiten SELECT VorlNr Titel FROM Vorlesung WHERE Titel ET listet VorlNr und Titel aller derjenigen Zeilen der Tabelle Vorlesung auf deren Titel ET ist Die solchermassen strukturierte haufig verwendete Anweisung wird nach den Anfangsbuchstaben auch als SFW Block bezeichnet Ergebnis VorlNr Titel5001 ETAbfrage mit Filter nach Inhalt WHERE LIKE Bearbeiten SELECT Name FROM Student WHERE Name LIKE F listet die Namen aller Studenten auf deren Name mit F beginnt im Beispiel Fichte und Fauler LIKE kann mit verschiedenen Platzhaltern verwendet werden steht fur ein einzelnes beliebiges Zeichen steht fur eine beliebige Zeichenfolge Manche Datenbanksysteme bieten weitere solcher Wildcard Zeichen an etwa fur Zeichenmengen Ergebnis NameFichteFaulerAbfrage mit Filter und Sortierung ORDER BY Bearbeiten 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 aufsteigend sortiert nach Name auf Abfrage mit verknupften Tabellen und INNER JOIN Bearbeiten SELECT Vorlesung VorlNr Vorlesung Titel Professor PersNr Professor Name FROM Professor Vorlesung WHERE Professor PersNr Vorlesung PersNr Die Aufzahlung hinter FROM legt die Datenquellen fest An dieser Stelle konnen mit Hilfe sogenannter JOINs mehrere Tabellen miteinander verknupft werden so dass Daten aus verschiedenen Tabellen zusammengefuhrt und angezeigt werden In diesem Beispiel wird ein innerer naturlicher Verbund NATURAL INNER JOIN verwendet alle Datensatze 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 aquivalent 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 beide Schreibweisen die Oracle Schreibweise FROM Professor Vorlesung gilt als veraltet und ist weniger verbreitet Sie entspricht auch nicht dem ANSI Standard und sollte deshalb vermieden werden Aus historischen Grunden ist sie jedoch noch haufig anzutreffen Tabellen konnen nicht nur uber Schlusselfelder sondern uber beliebige Felder miteinander verknupft werden wie das folgende fachlich unsinnige Beispiel zeigt SELECT Vorlesung Titel Professor Name FROM Professor Vorlesung WHERE Professor Name lt gt Vorlesung Titel Das Ergebnis enthalt die Kombinationen aller Vorlesungen und aller Professoren bei denen der Name des Professors vom Titel der Vorlesung abweicht das sind einfach alle keine Vorlesung heisst wie ein Professor Titel NameET TeslaET WirthET UrlauberIT TeslaIT WirthIT UrlauberDB TeslaDB WirthDB UrlauberLinker ausserer Verbund LEFT OUTER JOIN Bearbeiten SELECT Professor PersNr Professor Name Vorlesung VorlNr Vorlesung Titel FROM Professor LEFT OUTER JOIN Vorlesung ON Professor PersNr Vorlesung PersNr ergibt alle Datensatze der Tabelle Professor verbunden mit den Datensatzen der Tabelle Vorlesung die den jeweils gleichen Wert im Feld PersNr haben Professoren ohne Vorlesung sind im Ergebnis enthalten Die Spalten aus der Vorlesung Tabelle haben dann den Wert NULL Vorlesungen ohne Professor sind nicht enthalten Die folgende Abfrage liefert nur diejenigen Datensatze zu denen kein passender Datensatz im linken ausseren 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 kann mittels einer Unterabfrage erreicht werden SELECT Professor PersNr Professor Name FROM Professor WHERE NOT EXISTS SELECT FROM Vorlesung WHERE PersNr Professor PersNr Gruppierung mit Aggregat Funktionen GROUP BY Bearbeiten SELECT Professor PersNr Professor Name COUNT Vorlesung PersNr AS Anzahl FROM Professor LEFT OUTER JOIN Vorlesung ON Professor PersNr Vorlesung PersNr GROUP BY Professor Name Professor PersNr zahlt die Anzahl der Vorlesungen pro Professor mit Hilfe der Aggregat Funktion COUNT Bemerkung COUNT Professor PersNr oder COUNT waren falsch NULL Werte sollen nicht mitgezahlt werden Zusammenfassung eines SELECT Bearbeiten Zusammengefasst kann man die wichtigsten Elemente einer SQL SELECT Abfrage etwa so beschreiben SELECT DISTINCT Auswahlliste AS Spaltenalias FROM Quelle AS Tabellenalias evtl mit JOIN Verknupfungen WHERE Where Klausel GROUP BY ein oder mehrere Group by Attribute HAVING Having Klausel ORDER BY ein oder mehrere Sortierungsattribute mit ASC DESC Erlauterung 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 zuruck Auswahlliste bestimmt welche Spalten der Quelle auszugeben sind fur alle und ob Aggregatsfunktionen anzuwenden sind Wie bei allen anderen Aufzahlungen werden die einzelnen Elemente mit Komma voneinander getrennt Quelle gibt an wo die Daten herkommen Es konnen Relationen und Sichten angegeben werden und miteinander als kartesisches Produkt oder als Verbund JOIN ab SQL 92 verknupft werden Mit der zusatzlichen Angabe eines Namens konnen Relationen fur 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 moglich so dass SQL streng relational vollstandig 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 gt 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 konnen auf mehrere SELECT Abfragen angewandt werden die gleich viele Attribute haben und bei denen die Datentypen der Attribute ubereinstimmen UNION vereinigt die Ergebnismengen In einigen Implementierungen werden mehrfach vorkommende Ergebnistupel wie bei DISTINCT entfernt ohne dass UNION DISTINCT geschrieben werden muss beziehungsweise darf UNION ALL vereinigt die Ergebnismengen Mehrfach vorkommende Ergebnistupel bleiben erhalten Einige Implementierungen interpretieren aber UNION wie UNION ALL und verstehen das ALL moglicherweise 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 ein analoger Operator wie EXCEPT der in manchen SQL Dialekten alternativ benutzt wird INTERSECT liefert die Schnittmenge zweier Ergebnismengen Mehrfach vorkommende Ergebnistupel werden entfernt Einfugen von Datensatzen INSERT INTO VALUES Bearbeiten INSERT INTO Vorlesung VorlNr Titel PersNr VALUES 1000 Softwareentwicklung 1 12 INSERT INTO Vorlesung VorlNr Titel PersNr VALUES 1600 Algorithmen 12 INSERT INTO Vorlesung VorlNr Titel PersNr VALUES 1200 Netzwerke 1 20 INSERT INTO Vorlesung VorlNr Titel PersNr VALUES 1001 Datenbanken 15 fugt vier Datensatze in die Tabelle Vorlesung ein Die Werte mussen mit den Datentypen der Felder VorlNr Titel und PersNr zusammenpassen SELECT FROM Vorlesung liefert dann zum Beispiel das Ergebnis die Reihenfolge kann auch anders sein VorlNr Titel PersNr1001 Datenbanken 151000 Softwareentwicklung 1 121200 Netzwerke 1 205001 ET 125022 IT 121600 Algorithmen 125045 DB 15Andern von Datensatzen UPDATE Bearbeiten UPDATE Vorlesung SET VorlNr VorlNr 1000 PersNr 20 WHERE PersNr 15 andert alle Datensatze fur die PersNr den Wert 15 hat Der Wert von VorlNr wird um 1000 erhoht und der Wert von PersNr auf 20 gesetzt Ergebnis eines nachfolgenden SELECT ist eventuell mit anderer Reihenfolge VorlNr Titel PersNr1000 Softwareentwicklung 1 121200 Netzwerke 1 201600 Algorithmen 122001 Datenbanken 205001 ET 125022 IT 126045 DB 20Loschen von Datensatzen DELETE Bearbeiten DELETE FROM Vorlesung WHERE PersNr 12 loscht alle Datensatze fur die PersNr den Wert 12 hat Ergebnis eines nachfolgenden SELECT eventuell in anderer Reihenfolge VorlNr Titel PersNr1200 Netzwerke 1 202001 Datenbanken 206045 DB 20Zusammenfassung von INSERT UPDATE und DELETE Bearbeiten Verallgemeinert sehen die Anderungsanweisungen wie folgt aus INSERT Anweisung INSERT INTO Quelle Auswahlliste VALUES Werteliste SELECT lt Auswahlkriterien gt UPDATE Anweisung UPDATE Quelle SET Zuweisungsliste FROM From Klausel WHERE Auswahlbedingung DELETE Anweisung DELETE FROM Quelle WHERE Auswahlbedingung Datendefinition BearbeitenDatenbanktabelle CREATE TABLE Bearbeiten Die Datenbanktabelle Vorlesung kann mit der folgenden Anweisung erzeugt werden CREATE TABLE Vorlesung VorlNr INT NOT NULL PRIMARY KEY Titel VARCHAR NOT NULL PersNr NOT NULL FOREIGN KEY PersNr REFERENCES Professor PersNr In keinem der Felder VorlNr Titel PersNr ist der Wert NULL erlaubt Der Fremdschlussel PersNr referenziert den Primarschlussel PersNr der Tabelle Professor Damit wird sichergestellt dass in die Tabelle Vorlesung nur Datensatze eingefugt werden konnen fur die der Wert von PersNr in der Tabelle Professor als Primarschlussel vorkommt siehe referenzielle Integritat Datenbankindex CREATE INDEX Bearbeiten Mit der Anweisung CREATE INDEX VorlesungIndex ON Vorlesung PersNr Titel kann ein Datenbankindex fur die Tabelle Vorlesung definiert werden der vom Datenbanksystem bei der Ausfuhrung von Abfragen zur Beschleunigung verwendet werden kann Ob das sinnvoll ist entscheidet das Datenbanksystem eigenstandig durch komplexe Auswertungen und Analysen fur jede Abfrage erneut Sicht CREATE VIEW Bearbeiten Eine Sicht ist im Wesentlichen ein Alias fur eine Datenbankabfrage Sie kann wie eine Datenbanktabelle verwendet werden Die Anweisung CREATE VIEW Vorlesungssicht AS SELECT Vorlesung VorlNr Vorlesung Titel Professor PersNr Professor Name FROM Professor INNER JOIN Vorlesung ON Professor PersNr Vorlesung PersNr speichert die definierte Abfrage als Sicht Die Abfrage SELECT Titel Name FROM Vorlesungssicht WHERE VorlNr lt 5000 verwendet diese Sicht und konnte zum Beispiel folgendes Ergebnis liefern Titel NameSoftwareentwicklung 1 WirthNetzwerke 1 UrlauberAlgorithmen WirthDatenbanken UrlauberZusammenfassung von CREATE TABLE CREATE INDEX und CREATE VIEW Bearbeiten Zusammengefasst sind die wichtigsten Elemente der Definition einer Datenbanktabelle eines Datenbankindex oder einer Sicht wie folgt anzugeben CREATE TABLE Tabellenname Attributdefinition PRIMARY KEY FOREIGN KEY Attributliste REFERENCES Tabellenname Attributliste DROP TABLE Tabellenname ALTER TABLE Tabellenname Attributdefinition PRIMARY KEY FOREIGN KEY Attributliste REFERENCES Tabellenname Attributliste CREATE INDEX Indexname ON Tabellenname Attributliste DROP INDEX Indexname CREATE VIEW Sichtname Attributliste AS SELECT lt Auswahlkriterien gt DROP VIEW Sichtname Redundanz Bearbeiten Hauptartikel Normalisierung Datenbank Ein Grundsatz des Datenbankdesigns ist dass in einer Datenbank keine Redundanzen auftreten sollen Dies bedeutet dass jede Information also zum Beispiel eine Adresse nur genau einmal gespeichert wird Beispiel in der Teilnehmerliste einer Vorlesung werden die Adressen nicht erneut erfasst sondern nur indirekt uber die Matrikelnummer Um dennoch eine Teilnehmerliste mit Adressen zu erstellen erfolgt eine SELECT Abfrage in der die Teilnehmertabelle mit der Studententabelle verknupft wird siehe oben JOIN In manchen Fallen ist die Performance einer Datenbank besser wenn sie nicht vollstandig normalisiert wird In diesem Falle werden in der Praxis oft Redundanzen bewusst in Kauf genommen um zeitaufwandige und komplexe Joins zu verkurzen und so die Geschwindigkeit der Abfragen zu erhohen Man spricht auch von einer Denormalisierung einer Datenbank Wann und ob uberhaupt eine Denormalisierung sinnvoll ist ist umstritten und hangt von den Umstanden ab Schlussel Bearbeiten Hauptartikel Schlussel Datenbank Wahrend die Informationen auf viele Tabellen verteilt werden mussen um Redundanzen zu vermeiden sind Schlussel das Mittel um diese verstreuten Informationen miteinander zu verknupfen So hat in der Regel jeder Datensatz eine eindeutige Nummer oder ein anderes eindeutiges Feld um ihn zu identifizieren Diese Identifikationen werden als Schlussel bezeichnet Wenn dieser Datensatz in anderen Zusammenhangen benotigt wird wird lediglich sein Schlussel 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 Datensatze nur aus Schlusseln meist Zahlen bestehen die erst in Verbindung mit Verknupfungen verstandlich werden Der eigene Schlussel des Datensatzes wird dabei als Primarschlussel bezeichnet Andere Schlussel im Datensatz die auf die Primarschlussel anderer Tabellen verweisen werden als Fremdschlussel bezeichnet Schlussel konnen auch aus einer Kombination mehrerer Angaben bestehen Zum Beispiel konnen 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 Referenzielle Integritat Bearbeiten Hauptartikel Referentielle Integritat Referenzielle Integritat bedeutet dass Datensatze die von anderen Datensatzen verwendet werden in der Datenbank auch vollstandig vorhanden sind Im obigen Beispiel bedeutet dies dass in der Teilnehmertabelle nur Matrikel Nummern gespeichert sind die es in der Studenten Tabelle auch tatsachlich gibt Diese wichtige Funktionalitat kann und sollte bereits von der Datenbank uberwacht werden so dass zum Beispiel nur vorhandene Matrikelnummern in die Teilnehmertabelle eingetragen werden konnen der Versuch den Datensatz eines Studenten der schon eine Vorlesung belegt hat zu loschen entweder verhindert wird Fehlermeldung oder der Datensatz auch gleich aus der Teilnehmertabelle entfernt wird Loschweitergabe und der Versuch die Matrikelnummer eines Studenten der schon eine Vorlesung belegt hat zu andern entweder verhindert wird Fehlermeldung oder der Eintrag in der Teilnehmertabelle gleich mitgeandert wird Aktualisierungsweitergabe Widerspruchlichkeit von Daten wird allgemein als Dateninkonsistenz bezeichnet Diese besteht wenn Daten bspw die Integritatsbedingungen z B Constraints oder Fremdschlusselbeziehungen nicht erfullen Ursachen fur Dateninkonsistenzen konnen Fehler bei der Analyse des Datenmodells fehlende Normalisierung des ERM oder Fehler in der Programmierung sein Zum letzteren gehoren die Lost Update Phanomene 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 konnen Beispiel Transaktion A liest Wert x Transaktion B verringert Wert x um 10 Transaktion A erhoht den gespeicherten Wert von x um eins und schreibt zuruck Ergebnis x x 1 Die Anderung von B ist verloren gegangenSQL Datentypen Bearbeiten 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 konnen 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 fur Geldbetrage notwendige Genauigkeit gegeben FLOAT m Gleitkommazahl positiv oder negativ mit maximal m Nachkommastellen REAL Gleitkommazahl positiv oder negativ Die Genauigkeit fur diesen Datentyp ist jeweils vom Datenbanksystem definiert DOUBLE oder DOUBLE PRECISION Gleitkommazahl positiv oder negativ Die Genauigkeit fur diesen Datentyp ist jeweils vom Datenbanksystem definiert FLOAT und DOUBLE sind fur technisch wissenschaftliche Werte geeignet und umfassen auch die Exponentialdarstellung Wegen der Speicherung im Binarformat sind sie aber fur Geldbetrage nicht geeignet weil sich beispielsweise der Wert 0 10 entspricht 10 Cent nicht exakt abbilden lasst CHARACTER n oder CHAR n Zeichenkette Text mit n Zeichen VARCHAR n oder CHARACTER VARYING n Zeichenkette also Text von variabler Lange aber maximal n druckbaren und oder nicht druckbaren Zeichen Die Variante VARCHAR2 ist fur Oracle spezifisch ohne dass sie sich tatsachlich unterscheidet TEXT Zeichenkette zumindest theoretisch beliebiger Lange In manchen Systemen synonym zu CLOB DATE Datum ohne Zeitangabe TIME Zeitangabe evtl inklusive Zeitzone TIMESTAMP Zeitstempel umfasst Datum und Uhrzeit evtl inklusive Zeitzone meistens mit Millisekundenauflosung teilweise auch mikrosekundengenau BOOLEAN Boolesche Variable kann die Werte true wahr oder false falsch oder NULL unbekannt annehmen Dieser Datentyp ist laut SQL 2003 optional und nicht alle DBMS stellen diesen Datentyp bereit a href Binary Large Object html title Binary Large Object BLOB a n oder BINARY LARGE OBJECT n Binardaten von maximal n Bytes Lange a href Character Large Object html title Character Large Object CLOB a n oder CHARACTER LARGE OBJECT n Zeichenketten mit maximal n Zeichen Lange Wenn es die Tabellendefinition erlaubt konnen Attribute auch den Wert NULL annehmen wenn kein Wert bekannt ist oder aus anderen Grunden kein Wert gespeichert werden soll Der NULL Wert ist von allen anderen moglichen Werten des Datentyps verschieden Transaktion Commit und Rollback Bearbeiten Hauptartikel Transaktion Informatik Eine Transaktion bezeichnet eine Menge von Datenbankanderungen die zusammen ausgefuhrt werden mussen 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 vollstandige Abarbeitung der elementaren Datenbankoperationen der Transaktion nicht durchgefuhrt werden z B aufgrund eines Fehlers mussen alle durchgefuhrten Anderungen an dem Datenbestand auf den Ausgangszustand zuruckgesetzt werden Der Vorgang der alle Anderungen einer Transaktion zurucksetzt wird als Rollback bezeichnet Der Begriff Commit bezeichnet das Ausfuhren einer Transaktion Transaktionen sind eine Moglichkeit die Konsistenz des Datenbestandes zu sichern Im Beispiel der doppelten Kontenfuhrung wird durch das Verhindern von ungultigen Teilbuchungen eine ausgeglichene Kontobilanz gewahrleistet Datenbanken erlauben es zum Teil bestimmte Befehle ausserhalb einer Transaktion auszufuhren Darunter fallt insbesondere das Laden von Daten in Tabellen oder das Exportieren von Daten mittels Utilities Manche DBMS erlauben das temporare Abschalten der Transaktionslogik sowie einiger Kontrollen zur Erhohung der Verarbeitungsgeschwindigkeit Dies muss allerdings meist durch einen expliziten Befehl erzwungen werden um ein versehentliches Andern von Daten ausserhalb einer Transaktion zu vermeiden Solche Anderungen konnen falls eine Datenbankwiederherstellung erforderlich ist zu schweren Problemen oder gar Datenverlusten fuhren Eine Transaktion wird mit der SQL Anweisung a href Commit html title Commit COMMIT a beendet Alle Anderungen der Transaktion werden persistent gemacht und das DBMS stellt durch geeignete interne Mittel z B Logging sicher dass diese Anderungen nicht verloren gehen Mit dem Befehl a href Rollback html title Rollback ROLLBACK a wird eine Transaktion ebenfalls beendet es werden jedoch alle Anderungen seit Beginn der Transaktion ruckgangig gemacht Das heisst der Zustand des Systems in Bezug auf die Anderungen der Transaktion ist der gleiche wie vor der Transaktion Programmieren mit SQL BearbeitenProgrammierschnittstelle Bearbeiten Das ursprungliche SQL war keine Turing vollstandige Programmiersprache es ermoglichte also nicht die Realisierung von beliebigen Computerprogrammen Mittlerweile lasst es sich mit anderen Programmiersprachen kombinieren um eine Programmierung im engeren Sinne zu ermoglichen Hierfur gibt es unterschiedliche Techniken Mit Embedded SQL konnen SQL Anweisungen im Quelltext eines Programms typischerweise in C C COBOL Ada Pascal o A geschrieben eingebettet werden Wahrend der Programmvorbereitung ubersetzt ein Precompiler die SQL Befehle in Funktionsaufrufe Embedded SQL ist Teil des ANSI SQL Standards Beispiele fur Implementierungen SQLJ fur Java Pro C fur C C ADO und ADO NET Herkommliche Programmierschnittstellen erlauben die direkte Ubergabe von SQL Befehlen an Datenbanksysteme uber Funktionsaufrufe Beispiele ODBC JDBC ADO Persistenz Frameworks wie etwa Hibernate oder iBATIS abstrahieren vom Datenbankzugriff und ermoglichen objektorientierte Verarbeitung von relationalen Datenbanken in einer objektorientierten Programmiersprache z B Java oder C Mit dem Teil 4 SQL PSM des Standards werden Konstrukte wie IF Blocke und Schleifen bereitgestellt Er wird in den Datenbanksystemen in unterschiedlicher Auspragung und mit Hersteller spezifischen Erweiterungen implementiert z B PL SQL in Oracle oder Transact SQL im MS SQL Server Statisches und dynamisches SQL Bearbeiten Unabhangig von der verwendeten Programmiertechnik wird zwischen statischem und dynamischem SQL unterschieden Bei statischem SQL ist die SQL Anweisung dem Datenbanksystem zum Zeitpunkt der Programmubersetzung 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 Programmausfuhrung bekannt z B weil der Benutzer die komplette Abfrage eingibt So sind z B alle SQL Anweisungen die mittels SQL CLI oder JDBC ausgefuhrt werden grundsatzlich dynamisch Ausgefuhrt 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 sogenannte Parse Vorgang Zeit in Anspruch nimmt puffern viele Datenbanksysteme die bereits geparsten SQL Anweisungen um mehrfaches Parsen gleicher Abfragen zu vermeiden Bei statischem SQL kann schon bei der Ubersetzung der Programme bzw beim Binden der SQL Anweisungen an eine Datenbank sogenanntes Bind der SQL Befehle der optimale Zugriffsweg bestimmt werden Damit sind kurzestmogliche Laufzeiten der Anwendungsprogramme moglich allerdings muss der Zugriffsweg aller betroffenen Programme neu bestimmt werden wenn sich Voraussetzungen z B Statistiken andern Rebind Die Bind Phase ist heute vor allem im Grossrechner Umfeld bekannt die meisten Datenbanksysteme optimieren hingegen zur Laufzeit Chronologie Bearbeitenetwa 1975 SEQUEL Structured English Query Language der Vorlaufer von SQL wird fur 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 fur Normung ISO als Standard verabschiedet und 1989 nochmals uberarbeitet 1992 Der Standard SQL2 oder SQL 92 wird von der ISO verabschiedet 1999 SQL3 oder SQL 1999 wird verabschiedet Im Rahmen dieser Uberarbeitung werden weitere wichtige Features wie etwa Trigger oder rekursive Abfragen hinzugefugt 2003 SQL 2003 Als neue Features werden aufgenommen SQL XML Window functions Sequences 2006 SQL XML 2006 Erweiterungen fur SQL XML 2 2008 SQL 2008 bzw ISO IEC 9075 2008 Als neue Features werden aufgenommen INSTEAD OF Trigger TRUNCATE Statement und FETCH Klausel 2011 SQL 2011 bzw ISO IEC 9075 2011 Als neue Features werden aufgenommen Zeitbezogene Daten PERIOD FOR Es gibt Erweiterungen fur Window functions und die FETCH Klausel 2016 SQL 2016 bzw ISO IEC 9075 2016 Als neue Features werden aufgenommen JSON und row pattern matching 2019 SQL MDA 2019 Erweiterungen fur einen Datentyp mehrdimensionales Feld Sprachstandard BearbeitenZiel der Standardisierung ist es Anwendungsprogramme so erstellen zu konnen dass sie vom verwendeten Datenbanksystem unabhangig sind Heutige Datenbanksysteme implementieren mehr oder weniger grosse Teile des Sprachstandards Daruber hinaus stellen sie oftmals herstellerspezifische Erweiterungen bereit die nicht dem Standard Sprachumfang entsprechen In der Vor SQL Zeit strebte man die Portabilitat von Anwendungen uber die kompatible Schnittstelle an Der Standard besteht insgesamt aus zehn einzelnen Publikationen 3 ISO IEC 9075 1 2016 Part 1 Framework SQL Framework ISO IEC 9075 2 2016 Part 2 Foundation SQL Foundation ISO IEC 9075 3 2016 Part 3 Call Level Interface SQL CLI ISO IEC 9075 4 2016 Part 4 Persistent stored modules SQL PSM ISO IEC 9075 9 2016 Part 9 Management of External Data SQL MED ISO IEC 9075 10 2016 Part 10 Object language bindings SQL OLB ISO IEC 9075 11 2016 Part 11 Information and definition schemas SQL Schemata ISO IEC 9075 13 2016 Part 13 SQL Routines and types using the Java TM programming language SQL JRT ISO IEC 9075 14 2016 Part 14 XML Related Specifications SQL XML ISO IEC 9075 15 2019 Part 15 Multi dimensional arrays SQL MDA Ein weiterer Teil befindet sich derzeit 2019 in Entwicklung ISO IEC 9075 16 20xx Part 16 Property Graph Queries SQL PGQ Der Standard wird durch sechs ebenfalls standardisierte SQL multimedia and application packages erganzt ISO IEC 13249 1 2016 Part 1 Framework ISO IEC 13249 2 2003 Part 2 Full Text ISO IEC 13249 3 2016 Part 3 Spatial ISO IEC 13249 5 2003 Part 5 Still image ISO IEC 13249 6 2006 Part 6 Data mining ISO IEC 13249 7 2013 Part 7 HistoryWeiterhin existieren eine Reihe Technical Reports die eine Einfuhrung zu den einzelnen Themen bieten ISO IEC TR 19075 1 2011 Part 1 XQuery Regular Expression Support in SQL Download ISO IEC TR 19075 2 2015 Part 2 SQL Support for Time Related Information Download ISO IEC TR 19075 3 2015 Part 3 SQL Embedded in Programs using the JavaTM programming language Download ISO IEC TR 19075 4 2015 Part 4 SQL with Routines and types using the JavaTM programming language Download ISO IEC TR 19075 5 2016 Part 5 Row Pattern Recognition in SQL Download ISO IEC TR 19075 6 2017 Part 6 SQL support for JavaScript Object Notation JSON Download ISO IEC TR 19075 7 2017 Part 7 Polymorphic table functions in SQL Download ISO IEC TR 19075 8 2019 Part 8 Multi dimensional arrays SQL MDA wurde zuruckgezogen 4 Ein weiterer Teil befindet sich derzeit 2019 in Entwicklung ISO IEC TR 19075 9 20xx Part 9 Online Analytic Processing OLAP capabilitiesDer offizielle Standard ist nicht frei verfugbar jedoch existiert ein Zip Archiv mit einer Arbeitsversion von 2008 5 Die Technical Reports sind kostenlos von ISO erhaltlich Erweiterungen BearbeitenDie beiden ersten Teile des SQL Standards SQL Framework und SQL Foundation legen die Kernfunktionalitaten fest In den weiteren Teilen werden spezifische Aspekte der Sprache definiert Teil 4 Bei SQL PSM handelt es sich um die Erweiterung um prozedurale Konstrukte Sie ermoglichen unter anderem das Programmieren von Schleifen FOR WHILE REPEAT UNTIL LOOP Cursorn Exception Handling Triggern und eigenen Funktionen Oracle implementiert diese Funktionalitat unter dem Namen PL SQL DB2 verwendet den Begriff SQL PL PostgreSQL nennt es PL pgSQL Teil 14 SQL XML ermoglicht es XML Dokumente in SQL Datenbanken zu speichern mit XPath in SQL XML 2003 und XQuery ab SQL XML 2006 abzufragen und relationale Datenbankinhalte als XML zu exportieren Um die ursprunglichen Arbeiten an diesem Teil des Standards zu beschleunigen hatte sich im Jahr 2000 eine informelle Arbeitsgruppe gebildet IBM Oracle die unter dem Namen The SQLX Group und unter der Bezeichnung SQLX die Kernfunktionalitaten festlegte Deren Arbeit ist in den jetzigen Standard eingeflossen Als Erganzung zum SQL Standard existiert mit ISO IEC 13249 SQL multimedia and application packages eine Norm die fur die Anwendungsfalle Text Geografische Daten Bilder Data mining und Metadaten spezialisierte Schnittstellen in SQL Syntax festlegt Literatur BearbeitenDonald D Chamberlin Raymond F Boyce SEQUEL A Structured English Query Language In SIGMOD Workshop Vol 1 1974 S 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 In IBM Journal of Research and Development 20 6 1976 S 560 575 Gunter Matthiessen Michael Unterstein Relationale Datenbanken und SQL in Theorie und Praxis Springer Vieweg ISBN 978 3 642 28985 9 Edwin Schicker Datenbanken und SQL Eine praxisorientierte Einfuhrung Teubner ISBN 3 519 02991 X Oliver Bartosch Markus Throll Einstieg in SQL Galileo Press ISBN 3 89842 497 9 Daniel Warner Gunter Leitenbauer SQL Franzis ISBN 3 7723 7527 8 H Faeskorn Woyke B Bertelsmeier P Riemer E Bauer Datenbanksysteme Theorie und Praxis mit SQL2003 Oracle und MySQL Pearson Studium ISBN 978 3 8273 7266 6 Jorg Fritze Jurgen Marsch Erfolgreiche Datenbankanwendung mit SQL3 Praxisorientierte Anleitung effizienter Einsatz inklusive SQL Tuning Vieweg Verlag ISBN 3 528 55210 7 Can Turker SQL 1999 amp SQL 2003 Dpunkt Verlag ISBN 3 89864 219 4 Gregor Kuhlmann Friedrich Mullmerstadt 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 Einfuhrung 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 Ubungssoftware SQL Teacher Marco Skulschus SQL und relationale Datenbanken Comelio Medien ISBN 978 3 939701 11 8 Michael Wagner SQL XML 2006 Evaluierung der Standardkonformitat ausgewahlter Datenbanksysteme 1 Auflage Diplomica Verlag ISBN 3 8366 9609 6 Christian F G Schendera SQL mit SAS Band 1 PROC SQL fur Einsteiger Oldenbourg Wissenschaftsverlag Munchen 2011 ISBN 978 3 486 59840 7 Christian F G Schendera SQL mit SAS Band 2 Fortgeschrittenes PROC SQL Oldenbourg Wissenschaftsverlag Munchen 2012 ISBN 978 3 486 59836 0 C J Date with Hugh Darwen A Guide to the SQL standard a users guide to the standard database language SQL 4th ed Addison Wesley USA 1997 ISBN 978 0 201 96426 4 Jim Melton Advanced SQL 1999 Understanding Object Relational and Other Advanced Features 1st ed Morgan Kaufmann USA 2002 ISBN 978 1558606777 Weblinks Bearbeiten nbsp Wikibooks SQL Lern und Lehrmaterialien Erklarvideos zu SQL Big Data Analytics Group Uni Saarland Linkkatalog zum Thema SQL bei curlie org ehemals DMOZ SQL Grundlagen Einfuhrung mit Beispielen und Vergleich diverser Datenbanken Merkblatt SQL The 1995 SQL Reunion People Projects and Politics zur fruhen Geschichte von SQL englisch Frei verfugbare SQL Standard Dokumente z B SQL 2003 und SQL 2008 englisch SQL Tutorial GNU SQLTutor SQLcoach Freies Uben von SQL Interaktiver SQL Trainer Anmeldung notwendig Blogbeitrag zu SQL Befehlen und deren Einsatz in PHP SQL Tuning Transact SQL Reference Database Engine Siehe auch BearbeitenData Manipulation Language Data Definition Language Data Control Language Transaction Control Language SQL Injection SchemaSQL Continuous Query Language Liste der Datenbankmanagementsysteme BereichsabfrageEinzelnachweise Bearbeiten Diskussion uber System R und zur Namensanderung von SEQUEL zu SQL Michael Wagner SQL XML 2006 Evaluierung der Standardkonformitat ausgewahlter Datenbanksysteme Diplomica Verlag 2010 ISBN 3 8366 9609 6 S 100 ISO IEC 9075 und 13249 International Organization for Standardization abgerufen am 20 September 2018 englisch 14 00 17 00 ISO IEC TR 19075 8 2019 Abgerufen am 24 August 2022 englisch Arbeitsversion des Standards von 2008 ZIP 12 7 MB Normdaten Sachbegriff GND 4134010 3 lobid OGND AKS LCCN sh86006628 Abgerufen von https de wikipedia org w index php title SQL amp oldid 238881689