SQL
Paradigma | Deklarativ |
---|---|
Familie | Abfragesprache |
Entworfen von | Donald D. Chamberlin Raymond F. Boyce |
Entwickler | ISO / IEC JTC 1 (gemeinsamer technischer Ausschuss 1) / SC 32 (Unterausschuss 32) / WG 3 (Arbeitsgruppe 3) |
Erstmals erschienen | 1974 |
Stabile Version | SQL: 2016 / Dezember 2016 |
Disziplin tippen | Statisch, stark |
OS | Plattformübergreifend |
Webseite | www |
Haupt Implementierungen | |
Viele | |
Dialekte | |
Beeinflusst von | |
Datenprotokoll | |
Beeinflusst | |
CQL, Linq, Sparql, Soql, Power Shell,[1] JPQL, Jooq, N1QL | |
|
Dateiname Erweiterung | .sql |
---|---|
Internet -Medientyp | |
Entwickelt von | ISO/IEC |
Erstveröffentlichung | 1986 |
Art des Formats | Datenbank |
Standard | ISO/IEC 9075 |
Offenes Format? | Ja |
Webseite | www |
Sql (/ˌɛsˌkJuːˈɛl/ (Hören) S-Q-L,[4] /ˈsichkwəl/ "Folge"; Strukturierte Abfragesprache)[5] ist ein Domänenspezifische Sprache verwendet in der Programmierung und entwickelt für die Verwaltung von Daten in a Relationales Datenbank Management System (RDBMS) oder für die Stream -Verarbeitung in a Relational Data Stream Management System (RDSMS). Es ist besonders nützlich bei der Handhabung Strukturierte Daten, d. H. Daten, die Beziehungen zwischen Entitäten und Variablen enthalten.
SQL bietet zwei Hauptvorteile gegenüber älteren Lesen - Schreiben Apis wie zum Beispiel Isam oder Vsam. Erstens wurde das Konzept des Zugriffs auf viele Datensätze mit einem einzigen Befehl eingeführt. Zweitens beseitigt es die Notwendigkeit zu spezifizieren wie um einen Datensatz zu erreichen, z. mit oder ohne eine Index.
Ursprünglich basierend auf Relationale Algebra und Tupel Relational Calculus, SQL besteht aus vielen Arten von Aussagen,[6] die informell eingestuft werden kann als Sublanguageshäufig: a Datenabfragesprache (DQL),[a] a Datendefinitionssprache (Ddl),[b] a Datenkontrollsprache (DCL) und a Datenmanipulierungssprache (DML).[c][7] Der Umfang von SQL enthält Datenabfrage, Datenmanipulation (Einfügen, Aktualisieren und Löschen), Datendefinition (Definition (Schema Erstellung und Änderung) und Datenzugriffskontrolle. Obwohl SQL im Wesentlichen a ist deklarative Sprache (4gl), es schließt es auch ein prozedural Elemente.
SQL war eine der ersten kommerziellen Sprachen, die sie verwendeten, Edgar F. Codd's Relationales Modell. Das Modell wurde in seinem einflussreichen Artikel von 1970 "einem relationalen Datenmodell für große gemeinsame Datenbanken" beschrieben.[8] Trotz nicht vollständig haftend an das relationale Modell, wie von Codd beschriebenEs wurde die am häufigsten verwendete Datenbanksprache.[9][10]
SQL wurde ein Standard des American National Standards Institute (ANSI) im Jahr 1986 und der Internationale Standardisierungsorganisation (ISO) 1987.[11] Seitdem wurde der Standard überarbeitet, um eine größere Anzahl von Funktionen einzuschließen. Trotz der Existenz von Standards erfordert der meisten SQL -Code zumindest einige Änderungen, bevor sie auf verschiedene portiert werden Datenbank Systeme.
Geschichte
SQL wurde zunächst bei entwickelt IBM durch Donald D. Chamberlin und Raymond F. Boyce Nachdem das relationale Modell erfahren hatte Edgar F. Codd[12] In den frühen 1970er Jahren.[13] Diese Version, die zunächst eine Fortsetzung genannt wird (strukturierte englische Abfragesprache), wurde entwickelt, um Daten zu manipulieren und abzurufen, die im ursprünglichen quasi -samistationalen Datenbankverwaltungssystem von IBM gespeichert sind. System r, was eine Gruppe bei IBM San Jose Research Laboratory hatte sich in den 1970er Jahren entwickelt.[13]
Der erste Versuch von Chamberlin und Boyce in einer relationalen Datenbanksprache war quadratisch (Angabe von Abfragen in einer relationalen Umgebung), aber es war schwierig, aufgrund der Notation des Index/SuperScripts zu verwenden. Nach dem Umzug in das San Jose Research Laboratory im Jahr 1973 begannen sie mit der Arbeit an einer Fortsetzung von Square.[12] Die Fortsetzung der Namen wurde später in SQL geändert (fallen die Vokale ab), da "Fortsetzung" a war Warenzeichen des Großbritannien Hawker Siddeley Dynamic Engineering Limited Company.[14] Das Etikett SQL wurde später zum Akronym für strukturierte Abfragestrainer.
Nach dem Testen von SQL an Kundentestseiten, um die Nützlichkeit und Praktikabilität des Systems zu bestimmen, begann IBM, kommerzielle Produkte basierend auf ihrem System R -Prototyp zu entwickeln, einschließlich System/38, SQL/DS, und IBM DB2, die 1979, 1981 bzw. 1983 im Handel erhältlich waren.[15]
In den späten 1970er Jahren Relational Software, Inc. (jetzt Oracle Corporation) sah das Potenzial der von Codd, Chamberlin und Boyce beschriebenen Konzepte und entwickelte ihre eigenen SQL-basierten RDBMS Mit Bestrebungen, es an die zu verkaufen US -Marine, CIA, und andere US Regierung Agenturen. Im Juni 1979 führte die relationale Software eine der ersten im Handel erhältlichen Implementierungen von SQL ein. Orakel V2 (Version2) für Vax Computers.
Bis 1986 haben ANSI- und ISO -Standardgruppen offiziell die Standard -SQL -Sprachdefinition "Datenbanksprache" übernommen. Neue Versionen des Standards wurden 1989, 1992, 1996, 1999, 2003, 2006, 2008, 2011, veröffentlicht, 2011,[12] und zuletzt 2016.[16]
Syntax
Die SQL -Sprache ist in mehrere Sprachelemente unterteilt, darunter:
- Klauseln, die Bestandteile von Aussagen und Abfragen sind. (In einigen Fällen sind diese optional.)[17]
- Ausdrücke, was entweder produzieren kann Skalar Werte, oder Tische bestehend aus Säulen und Reihen von Dateien
- Prädikate, die Bedingungen angeben, die an SQL bewertet werden können dreiwertige Logik (3VL) (wahr/falsch/unbekannt) oder Boolesche Wahrheitswerte und werden verwendet, um die Auswirkungen von Aussagen und Abfragen zu begrenzen oder den Programmfluss zu ändern.
- Abfragen, die die Daten basierend auf bestimmten Kriterien abrufen. Dies ist ein wichtiges Element von Sql.
- Aussagen, die einen anhaltenden Einfluss auf Schemata und Daten haben oder kontrollieren können Transaktionen, Programmfluss, Verbindungen, Sitzungen oder Diagnostika.
- SQL -Anweisungen enthalten auch die Semikolon (";") Erklärung Terminator. Obwohl es auf jeder Plattform nicht erforderlich ist, ist es als Standardteil der SQL -Grammatik definiert.
- Unbedeutender Weißespace wird im Allgemeinen in SQL -Anweisungen und Abfragen ignoriert, sodass der SQL -Code für die Lesbarkeit einfacher wird.
Verfahrensweiterungen
SQL ist für einen bestimmten Zweck ausgelegt: zur Abfrage Daten in a enthalten relationale Datenbank. SQL ist a einstellen-basierend, deklarative Programmiersprache, nicht ein Imperative Programmiersprache wie C oder BASIC. Erweiterungen zu Standard -SQL -Hinzufügen jedoch prozedurale Programmiersprache Funktionalität wie Steuerelementkonstrukte. Diese beinhalten:
Quelle | Abkürzung | Vollständiger Name |
---|---|---|
ANSI/ISO -Standard | SQL/PSM | SQL/Persistent gespeicherte Module |
Interbase / Feuervogel | PSQL | Prozeduraler SQL |
IBM DB2 | Sql pl | SQL -Verfahrenssprache (implementiert SQL/PSM) |
IBM Informix | Spl | Gespeicherte Verfahrenssprache |
IBM Metezza | NZPLSQL[18] | (basierend auf Postgres PL/PGSQL) |
Eindringlich | PSQL[19] | Einbezogene prozedurale SQL (Geräte SQL/PSM und PL/sql)) |
Mariadb | SQL/PSM, PL/sql | SQL/Persistent gespeichertes Modul (implementiert SQL/PSM), prozedurale Sprache/SQL (basierend auf Ada)[20] |
Microsoft / Sybase | T-SQL | Transact-SQL |
Mimer SQL | SQL/PSM | SQL/Persistent gespeichertes Modul (implementiert SQL/PSM) |
Mysql | SQL/PSM | SQL/Persistent gespeichertes Modul (implementiert SQL/PSM) |
Monetdb | SQL/PSM | SQL/Persistent gespeichertes Modul (implementiert SQL/PSM) |
Nuodb | SSP | Starkey gespeicherte Verfahren |
Orakel | PL/sql | Prozedurale Sprache/SQL (basierend auf Ada)) |
PostgreSQL | PL/PGSQL | Prozedurale Sprache/PostgreSQL Structured Query Language (basierend auf Reduzierung PL/sql)) |
SAP R/3 | Abap | Fortgeschrittene Unternehmensanwendungsprogrammierung |
Sap Hana | SQLScript | SQLScript |
Sybase | Watcom-SQL | SQL Anywhere Watcom-SQL-Dialekt |
Teradata | Spl | Gespeicherte Verfahrenssprache |
Zusätzlich zu den Standard -SQL/PSM -Erweiterungen und proprietären SQL -Erweiterungen, prozeduraler und objektorientierter Die Programmierbarkeit ist auf vielen SQL -Plattformen über DBMS -Integration in andere Sprachen verfügbar. Der SQL -Standard definiert SQL/JRT Erweiterungen (SQL -Routinen und -Typen für die Java -Programmiersprache) zur Unterstützung Java Code in SQL -Datenbanken. Microsoft SQL Server 2005 verwendet die SQLCLR (SQL Server Common Language Runtime) bis Host Managed .NETZ Baugruppen in der DatenbankWährend frühere Versionen von SQL Server auf nicht verwaltete erweiterte gespeicherte Verfahren beschränkt waren, hauptsächlich in C geschrieben in C. PostgreSQL Lassen Sie Benutzer Funktionen in einer Vielzahl von Sprachen schreiben - einschließlich Perl, Python, Tcl, JavaScript (PL/V8) und C.[21]
Interoperabilität und Standardisierung
Überblick
SQL -Implementierungen sind zwischen Anbietern nicht kompatibel und folgen nicht unbedingt vollständig Standards. Insbesondere Datums- und Uhrzeitsyntax, String -Verkettung, NULL
s und Vergleich Fallempfindlichkeit variieren vom Verkäufer zum Verkäufer. Besondere Ausnahmen sind PostgreSQL[22] und Mimer SQL[23] Dies strebt die Einhaltung von Standards an, obwohl PostgreSQL in allen Fällen nicht an den Standard entspricht. Beispielsweise ist die Faltung von nicht geeigneten Namen in den Fall in PostgreSQL mit dem SQL -Standard nicht kompatibel.[24] Dies besagt, dass nicht geeignete Namen in den Oberfall gefaltet werden sollten.[25] Daher, Foo
sollte gleich sein mit Foo
nicht Foo
Nach dem Standard.
Beliebte Implementierungen von SQL lassen häufig die Unterstützung für grundlegende Funktionen von Standard -SQL aus, wie z. DATUM
oder ZEIT
Datentypen. Die offensichtlichsten Beispiele und übrigens die beliebtesten kommerziellen und proprietären SQL -DBMS sind Oracle (dessen DATUM
verhält sich als TERMINZEIT
,[26][27] und fehlt a ZEIT
Typ)[28] und MS SQL Server (vor der Version 2008). Infolgedessen kann SQL -Code selten zwischen Datenbanksystemen ohne Änderungen portiert werden.
Gründe für die Inkompatibilität
Mehrere Gründe für diese mangelnde Portabilität zwischen Datenbanksystemen sind:
- Die Komplexität und Größe des SQL -Standards bedeutet, dass die meisten Implementierer den gesamten Standard nicht unterstützen.
- Der Standard gibt das Datenbankverhalten in mehreren wichtigen Bereichen nicht an (z. Indizes, Dateispeicher ...) und Implementierungen lassen, um zu entscheiden, wie man sich verhält.
- Der SQL -Standard spezifiziert genau die Syntax, die ein konformes Datenbanksystem implementieren muss. Die Spezifikation der Semantik von Sprachkonstrukten des Standards ist jedoch weniger gut definiert, was zu Unklarheiten führt.
- Viele Datenbankanbieter verfügen über große vorhandene Kundenbasis. Wenn die neuere Version des SQL -Standards mit dem vorherigen Verhalten der Datenbank des Anbieters konflikt Rückwärtskompatibilität.
- Es gibt nur wenige kommerzielle Anreize für Anbieter, um sich ändernde Datenbanklieferanten zu vereinfachen (siehe Verkäufersperrung).
- Benutzer, die Datenbanksoftware bewerten, tendieren dazu, andere Faktoren wie Leistung in ihren Prioritäten höher zu platzieren als die Konformität der Standards.
Standardisierungsgeschichte
SQL wurde 1986 von der ANSI als SQL-86 als Standard übernommen[29] und die ISO im Jahr 1987.[11] Es wird von gepflegt von ISO/IEC JTC 1, Informationstechnologie, Unterausschuss SC 32, Datenmanagement und Austausch.
Bis 1996 die Nationales Institut für Standards und Technologie (NIST) Datenmanagement-Standards-Programm zertifiziert SQL DBMS Einhaltung des SQL-Standards. Anbieter zertifizieren jetzt die Einhaltung ihrer Produkte.[30]
Der ursprüngliche Standard erklärte, dass die offizielle Aussprache für "SQL" ein war Initialismus: /ˌɛsˌkJuːˈɛl/ ("Ess cue el").[9] Unabhängig davon, viele englischsprachige Datenbankprofis (einschließlich Donald Chamberlin selbst[31]) Verwenden Sie die Akronym-ähnliche Aussprache von /ˈsichkwəl/ ("Folge"),[32] Spiegeln Sie den Namen der Prerelease -Entwicklung der Sprache, "Fortsetzung".[13][14][31]
Der SQL -Standard hat eine Reihe von Überarbeitungen durchlaufen:
Jahr | Name | Alias | Kommentare |
---|---|---|---|
1986 | SQL-86 | SQL-87 | Zuerst formalisiert von ANSI |
1989 | SQL-89 | FIPS 127-1 | Kleinere Überarbeitung, die als FIPS 127-1 integrierte Einschränkungen hinzugefügt wurde |
1992 | SQL-92 | SQL2, FIPS 127-2 | Hauptrevision (ISO 9075), Einstiegslevel SQL-92 als FIPS 127-2 übernommen |
1999 | SQL: 1999 | SQL3 | Regelmäßige Ausdrucksübereinstimmungen hinzugefügt, rekursive Abfragen (z.B. Transitive Schließung), löst aus, Unterstützung für prozedurale und kontrollierte Aussagen, Nichtcalar-Typen (Arrays) und einige objektorientierte Merkmale (z. strukturierte Typen), Unterstützung für das Einbetten von SQL in Java (SQL/OLB) und umgekehrt (SQL/JRT)) |
2003 | SQL: 2003 | Eingeführt Xml-bezogene Funktionen (SQL/XML), Fensterfunktionen, standardisierte Sequenzen und Spalten mit autogenerierten Werten (einschließlich Identitätsspalten) | |
2006 | SQL: 2006 | ISO/IEC 9075-14: 2006 definiert Wege, wie SQL mit XML verwendet werden kann. Es definiert Möglichkeiten zum Importieren und Speichern von XML -Daten in einer SQL -Datenbank, manipuliert sie in der Datenbank und veröffentlicht sowohl XML- als auch konventionelle SQL -Daten in XML -Form. Darüber hinaus können Anwendungen Abfragen in ihren SQL -Code mit integrieren XQuery, Die vom World Wide Web Consortium veröffentlichte XML -Abfragesprache (veröffentlicht vom World Wide Web Consortium ()W3c), um gleichzeitig auf gewöhnliche SQL-Daten- und XML-Dokumente zuzugreifen.[33] | |
2008 | SQL:2008 | Legalisiert die Bestellung durch externe Cursordefinitionen. Fügt statt Auslöser hinzu, abschneidende Aussage,[34] Klausel abrufen | |
2011 | SQL: 2011 | Fügt zeitliche Daten hinzu (Zeitraum für)[35] (mehr Informationen bei Temporale Datenbank#Verlauf). Verbesserungen für Fensterfunktionen und Klausel abrufen.[36] | |
2016 | SQL: 2016 | Fügt Zeilenmuster -Matching hinzu, polymorphe Tabellenfunktionen, JSON | |
2019 | SQL: 2019 | Fügt Teil 15 hinzu, mehrdimensionale Arrays (MDarray -Typ und Operatoren) |
Aktueller Standard
Der Standard wird üblicherweise durch das Muster bezeichnet: ISO/IEC 9075-N: YJJY TEIL N: Titeloder, als Abkürzung, ISO/IEC 9075.
ISO/IEC 9075 wird ergänzt durch ISO/IEC 13249: SQL Multimedia- und Anwendungspakete (SQL/MM), das SQL-basierte Schnittstellen und Pakete für weit verbreitete Anwendungen wie Video, Audio und für weit verbreitete Anwendungen definiert räumliche Daten. Interessenten können SQL -Standarddokumente von ISO erwerben.[37] IEC oder Ansi. Ein Entwurf von SQL: 2008 ist frei verfügbar als Postleitzahl Archiv.[38]
Anatomie des SQL -Standards
Der SQL -Standard ist in 10 Teile unterteilt, jedoch mit Lücken in der Nummerierung aufgrund des Entzuges veralteter Teile.
- ISO/IEC 9075-1: 2016 Teil 1: Rahmen (SQL/Framework). Es bietet logische Konzepte.[39]
- ISO/IEC 9075-2: 2016 Teil 2: Stiftung (SQL/Foundation). Es enthält die zentralsten Elemente der Sprache und besteht aus beiden obligatorisch und optional Merkmale.
- ISO/IEC 9075-3: 2016 Teil 3: Call-Level-Schnittstelle (SQL/CLI). Es definiert Schnittstellenkomponenten (Strukturen, Verfahren, variable Bindungen), die zur Ausführung von SQL -Anweisungen aus Anwendungen in ADA, C, C, C ++, COBOL, FORTRAN, Mumps, Pascal oder PL/I verwendet werden können. (Für Java siehe Teil 10.) SQL/CLI wird so definiert, dass SQL -Anweisungen und SQL/CLI -Prozeduraufrufe als Quellcode der Anwendung getrennt behandelt werden. Öffnen Sie die Datenbankkonnektivität ist ein bekannter Superet von SQL/CLI. Dieser Teil des Standards besteht ausschließlich aus obligatorisch Merkmale.
- ISO/IEC 9075-4: 2016 Teil 4: Persistent gespeicherte Module (SQL/PSM). Es standardisiert prozedurale Erweiterungen für SQL, einschließlich des Steuerflusses, der Bedingungsbearbeitung, Signale und Rücktritte, Cursors und lokalen Variablen sowie Zuordnung von Ausdrücken zu Variablen und Parametern. Darüber hinaus formalisiert SQL/PSM die Deklaration und Wartung persistierter Datenbanksprachroutinen (z. B. "gespeicherte Verfahren"). Dieser Teil des Standards besteht ausschließlich aus Optional Merkmale.
- ISO/IEC 9075-9: 2016 Teil 9: Verwaltung externer Daten (Sql/med). Es bietet Erweiterungen an SQL, die Fremddaten-Wrapper und Datalink-Typen definieren, damit SQL externe Daten verwaltet. Externe Daten sind Daten, auf die ein SQL-basierter DBMs zugänglich ist, aber nicht verwaltet wird. Dieser Teil des Standards besteht ausschließlich aus Optional Merkmale.
- ISO/IEC 9075-10: 2016 Teil 10: Objektsprachenbindungen (SQL/OLB). Es definiert die Syntax und Semantik von SQLJ, was SQL in Java eingebettet ist (siehe auch Teil 3). Der Standard beschreibt auch Mechanismen, um die binäre Portabilität von SQLJ -Anwendungen zu gewährleisten, und legt verschiedene Java -Pakete und deren enthaltene Klassen fest. Dieser Teil des Standards besteht ausschließlich aus Optional Merkmale. Im Gegensatz zu SQL/OLB JDBC definiert an API und ist nicht Teil des SQL -Standards.
- ISO/IEC 9075-11: 2016 Teil 11: Informations- und Definitionschemata (SQL/Schemata). Es definiert das Informationsschema und das Definitionsschema und bietet eine gemeinsame Reihe von Tools, um SQL-Datenbanken und -objekte selbstbeschreibung zu gestalten. Diese Tools umfassen die SQL-Objekt-Kennung, Struktur- und Integritätsbeschränkungen, Sicherheits- und Autorisierungsspezifikationen, Merkmale und Pakete von ISO/IEC 9075, Unterstützung von Funktionen, die von SQL-basierten DBMS-Implementierungen, SQL-basierten DBMS-Implementierungsinformationen und Größenelementen und der Größenänderungen und der Abteilung bereitgestellt werden, und der Werte, die von den DBMS -Implementierungen unterstützt werden.[40] Dieser Teil des Standards enthält beide obligatorisch und optional Merkmale.
- ISO/IEC 9075-13: 2016 Teil 13: SQL -Routinen und -Typen mit der Java -TM -Programmiersprache (SQL/JRT). Es gibt die Fähigkeit an, statische Java-Methoden als Routinen aus SQL-Anwendungen ('Java-in-the-Database') aufzurufen. Es erfordert auch die Möglichkeit, Java-Klassen als SQL-strukturierte benutzerdefinierte Typen zu verwenden. Dieser Teil des Standards besteht ausschließlich aus Optional Merkmale.
- ISO/IEC 9075-14: 2016 Teil 14: XML-bezogene Spezifikationen (SQL/XML). Es gibt SQL-basierte Erweiterungen für die Verwendung von XML in Verbindung mit SQL an. Das Xml Der Datentyp wird sowie mehrere Routinen, Funktionen und XML-zu-SQL-Datentyp-Zuordnungen eingeführt, um die Manipulation und Speicherung von XML in einer SQL-Datenbank zu unterstützen.[33] Dieser Teil des Standards besteht ausschließlich aus Optional Merkmale.
- ISO/IEC 9075-15: 2019 Teil 15: Mehrdimensionale Arrays (SQL/MDA). Es gibt einen mehrdimensionalen Array -Typ (MDarray) für SQL zusammen mit Operationen auf MDarrays, MDarray -Scheiben, MDarray -Zellen und verwandten Merkmalen an. Dieser Teil des Standards besteht ausschließlich aus Optional Merkmale.
Erweiterungen zum ISO/IEC -Standard
ISO/IEC 9075 wird durch ISO/IEC 13249 ergänzt SQL Multimedia- und Anwendungspakete. Dieser eng verwandte, aber getrennte Standard wird vom selben Ausschuss entwickelt. Es definiert Schnittstellen und Pakete basierend auf SQL. Das Ziel ist ein einheitlicher Zugriff auf typische Datenbankanwendungen wie Text, Bilder, Data Mining oder räumliche Daten.
- ISO/IEC 13249-1: 2016 Teil 1: Rahmen
- ISO/IEC 13249-2: 2003 Teil 2: Voller Text
- ISO/IEC 13249-3: 2016 Teil 3: Räumlich
- ISO/IEC 13249-5: 2003 Teil 5: Standbild
- ISO/IEC 13249-6: 2006 Teil 6: Data Mining
- ISO/IEC 13249-7: 2013 Teil 7: Geschichte
- ISO/IEC 13249-8: xxxx Teil 8: Metadaten -Registrierungszugang MRA (in Arbeit)
Technische Berichte
ISO/IEC 9075 wird auch von einer Reihe von technischen Berichten begleitet, die als ISO/IEC TR 19075 veröffentlicht werden. Diese technischen Berichte erläutern die Rechtfertigung und Verwendung einiger Merkmale von SQL, wobei gegebenenfalls Beispiele angegeben werden. Die technischen Berichte sind nicht normativ; Wenn es von 9075 Diskrepanz gibt, gilt der Text in 9075. Derzeit sind technische Berichte von 19075 verfügbar::
- ISO/IEC TR 19075-1: 2011 Teil 1: XQuery reguläre Ausdrucksunterstützung in SQL
- ISO/IEC TR 19075-2: 2015 Teil 2: SQL-Unterstützung für zeitbezogene Informationen
- ISO/IEC TR 19075-3: 2015 Teil 3: SQL eingebettet in Programme mit der Java-Programmiersprache
- ISO/IEC TR 19075-4: 2015 Teil 4: SQL mit Routinen und Typen mit der Java-Programmiersprache
- ISO/IEC TR 19075-5: 2016 Teil 5: Zeilenmustererkennung in SQL
- ISO/IEC TR 19075-6: 2017 Teil 6: SQL-Unterstützung für JavaScript-Objektnotation (JSON)
- ISO/IEC TR 19075-7: 2017 Teil 7: Polymorphe Tabellenfunktionen in SQL
- ISO/IEC TR 19075-8: 2019 Teil 8: Mehrdimensionale Arrays (SQL/MDA)
- ISO/IEC TR 19075-9: 2020 Teil 9: OLAP-Funktionen für Online-Analyse (Analytic Processing)
Alternativen
Es sollte zwischen Alternativen zu SQL als Sprache und Alternativen zum relationalen Modell selbst unterschieden werden. Nachfolgend finden Sie relationale Alternativen zur SQL -Sprache. Sehen Navigationsdatenbank und NoSQL für Alternativen zum relationalen Modell.
- .Ql: objektorientierter Datalog
- 4d Abfragesprache (4d ql)
- Datenprotokoll: Kritiker schlagen das vor Datenprotokoll hat zwei Vorteile gegenüber SQL: Es verfügt über eine sauberere Semantik, die das Programmverständnis und die Wartung erleichtert, und es ist expressiver, insbesondere für rekursive Abfragen.[41]
- Htsql: URL -basierte Abfragemethode
- IBM Business System 12 (IBM BS12): eines der ersten vollrelationalen Datenbankmanagementsysteme, die 1982 eingeführt wurden
- ISBL
- Jooq: SQL implementiert in Java als Interne domänenspezifische Sprache
- Java Persistenz Abfragesprache (JPQL): Die von der Java Persistence API und der Java -Persistenz -API verwendete Abfragesprache Überwintern Persistenzbibliothek
- JavaScript: MongoDB Implementiert seine Abfragesprache in einer JavaScript -API.
- Linq: Führen Sie SQL -Anweisungen aus, die wie Sprachkonstrukte geschrieben wurden, um Sammlungen direkt von innen abzufragen .Netz Code
- Objektabfragesprache
- QBE (Abfrage nach Beispiel) Erstellt von Moshè Zloof, IBM 1977
- Quel 1974 von der U.C. Berkeley Ingres Project, näher an Tupel Relational Calculus als SQL
- Tutorial d
- XQuery
Verteilte SQL -Verarbeitung
Verteilte relationale Datenbankarchitektur (DRDA) wurde von 1988 bis 1994 von einer Arbeitsgruppe innerhalb der IBM entworfen. DRDA ermöglicht es mit Netzwerk verbundene relationale Datenbanken, um SQL-Anforderungen zu erfüllen.[42][43]
Ein interaktives Benutzer oder ein interaktives Programm kann SQL -Anweisungen an ein lokales RDB ausgeben und Daten- und Statusindikatoren als Antwort von Remote RDBS empfangen. SQL -Anweisungen können auch in Remote -RDBs als Pakete zusammengestellt und gespeichert werden und dann unter dem Paketnamen aufgerufen werden. Dies ist wichtig für den effizienten Betrieb von Anwendungsprogrammen, die komplexe hochfrequente Abfragen ausstellen. Es ist besonders wichtig, wenn die zugegriffenen Tische in Fernbedienungssystemen befinden.
Die Nachrichten, Protokolle und strukturellen Komponenten von DRDA werden durch die definiert Verteilte Datenverwaltungsarchitektur. Distributed SQL Processing Ala DRDA unterscheidet sich von zeitgenössisch verteilt SQL Datenbanken.
Kritik
Entwurf
SQL weicht in mehreren Arten von seiner theoretischen Fundament, dem relationalen Modell und seinem Tupel -Kalkül ab. In diesem Modell ist eine Tabelle a einstellen von Tupeln, während in SQL, Tabellen und Abfrageergebnisse sind Listen von Reihen; Die gleiche Zeile kann mehrmals auftreten, und die Reihenfolge der Zeilen kann in Abfragen verwendet werden (z. B. in der Grenzklausel). Kritiker argumentieren, dass SQL durch eine Sprache ersetzt werden sollte, die ausschließlich der ursprünglichen Fundament zurückgibt: Zum Beispiel siehe Das dritte Manifest.
Orthogonalität und Vollständigkeit
Frühe Spezifikationen unterstützten keine wichtigen Merkmale wie Primärschlüssel. Ergebnissätze konnten nicht benannt werden, und Unterabfragen waren nicht definiert worden. Diese wurden 1992 hinzugefügt.[12]
Der Mangel an Sumentypen wurde als Straßensperre beschrieben, um die benutzerdefinierten Typen von SQL voll zu nutzen. JSON Support muss beispielsweise 2016 von einem neuen Standard hinzugefügt werden.[44]
Null
Das Konzept von Null ist Gegenstand einiger Debatten. Der Nullmarker zeigt das Fehlen eines Werts an und unterscheidet sich von einem Wert von 0 für eine Ganzzahlspalte oder eine leere Zeichenfolge für eine Textspalte. Das Konzept der Nulls erzwingt die 3-produed-logic in SQL, was eine konkrete Umsetzung des General ist 3-bewertete Logik.[12]
Duplikate
Eine weitere populäre Kritik ist, dass sie doppelte Zeilen ermöglicht und in die Integration in Sprachen wie z. Python, deren Datentypen möglicherweise die Daten genau darstellen, schwierig,[12] in Bezug auf die Parsen und durch Abwesenheit von Modularität.[45]
Dies wird normalerweise vermieden, indem ein Primärschlüssel oder eine eindeutige Einschränkung mit einer oder mehreren Spalten deklariert werden, die eine Zeile in der Tabelle eindeutig identifizieren.
Impedanzfehlanpassung
In ähnlichem Sinne wie Objekt -Relationalimpedanz -MissverhältnisEs tritt eine Nichtübereinstimmung zwischen der deklarativen SQL -Sprache und den prozeduralen Sprachen auf, in die SQL typischerweise eingebettet ist.
SQL -Datentypen
Der SQL -Standard definiert drei Arten von Datentypen:
- Vordefinierte Datentypen
- konstruierte Typen
- Benutzerdefinierte Typen.
Konstruierte Typen sind eines von Array, Multiset, Ref (Erence) oder Row. Benutzerdefinierte Typen sind vergleichbar mit Klassen in objektorientierter Sprache mit ihren eigenen Konstruktoren, Beobachtern, Mutatoren, Methoden, Vererbung, Überlastung, Überschreibung, Schnittstellen usw. Vordefinierte Datentypen werden durch die Implementierung intrinsisch unterstützt.
Vordefinierte Datentypen
- Charaktertypen
- Charakter (Char)
- Zeichen variieren (varchar)
- Charakter großes Objekt (CLOB)
- Nationale Charaktertypen
- Nationaler Charakter (NCHAR)
- Nationaler Charakter variiert (NCHAR variiert)
- Nationales Charakter großes Objekt (NCOB)
- Binäre Typen
- Binär (binär)
- Binär variieren (varbinär)
- Binäres großes Objekt (Blob)
- Numerische Typen
- Exakte numerische Typen (numerisch, dezimal, smallint, ganzzahl, bigint)
- Ungefähre numerische Typen (float, real, doppelte Präzision)
- Dezimalerschwimmpunkt-Punkt-Typ (Decloat)
- DateTime -Typen (Datum, Uhrzeit, Zeitstempel)
- Intervalltyp (Intervall)
- Boolesche
- Xml
- JSON
Siehe auch
- Wikibook SQL
- Objektdatenbank
- Liste der relationalen Datenbankverwaltungssysteme
- Vergleich der relationalen Datenbankverwaltungssysteme
- Vergleich von Objekt -relationalen Datenbankverwaltungssystemen
- D (Datensprachspezifikation)
- Abfrage nach Beispiel
- SQL -Syntax
- Oracle pl/sql
- Microsoft Transact-SQL (T-SQL)
- Online -Transaktionsverarbeitung (OLTP)
- Online -Analyseverarbeitung (OLAP)
- Data Warehouse
- Relational Data Stream Management System
- NoSQL
- MUMPS
- Hierarchisches Datenbankmodell
- Sternschema
- Schneeflockenschema
- SQL Compliance
Anmerkungen
Verweise
- ^ Paul, Ryan (24. Oktober 2005). "Eine geführte Tour durch die Microsoft Command Shell". ARS Technica. Abgerufen 10. April 2011.
- ^ "Medientypregistrierung für Anwendung/SQL". Internet zugewiesene Zahlen Autorität. 10. April 2013. Abgerufen 10. April 2013.
- ^ "Der Anwendung/SQL -Medientyp RFC 6922". Internettechnik-Arbeitsgruppe. April 2013. p. 3. Abgerufen 10. April 2013.
- ^ Beaulieu, Alan (April 2009). Mary E Treseler (Hrsg.). Lernen SQL (2. Aufl.). Sebastopol, CA, USA: O'Reilly. ISBN 978-0-596-52083-0.
- ^ Chamberlin, Donald D. (2001-10-03). "Oral History Interview mit Donald D. Chamberlin". Abgerufen 2020-01-14.
Wir haben den ursprünglichen Namen "Fortsetzung" in SQL geändert, weil wir einen Brief von einem Anwalt eines Menschen erhalten haben, in dem der Name "Fortsetzung" zu ihnen gehört. Wir haben es an SQL für eine strukturierte Abfragesprache verkürzt, und das Produkt wurde als SQL/DS bezeichnet.
- ^ SQL-92, 4.22 SQL-Statements, 4.22.1 Klassen von SQL-Statements "Es gibt mindestens fünf Möglichkeiten zur Klassifizierung von SQL-Statements:", 4.22.2, SQL-Anweisungen, die nach Funktion klassifiziert wurden. "Die folgenden Klassen sind die Hauptklassen von SQL-Statements: "; SQL: 2003 4.11 SQL-Statements und spätere Überarbeitungen.
- ^ Chatham, Mark (2012). Strukturierte Abfragesprache nach Beispiel - Band I: Datenfristsprache. p.8. ISBN 978-1-29119951-2.
- ^ Codd, Edgar F. (Juni 1970). "Ein relationales Datenmodell für große gemeinsame Datenbanken". Kommunikation der ACM. 13 (6): 377–87. Citeseerx 10.1.1.88.646. doi:10.1145/362384.362685. S2CID 207549016.
- ^ a b Chapple, Mike. "SQL -Grundlagen". Datenbanken. About.com. Abgerufen 2009-01-28.
- ^ "Structured Query Language (SQL)". Internationale Geschäftsmaschinen. 27. Oktober 2006. Abgerufen 2007-06-10.
- ^ a b "ISO 9075: 1987: Informationstechnologie - Datenbanksprachen - SQL - Teil 1: Framework (SQL/Framework)". 1987-06-01.
- ^ a b c d e f Chamberlin, Donald (2012). "Frühgeschichte von SQL". IEEE Annals of the History of Computing. 34 (4): 78–82. doi:10.1109/mahc.2012.61. S2CID 1322572.
- ^ a b c Chamberlin, Donald D; Boyce, Raymond F (1974). "Fortsetzung: Eine strukturierte englische Abfragesprache" (PDF). Verfahren des ACM Sigfidet -Workshops von 1974 zu Datenbeschreibung, Zugriff und Kontrolle. Assoziation für Computermaschinen: 249–64. Archiviert von das Original (PDF) am 2007-09-26. Abgerufen 2007-06-09.
- ^ a b Oppel, Andy (27. Februar 2004). Datenbanken entmystifiziert. San Francisco, CA: McGraw-Hill Osborne Media. S. 90–1. ISBN 978-0-07-146960-9.
- ^ "Geschichte von IBM, 1978". IBM Archive. IBM. 23. Januar 2003. Abgerufen 2007-06-09.
- ^ "ISO - ISO/IEC JTC 1/SC 32 - Datenmanagement und Austausch". www.iso.org. Abgerufen 2. Januar 2021.
- ^ ANSI/ISO/IEC International Standard (IS). Datenbanksprache SQL - Teil 2: Foundation (SQL/Foundation). 1999.
- ^ "IBM Puredata System für Analytics, Version 7.0.3".
- ^ "Einfragen prozedural SQL".
- ^ "Verfahren erstellen". Mariadb KnowledgeBase. Abgerufen 2019-04-23.
- ^ "PostgreSQL Server -Programmierung". PostgreSQL 9.1 Offizielle Dokumentation. postgresql.org. 2011. Abgerufen 2012-03-09.
- ^ "Über PostgreSQL". Postgresql 9.1 Offizielle Website. Postgresql Global Development Group. 2012. Abgerufen 9. März, 2012.
PostgreSQL ist stolz auf die Einhaltung von Standards. Die SQL-Implementierung entspricht stark dem ANSI-SQL: 2008 Standard
- ^ "Mimer SQL, gebaut auf Standards". Mimer SQL Offizielle Website. Mimer Informationstechnologie. 2009.
- ^ "4.1. Lexikalische Struktur". PostgreSQL -Dokumentation. 2018.
- ^ "(Zweiter informeller Überprüfungsentwurf) ISO/IEC 9075: 1992, Datenbanksprache SQL, Abschnitt 5.2, Syntax -Regel 11". 30. Juli 1992.
- ^ Lorentz, Diana; Roeser, Mary Beth; Abraham, Sundeep; Amor, Angela; Arora, Geeta; Arora, Vikas; Ashdown, Lance; Baer, Hermann; Bellamkonda, Shrikanth (Oktober 2010) [1996]. "Basiselemente von Oracle SQL: Datentypen". Oracle Database SQL Language Reference 11g Release 2 (11.2). Oracle Database -Dokumentationsbibliothek. Redwood City, CA: Oracle USA, Inc.. Abgerufen 29. Dezember, 2010.
Für jeden
DATUM
Wert, Oracle speichert die folgenden Informationen: Jahrhundert, Jahr, Monat, Datum, Stunde, Minute und zweiter - ^ Lorentz, Diana; Roeser, Mary Beth; Abraham, Sundeep; Amor, Angela; Arora, Geeta; Arora, Vikas; Ashdown, Lance; Baer, Hermann; Bellamkonda, Shrikanth (Oktober 2010) [1996]. "Basiselemente von Oracle SQL: Datentypen". Oracle Database SQL Language Reference 11g Release 2 (11.2). Oracle Database -Dokumentationsbibliothek. Redwood City, CA: Oracle USA, Inc.. Abgerufen 29. Dezember, 2010.
Die Datentypen der DateTime sind
DATUM
... - ^ Lorentz, Diana; Roeser, Mary Beth; Abraham, Sundeep; Amor, Angela; Arora, Geeta; Arora, Vikas; Ashdown, Lance; Baer, Hermann; Bellamkonda, Shrikanth (Oktober 2010) [1996]. "Basiselemente von Oracle SQL: Datentypen". Oracle Database SQL Language Reference 11g Release 2 (11.2). Oracle Database -Dokumentationsbibliothek. Redwood City, CA: Oracle USA, Inc.. Abgerufen 29. Dezember, 2010.
Definieren Sie keine Spalten mit den folgenden SQL/DS- und DB2 -Datentypen, da sie keinen entsprechenden Oracle -Datentyp haben: ...
ZEIT
- ^ "Hilfe finden". X3H2 Records, 1978–95. American National Standards Institute.
- ^ Doll, Shelley (19. Juni 2002). "Ist SQL noch ein Standard?". TechRepublic's Builder.com. TechRepublic. Archiviert von das Original Am 2012-07-05. Abgerufen 2016-04-12.
- ^ a b Gillespie, Patrick. "Aussprechen SQL: S-Q-L oder Fortsetzung?". Abgerufen 12. Februar 2012.
- ^ Melton, Jim; Alan R Simon (1993). "1.2. Was ist SQL?". Verständnis des neuen SQL: Ein vollständiger Leitfaden. Morgan Kaufmann. p.536. ISBN 978-1-55860-245-8.
SQL (korrekt ausgesprochen "Ess cue ell" anstelle der etwas gemeinsamen "Fortsetzung") ...
- ^ a b Wagner, Michael (2010). SQL/XML: 2006 - Evaluierung der StandardKonformität Ausgewählter DATENBANKSYSTEME. Diplomica Verlag. p. 100. ISBN 978-3-8366-9609-8.
- ^ "SQL: 2008 jetzt ein zugelassener ISO International Standard". Sybase. Juli 2008. archiviert von das Original Am 2011-06-28.
- ^ Krishna Kulkarni, Jan.-Eeike Michels (September 2012). "Zeitliche Funktionen in SQL: 2011" (PDF). Sigmod -Aufzeichnung. 41 (3).
- ^ Fred Zemke (2012). "Was ist neu in SQL: 2011" (PDF). Oracle Corporation.
- ^ "ISO/IEC 9075-2: 2016: Informationstechnologie-Datenbanksprachen-SQL-Teil 2: Foundation (SQL/Foundation)". Dezember 2016.
- ^ SQL: 2008 Entwurf (Reißverschluss), Whitemarsh Information Systems Corporation
- ^ "ISO/IEC 9075-1: 2016: Informationstechnologie-Datenbanksprachen-SQL-Teil 1: Framework (SQL/Framework)".
- ^ ISO/IEC 9075-11: 2008: Informations- und Definitionsschemata (SQL/Schemata)
- ^ Fernando Saenz-Perez. "Außenverbindungen in ein deduktives Datenbanksystem" (PDF). Lbd.udc.es. Abgerufen 2017-01-16.
- ^ Reinsch, R. (1988). "Verteilte Datenbank für SAA". IBM Systems Journal. 27 (3): 362–389. doi:10.1147/sj.273.0362.
- ^ Verteilte relationale Datenbankarchitekturreferenz.IBM Corp. SC26-4651-0.1990.
- ^ Brandon, Jamie (Juli 2021). "Gegen SQL". Abgerufen 2. August 2021.
- ^ Schauder, Jen. "Warum SQL saugt". Schauderwelle. Abgerufen 3. Februar 2018.
Quellen
- Codd, Edgar F (Juni 1970). "Ein relationales Datenmodell für große gemeinsame Datenbanken". Kommunikation der ACM. 13 (6): 377–87. doi:10.1145/362384.362685. S2CID 207549016. Archiviert von das Original am 2007-06-12.
- Diskussion über angebliche SQL -Fehler (C2 Wiki)
- C. J. Datum mit Hugh Darwen: Eine Anleitung zum SQL -Standard: Ein Benutzerhandbuch zum Standard -Datenbanksprache SQL, 4. Aufl., Addison Wesley, USA 1997, ISBN978-0-201-96426-4
SQL Standards Dokumente
ITTF öffentlich verfügbare Standards und technische Berichte
Das ISO/IEC Task Force für Informationstechnologie Veröffentlichungen öffentlich verfügbare Standards einschließlich SQL. Dort werden technische Corrigenda (Korrekturen) und technische Berichte (Diskussionsdokumente) veröffentlicht.
SQL - Teil 1: Framework (SQL/Framework)
Entwurf von Dokumenten
Formale SQL -Standards sind von verfügbar ISO und Ansi gegen Gebühr. Zur informativen Verwendung im Gegensatz zur Einhaltung strenger Standards reicht häufig verspätete Entwürfe aus.
Externe Links
- 1995 SQL Reunion: Menschen, Projekte und Politik, von Paul McJones (Hrsg.): Transkript eines Reunion -Meetings, das sich der persönlichen Geschichte relationaler Datenbanken und SQL widmet.
- American National Standards Institute. X3H2 Records, 1978–1995 Charles Babbage Institute Sammlung dokumentiert die Entwicklung der NDL- und SQL -Standards durch das H2 -Komitee.
- Oral History Interview mit Donald D. Chamberlin Charles Babbage Institute In dieser mündlichen Geschichte erzählt Chamberlin sein frühes Leben, seine Ausbildung bei Harvey Mudd College und Universität in Stanfordund seine Arbeit an der relationalen Datenbanktechnologie. Chamberlin war Mitglied des System -R -Forschungsteams und mit Raymond F. Boyceentwickelte die SQL -Datenbanksprache. Chamberlin diskutiert auch kurz seine neueren Forschungsergebnisse zu XML -Abfragesprachen.
- Vergleich verschiedener SQL -Implementierungen Dieser Vergleich verschiedener SQL -Implementierungen soll als Leitfaden für diejenigen dienen, die für die Portierung des SQL -Codes zwischen verschiedenen RDBMS -Produkten interessiert sind, und enthält Vergleiche zwischen SQL: 2008, PostgreSQL, DB2, MS SQL Server, MySQL, Oracle und Informix.
- Ereignisstromverarbeitung mit SQL - Eine Einführung in die Echtzeitverarbeitung von Streaming-Daten mit kontinuierlichen SQL-Abfragen
- BNF -Grammatik für ISO/IEC 9075: 2003, Teil 2 SQL/Framework