|
|
(91 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| '''topic''' kurze Beschreibung
| | '''SQL''' - Structured Query Language |
| ==Beschreibung==
| |
| '''SQL''' (offizielle Aussprache [<nowiki/>{{IPA|ɛskjuːˈɛl}}], mitunter auch [<nowiki/>{{IPA|ˈsiːkwəl}}]; auf Deutsch auch häufig die deutsche Aussprache der Buchstaben) ist eine [[Datenbanksprache]] zur Definition von [[Datenstruktur]]en in [[Relationale Datenbank|relationalen Datenbanken]] sowie zum Bearbeiten (Einfügen, Verändern, Löschen) und Abfragen von darauf basierenden Datenbeständen. | |
|
| |
|
| Die Sprache basiert auf der [[Relationale Algebra|relationalen Algebra]], ihre [[Syntax]] ist relativ einfach aufgebaut und [[Formale Semantik|semantisch]] an die englische Umgangssprache angelehnt. Ein gemeinsames Gremium von [[Internationale Organisation für Normung|ISO]] und [[International Electrotechnical Commission|IEC]] [[Standardisierung|standardisiert]] die Sprache unter Mitwirkung nationaler Normungsgremien wie [[American National Standards Institute|ANSI]] oder [[Deutsches Institut für Normung|DIN]]. Durch den Einsatz von SQL strebt man die Unabhängigkeit der Anwendungen vom eingesetzten [[Datenbank#Datenbankmanagementsystem|Datenbankmanagementsystem]] an.
| | == Beschreibung == |
| | ; Structured Query Language |
| | Strukturierte Abfrage-Sprache |
|
| |
|
| Die Bezeichnung ''SQL'' wird im allgemeinen Sprachgebrauch als Abkürzung für „'''Structured Query Language'''“ (auf Deutsch: „Strukturierte Abfrage-Sprache“) aufgefasst, obwohl sie laut Standard ein eigenständiger Name ist. Die Bezeichnung leitet sich von dem Vorgänger SEQUEL ([{{IPA|ˈsiːkwəl}}], 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 später in SQL umbenannt, weil SEQUEL ein eingetragenes Warenzeichen der [[Hawker Siddeley]] Aircraft Company ist.<ref>[http://www.mcjones.org/System_R/SQL_Reunion_95/sqlr95-System.html ''Diskussion über System R und zur Namensänderung von SEQUEL zu SQL'']</ref>
| | ; Aussprache |
| ==Sprachelemente==
| | {| class="wikitable options" |
| [[Datei:SQL.png|mini|Bestandteile von SQL]]
| | | Aussprache || ɛskjuːˈɛl |
| | |
| SQL-Befehle lassen sich in fünf Kategorien unterteilen (Zuordnung nach der Theorie der [[Datenbanksprache]]n 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]] (Ändern, Einfügen, Löschen von [[Datensatz|Datensätzen]]) und lesendem Zugriff
| |
| *[[Data Definition Language]] (DDL) – Befehle zur [[Datendefinition|Definition]] des [[Datenbankschema]]s (Erzeugen, Ändern, Löschen von [[Datenbanktabelle]]n, Definition von [[Primärschlüssel]]n und [[Fremdschlüssel]]n)
| |
| *[[Data Control Language]] (DCL) – Befehle für die [[Mehrbenutzersystem#Rechtemanagement|Rechteverwaltung]]
| |
| *[[Transaction Control Language]] (TCL) – Befehle für die [[Transaktion (Informatik)|Transaktionskontrolle]]
| |
| | |
| Die Bezeichnung SQL bezieht sich auf das englische Wort {{"|Text=query|Übersetzung=[[Abfragesprache|Abfrage]]|lang=en}}. 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. {{Siehe auch|Datenbanktabelle}}
| |
| | |
| ==Installation==
| |
| ==Anwendungen==
| |
| ===Fehlerbehebung===
| |
| ==Syntax==
| |
| ===Optionen===
| |
| ===Parameter===
| |
| ===Umgebungsvariablen===
| |
| ===Exit-Status===
| |
| ==Konfiguration==
| |
| ===Dateien===
| |
| ==Sicherheit==
| |
| ==Dokumentation==
| |
| ===RFC===
| |
| ===Man-Pages===
| |
| ===Info-Pages===
| |
| ==Siehe auch==
| |
| ==Links==
| |
| ===Projekt-Homepage===
| |
| ===Weblinks===
| |
| ===Einzelnachweise===
| |
| <references />
| |
| ==Testfragen==
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 1''
| |
| <div class="mw-collapsible-content">'''Antwort1'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 2''
| |
| <div class="mw-collapsible-content">'''Antwort2'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 3''
| |
| <div class="mw-collapsible-content">'''Antwort3'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 4''
| |
| <div class="mw-collapsible-content">'''Antwort4'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 5''
| |
| <div class="mw-collapsible-content">'''Antwort5'''</div>
| |
| </div>
| |
| | |
| [[Kategorie:Entwurf]]
| |
| =Wikipedia=
| |
| | |
| == Abfragen ==
| |
| Die grundlegenden Befehle und Begriffe werden anhand des folgenden Beispiels erklärt:
| |
| | |
| {|
| |
| |- style="border-bottom: 1px solid #EEE;"
| |
| ![[Entity-Relationship-Modell#ER-Diagramme|ER-Diagramm]]:
| |
| | colspan="4" |[[Datei:SQL-Beispiel.svg|700px|SQL-Beispiel]]
| |
| |-
| |
| !Relationen:
| |
| |
| |
| {| class="wikitable" | |
| |+<code>Student</code> | |
| |'''<u><code>MatrNr</code></u>'''||'''<code>Name</code>'''
| |
| |- | | |- |
| |<code>26120</code>||<code>Fichte</code> | | | Mitunter auch || siːkwəl |
| |- | | |- |
| |<code>25403</code>||<code>Jonas</code> | | | Deutsch häufig || Aussprache der Buchstaben |
| |-
| |
| |<code>27103</code>||<code>Fauler</code>
| |
| |}
| |
| |
| |
| {| class="wikitable"
| |
| |+<code>hoert</code>
| |
| |'''<u><code>MatrNr</code></u>'''||'''<code><u>VorlNr</u></code>'''
| |
| |-
| |
| |<code>25403</code>||<code>5001</code>
| |
| |-
| |
| |<code>26120</code>||<code>5001</code>
| |
| |-
| |
| |<code>26120</code>||<code>5045</code>
| |
| |}
| |
| |
| |
| {| class="wikitable"
| |
| |+<code>Vorlesung</code>
| |
| |'''<u><code>VorlNr</code></u>'''||'''<code>Titel</code>'''||'''<code>PersNr</code>'''
| |
| |-
| |
| |<code>5001</code>||<code>ET</code>||<code>15</code>
| |
| |-
| |
| |<code>5022</code>||<code>IT</code>||<code>12</code>
| |
| |-
| |
| |<code>5045</code>||<code>DB</code>||<code>12</code>
| |
| |}
| |
| |
| |
| {| class="wikitable"
| |
| |+<code>Professor</code>
| |
| |'''<u><code>PersNr</code></u>'''||'''<code>Name</code>'''
| |
| |-
| |
| |<code>12</code>||<code>Wirth</code>
| |
| |-
| |
| |<code>15</code>||<code>Tesla</code>
| |
| |-
| |
| |<code>20</code>||<code>Urlauber</code>
| |
| |}
| |
| |} | | |} |
|
| |
|
| ===Einfache Abfrage===
| | ; Datenbanksprache |
| <syntaxhighlight lang="sql">
| | * [[Datenbanksprache]] |
| SELECT *
| |
| FROM Student;
| |
| </syntaxhighlight>
| |
| listet alle Spalten und alle Zeilen der Tabelle <code>Student</code> auf.
| |
|
| |
|
| Ergebnis:
| | ; Definition |
| {| class="wikitable"
| | * [[Datenstruktur]]en von [[Relationale Datenbank|relationalen Datenbanken]] |
| |-
| |
| !<code>MatrNr</code>!!<code>Name</code>
| |
| |-
| |
| |<code>26120</code>||<code>Fichte</code>
| |
| |-
| |
| |<code>25403</code>||<code>Jonas</code>
| |
| |-
| |
| |<code>27103</code>||<code>Fauler</code>
| |
| |}
| |
|
| |
|
| ===Abfrage mit Spaltenauswahl (<code>,</code>)===
| | ; Bearbeiten |
| <syntaxhighlight lang="sql">
| | * Einfügen |
| SELECT VorlNr,
| | * Verändern |
| Titel
| | * Löschen |
| FROM Vorlesung;
| |
| </syntaxhighlight>
| |
| listet die Spalten <code>VorlNr</code> und <code>Titel</code> aller Zeilen der Tabelle <code>Vorlesung</code> auf.
| |
|
| |
|
| Ergebnis:
| | ; Abfragen |
| {| class="wikitable"
| | * Datenbestände |
| |-
| |
| !<code>VorlNr</code>!!<code>Titel</code>
| |
| |-
| |
| |<code>5001</code>||<code>ET</code>
| |
| |-
| |
| |<code>5022</code>||<code>IT</code>
| |
| |-
| |
| |<code>5045</code>||<code>DB</code>
| |
| |}
| |
|
| |
|
| ===Abfrage mit eindeutigen Werten (<code>DISTINCT</code>)===
| | ; Relationale Algebra |
| <syntaxhighlight lang="sql">
| | Basiert auf [[Relationale Algebra|relationalen Algebra]] |
| SELECT DISTINCT MatrNr
| | * [[Syntax]] ist relativ einfach aufgebaut |
| FROM hoert;
| | * [[Formale Semantik|semantisch]] an die englische Umgangssprache angelehnt |
| </syntaxhighlight>
| | * Ein gemeinsames Gremium von [[Internationale Organisation für Normung|ISO]] und [[International Electrotechnical Commission|IEC]] [[Standardisierung|standardisiert]] die Sprache unter Mitwirkung nationaler Normungsgremien wie [[American National Standards Institute|ANSI]] oder [[Deutsches Institut für Normung|DIN]] |
| listet nur unterschiedliche Einträge der Spalte <code>MatrNr</code> aus der Tabelle <code>hoert</code> auf. Dies zeigt die Matrikelnummern aller Studenten, die mindestens eine Vorlesung hören, wobei mehrfach auftretende Matrikelnummern nur einmal ausgegeben werden.
| | * Durch den Einsatz von SQL strebt man die Unabhängigkeit der Anwendungen vom eingesetzten [[Datenbank#Datenbankmanagementsystem|Datenbankmanagementsystem]] an |
|
| |
|
| Ergebnis:
| | == Sprachelemente == |
| {| class="wikitable" | | ; Kategorien von SQL-Befehlen |
| | [[Datei:SQL.png|mini|Bestandteile von SQL]] |
| | {| class="wikitable options" |
| | ! Language !! !! Beschreibung |
| |- | | |- |
| !<code>MatrNr</code>
| | | [[Data Query Language|Data Query]] || DQL || Abfrage und Aufbereitung der gesuchten Informationen, wird auch als Untermenge der DML klassifiziert |
| |- | | |- |
| |<code>25403</code> | | | [[Data Manipulation Language|Data Manipulation]]|| DML|| [[Datenmanipulation]] (Ändern, Einfügen, Löschen von [[Datensatz|Datensätzen]]) und lesendem Zugriff |
| |- | | |- |
| |<code>26120</code> | | | [[Data Definition Language|Data Definition]] || DDL || [[Datendefinition|Definition]] des [[Datenbankschema]]s (Erzeugen, Ändern, Löschen von [[Datenbanktabelle]]n, Definition von [[Primärschlüssel]]n und [[Fremdschlüssel]]n) |
| |} | |
| | |
| ===Abfrage mit Umbenennung (<code>AS</code>)===
| |
| <syntaxhighlight lang="sql">
| |
| SELECT MatrNr AS Matrikelnummer,
| |
| Name
| |
| FROM Student;
| |
| </syntaxhighlight>
| |
| listet die Spalten <code>MatrNr</code> und Name aller Zeilen der Tabelle <code>Student</code> auf. <code>MatrNr</code> wird beim Anzeigeergebnis als Matrikelnummer aufgeführt.
| |
| | |
| Ergebnis:
| |
| {| class="wikitable"
| |
| |- | | |- |
| !<code>Matrikelnummer</code>!!<code>Name</code>
| | | [[Data Control Language|Data Control]] || DCL || [[Mehrbenutzersystem#Rechtemanagement|Rechteverwaltung]] |
| |- | | |- |
| |<code>26120</code>||<code>Fichte</code> | | | [[Transaction Control Language|Transaction Control]] || TCL || [[Transaktion (Informatik)|Transaktionskontrolle]] |
| |- | |
| |<code>25403</code>||<code>Jonas</code> | |
| |-
| |
| |<code>27103</code>||<code>Fauler</code>
| |
| |} | | |} |
|
| |
|
| ===Abfrage mit Filter (<code>WHERE</code>)===
| | ; SQL |
| <syntaxhighlight lang="sql">
| | Bezeichnung SQL bezieht sich auf das englische Wort ''query'' (Abfragesprache|Abfrage) |
| SELECT VorlNr,
| | * Mit Abfragen werden die in einer Datenbank gespeicherten Daten abgerufen, also dem Benutzer oder einer Anwendersoftware zur Verfügung gestellt |
| Titel
| | * Das Ergebnis einer Abfrage sieht wiederum aus wie eine Tabelle und kann oft auch wie eine Tabelle angezeigt, bearbeitet und weiterverwendet werden |
| FROM Vorlesung
| |
| WHERE Titel = 'ET';
| |
| </syntaxhighlight>
| |
| listet <code>VorlNr</code> und <code>Titel</code> aller derjenigen Zeilen der Tabelle <code>Vorlesung</code> auf, deren Titel <code>ET</code> ist.
| |
|
| |
|
| Die solchermaßen strukturierte, häufig verwendete Anweisung wird nach den Anfangsbuchstaben auch als „SFW-Block“ bezeichnet.
| | == Syntax == |
| | | {| class="wikitable options" |
| Ergebnis:
| |
| {| class="wikitable" | |
| |- | | |- |
| !<code>VorlNr</code>!!<code>Titel</code>
| | | [[SQL/Abfragen|Abfragen]] || |
| |- | | |- |
| |<code>5001</code>||<code>ET</code> | | | [[SQL/Einfügen|Einfügen]] || |
| |}
| |
| | |
| ===Abfrage mit Filter nach Inhalt (<code>WHERE ... LIKE ...</code>)===
| |
| <syntaxhighlight lang="sql">
| |
| SELECT Name
| |
| FROM Student
| |
| WHERE Name LIKE 'F%';
| |
| </syntaxhighlight>
| |
| listet die Namen aller Studenten auf, deren Name mit <code>F</code> beginnt (im Beispiel: <code>Fichte</code> und <code>Fauler</code>).
| |
| | |
| <code>LIKE</code> kann mit verschiedenen [[Wildcard (Informatik)|Platzhaltern]] verwendet werden: <code>_</code> steht für ein einzelnes beliebiges Zeichen, <code>%</code> steht für eine beliebige Zeichenfolge. Manche Datenbanksysteme bieten weitere solche ''Wildcard''-Zeichen an, etwa für Zeichenmengen.
| |
| | |
| Ergebnis:
| |
| {| class="wikitable"
| |
| |- | | |- |
| !<code>Name</code>
| | | [[SQL/Ändern|Ändern]] || |
| |- | | |- |
| |<code>Fichte</code> | | | [[SQL/Löschen|Löschen]] || |
| |- | | |- |
| |<code>Fauler</code> | | | [[SQL/Datendefinition|Datendefinition]] || |
| |} | | |} |
|
| |
|
| ===Abfrage mit Filter und Sortierung (<code>ORDER BY</code>)===
| | <noinclude> |
| <syntaxhighlight lang="sql">
| |
| SELECT Vorname,
| |
| Name,
| |
| StrasseNr,
| |
| Plz,
| |
| Ort
| |
| FROM Student
| |
| WHERE Plz = '20095'
| |
| ORDER BY Name;
| |
| </syntaxhighlight>
| |
| listet <code>Vorname</code>, <code>Name</code>, <code>StrasseNr</code>, <code>Plz</code> und <code>Ort</code> aller Studenten aus dem angegebenen Postleitzahlbereich aufsteigend sortiert nach <code>Name</code> auf.
| |
|
| |
|
| ===Abfrage mit verknüpften Tabellen (<code>,</code> und <code>INNER JOIN</code>)=== | | == Anhang == |
| <syntaxhighlight lang="sql">
| | === Siehe auch === |
| SELECT Vorlesung.VorlNr,
| | {{Special:PrefixIndex/{{BASEPAGENAME}}/}} |
| Vorlesung.Titel,
| |
| Professor.PersNr,
| |
| Professor.Name
| |
| FROM Professor,
| |
| Vorlesung
| |
| WHERE Professor.PersNr = Vorlesung.PersNr;
| |
| </syntaxhighlight>
| |
|
| |
|
| Die Aufzählung hinter [[From (SQL)|<code>FROM</code>]] legt die Datenquellen fest: an dieser Stelle können mithilfe sogenannter [[Join (SQL)|<code>JOIN</code>s]] mehrere Tabellen miteinander verknüpft werden, sodass Daten aus verschiedenen Tabellen zusammengeführt und angezeigt werden.
| | === Links === |
| | ==== Weblinks ==== |
|
| |
|
| In diesem Beispiel wird ein „innerer natürlicher Verbund“ (<code>NATURAL INNER JOIN</code>) verwendet: Alle Datensätze aus den Tabellen <code>Professor</code> und <code>Vorlesung</code>, die den gleichen Wert im Feld <code>PersNr</code> haben. <code>Professor</code>en ohne <code>Vorlesung</code> und <code>Vorlesung</code>en ohne <code>Professor</code> werden damit nicht angezeigt.
| | [[Kategorie:SQL]] |
| | [[Kategorie:Abkürzung]] |
|
| |
|
| Dies ist äquivalent zu:
| | </noinclude> |
| | |
| <syntaxhighlight lang="sql">
| |
| SELECT Vorlesung.VorlNr,
| |
| Vorlesung.Titel,
| |
| Professor.PersNr,
| |
| Professor.Name
| |
| FROM Professor
| |
| INNER JOIN Vorlesung
| |
| ON Professor.PersNr = Vorlesung.PersNr;
| |
| </syntaxhighlight>
| |
| | |
| ''Vorsicht: Nicht alle Implementierungen verstehen beide Schreibweisen, die [[Oracle]]-Schreibweise <code>FROM Professor, Vorlesung</code> gilt als veraltet und ist weniger verbreitet. Sie entspricht auch nicht dem ANSI-Standard und sollte deshalb vermieden werden. Aus historischen Gründen ist sie jedoch noch häufig anzutreffen.''
| |
| | |
| Tabellen können nicht nur über Schlüsselfelder, sondern über beliebige Felder miteinander verknüpft werden, wie das folgende, fachlich unsinnige Beispiel zeigt:
| |
| | |
| <syntaxhighlight lang="sql">
| |
| SELECT Vorlesung.Titel,
| |
| Professor.Name
| |
| FROM Professor,
| |
| Vorlesung
| |
| WHERE Professor.Name <> Vorlesung.Titel
| |
| </syntaxhighlight>
| |
| | |
| Das Ergebnis erhält die Kombinationen ''aller'' <code>Professor</code>en und ''aller'' <code>Vorlesung</code>en, wo der Name des <code>Professor</code>s vom Titel der <code>Vorlesung</code> ''abweicht'' – das sind einfach alle (keine <code>Vorlesung</code> heißt wie ein <code>Professor</code>):
| |
| {| class="wikitable"
| |
| |-
| |
| !<code>Titel</code>!!<code>Name</code>
| |
| |-
| |
| |<code>ET</code>||<code>Tesla</code>
| |
| |-
| |
| |<code>ET</code>||<code>Wirth</code>
| |
| |-
| |
| |<code>ET</code>||<code>Urlauber</code>
| |
| |-
| |
| |<code>IT</code>||<code>Tesla</code>
| |
| |-
| |
| |<code>IT</code>||<code>Wirth</code>
| |
| |-
| |
| |<code>IT</code>||<code>Urlauber</code>
| |
| |-
| |
| |<code>DB</code>||<code>Tesla</code>
| |
| |-
| |
| |<code>DB</code>||<code>Wirth</code>
| |
| |-
| |
| |<code>DB</code>||<code>Urlauber</code>
| |
| |}
| |
| | |
| ===Linker äußerer Verbund (<code>LEFT OUTER JOIN</code>)===
| |
| <syntaxhighlight lang="sql">
| |
| SELECT Professor.PersNr,
| |
| Professor.Name,
| |
| Vorlesung.VorlNr,
| |
| Vorlesung.Titel
| |
| FROM Professor
| |
| LEFT OUTER JOIN Vorlesung
| |
| ON Professor.PersNr = Vorlesung.PersNr;
| |
| </syntaxhighlight>
| |
| ergibt alle Datensätze der Tabelle <code>Professor</code> verbunden mit den Datensätzen der Tabelle <code>Vorlesung</code>, die den jeweils gleichen Wert im Feld <code>PersNr</code> haben. <code>Professor</code>en ohne Vorlesung sind enthalten, die <code>Vorlesung</code>sspalten im Ergebnis haben dann den Wert <code>NULL</code>. <code>Vorlesung</code>en ohne <code>Professor</code> sind nicht enthalten.
| |
| | |
| Die folgende Abfrage liefert nur diejenigen Datensätze, zu denen kein passender Datensatz im linken äußeren Verbund existiert (alle <code>Professor</code>en, die keine <code>Vorlesung</code>en halten):
| |
| | |
| <syntaxhighlight lang="sql">
| |
| SELECT Professor.PersNr,
| |
| Professor.Name
| |
| FROM Professor
| |
| LEFT OUTER JOIN Vorlesung
| |
| ON Professor.PersNr = Vorlesung.PersNr
| |
| WHERE Vorlesung.PersNr IS NULL;
| |
| </syntaxhighlight>
| |
| | |
| Das Gleiche kann mittels einer Unterabfrage erreicht werden:
| |
| | |
| <syntaxhighlight lang="sql">
| |
| SELECT Professor.PersNr,
| |
| Professor.Name
| |
| FROM Professor
| |
| WHERE NOT EXISTS (SELECT *
| |
| FROM Vorlesung
| |
| WHERE PersNr = Professor.PersNr);
| |
| </syntaxhighlight>
| |
| | |
| ===Gruppierung mit Aggregat-Funktionen (<code>GROUP BY</code>)===
| |
| <syntaxhighlight lang="sql">
| |
| 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;
| |
| </syntaxhighlight>
| |
| zählt die Anzahl der <code>Vorlesungen</code> pro <code>Professor</code> mit Hilfe der [[Aggregation (Informatik)|Aggregat]]-Funktion <code>COUNT</code>.
| |
| | |
| ''Bemerkung'': <code>COUNT(Professor.PersNr)</code> oder <code>COUNT(*)</code> wären falsch ([[Nullwert|<code>NULL</code>-Werte]] sollen nicht mitgezählt werden).
| |
| | |
| ===Zusammenfassung eines <code>SELECT</code>===
| |
| Zusammengefasst kann man die wichtigsten Elemente einer SQL-<code>SELECT</code>-Abfrage etwa so beschreiben:
| |
| | |
| <syntaxhighlight lang="sql">
| |
| SELECT [DISTINCT] Auswahlliste [AS Spaltenalias]
| |
| FROM Quelle [ [AS] Tabellenalias], evtl. mit JOIN-Verknüpfungen
| |
| [WHERE Where-Klausel]
| |
| [GROUP BY ein oder mehrere Group-by-Attribute]
| |
| [HAVING Having-Klausel]
| |
| [ORDER BY ein oder mehrere Sortierungsattribute mit [ASC|DESC]];
| |
| </syntaxhighlight>
| |
| '''Erläuterung:'''
| |
| | |
| *'''<code>DISTINCT</code>:''' Gibt an, dass aus der Ergebnisrelation gleiche [[Tupel (Informatik)|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 (<code>*</code> für alle) und ob [[Aggregatfunktion|Aggregatsfunktionen]] anzuwenden sind. Wie bei allen anderen Aufzählungen werden die einzelnen Elemente mit Komma (<code>,</code>) voneinander getrennt.
| |
| *'''Quelle:''' Gibt an, wo die Daten herkommen. Es können [[Relation (Datenbank)|Relationen]] und [[Sicht (Datenbank)|Sichten]] angegeben werden und miteinander als [[kartesisches Produkt]] oder als Verbund ([[Relationale Algebra#Join|<code>JOIN</code>]], ab SQL-92) verknüpft werden. Mit der zusätzlichen Angabe eines Namens können Relationen für die Abfrage umbenannt werden (vgl. [[#Sprachelemente und Beispiele|Beispiele]]).
| |
| *'''<code>WHERE</code>-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.
| |
| *'''<code>GROUP BY</code>-Attribut:''' Legt fest, ob unterschiedliche Werte als einzelne Zeilen ausgegeben werden sollen (<code>GROUP BY</code> = Gruppierung) oder aber die Feldwerte der Zeilen durch Aggregationen wie Addition (<code>SUM</code>), Durchschnitt (<code>AVG</code>), Minimum (<code>MIN</code>), Maximum (<code>MAX</code>) zu einem Ergebniswert zusammengefasst werden, der sich auf die Gruppierung bezieht.
| |
| *'''<code>Having</code>-Klausel:''' Ist wie die <code>WHERE</code>-Klausel, nur dass sich die angegebene Bedingung auf das Ergebnis einer Aggregationsfunktion bezieht, zum Beispiel <code>HAVING SUM (Betrag) > 0</code>.
| |
| *'''Sortierungsattribut:''' nach <code>ORDER BY</code> werden Attribute angegeben, nach denen sortiert werden soll. Die Standardvoreinstellung ist <code>ASC</code>, das bedeutet aufsteigende Sortierung, <code>DESC</code> ist absteigende Sortierung.
| |
| | |
| '''Mengenoperatoren''' können auf mehrere <code>SELECT</code>-Abfragen angewandt werden, die gleich viele Attribute haben und bei denen die Datentypen der Attribute übereinstimmen:
| |
| | |
| *'''<code>UNION</code>:''' Vereinigt die Ergebnismengen. In einigen Implementierungen werden mehrfach vorkommende Ergebnistupel wie bei <code>DISTINCT</code> entfernt, ohne dass <code>UNION DISTINCT</code> geschrieben werden muss beziehungsweise darf.
| |
| *'''<code>UNION ALL</code>:''' Vereinigt die Ergebnismengen. Mehrfach vorkommende Ergebnistupel bleiben erhalten. Einige Implementierungen interpretieren aber <code>UNION</code> wie <code>UNION ALL</code> und verstehen das <code>ALL</code> möglicherweise nicht und geben eine Fehlermeldung aus.
| |
| *'''<code>EXCEPT</code>:''' Liefert die Tupel, die in einer ersten, jedoch nicht in einer zweiten Ergebnismenge enthalten sind. Mehrfach vorkommende Ergebnistupel werden entfernt.
| |
| *'''<code>MINUS:</code>''' Ein analoger Operator wie <code>EXCEPT</code>, der von manchen SQL-Dialekten alternativ benutzt wird.
| |
| *'''<code>INTERSECT</code>:''' Liefert die Schnittmenge zweier Ergebnismengen. Mehrfach vorkommende Ergebnistupel werden entfernt.
| |
| | |
| ==Einfügen von Datensätzen (<code>INSERT INTO ... VALUES ...</code>)==
| |
| <syntaxhighlight lang="sql">
| |
| 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);
| |
| </syntaxhighlight>
| |
| fügt vier Datensätze in die Tabelle <code>Vorlesung</code> ein. Die Werte müssen mit den Datentypen der Felder <code>VorlNr</code>, <code>Titel</code> und <code>PersNr</code> zusammenpassen.
| |
| | |
| <syntaxhighlight lang="sql">
| |
| SELECT *
| |
| FROM Vorlesung;
| |
| </syntaxhighlight>
| |
| | |
| liefert dann zum Beispiel das Ergebnis (die Reihenfolge kann auch anders sein):
| |
| {| class="wikitable"
| |
| |-
| |
| !<code>VorlNr</code>!!<code>Titel</code>
| |
| !<code>PersNr</code>
| |
| |-
| |
| |<code>1001</code>
| |
| |<code>Datenbanken</code>
| |
| |<code>15</code>
| |
| |-
| |
| |<code>1000</code>
| |
| |<code>Softwareentwicklung 1</code>
| |
| |<code>12</code>
| |
| |-
| |
| |<code>1200</code>
| |
| |<code>Netzwerke 1</code>
| |
| |<code>20</code>
| |
| |-
| |
| |<code>5001</code>||<code>ET</code>
| |
| |<code>12</code>
| |
| |-
| |
| |<code>5022</code>||<code>IT</code>
| |
| |<code>12</code>
| |
| |-
| |
| |<code>1600</code>
| |
| |<code>Algorithmen</code>
| |
| |<code>12</code>
| |
| |-
| |
| |<code>5045</code>||<code>DB</code>
| |
| |<code>15</code>
| |
| |}
| |
| | |
| ==Ändern von Datensätzen (<code>UPDATE</code>)==
| |
| <syntaxhighlight lang="sql">
| |
| UPDATE Vorlesung
| |
| SET VorlNr = VorlNr + 1000,
| |
| PersNr = 20
| |
| WHERE PersNr = 15;
| |
| </syntaxhighlight>
| |
| ändert alle Datensätze, für die <code>PersNr</code> den Wert <code>15</code> hat. Der Wert von <code>VorlNr</code> wird um <code>1000</code> erhöht und der Wert von <code>PersNr</code> auf <code>20</code> gesetzt.
| |
| | |
| Ergebnis eines nachfolgenden <code>SELECT *</code> ist, eventuell mit anderer Reihenfolge:
| |
| {| class="wikitable"
| |
| |-
| |
| !<code>VorlNr</code>!!<code>Titel</code>
| |
| !<code>PersNr</code>
| |
| |-
| |
| |<code>1000</code>
| |
| |<code>Softwareentwicklung 1</code>
| |
| |<code>12</code>
| |
| |-
| |
| |<code>1200</code>
| |
| |<code>Netzwerke 1</code>
| |
| |<code>20</code>
| |
| |-
| |
| |<code>1600</code>
| |
| |<code>Algorithmen</code>
| |
| |<code>12</code>
| |
| |-
| |
| |<code>2001</code>
| |
| |<code>Datenbanken</code>
| |
| |<code>20</code>
| |
| |-
| |
| |<code>5001</code>||<code>ET</code>
| |
| |<code>12</code>
| |
| |-
| |
| |<code>5022</code>||<code>IT</code>
| |
| |<code>12</code>
| |
| |-
| |
| |<code>6045</code>||<code>DB</code>
| |
| |<code>20</code>
| |
| |}
| |
| | |
| ==Löschen von Datensätzen (<code>DELETE</code>)==
| |
| <syntaxhighlight lang="sql">
| |
| DELETE FROM Vorlesung
| |
| WHERE PersNr = 12;
| |
| </syntaxhighlight>
| |
| löscht alle Datensätze, für die <code>PersNr</code> den Wert <code>12</code> hat.
| |
| | |
| Ergebnis eines nachfolgenden <code>SELECT *</code>, eventuell in anderer Reihenfolge:
| |
| {| class="wikitable"
| |
| |-
| |
| !<code>VorlNr</code>!!<code>Titel</code>
| |
| !<code>PersNr</code>
| |
| |-
| |
| |<code>1200</code>
| |
| |<code>Netzwerke 1</code>
| |
| |<code>20</code>
| |
| |-
| |
| |<code>2001</code>
| |
| |<code>Datenbanken</code>
| |
| |<code>20</code>
| |
| |-
| |
| |<code>6045</code>||<code>DB</code>
| |
| |<code>20</code>
| |
| |}
| |
| | |
| ===Zusammenfassung von <code>INSERT</code>, <code>UPDATE</code> und <code>DELETE</code>===
| |
| Verallgemeinert sehen die Änderungsanweisungen wie folgt aus.
| |
| | |
| <code>INSERT</code>-Anweisung:
| |
| <syntaxhighlight lang="sql">
| |
| INSERT INTO Quelle [(Auswahlliste)]
| |
| VALUES (Werteliste) | SELECT <Auswahlkriterien>;
| |
| </syntaxhighlight>
| |
| | |
| <code>UPDATE</code>-Anweisung:
| |
| <syntaxhighlight lang="sql">
| |
| UPDATE Quelle SET Zuweisungsliste
| |
| [FROM From-Klausel]
| |
| [WHERE Auswahlbedingung];
| |
| </syntaxhighlight>
| |
| | |
| <code>DELETE</code>-Anweisung:
| |
| <syntaxhighlight lang="sql">
| |
| DELETE FROM Quelle
| |
| [WHERE Auswahlbedingung];
| |
| </syntaxhighlight>
| |
| | |
| =Datendefinition=
| |
| siehe [[SQL:Datendefinition]]
| |
| | |
| ==Programmieren mit SQL==
| |
| siehe [[SQL:Programmierung]]
| |
| | |
| == Chronologie ==
| |
| {| class="wikitable sortable"
| |
| |-
| |
| ! Jahr !! Beschreibung
| |
| |-
| |
| | 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 [[American National Standards Institute|ANSI]] als Standard verabschiedet.
| |
| |-
| |
| | 1987 || ''SQL1'' wird von der [[Internationale Organisation für Normung|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. Im Rahmen dieser Überarbeitung werden weitere wichtige Features (wie etwa [[Datenbanktrigger|Trigger]] oder rekursive Abfragen) hinzugefügt.
| |
| |-
| |
| | 2003 || ''SQL:2003''. Als neue Features werden aufgenommen [[SQL/XML]], Window functions, Sequences.
| |
| |-
| |
| | 2006 || ''SQL/XML:2006''. Erweiterungen für [[SQL/XML]]<ref name="SQLXML2006">{{Literatur |Titel=SQL/XML:2006 – Evaluierung der Standardkonformität ausgewählter Datenbanksysteme |Autor=Michael Wagner |Datum=2010 |Verlag=Diplomica Verlag |ISBN=3-8366-9609-6 |Seiten=100}}</ref>.
| |
| |-
| |
| | 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 für 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 für einen Datentyp „mehrdimensionales Feld“.
| |
| |}
| |
| | |
| ==Sprachstandard==
| |
| Ziel der Standardisierung ist es, [[Anwendungsprogramm]]e so erstellen zu können, dass sie vom verwendeten Datenbanksystem unabhängig sind. Heutige Datenbanksysteme [[Implementierung|implementieren]] mehr oder weniger große Teile des Sprachstandards. Darüber hinaus stellen sie oftmals herstellerspezifische Erweiterungen bereit, die nicht dem Standard-Sprachumfang entsprechen. In der Vor-SQL-Zeit strebte man die Portabilität von Anwendungen über die [[Kompatible Schnittstellen|kompatible Schnittstelle]] an.
| |
| | |
| Der Standard besteht insgesamt aus zehn einzelnen Publikationen:<ref>{{Internetquelle |url=https://www.iso.org/committee/45342/x/catalogue/p/1/u/0/w/0/d/0 |hrsg=International Organization for Standardization |titel=ISO/IEC 9075 und 13249 |sprache=en |zugriff=2018-09-20}}</ref>
| |
| *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 ([[SQLJ|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 ([[SQLJ|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'' ergänzt:
| |
| *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: History
| |
| | |
| Weiterhin existieren eine Reihe Technical Reports, die eine Einführung zu den einzelnen Themen bieten.
| |
| | |
| *ISO/IEC TR 19075-1:2011 Part 1: XQuery Regular Expression Support in SQL [https://standards.iso.org/ittf/PubliclyAvailableStandards/c041528_ISO_IEC_TR_19075-1_2011.zip Download]
| |
| *ISO/IEC TR 19075-2:2015 Part 2: SQL Support for Time-Related Information [https://standards.iso.org/ittf/PubliclyAvailableStandards/c060394_ISO_IEC_TR_19075-2_2015.zip Download]
| |
| *ISO/IEC TR 19075-3:2015 Part 3: SQL Embedded in Programs using the JavaTM programming language [https://standards.iso.org/ittf/PubliclyAvailableStandards/c065141_ISO_IEC_TR_19075-3_2015.zip Download]
| |
| *ISO/IEC TR 19075-4:2015 Part 4: SQL with Routines and types using the JavaTM programming language [https://standards.iso.org/ittf/PubliclyAvailableStandards/c065142_ISO_IEC_TR_19075-4_2015.zip Download]
| |
| *ISO/IEC TR 19075-5:2016 Part 5: Row Pattern Recognition in SQL [https://standards.iso.org/ittf/PubliclyAvailableStandards/c065143_ISO_IEC_TR_19075-5_2016.zip Download]
| |
| *ISO/IEC TR 19075-6:2017 Part 6: SQL support for JavaScript Object Notation (JSON) [https://standards.iso.org/ittf/PubliclyAvailableStandards/c067367_ISO_IEC_TR_19075-6_2017.zip Download]
| |
| *ISO/IEC TR 19075-7:2017 Part 7: Polymorphic table functions in SQL [https://standards.iso.org/ittf/PubliclyAvailableStandards/c069776_ISO_IEC_TR_19075-7_2017.zip Download]
| |
| *ISO/IEC TR 19075-8:2019 Part 8: Multi-dimensional arrays (SQL/MDA) (wurde zurückgezogen<ref>{{Internetquelle |autor=14:00-17:00 |url=https://www.iso.org/cms/render/live/en/sites/isoorg/contents/data/standard/06/97/69777.html |titel=ISO/IEC TR 19075-8:2019 |sprache=en |abruf=2022-08-24}}</ref>)
| |
| Ein weiterer Teil befindet sich derzeit (2019) in Entwicklung:
| |
| *ISO/IEC TR 19075-9:20xx Part 9: Online Analytic Processing (OLAP) capabilities
| |
| | |
| Der offizielle Standard ist nicht frei verfügbar, jedoch existiert ein Zip-Archiv mit einer Arbeitsversion von 2008.<ref>[http://www.wiscorp.com/sql200n.zip Arbeitsversion des Standards von 2008] ([[ZIP-Dateiformat|ZIP]]; 12,7 MB)</ref> Die Technical Reports sind kostenlos von ISO erhältlich.
| |
| | |
| ==Literatur==
| |
| *Donald 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.
| |
| *Günter Matthiessen, Michael Unterstein: ''Relationale Datenbanken und SQL in Theorie und Praxis'' Springer Vieweg, [[index.php?title=Special:BookSources/9783642289859|ISBN 978-3-642-28985-9]].
| |
| *Edwin Schicker: ''Datenbanken und SQL – Eine praxisorientierte Einführung.'' Teubner, [[index.php?title=Special:BookSources/351902991X|ISBN 3-519-02991-X]].
| |
| *Oliver Bartosch, Markus Throll: ''Einstieg in SQL.'' Galileo Press, [[index.php?title=Special:BookSources/3898424979|ISBN 3-89842-497-9]].
| |
| *Daniel Warner, Günter Leitenbauer: ''SQL.'' Franzis, [[index.php?title=Special:BookSources/3772375278|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, [[index.php?title=Special:BookSources/9783827372666|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, [[index.php?title=Special:BookSources/3528552107|ISBN 3-528-55210-7]].
| |
| *Can Türker: ''SQL 1999 & SQL 2003.'' Dpunkt Verlag, [[index.php?title=Special:BookSources/3898642194|ISBN 3-89864-219-4]].
| |
| *Gregor Kuhlmann, Friedrich Müllmerstadt: ''SQL.'' Rowohlt, [[index.php?title=Special:BookSources/3499612453|ISBN 3-499-61245-3]].
| |
| *Michael J. Hernandez, John L. Viescas: ''Go To SQL.'' Addison-Wesley, [[index.php?title=Special:BookSources/382731772X|ISBN 3-8273-1772-X]].
| |
| *[[Alfons Kemper|A. Kemper]], A. Eickler: ''Datenbanksysteme – Eine Einführung.'' Oldenbourg, [[index.php?title=Special:BookSources/3486250531|ISBN 3-486-25053-1]].
| |
| *Marcus Throll, Oliver Bartosch: ''Einstieg in SQL 2008.'' 2. Auflage. Galileo Computing, [[index.php?title=Special:BookSources/9783836210393|ISBN 978-3-8362-1039-3]] inklusive Übungssoftware SQL-Teacher
| |
| *Marco Skulschus: ''SQL und relationale Datenbanken'' Comelio Medien, [[index.php?title=Special:BookSources/9783939701118|ISBN 978-3-939701-11-8]].
| |
| *Michael Wagner: ''SQL/XML:2006 – Evaluierung der Standardkonformität ausgewählter Datenbanksysteme'' 1. Auflage. Diplomica Verlag, [[index.php?title=Special:BookSources/3836696096|ISBN 3-8366-9609-6]].
| |
| *Christian F. G. Schendera: ''SQL mit SAS. Band 1: PROC SQL für Einsteiger''. Oldenbourg Wissenschaftsverlag, München 2011, [[index.php?title=Special:BookSources/9783486598407|ISBN 978-3-486-59840-7]].
| |
| *Christian F. G. Schendera: ''SQL mit SAS. Band 2: Fortgeschrittenes PROC SQL''. Oldenbourg Wissenschaftsverlag, München 2012, [[index.php?title=Special:BookSources/9783486598360|ISBN 978-3-486-59836-0]].
| |
| *[[Christopher J. Date|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, [[index.php?title=Special:BookSources/9780201964264|ISBN 978-0-201-96426-4]]
| |
| *Jim Melton: ''Advanced SQL:1999: Understanding Object-Relational and Other Advanced Features, 1st ed.'', Morgan Kaufmann, USA, 2002, [[index.php?title=Special:BookSources/9781558606777|ISBN 978-1558606777]].
| |
| | |
| ==Weblinks==
| |
| {{Wikibooks|Einführung in SQL|SQL}}
| |
| *[https://www.youtube.com/playlist?list=PLC4UZxBVGKte0o6iUssqQVmXhryrOqPXi Erklärvideos zu SQL], Big Data Analytics Group, Uni Saarland
| |
| *{{dmoz|World/Deutsch/Computer/Programmieren/Sprachen/SQL/}}
| |
| *[http://www.torsten-horn.de/techdocs/sql.htm SQL-Grundlagen] – Einführung mit Beispielen und Vergleich diverser Datenbanken
| |
| *[https://esb-dev.github.io/mat/sql-merkblatt.pdf Merkblatt SQL]
| |
| *[http://www.mcjones.org/System_R/SQL_Reunion_95/ The 1995 SQL Reunion: People, Projects, and Politics] – zur frühen Geschichte von SQL (englisch)
| |
| *[http://www.wiscorp.com/SQLStandards.html Frei verfügbare SQL-Standard-Dokumente], z. B. SQL:2003 und SQL:2008 (englisch)
| |
| *[http://www.1keydata.com/de/sql/ SQL-Tutorial]
| |
| *[http://sqltutor.fsv.cvut.cz/cgi-bin/sqltutor GNU SQLTutor]
| |
| *[https://sqlcoach.informatik.hs-kl.de/sqlcoach/ SQLcoach] – Freies Üben von SQL
| |
| *[https://edb2.gm.th-koeln.de/apps/sqltrainer/ Interaktiver SQL-Trainer (Anmeldung notwendig)]
| |
| *[https://blog.homepage-webhilfe.de/Artikel/mysql-tutorial-fuer-anfaenger/ Blogbeitrag zu SQL-Befehlen und deren Einsatz in PHP]
| |
| *[http://sql-tuning.com/ SQL Tuning]
| |
| *[https://docs.microsoft.com/en-us/sql/t-sql/language-reference?view=sql-server-ver15 Transact-SQL Reference (Database Engine)]
| |
| | |
| ==Siehe auch==
| |
| | |
| *[[Data Manipulation Language]]
| |
| *[[Data Definition Language]]
| |
| *[[Data Control Language]]
| |
| *[[Transaction Control Language]]
| |
| *[[SQL-Injection]]
| |
| *[[SchemaSQL]]
| |
| *[[Continuous Query Language]]
| |
| *[[Liste der Datenbankmanagementsysteme]]
| |
| *[[Bereichsabfrage]]
| |
| | |
| ==Einzelnachweise==
| |
| <references />
| |
| | |
| {{Normdaten|TYP=s|GND=4134010-3|LCCN=sh/86/6628}}
| |
| | |
| [[index.php?title=Kategorie:SQL| ]]
| |
| [[Index.php?title=Kategorie:SQL]]
| |
| [[Kategorie:Abkürzung]]
| |