{"id":4626,"date":"2019-04-08T12:33:40","date_gmt":"2019-04-08T10:33:40","guid":{"rendered":"https:\/\/dev.wi-lex.de\/index.php\/structured-query-language\/"},"modified":"2023-03-21T12:36:32","modified_gmt":"2023-03-21T11:36:32","slug":"structured-query-language","status":"publish","type":"page","link":"https:\/\/wi-lex.de\/lexikon\/informations-daten-und-wissensmanagement\/datenmanagement\/datenbanksystem\/structured-query-language\/","title":{"rendered":"Structured Query Language (SQL)"},"content":{"rendered":"<p><a title=\"Gottfried Vossen\" href=\"https:\/\/www.wi-lex.de\/index.php\/autoren\/autorenverzeichnis\/vossen-prof-dr-gottfried\/\">Gottfried Vossen<\/a><\/p>\n<hr \/>\n<p align=\"JUSTIFY\"><em>Structured Query Language, kurz SQL oder auch Sequel, ist eine seit vielen Jahren standardisierten Sprache zur Definition, Manipulation, Formulierung von Anfragen und Verwaltung von Datenbanken. Sie liegt heute allen kommerziellen und nicht-kommerziellen Datensystemen zu Grunde und hat im Laufe der Zeit zahlreiche Erg\u00e4nzungen und Erweiterungen erfahren.<\/em><\/p>\n<h2>SQL aus Benutzersicht<\/h2>\n<p align=\"JUSTIFY\">Aus Sicht eines Benutzers ist SQL eine Sprache zum Umgang mit relationalen Datenbanken, die auf einem hohen Abstraktionsniveau angesiedelt ist und insbesondere von einer Besch\u00e4ftigung mit Einzelheiten der Datenspeicherung befreit. Die Entwicklung von SQL geht auf IBM zur\u00fcck und wurde zu Beginn der 70er Jahre begonnen. SQL (zu dieser Zeit ein Akronym f\u00fcr <em>Structured English Query Language<\/em>) wurde 1986 als SQL1\u00a0 bzw. SQL86\u00a0 von der ISO standardisiert, in den Folgejahren mehrfach erg\u00e4nzt und erweitert (1989 Addendum-1 bzw. SQL89, 1992 SQL2 bzw. SQL92, 1999 SQL3 bzw. SQL:1999, aktueller Stand ist SQL:2019, siehe <a id=\"LPlnk389286\" class=\"OWAAutoLink\" href=\"https:\/\/de.wikipedia.org\/wiki\/SQL#Sprachstandard\" target=\"_blank\" rel=\"noopener\"> https:\/\/de.wikipedia.org\/wiki\/SQL#Sprachstandard<\/a>).<\/p>\n<p align=\"JUSTIFY\">Aus Benutzersicht werden folgende Aktivit\u00e4ten im Umgang mit einer Datenbank von SQL unterst\u00fctzt:<\/p>\n<ul class=\"wl_bullet_me\">\n<li>\n<div class=\"wl_normal\"><span dir=\"ltr\">Datenbankdefinition (mit Kommandos wie <\/span> create table oder drop table) auf der Ebene des zugrunde liegenden Datenbankschemas,<\/div>\n<\/li>\n<li>\n<div class=\"wl_normal\"><span dir=\"ltr\">Manipulation und Anfrage (mit Kommandos wie <\/span>select, insert, delete oder update),<\/div>\n<\/li>\n<li>\n<div class=\"wl_normal\">\u00a0<span dir=\"ltr\">Verwaltung und Administration (z. B. Transaktionssteuerung mit Kommandos wie <\/span>commit oder rollback, Zugriffskontrolle mit Kommandos wie grant oder revoke oder interne Verwaltung mit Kommandos wie create\/drop index),<\/div>\n<\/li>\n<li>\n<div class=\"wl_normal\"><span dir=\"ltr\">Programmiersprachern-Einbettung bzw. \u2013Anbindung (\u00fcber SQLJ bzw. das SQL Call Level Interface SQL\/CLI sowie \u00fcber zahlreiche Commectoren).<\/span><\/div>\n<\/li>\n<\/ul>\n<p align=\"JUSTIFY\"><span dir=\"ltr\">Schnittstellen zu Programmiersprachen erlauben ferner eine direkte \u00dcbergabe von SQL-Befehlen an ein Datenbanksystem \u00fcber einen Funktionsaufruf (z.B. per JDBC).<\/span><\/p>\n<p align=\"JUSTIFY\">Eine Verwendung von SQL unterstellt das Vorhandensein eines Datenbankschemas, dem einzelne Tabellen zugeordnet sind. Diese lassen sich mit dem Kommando CREATE TABLE anlegen, durch welches eine (neue) Tabelle einen Namen bekommt sowie Attribute und Integrit\u00e4tsbedingungen. Attribute haben jeweils einen Wertebereich, der festlegt, welchen Typ Daten die entsprechende Tabellenspalte aufnehmen kann. Wertebereiche sind z. B. CHAR(n) bzw. VARCHAR(n) f\u00fcr Zeichenreihen fester oder variable L\u00e4nge n, INTEGER f\u00fcr ganze Zahlen, DATE f\u00fcr Datumswerte oder BLOB f\u00fcr Werte, die z. B. Grafiken\u00a0 darstellen und als Binary Large Objects bezeichnet werden. Als Integrit\u00e4tsbedingungen lassen sich Wertebereichs-Bedingungen, Prim\u00e4r- sowie Fremdschl\u00fcssel, Check-Klauseln sowie allgemeine Assertions festlegen. Durch die so genannten <em>objekt-relationalen<\/em> Erweiterungen, die SQL im Rahmen von SQL:1999 sowie SQL:2003 erfahren hat, lassen sich neben \u201eflachen\u201c Wertebereichen auch strukturierte definieren, und es kann zwischen ungetypten und getypten Tabellen unterschieden werden.<\/p>\n<p align=\"JUSTIFY\">Das zentrale Kommando zur Formulierung von Anfragen ist der SELECT-Befehl mit der einfachen Grundform<\/p>\n<p align=\"JUSTIFY\">SELECT Attribute<br \/>\nFROM\u00a0\u00a0 Relation(en)<br \/>\nWHERE Bedingung<\/p>\n<p align=\"JUSTIFY\">GROUP BY Bedingung<\/p>\n<p align=\"JUSTIFY\">HAVING Bedingung<\/p>\n<p align=\"JUSTIFY\">ORDER BY Bedingung<\/p>\n<p align=\"JUSTIFY\">Hierbei spezifiziert die erste Zeile die Ausgabe, die zweite die Eingabe, aus welcher Daten entnommen werden sollen (also typischerweise Tabelle oder Sichten), alle weiteren Klauseln sind optional. Die WHERE-Klausel spezifiziert Bedingungen, welchen die Ausgabe zu gen\u00fcgen hat. GROUP BY erlaubt eine Gruppierung von Datens\u00e4tzen anhand bestimmter Werte, die durch HAVING noch eingeschr\u00e4nkt werden k\u00f6nnen. ORDER BY schlie\u00dflich erlaubt ein Sortieren der Ausgabe.\u00a0Alle Klauseln der SELECT-Grundform lassen vielf\u00e4ltige Ausdr\u00fccke zu. So kann man z. B. in der SELECT-Klausel Umbenennungen von Attributen oder Umformatierungen (CAST) von Werten vornehmen. Als Eingabe in einer FROM-Klausel kann jedes Konstrukt dienen, das sich zu einer Tabelle auswerten l\u00e4sst. Bedingungen in einer WHERE-Klausel k\u00f6nnen sich unterschiedlichster Funktionen und Vergleichsoperatoren bedienen.<\/p>\n<p align=\"JUSTIFY\">In der Group By-Klausel sind heute OLAP-Operatoren wie ROLLUP und CUBE zugelassen, die im Zusammenhang mit Data Warehouse-Anwendungen von Bedeutung sind.<\/p>\n<p align=\"JUSTIFY\">Wesentlich ist, dass sich der Benutzer keine Gedanken \u00fcber eine effiziente Ausf\u00fchrung seiner Anfragen machen muss, da ein SQL unterst\u00fctzendes Datenbanksystem grunds\u00e4tzlich einen Anfrage-Optimierer einsetzt, welcher SQL-Statements vor deren Ausf\u00fchrung so umzuformen versucht, dass sie effizienter ausgef\u00fchrt werden k\u00f6nnen.<\/p>\n<h2>SQL aus Systemsicht<\/h2>\n<p align=\"JUSTIFY\">Aus der Sicht eines Datenbanksystems handelt es sich bei SQL um eine deklarative Hochsprache, in welcher von allen Einzelheiten der Datenspeicherung oder internen Datenorganisation abstrahiert ist. Dementsprechend enth\u00e4lt die Sprache Redundanzen, die es dem Anwender erm\u00f6glichen, gleiche Anfragen auf unterschiedliche Weise auszudr\u00fccken. Systemseitig wird daher stets eine <em>Optimierung<\/em> von Benutzeranfragen vorgenommen, bevor diese zur Ausf\u00fchrung gelangen. Ferner ist es notwendig, Anbindungen an Programmiersprachen wie Java oder Python vorzusehen, damit von Anwendungsprogrammen aus \u00fcber statisches oder dynamisches SQL auf eine Datenbank zugegriffen werden kann. Besonders relevant sind derartige Anbindungen heute im Zusammenhang mit Web-Anwendungen, welche h\u00e4ufig auf (nach au\u00dfen nicht sichtbaren) Datenbanken basieren.<\/p>\n<p align=\"JUSTIFY\">Das Anfrageparadigma von SQL ist mittlerweile so weit verbreitet und Anwendern vertraut, dass selbst Datenbanksysteme, die sich nicht der relationalen Kategorie zurechnen lassen, h\u00e4ufig mit einer SQL-artigen Schnittstelle ausgestattet werden.<\/p>\n<hr \/>\n<h3>Literatur<\/h3>\n<p class=\"wl_literaturquelle\">Elmasri, R., Navathe, S.B.: Fundamentals of Database Systems, 7th ed.. New York: Pearson Education, 2016.<\/p>\n<p class=\"wl_literaturquelle\">Lemahieu, W., vanden Broucke, S., Baesens, B.: Principles of Database Management; Cambridge University Press, 2018.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gottfried Vossen Structured Query Language, kurz SQL oder auch Sequel, ist eine seit vielen Jahren standardisierten Sprache zur Definition, Manipulation, Formulierung von Anfragen und Verwaltung von Datenbanken. Sie liegt heute allen kommerziellen und nicht-kommerziellen Datensystemen zu Grunde und hat im <a href=\"https:\/\/wi-lex.de\/lexikon\/informations-daten-und-wissensmanagement\/datenmanagement\/datenbanksystem\/structured-query-language\/\" class=\"read-more\">Read More &#8230;<\/a><\/p>\n","protected":false},"author":568,"featured_media":0,"parent":3860,"menu_order":4,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-4626","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/wi-lex.de\/wp-json\/wp\/v2\/pages\/4626","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wi-lex.de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wi-lex.de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wi-lex.de\/wp-json\/wp\/v2\/users\/568"}],"replies":[{"embeddable":true,"href":"https:\/\/wi-lex.de\/wp-json\/wp\/v2\/comments?post=4626"}],"version-history":[{"count":7,"href":"https:\/\/wi-lex.de\/wp-json\/wp\/v2\/pages\/4626\/revisions"}],"predecessor-version":[{"id":16882,"href":"https:\/\/wi-lex.de\/wp-json\/wp\/v2\/pages\/4626\/revisions\/16882"}],"up":[{"embeddable":true,"href":"https:\/\/wi-lex.de\/wp-json\/wp\/v2\/pages\/3860"}],"wp:attachment":[{"href":"https:\/\/wi-lex.de\/wp-json\/wp\/v2\/media?parent=4626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}