|
|
(22 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| '''topic''' kurze Beschreibung | | '''topic''' - Kurzbeschreibung |
| ==Beschreibung== | | ==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. | | '''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. |
Zeile 20: |
Zeile 20: |
|
| |
|
| 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}} | | 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===
| |
| ===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]].
| |
|
| |
| ==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>
| |
| |-
| |
| |<code>25403</code>||<code>Jonas</code>
| |
| |-
| |
| |<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===
| |
| <syntaxhighlight lang="sql">
| |
| SELECT *
| |
| FROM Student;
| |
| </syntaxhighlight>
| |
| listet alle Spalten und alle Zeilen der Tabelle <code>Student</code> auf.
| |
|
| |
| Ergebnis:
| |
| {| class="wikitable"
| |
| |-
| |
| !<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>)===
| |
| <syntaxhighlight lang="sql">
| |
| SELECT VorlNr,
| |
| Titel
| |
| FROM Vorlesung;
| |
| </syntaxhighlight>
| |
| listet die Spalten <code>VorlNr</code> und <code>Titel</code> aller Zeilen der Tabelle <code>Vorlesung</code> auf.
| |
|
| |
| Ergebnis:
| |
| {| class="wikitable"
| |
| |-
| |
| !<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>)===
| |
| <syntaxhighlight lang="sql">
| |
| SELECT DISTINCT MatrNr
| |
| FROM hoert;
| |
| </syntaxhighlight>
| |
| 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.
| |
|
| |
| Ergebnis:
| |
| {| class="wikitable"
| |
| |-
| |
| !<code>MatrNr</code>
| |
| |-
| |
| |<code>25403</code>
| |
| |-
| |
| |<code>26120</code>
| |
| |}
| |
|
| |
| ===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>
| |
| |-
| |
| |<code>26120</code>||<code>Fichte</code>
| |
| |-
| |
| |<code>25403</code>||<code>Jonas</code>
| |
| |-
| |
| |<code>27103</code>||<code>Fauler</code>
| |
| |}
| |
|
| |
| ===Abfrage mit Filter (<code>WHERE</code>)===
| |
| <syntaxhighlight lang="sql">
| |
| SELECT VorlNr,
| |
| Titel
| |
| 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.
| |
|
| |
| Ergebnis:
| |
| {| class="wikitable"
| |
| |-
| |
| !<code>VorlNr</code>!!<code>Titel</code>
| |
| |-
| |
| |<code>5001</code>||<code>ET</code>
| |
| |}
| |
|
| |
| ===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>
| |
| |-
| |
| |<code>Fichte</code>
| |
| |-
| |
| |<code>Fauler</code>
| |
| |}
| |
|
| |
| ===Abfrage mit Filter und Sortierung (<code>ORDER BY</code>)===
| |
| <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>)===
| |
| <syntaxhighlight lang="sql">
| |
| SELECT Vorlesung.VorlNr,
| |
| 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.
| |
|
| |
| 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.
| |
|
| |
| Dies ist äquivalent zu:
| |
|
| |
| <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 == | | == Chronologie == |
Zeile 582: |
Zeile 51: |
| |} | | |} |
|
| |
|
| ==Sprachstandard== | | ==Syntax== |
| siehe [[SQL:Standards]]
| | * [[SQL:Abfragen|Abfragen]] |
| | * [[SQL:Einfügen|Einfügen]] |
| | * [[SQL:Ändern|Ändern]] |
| | * [[SQL:Löschen|Löschen]] |
| | * [[SQL:Datendefinition|Datendefinition]] |
| | * [[SQL:Programmierung|Programmierung]] |
| | * [[SQL:Standards|Standards]] |
|
| |
|
| ==Weblinks== | | ==Sicherheit== |
| | ==Dokumentation== |
| | ===RFC=== |
| | ===Man-Page=== |
| | ===Info-Pages=== |
| | ==Siehe auch== |
| | *[[Data Manipulation Language]] |
| | *[[Data Definition Language]] |
| | *[[Data Control Language]] |
| | *[[Transaction Control Language]] |
| | *[[SQL-Injection]] |
| | *[[SchemaSQL]] |
| | *[[Continuous Query Language]] |
| | *[[Liste der Datenbankmanagementsysteme]] |
| | *[[Bereichsabfrage]] |
| | |
| | ==Links== |
| | ===Projekt-Homepage=== |
| | ===Weblinks=== |
| {{Wikibooks|Einführung in SQL|SQL}} | | {{Wikibooks|Einführung in SQL|SQL}} |
| *[https://www.youtube.com/playlist?list=PLC4UZxBVGKte0o6iUssqQVmXhryrOqPXi Erklärvideos zu SQL], Big Data Analytics Group, Uni Saarland | | *[https://www.youtube.com/playlist?list=PLC4UZxBVGKte0o6iUssqQVmXhryrOqPXi Erklärvideos zu SQL], Big Data Analytics Group, Uni Saarland |
Zeile 592: |
Zeile 85: |
| *[https://esb-dev.github.io/mat/sql-merkblatt.pdf Merkblatt SQL] | | *[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.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.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://www.1keydata.com/de/sql/ SQL-Tutorial] |
| *[http://sqltutor.fsv.cvut.cz/cgi-bin/sqltutor GNU SQLTutor] | | *[http://sqltutor.fsv.cvut.cz/cgi-bin/sqltutor GNU SQLTutor] |
Zeile 601: |
Zeile 94: |
| *[https://docs.microsoft.com/en-us/sql/t-sql/language-reference?view=sql-server-ver15 Transact-SQL Reference (Database Engine)] | | *[https://docs.microsoft.com/en-us/sql/t-sql/language-reference?view=sql-server-ver15 Transact-SQL Reference (Database Engine)] |
|
| |
|
| ==Siehe auch== | | ===Einzelnachweise=== |
| | |
| *[[Data Manipulation Language]]
| |
| *[[Data Definition Language]]
| |
| *[[Data Control Language]]
| |
| *[[Transaction Control Language]]
| |
| *[[SQL-Injection]]
| |
| *[[SchemaSQL]]
| |
| *[[Continuous Query Language]]
| |
| *[[Liste der Datenbankmanagementsysteme]]
| |
| *[[Bereichsabfrage]]
| |
| | |
| ==Einzelnachweise== | |
| <references /> | | <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> |
|
| |
|
| {{Normdaten|TYP=s|GND=4134010-3|LCCN=sh/86/6628}}
| |
|
| |
|
| [[index.php?title=Kategorie:SQL| ]] | | [[Kategorie:SQL]] |
| [[Index.php?title=Kategorie:SQL]]
| |
| [[Kategorie:Abkürzung]] | | [[Kategorie:Abkürzung]] |