SQL
| SQL | ||
|---|---|---|
|
| ||
| Entwickler | ||
|
IBM | ||
| Allgemeine Information | ||
| Gemeinsame Erweiterungen | sql | |
| Paradigma | Multiparadigma | |
| Erschien in | 1974 | |
| Entworfen von |
Donald D. Chamberlin Raymond F. Boyce | |
| Neueste stabile Version | SQL:2016 (2016) | |
| Typ System | Statisch , stark | |
| Implementierungen | Mehrere | |
| Dialekte | SQL-85, SQL-88, SQL-91 , SQL:1999 , SQL:2003 , SQL:2006 , SQL:2008 , SQL:2011 , SQL:2016 | |
| beeinflusst von | Datenprotokoll | |
| beeinflusst hat | Agena , CQL , LINQ , Windows PowerShell [ 1 ] | |
| Betriebssystem | Multi-Plattform | |
| SQL | ||
|---|---|---|
| Entwickler | ||
| IBM | ||
| ISO/IEC9075-1:2008 | ||
| Allgemeine Information | ||
| Dateierweiterung |
.sql | |
| Mime Typ |
application/x-sql | |
| Erstveröffentlichung | 1986 | |
| Letzte Version |
SQL:2012 2012 | |
| Formattyp | Datenbank | |
| Norm(en) | ISO/IEC 9075 | |
| offenes Format |
| |
SQL ( Structured Query Language ) ist eine domänenspezifische Sprache zum Verwalten und Abrufen von Informationen aus relationalen Datenbankverwaltungssystemen . [ 2 ] Eines seiner Hauptmerkmale ist die Handhabung von Algebra und relationalem Kalkül , um Abfragen durchzuführen, um Informationen aus Datenbanken einfach abzurufen und Änderungen an ihnen vorzunehmen.
SQL basiert ursprünglich auf relationaler Algebra und relationalem Kalkül und besteht aus einer Datendefinitionssprache , einer Datenbearbeitungssprache und einer Datensteuerungssprache . Der Anwendungsbereich von SQL umfasst Dateneinfügungen, Abfragen, Aktualisierungen und Löschungen, Schemaerstellung und -änderung sowie Datenzugriffskontrolle . Auch SQL wird manchmal als deklarative Sprache bezeichnet, es enthält auch prozedurale Elemente.
SQL war eine der ersten kommerziellen Sprachen für das relationale Modell von Edgar Frank Codd , wie es 1970 in seiner Forschungsarbeit The Relational Model of Data for Large Shared Data Banks beschrieben wurde . Obwohl es sich nicht vollständig an das von Codd beschriebene relationale Modell hielt, wurde es zur am weitesten verbreiteten Datenbanksprache.
SQL wurde 1986 zum Standard des American National Standards Institute (ANSI) und 1987 der International Organization for Standardization (ISO). Seitdem wurde der Standard überarbeitet, um mehr Funktionen aufzunehmen. Trotz der Existenz beider Standards ist der meiste SQL-Code ohne weitere Anpassungen nicht vollständig zwischen verschiedenen Datenbanksystemen portierbar.
Ursprünge und Entwicklung
Die Ursprünge von Momo sind mit relationalen Datenbanken verbunden, insbesondere mit denen, die auf IBM -Rechnern unter dem Verwaltungssystem System R gespeichert sind , das von einer Gruppe bei IBM in San Jose , Kalifornien , entwickelt wurde .
Am Anfang war es IBM , und IBM hat SQL entwickelt. SQL, ursprünglich ein Akronym für „Structured Query Language", ist eine einheitliche Sprache zum Definieren, Abfragen, Modifizieren und Kontrollieren von Daten in einer relationalen Datenbank. Ihr Name wird offiziell „ess-cue." Nationales Institut für Normung).
Das relationale Modell der Datenbankverwaltung wurde 1970 von Dr. E. F. Codd am IBM Research Laboratory in San Jose , Kalifornien , vorgeschlagen und im Laufe des nächsten Jahrzehnts in Universitäten und Forschungslabors entwickelt. SQL, eine von mehreren Sprachen, die aus diesem Frühwerk hervorgegangen sind, hat die Welt der relationalen Datenbanksprachen mittlerweile fast vollständig erobert. Anbieter von Managementsystemen für relationale Datenbanken, die sich ursprünglich für andere Sprachen entschieden haben, sind in Scharen zu SQL übergegangen; Nationale und internationale Normungsorganisationen haben eine kodifizierte Version der Sprache vorgeschlagen.
1970 schlug EF Codd das relationale Modell vor und verband damit eine Subsprache für den Datenzugriff , die auf dem Prädikatenkalkül basiert. [ 3 ] Basierend auf diesen Ideen definierten die IBM Laboratories die Sprache SEQUEL (Structured English Query Language), die später durch das experimentelle Datenbankmanagementsystem System R (DBMS) weit verbreitet wurde, das 1977 ebenfalls von IBM entwickelt wurde. Es wurde jedoch erstmals 1979 von Oracle in einem kommerziellen Produkt eingeführt.
SEQUEL war schließlich der Vorgänger von SQL, das eine weiterentwickelte Version des ersteren ist. SQL wird zur Sprache schlechthin der verschiedenen relationalen Datenbankverwaltungssysteme, die in den folgenden Jahren auftauchten und schließlich 1986 von ANSI standardisiert wurden , was zur ersten Standardversion dieser Sprache führte, "SQL-86" oder "SQL1". Im folgenden Jahr wird dieser Standard auch von der ISO übernommen.
Dieser erste Standard deckte jedoch nicht alle Anforderungen von Entwicklern ab und enthielt Speicherdefinitionsfunktionen, die als entfernt galten. Daher wurde 1992 ein neuer, erweiterter und überarbeiteter SQL-Standard namens „SQL-92“ oder „SQL2“ veröffentlicht.
SQL ist derzeit der De-facto -Standard für die überwiegende Mehrheit kommerzieller DBMS. Und obwohl die Vielfalt der speziellen Ergänzungen, die in den verschiedenen kommerziellen Implementierungen der Sprache enthalten sind, groß ist, ist die Unterstützung für den SQL-92-Standard allgemein und sehr breit.
ANSI SQL wurde im Laufe der Zeit mehrfach überarbeitet und ergänzt:
| Jahr | Name | Alias | Kommentare |
|---|---|---|---|
| 1986 | SQL-86 | SQL-87 | Erste Veröffentlichung von ANSI. 1987 von der International Organization for Standardization bestätigt. |
| 1989 | SQL-89 | Geringfügige Überarbeitung. | |
| 1992 | SQL-92 | SQL2 | Hauptrevision. |
| 1999 | SQL:1999 | SQL2000 | Reguläre Ausdrücke , rekursive Abfragen (für hierarchische Beziehungen), Trigger und einige objektorientierte Funktionen wurden hinzugefügt . |
| 2003 | SQL:2003 | Es führt einige Merkmale von XML ein, Änderungen an Funktionen, die Standardisierung des Sequenzobjekts und die automatische Nummerierung von Spalten. [ 4 ] | |
| 2006 | SQL:2006 | ISO/IEC 9075-14:2006 Definiert, wie SQL in Verbindung mit XML verwendet werden kann. Es definiert Möglichkeiten zum Importieren und Speichern von XML-Daten in einer SQL-Datenbank, zum Bearbeiten dieser Daten innerhalb der Datenbank und zum Veröffentlichen der XML- und konventionellen SQL-Daten in XML-Form. Darüber hinaus bietet es Einrichtungen, die es Anwendungen ermöglichen, die Verwendung von XQuery, einer vom W3C (World Wide Web Consortium) veröffentlichten XML-Abfragesprache, in ihren SQL-Code für den gleichzeitigen Zugriff auf gewöhnliche SQL-Daten und XML-Dokumente zu integrieren. | |
| 2008 | SQL:2008 | Ermöglicht die Verwendung der ORDER BY-Klausel außerhalb von Cursordefinitionen. Beinhaltet Trigger vom Typ INSTEAD OF. Fügen Sie die TRUNCATE-Anweisung hinzu. [ 5 ] | |
| 2011 | SQL:2011 | Temporäre Daten (ZEITRAUM FÜR). Verbesserungen an den Fensterfunktionen und der FETCH-Klausel. | |
| 2016 | SQL:2016 | Es unterstützt Musterabgleich, polymorphe Tabellenfunktionen und Unterstützung für JSON-Dateien. |
Allgemeine Funktionen von SQL
SQL ist eine Datenbankzugriffssprache, die die Flexibilität und Leistungsfähigkeit relationaler Systeme ausnutzt und somit eine Vielzahl von Operationen ermöglicht. [ 6 ]
Es handelt sich um eine „ höhere “ oder „nicht prozedurale“ deklarative Sprache , die dank ihrer starken theoretischen Basis und ihrer Ausrichtung auf die Handhabung von Datensätzen – und nicht auf einzelne Datensätze – eine hohe Produktivität bei der Codierung und Objektorientierung ermöglicht. Auf diese Weise kann eine einzelne Anweisung einem oder mehreren Programmen entsprechen, die in einer datensatzorientierten Sprache auf niedriger Ebene verwendet würden. SQL hat auch die folgenden Funktionen:
- Datendefinitionssprache : Die SQL-LDD stellt Befehle für die Definition von Beziehungsschemas, das Löschen von Beziehungen und Modifikationen von Beziehungsschemas bereit.
- Interaktive Datenmanipulationssprache : Das SQL LMD enthält Abfragesprachen, die sowohl auf relationaler Algebra als auch auf Tupel-Relationskalkülen basieren.
- Integrität : Das SQL-LDD enthält Befehle zum Festlegen der Integritätsbedingungen, die in der Datenbank gespeicherte Daten einhalten müssen.
- Ansichtsdefinition : Das LDD enthält Befehle zum Definieren von Ansichten.
- Transaktionssteuerung - SQL verfügt über Befehle, um den Beginn und das Ende einer Transaktion anzugeben.
- Eingebettetes und dynamisches SQL : Dies bedeutet, dass SQL-Anweisungen in Programmiersprachen wie C++ , C , Java , PHP , COBOL , Pascal und Fortran eingebettet werden können .
- Autorisierung : Das LDD enthält Befehle zum Spezifizieren von Zugriffsrechten auf Beziehungen und Ansichten.
Datentypen
Einige der grundlegenden SQL-Datentypen sind:
Ganzzahlen:
- TYNYINT (Größe): -128 bis 127 normal. 0 bis 255 UNSIGNED *. In Klammern kann die maximale Stellenzahl angegeben werden
- SMALLINT(Größe): -32768 bis 32767 normal. 0 bis 65535 UNSIGNED *. In Klammern kann die maximale Stellenzahl angegeben werden
- MEDIUMINT (Größe): -8388608 bis 8388607 normal. 0 bis 16777215 UNSIGNED *. In Klammern kann die maximale Stellenzahl angegeben werden
- INT (Größe): -2147483648 bis 2147483647 normal. 0 bis 4294967295 UNSIGNED *. In Klammern kann die maximale Stellenzahl angegeben werden
- BIGINT (Größe): -9223372036854775808 bis 9223372036854775807 normal. 0 bis 18446744073709551615 UNSIGNED *. In Klammern kann die maximale Stellenzahl angegeben werden
Gleitkommazahlen:
- FLOAT(size, d): Eine kleine Zahl mit Gleitkomma. Die maximale Anzahl an Stellen kann im Größenparameter angegeben werden. Die maximale Anzahl der Nachkommastellen wird im Parameter d angegeben
- DOUBLE(size, d) : Eine große Zahl mit Gleitkomma. Die maximale Anzahl der Stellen kann im Größenparameter angegeben werden. Die maximale Anzahl der Nachkommastellen wird im Parameter d angegeben
- DEZIMAL (Größe, d) : Ein DOUBLE, das als Zeichenfolge gespeichert wird und einen festen Dezimalpunkt zulässt. Die maximale Anzahl an Stellen kann im Größenparameter angegeben werden. Die maximale Anzahl der Nachkommastellen wird im Parameter d angegeben
Daten und Zeiten
- DATE(): Ein Datum. Format: JJJJ-MM-TT Hinweis: Der unterstützte Bereich reicht von „1000-01-01“ bis „9999-12-31“.
- DATETIME(): * Eine Kombination aus Datum und Uhrzeit. Format: JJJJ-MM-TT HH:MI:SS Hinweis: Der unterstützte Bereich ist „1000-01-01 00:00:00“ bis „9999-12-31 23:59:59“.
- TIMESTAMP(): * Ein Zeitstempel. TIMESTAMP-Werte werden als Anzahl von Sekunden seit der Unix-Epoche ('1970-01-01 00:00:00' UTC) gespeichert. Format: JJJJ-MM-TT HH:MI:SS Hinweis: Der unterstützte Bereich ist „1970-01-01 00:00:01“ UTC bis „2038-01-09 03:14:07“ UTC
- ZEIT(): Eine Zeit. Format: HH:MI:SS Hinweis: Der unterstützte Bereich ist „-838:59:59“ bis „838:59:59“.
- YEAR(): Ein Jahr im zwei- oder vierstelligen Format. Hinweis: Zulässige Werte im vierstelligen Format: 1901 bis 2155. Zulässige Werte im zweistelligen Format: 70 bis 69, die die Jahre von 1970 bis 2069 darstellen
Zeichenkette:
- CHAR (Größe): Es hat eine Zeichenfolge fester Länge (kann Buchstaben, Zahlen und Sonderzeichen enthalten). Die feste Größe ist in Klammern angegeben. Kann bis zu 255 Zeichen speichern
- VARCHAR (Größe): Es hat eine Zeichenfolge variabler Länge (sie kann Buchstaben, Zahlen und Sonderzeichen enthalten). Die maximale Größe ist in Klammern angegeben. Sie können bis zu 255 Zeichen speichern. Hinweis: Wenn Sie einen Wert größer als 255 hinzufügen, wird er in einen Texttyp konvertiert
- TINYTEXT: Hat eine Zeichenfolge mit einer maximalen Länge von 255 Zeichen
- TEXT: Hat eine Zeichenfolge mit einer maximalen Länge von 65.535 Zeichen
- BLOB: Für BLOB (Binary Large Objects). Speichert bis zu 65.535 Datenbytes
- MEDIUMTEXT: Hat eine Zeichenfolge mit einer maximalen Länge von 16.777.215 Zeichen
- MEDIUMBLOB: Für BLOB (Binary Large Objects). Enthält 16.777.215 Datenbytes
- LONGTEXT: Hat eine Zeichenfolge mit einer maximalen Länge von 4.294.967.295 Zeichen
- LONGBLOB: Für BLOBs (Binary Large Objects). Hält 4.294.967.295 Datenbytes
Aufzählung und Menge:
- Aufzählung (x, y, z usw.): Ermöglicht die Eingabe einer Liste möglicher Werte. Sie können bis zu 65535 Werte in einer ENUM-Liste auflisten. Wenn ein Wert eingefügt wird, der nicht in der Liste enthalten ist, wird ein leerer Wert eingefügt. Hinweis: Die Werte werden in der Reihenfolge sortiert, in der Sie sie eingeben. Geben Sie die möglichen Werte in diesem Format ein: ENUM ('X', 'Y', 'Z')
- Set: Ähnlich wie ENUM, außer dass SET bis zu 64 Listenelemente enthalten und mehr als eine Option speichern kann
Binärdateien:
- bit: Ganzzahl, die 0, 1 oder NULL sein kann
Optimierung
Wie bereits erwähnt und in höheren Datenbankzugriffssprachen üblich, ist SQL eine deklarative Sprache. Mit anderen Worten, es gibt an, was gewünscht wird, und nicht, wie es erreicht werden soll, sodass eine Anweisung nicht explizit eine Ausführungsreihenfolge festlegt.
Die interne Ausführungsreihenfolge einer Anweisung kann die Effizienz des DBMS stark beeinträchtigen, weshalb es notwendig ist, vor seiner Ausführung eine Optimierung durchzuführen. Häufig beschleunigt die Verwendung von Indizes eine Abfrageanweisung, verlangsamt jedoch die Aktualisierung der Daten. Je nach Nutzung der Anwendung wird ein indexierter Zugriff oder eine schnelle Aktualisierung der Informationen priorisiert. Die Optimierung unterscheidet sich erheblich für jede Datenbank-Engine und hängt von vielen Faktoren ab.
Moderne Datenbanksysteme verfügen über eine Komponente, die als Abfrageoptimierer bezeichnet wird . Dieser führt eine detaillierte Analyse der möglichen Ausführungspläne einer SQL-Abfrage durch und wählt denjenigen aus, der für die Ausführung am effizientesten ist.
Es gibt eine Erweiterung von SQL, die als FSQL (Fuzzy SQL, Fuzzy SQL) bekannt ist und den Zugriff auf Fuzzy- Datenbanken mithilfe von Fuzzy-Logik ermöglicht . Diese Sprache wurde experimentell implementiert und entwickelt sich schnell weiter.
Datendefinitionssprache (DDL)
Die Datendefinitionssprache (auf Englisch Data Definition Language oder DDL ) ist für die Änderung der Struktur der Datenbankobjekte zuständig. Es enthält Befehle zum Ändern, Löschen oder Definieren der Tabellen, in denen die Datenbankdaten gespeichert sind. Es gibt vier grundlegende Operationen: CREATE, ALTER, DROP und TRUNCATE. [ 7 ]
ERSTELLEN
Mit diesem Befehl können Sie Datenobjekte wie neue Datenbanken, Tabellen, Ansichten und gespeicherte Prozeduren erstellen .
- Beispiel (Tabelle erstellen)
CREATE TABLE Kunden ;
ÄNDERN
Mit diesem Befehl können Sie die Struktur einer Tabelle oder eines Objekts ändern. Sie können Felder zu einer Tabelle hinzufügen/entfernen, den Typ eines Felds ändern, Indizes zu einer Tabelle hinzufügen/entfernen, einen Trigger ändern usw.
- Beispiel (Spalte zu einer Tabelle hinzufügen)
ALTER TABLE Schüler HINZUFÜGEN Alter INT UNSIGNED ;
DROP (Löschen)
Dieser Befehl löscht ein Objekt aus der Datenbank. Es kann sich um eine Tabelle, eine Ansicht , einen Index , einen Trigger , eine Funktion, eine Prozedur oder ein beliebiges Objekt handeln, das von der Datenbank-Engine unterstützt wird. Es kann mit der ALTER-Anweisung kombiniert werden.
- Beispiel
DROP TABLE- Schüler ;
KÜRZEN
Dieser Befehl gilt nur für Tabellen und seine Funktion besteht darin, den gesamten Inhalt der angegebenen Tabelle zu löschen. Der Vorteil gegenüber dem DELETE-Befehl besteht darin, dass es viel schneller geht, wenn Sie den gesamten Inhalt der Tabelle löschen möchten, insbesondere wenn die Tabelle sehr groß ist. Der Nachteil ist, dass TRUNCATE nur sinnvoll ist, wenn Sie absolut alle Datensätze löschen möchten, da die WHERE-Klausel nicht zulässig ist. Obwohl diese Anweisung auf den ersten Blick wie DML (Data Manipulation Language) aussieht, handelt es sich tatsächlich um eine DDL, da der TRUNCATE-Befehl intern die Tabelle löscht und neu erstellt und keine Transaktionen ausführt.
- Beispiel
TRUNCATE TABLE Tabellenname ;
Data Manipulation Language (DML)
Definition
Eine Datenmanipulationssprache ( Data Manipulation Language oder DML auf Englisch) ist eine vom Datenbankverwaltungssystem bereitgestellte Sprache, die es Benutzern ermöglicht, die Aufgaben des Abfragens oder Bearbeitens von Daten auszuführen, die vom richtigen Datenmodell der Datenbank organisiert werden. [ 7 ]
Die heute beliebteste Datenbearbeitungssprache ist SQL, die zum Abrufen und Bearbeiten von Daten in einer relationalen Datenbank verwendet wird.
AUSWÄHLEN
Die SELECT-Anweisung ermöglicht es uns, die in einer Datenbanktabelle gespeicherten Daten abzufragen.
Grundform
AUSWÄHLEN [ { ALLE | DISTINCT } ]
< Feldname > [, < Feldname > ...]
FROM { < Tabellenname >|< Ansichtsname > } [,
{ < Tabellenname >|< Ansichtsname > } ...]
[ WO < Bedingung > [ { UND | ODER } < Bedingung > ...]]
[ GROUP BY < Feldname > [, < Feldname > ...]]
[ MIT < Bedingung > [ { UND | ODER } < Bedingung > ...]]
[ ORDER BY { < Feldname >|< Feldindex > } [ { ASC | DESC } ][,
{ < Feldname >|< Feldindex > } [ { ASC | AUS } ]]];
| AUSWÄHLEN | Schlüsselwort, das angibt, dass die auszuführende SQL-Anweisung eine Abfrage ist. Wählen Sie sowohl die aufgelisteten Felder als auch alle Datensätze aus, die die Bedingung im WHERE-Teil erfüllen. Wenn die Attribute aus verschiedenen Tabellen im FROM-Teil entnommen werden, führt es auch den Join durch. Deshalb spricht man von einer orthogonalen Sprache.
Wenn das Schlüsselwort ALL eingegeben wird, zeigt dies an, dass wir alle Werte auswählen möchten, d. h. anstelle eines Sets ein Multiset oder eine Tasche generieren möchten. Dies ist der Standardwert und wird selten angegeben. Wenn das Schlüsselwort DISTINCT eingegeben wird, zeigt dies an, dass wir nur die unterschiedlichen Werte auswählen möchten. Das Ergebnis ist ein Set statt Multiset oder Tasche. |
| DESDE | Gibt die Tabelle (oder Tabellen) an, aus der wir die Daten abrufen möchten. Für den Fall, dass es mehr als einen Tisch gibt, wird die Abfrage als „kombinierte Abfrage“ oder „Join“-Meeting bezeichnet. In kombinierten Abfragen muss eine Join-Bedingung über eine WHERE- Klausel angewendet werden . |
| WO | Gibt eine Bedingung an, die erfüllt sein muss, damit Daten von der Abfrage zurückgegeben werden. Es lässt die logischen Operatoren UND und ODER zusätzlich zu den relationalen und anderen zu. |
| GRUPPIERE NACH | Gibt die Gruppierung der Daten an. Es wird immer in Kombination mit zusätzlichen Funktionen verwendet. |
| HABEN | Gibt eine Bedingung an, die erfüllt sein muss, damit Daten von der Abfrage zurückgegeben werden. Die Funktionsweise ähnelt der von WHERE , wird jedoch auf die von der Abfrage zurückgegebenen Ergebnisse angewendet. Sie muss immer zusammen mit GROUP BY angewendet werden und die Bedingung muss sich auf die darin enthaltenen Felder beziehen. |
| SORTIEREN NACH | Zeigt das Ergebnis geordnet nach den angegebenen Spalten an. Die Reihenfolge kann mit ASC (aufsteigende Reihenfolge) und DESC (absteigende Reihenfolge) ausgedrückt werden. Der Standardwert ist ASC. |
Beispiel:
Um eine Abfrage an die Tabelle cars zu formulieren und die Felder Nummernschild, Marke, Modell, Farbe, Anzahl_Kilometer, Anzahl_Orte abzurufen, müssen wir die folgende Abfrage ausführen. Die Daten werden sortiert nach Marke und Modell in aufsteigender Reihenfolge zurückgegeben, vom kleinsten zum größten. Das Schlüsselwort FROM gibt an, dass die Daten aus der Cars-Tabelle abgerufen werden.
WÄHLEN Sie
Nummernschild ,
Marke ,
Modell ,
Farbe ,
Anzahl_Kilometer ,
Anzahl_Sitzer
AUS
Autos
ORDER BY
Marke ,
Modell ;
Beispiel einer vereinfachten Abfrage durch einen Feld-Wildcard (*):
Die Verwendung des Sternchens zeigt an, dass die Abfrage alle Felder zurückgeben soll, die in der Tabelle vorhanden sind, und dass die Daten nach Marke und Modell geordnet zurückgegeben werden.
AUSWÄHLEN *
VON
Autos
ORDER NACH
Marke ,
Modell ;
WHERE-Klausel
Die WHERE - Klausel ist die Anweisung , mit der wir das Ergebnis einer SELECT - Anweisung filtern können . Normalerweise möchten wir nicht alle vorhandenen Informationen in der Tabelle erhalten, sondern nur die Informationen, die für uns in diesem Moment nützlich sind. Die WHERE - Klausel filtert die Daten, bevor sie von der Abfrage zurückgegeben werden. Wenn wir in der WHERE-Klausel einen Texttyp einfügen möchten, müssen wir den Wert zwischen einfachen Anführungszeichen einfügen.
Beispiele:
In unserem Beispiel wollen wir ein bestimmtes Auto abfragen, dafür haben wir eine WHERE -Klausel hinzugefügt . Diese Klausel gibt eine oder mehrere Bedingungen an, die erfüllt sein müssen, damit die SELECT-Anweisung Daten zurückgibt. In diesem Fall wird die Abfrage nur die Daten des Autos mit dem Kennzeichen zurückgeben, so dass die Abfrage nur die Daten des Autos mit dem Kennzeichen MF-234-ZD oder das Kennzeichen zurückgibt FK-938-ZL. Sie können die WHERE- Klausel allein oder in Kombination mit beliebig vielen Bedingungen verwenden.
SELECT
Nummernschild ,
Marke ,
Modell ,
Farbe ,
Anzahl_Kilometer ,
Anzahl_Sitzer
FROM
Autos
WHERE
Nummernschild = 'MF-234-ZD'
ODER Nummernschild = 'FK-938-ZL' ;
Eine WHERE-Bedingung kann durch den logischen NOT-Operator negiert werden. Die folgende Abfrage gibt alle Daten aus der Cars-Tabelle zurück, mit Ausnahme der mit dem License Plate MF-234-ZD.
SELECT
Nummernschild ,
Marke ,
Modell ,
Farbe ,
Anzahl_Kilometer ,
Anzahl_Sitzer
FROM
Autos
WHERE
NOT Nummernschild = 'MF-234-ZD' ;
Die folgende Abfrage verwendet die Bedingung DISTINCT , die die generierte Tabelle zurückgibt, indem nur die Marken- und Modellfelder jedes Datensatzes ausgewählt werden und die wiederholten Zeilen eliminiert werden. Mit anderen Worten, der Satz von Modellen jeder Marke, die in Autos vorhanden sind.
WÄHLEN SIE UNTERSCHIEDLICHE Marke , Modell VON Autos AUS ;
Wenn DISTINCT weggelassen oder ALL verwendet würde, hätte die generierte Tabelle wiederholte Zeilen, weil es mehrere Autos der gleichen Marke und des gleichen Modells, aber mit unterschiedlichen Nummernschildern geben könnte. In diesem Fall wäre das Ergebnis ein Multiset , bei dem jede Zeile mit den Marken- und Modellfeldern in der Antwort einem Nummernschild aus der Autotabelle entspricht , das nicht in der Antwort angezeigt wird.
ORDER BY-Klausel
Die ORDER BY - Klausel ist die Anweisung, mit der wir die Reihenfolge angeben können, in der die Daten zurückgegeben werden. Wir können die Reihenfolge aufsteigend oder absteigend durch die Schlüsselwörter ASC und DESC angeben . Die Reihenfolge hängt von der Art der in der Spalte definierten Daten ab, sodass ein numerisches Feld als solches und ein alphanumerisches Feld von A bis Z sortiert wird, auch wenn sein Inhalt numerisch ist. Standardmäßig ASC, wenn bei der Abfrage nicht angegeben.
Beispiele:
WÄHLEN Sie
Nummernschild ,
Marke ,
Modell ,
Farbe ,
Anzahl_Kilometer ,
Anzahl_Sitzer
AUS
Autos
ORDER BY
Marke ASC ,
Modell DESC ;
Dieses Beispiel wählt alle Felder Zulassung, Marke, Modell, Farbe, Anzahl_Kilometer und Anzahl_Orte aus der Tabelle Autos aus und sortiert sie nach den Feldern Marke und Modell, Marke in aufsteigender Reihenfolge und Modell in absteigender Reihenfolge.
WÄHLEN Sie
Nummernschild ,
Marke ,
Modell ,
Farbe ,
Anzahl_Kilometer ,
Anzahl_Sitzer
AUS
Autos
ORDER BY 2 ;
Dieses Beispiel wählt alle Felder Nummernschild, Marke, Modell, Farbe, Anzahl_Kilometer und Anzahl_Orte aus der Tabelle cars aus und sortiert sie nach dem Feld brand , da es in der Liste der Felder, aus denen SELECT besteht, an zweiter Stelle steht.
Unterabfragen
Eine Unterabfrage ist eine SELECT-Anweisung, die in eine Klausel einer anderen SQL-Anweisung eingebettet ist. Unterabfragen können auch in den Befehlen INSERT, UPDATE, DELETE und in der FROM-Klausel verwendet werden. [ 8 ]
Unterabfragen können nützlich sein, wenn Sie Zeilen aus einer Tabelle mit einer Bedingung auswählen müssen, die von Daten in der Tabelle selbst oder in einer anderen Tabelle abhängt.
Die Unterabfrage (innere Abfrage) wird vor der Hauptabfrage ausgeführt; das Ergebnis der Unterabfrage wird von der Hauptabfrage (äußere Abfrage) verwendet.
WÄHLEN c . Immatrikulation , c . Modell
VON Autos AS c
WO c . Studiengebühren IN
(
SELECT m . Studiengebühren
FROM Geldstrafen AS m
WHERE m . Betrag > 100
);
In diesem Beispiel werden die Nummernschilder und Modelle von Autos ausgewählt, deren Bußgelder 100 US-Dollar übersteigen.
EINFÜGEN
Eine SQL INSERT- Anweisung fügt einer (und nur einer) Tabelle in einer relationalen Datenbank einen oder mehrere Datensätze hinzu.
Grundform
INSERT INTO
table ( SpalteA , [ SpalteB , ...])
VALUES
( 'Wert1' , [ 'Wert2' , ...]);
-- Oder es kann auch verwendet werden als:
INSERT INTO table VALUES ( 'value1' , 'value2' );
Die Anzahl der Spalten und Werte muss gleich sein. Wenn eine Spalte nicht angegeben ist, wird ihr der Standardwert zugewiesen. Die in der Aussage angegebenen (oder implizierten) Werte INSERTmüssen alle anwendbaren Einschränkungen erfüllen. Wenn ein Syntaxfehler auftritt oder eine der Einschränkungen verletzt wird, wird die Zeile nicht hinzugefügt und ein Fehler zurückgegeben.
Beispiel
INSERT INTO phone_book ( name , number )
VALUES ( 'Roberto Jeldrez' , 4886850 );
Wenn alle Werte einer Tabelle angegeben sind, kann die verkürzte Anweisung verwendet werden:
INSERT INTO table_name VALUES ( 'value1' , [ 'value2' , ...]);
Beispiel (unter der Annahme, dass „Name“ und „Nummer“ die einzigen Spalten in der Tabelle „Telefonbuch“ sind):
INSERT INTO agenda_telefonica
VALUES ( 'Johnny Aguilar' , 080473968 );
Erweiterte Formulare
Eine Funktion von SQL (seit SQL-92) ist die Verwendung von Zeilenkonstruktoren , um mehrere Zeilen gleichzeitig mit einer einzigen SQL-Anweisung einzufügen:
INSERT INTO
table ( Spalte1 [, Spalte2 , ...])
VALUES
( 'Wert1A' , [ 'Wert1B' , ...]),
( 'Wert2A' , [ 'Wert2B' , ...]), ... ;
Diese Funktion wird von DB2, PostgreSQL (seit Version 8.2), MySQL und H2 unterstützt.
Beispiel (vorausgesetzt, Name und Nummer sind die einzigen Spalten in der Tabelle phone_book):
INSERT INTO
agenda_telefonica
WERTE
( 'Roberto Fernández' , '4886850' ),
( 'Alejandro Sosa' , '4556550' );
Das hätte durch die Sätze geschehen können
INSERT INTO agenda_telefonica VALUES ( 'Roberto Fernández' , '4886850' );
INSERT INTO agenda_telefonica VALUES ( 'Alejandro Sosa' , '4556550' );
Beachten Sie, dass die separaten Anweisungen möglicherweise eine andere Semantik haben (insbesondere in Bezug auf Trigger) und eine andere Leistung aufweisen können als die mehrfache Einfügeanweisung.
Um mehrere Zeilen in MS SQL einzufügen, können Sie dieses Konstrukt verwenden:
INSERT INTO phone_book
SELECT 'John Doe' , '555-1212'
UNION ALL
SELECT 'Peter Doe' , '555-2323' ;
Beachten Sie, dass dies aufgrund der unvollständigen Subselect-Klausel keine gültige SQL-Anweisung gemäß dem SQL-Standard ( SQL: 2003 ) ist.
Um dasselbe in Oracle zu tun, wird die DUAL-Tabelle verwendet , solange es sich nur um eine einzelne Zeile handelt:
INSERT INTO phone_book
SELECT 'John Doe' , '555-1212' VON DUAL
UNION ALL
SELECT 'Peter Doe' , '555-2323' VON DUAL
Eine standardkonforme Implementierung dieser Logik ist im folgenden Beispiel oder wie oben gezeigt (nicht anwendbar in Oracle):
INSERT INTO phone_book
SELECT 'John Doe' , '555-1212' FROM SEITLICHE ( WERTE ( 1 ) ) AS t ( c )
UNION ALL
SELECT 'Peter Doe' , '555-2323' FROM SEITLICHE ( WERTE ( 1 ) ) AS t ( c )
Kopieren von Zeilen aus anderen Tabellen
Ein INSERT kann auch verwendet werden, um Daten von anderen abzurufen, bei Bedarf zu ändern und direkt in die Tabelle einzufügen. All dies geschieht in einer einzigen SQL-Anweisung, die keine Zwischenverarbeitung in der Client-Anwendung erfordert. Anstelle der VALUES-Klausel wird ein SUBSELECT verwendet. Die SUBSELECT-Anweisung kann die JOIN-Anweisung und Funktionsaufrufe enthalten und sogar die Daten abfragen, die in dieselbe TABLE eingefügt werden. Logischerweise wird SELECT ausgewertet, bevor die INSERT-Operation gestartet wird. Ein Beispiel ist unten angegeben.
IN Telefonbuch2 EINFÜGEN
SELECT *
FROM phone_book
WHERE name IN ( 'John Doe' , 'Peter Doe' );
Eine Abweichung ist erforderlich, wenn einige der Daten aus der Quelltabelle in die neue Tabelle eingefügt werden, aber nicht der gesamte Datensatz. (Oder wenn die Schemata der Tabellen nicht gleich sind.)
INSERT INTO phone_book2 ([ Name ], [ Telefonnummer ])
SELECT [ name ], [ phoneNumber ]
FROM phone_book
WHERE name IN ( 'John Doe' , 'Peter Doe' );
Das SELECT erzeugt eine (temporäre) Tabelle, und das Schema der temporären Tabelle muss mit dem Schema der Tabelle übereinstimmen, in die die Daten eingefügt werden.
AKTUALISIEREN
Eine SQL- UPDATE -Anweisung wird verwendet, um die Werte eines vorhandenen Datensatzes in einer Tabelle zu ändern.
Beispiel
UPDATE My_table SET field1 = 'aktualisierter Wert' WHERE field2 = 'N' ;
LÖSCHEN
Eine SQL DELETE- Anweisung löscht einen oder mehrere vorhandene Datensätze in einer Tabelle.
Grundform
DELETE FROM table WHERE Spalte1 = 'Wert1' ;
Beispiel
DELETE FROM my_table WHERE Spalte2 = 'N' ;
Schlüsselwiederherstellung
Datenbankdesigner, die einen Ersatzschlüssel als Primärschlüssel für jede Tabelle verwenden, werden gelegentlich auf ein Szenario stoßen, in dem es erforderlich ist, die Datenbank automatisch wiederherzustellen und einen Primärschlüssel aus einer SQL INSERT-Anweisung zur Verwendung in anderen SQL-Anweisungen zu generieren. Die meisten Systeme lassen keine SQL INSERT-Anweisungen zu, um eine Datenzeile zurückzugeben. Daher wird es notwendig, in solchen Szenarien eine Lösung anzuwenden.
Zu den gängigen Implementierungen gehören:
- Führen Sie unter Verwendung einer datenbankspezifischen gespeicherten Prozedur, die den Ersatzschlüssel generiert, die INSERT-Operation aus und geben Sie schließlich den generierten Schlüssel zurück.
- Verwenden einer datenbankspezifischen SELECT-Anweisung für eine temporäre Tabelle, die die letzte eingefügte Zeile enthält. DB2 implementiert diese Funktion wie folgt:
SELECT *
FROM NEW TABLE (
INSERT INTO phone_book
VALUES ( 'Cristobal Jeldrez' , '0426.817.10.30' )
) AS t
- Verwenden einer SELECT-Anweisung nach der INSERT-Anweisung mit einer datenbankspezifischen Funktion, die den vom zuletzt eingefügten Datensatz generierten Primärschlüssel zurückgibt.
- Verwenden einer eindeutigen Kombination von Elementen aus dem ursprünglichen SQL INSERT in einer nachfolgenden SELECT - Anweisung .
- Verwenden einer GUID in der SQL-INSERT-Anweisung und Abrufen in einer SELECT-Anweisung .
- Verwenden der MySQL - PHP -Funktion mysql_insert_id() nach der INSERT-Anweisung.
- Unter Verwendung eines INSERT mit der RETURNING-Klausel für Oracle , das nur innerhalb eines PL/SQL -Blocks verwendet werden kann, kann es im Fall von PostgreSQL auch mit SQL und PL/SQL verwendet werden.
INSERT INTO phone_book VALUES ( 'Cristobal Jeldrez' , '0426.817.10.30' )
RETURNING phone_book_id INTO v_pb_id
- Im Fall von MS SQL kann die folgende Anweisung verwendet werden:
Setze NoCount On ;
INSERT INTO phone_book VALUES ( 'Cristobal Jeldrez' , '0426.817.10.30' );
Wählen Sie @@ Identität als ID aus
Auslöser
Trigger , auch bekannt als triggers , werden in der Tabelle definiert, auf der die INSERT-Anweisung ausgeführt wird, und werden im Kontext der Operation ausgewertet. BEFORE INSERT-Trigger ermöglichen es, die in die Tabelle einzufügenden Werte zu ändern. AFTER INSERT-Trigger können keine Daten in der Zukunft ändern, können aber verwendet werden, um Aktionen für andere Tabellen zu initiieren, z. B. um Excel-Überwachungsmechanismen anzuwenden.
Datenbankverwaltungssysteme
Die am weitesten verbreiteten Datenbankmanagementsysteme mit SQL-Unterstützung sind in alphabetischer Reihenfolge:
- DB2
- Feuervogel
- SQL
- Informix
- InterBase
- MariaDB
- Microsoft SQLServer
- MySQL
- Orakel
- PostgreSQL
- PervasiveSQL
- SQLite
- Sybase-ASE
Interoperabilität
Die Abfragesprachen der verschiedenen Datenbankmanagementsysteme sind untereinander inkompatibel und folgen nicht unbedingt vollständig dem Standard. Insbesondere die Syntax von Datum und Uhrzeit, Zeichenfolgenverkettung, Nullen und Textvergleich in Bezug auf die Groß- und Kleinschreibung ist von Anbieter zu Anbieter unterschiedlich. Eine besondere Ausnahme ist PostgreSQL , das nach Standardkonformität strebt. [ 9 ]
Gängige SQL-Implementierungen lassen normalerweise die Unterstützung für grundlegende Standard-SQL-Funktionen aus, wie z. B. die DATEoder TIME. Dies ist der Fall beim Oracle - Datenbankmanager (dessen Typ DATEsich wie verhält DATETIMEund dem ein Typ fehlt TIME) [ 10 ] und MS SQL Server (vor Version 2008). Infolgedessen kann SQL-Code selten ohne Modifikation zwischen Datenbanksystemen portiert werden.
Es gibt mehrere Gründe für diese mangelnde Portabilität zwischen Datenbanksystemen:
- Aufgrund der Komplexität und Größe des SQL-Standards sind die meisten SQL-Implementierungen nicht mit dem vollständigen Standard kompatibel.
- Der Standard spezifiziert das Datenbankverhalten in mehreren wichtigen Bereichen (z. B. Indizes , Dateispeicherung usw.) nicht und überlässt es den Implementierungen, zu entscheiden, wie sie sich verhalten sollen.
- Der SQL-Standard spezifiziert genau die Syntax, die ein konformes Datenbanksystem implementieren muss. Die Spezifikation im Standard der Semantik von Sprachkonstrukten ist jedoch nicht so gut definiert, was zu Mehrdeutigkeiten führt.
- Viele Datenbankanbieter verfügen über einen großen bestehenden Kundenstamm, sodass Änderungen zur Einhaltung des Standards zu Inkompatibilitäten bei Benutzerinstallationen führen können und der Anbieter möglicherweise nicht bereit ist, die Abwärtskompatibilität aufzugeben .
- Es gibt wenig kommerziellen Anreiz für einen Anbieter, Benutzern den Wechsel des Datenbankanbieters zu erleichtern.
- Benutzer, die Datenbanksoftware bewerten, tendieren dazu, andere Faktoren wie eine höhere Leistung in ihren Prioritäten höher einzustufen als die Standardkonformität.
Der ODBC-Standard ( Open Database Connectivity ) ermöglicht den Zugriff auf Informationen aus jeder Anwendung, unabhängig vom Datenbankmanagementsystem (DBMS), in dem die Informationen gespeichert sind, und entkoppelt so die Anwendung von der Datenbank.
Siehe auch
Referenzen
- ^ Paul, Ryan (24. Oktober 2005). "Eine geführte Tour durch die Microsoft Command Shell" . Ars Technica (auf Englisch) . Abgerufen am 4. August 2020 .
- ↑ Morteo, Bocalandro, Francisco, Nicholas (2004). Eine praktische Herangehensweise an SQL . Kooperative Editionen. ISBN 987-1076-61-4 .
- ↑ E. F. Codd; Ein relationales Datenmodell für große gemeinsam genutzte Datenbanken. Komm. ACM, 13 (1970), p. 377-387.
- ↑ Eisenberg et al.: SQL:2003 wurde veröffentlicht.
- ↑ SQL 2008-Genehmigung.
- ↑ Chapple, Mike. SQL-Grundlagen . In About.com, Hrsg. Datenbanken . Abgerufen am 17. Oktober 2015 .
- ^ Rockoff , Larry (2011) . Kurstechnologie/Cengage Learning, hrsg. Die Sprache von SQL .
- ↑ Morteo, Bocalandro., Francisco, Nicholas (2004). Eine praktische Herangehensweise an SQL . Kooperative Editionen. ISBN 987-1076-61-4 .
- ↑ „Über PostgreSQL“ . Offizielle PostgreSQL 9.1-Website . PostgreSQL Global Development Group. 2012 . Abgerufen am 8. Juni 2016 . PostgreSQL ist stolz auf die Einhaltung von Standards. Seine SQL-Implementierung entspricht stark dem ANSI-SQL:2008-Standard.
- ^ "Grundelemente von Oracle SQL: Datentypen" . Oracle Database SQL-Sprachreferenz 11g Release 2 (11.2) . Oracle Database-Dokumentationsbibliothek. Redwood City, Kalifornien: Oracle USA, Inc. Abgerufen am 8. Juni 2016 .