Strukturierte Abfragesprache
| SQL -Programmiersprache | |
|---|---|
| Die Teile einer Anweisung. | |
| Autor | Donald Chamberlin |
| Entstehungsdatum | 1974 |
| Letzte Version | SQL: 2016 (Dezember 2016 ) |
| Verwendungszweck | Erstellung, Abfrage, Datenbankverwaltung |
| Paradigmen | Multiparadigma |
| Tippen | statisch, stark |
| Gängige Erweiterungen | .sql |
In der Informatik ist SQL ( Structured Query Language ) (/skjuːˈɛl/„SQL“) eine standardisierte Datenbanksprache , die auf dem relationalen Modell ( RDBMS ) basiert und für folgende Operationen ausgelegt ist:
- Datenbankschemata erstellen und ändern (DDL = Data Definition Language );
- gespeicherte Daten einfügen, ändern und verwalten (DML = Data Manipulation Language );
- die gespeicherten Daten abfragen (DQL = Data Query Language );
- Erstellung und Verwaltung von Datenzugriffs- und Kontrolltools (DCL = Data Control Language ).
Trotz des Namens handelt es sich also nicht um eine einfache Abfragesprache : Einige ihrer Teilmengen ermöglichen es Ihnen tatsächlich, Datenbanken zu erstellen, zu verwalten und zu verwalten.
Geschichte
SQL wurde 1974 von Donald Chamberlin in den IBM- Labors geboren . Es wurde als Werkzeug für die Arbeit mit Datenbanken entwickelt, die dem relationalen Modell folgen . Damals hieß es jedoch SEQUEL (aus diesem Grund ist die korrekte IPA -Aussprache von SQL [ˈɛsˈkjuˈɛl] und die informelle [ˈsiːkwəl]). 1975 wurde ein Prototyp namens SEQUEL-XRM entwickelt ; damit wurden Experimente durchgeführt, die 1977 zu einer neuen Version der Sprache führten, die zunächst SEQUEL / 2 heißen sollte, dann aber aus rechtlichen Gründen wurde (der Name SEQUEL wurde bereits verwendet und vor allem registriert , in einem anderen Bereich für eine Fluggesellschaft), SQL. Darauf wurde der System R- Prototyp entwickelt , der von IBM für interne Zwecke und für einige seiner Kunden verwendet wurde. Aufgrund des Erfolgs begannen jedoch auch andere Unternehmen schnell mit der Entwicklung von SQL-basierten Produkten. 1981 begann IBM mit dem Verkauf einiger relationaler Produkte und veröffentlichte 1983 DB2 , sein relationales DBMS , das in den letzten Jahren des 20. Jahrhunderts populär war . SQL wurde schnell zum Industriestandard für Software, die das relationale Modell verwendet.
ANSI hat es seit 1986 als Standard übernommen , ohne wesentliche Änderungen an der ursprünglich von IBM entwickelten Version vorzunehmen. 1987 tat die ISO dasselbe. Diese erste Standardversion heißt SQL/86. In den folgenden Jahren wurden weitere Versionen erstellt, nämlich SQL/89, SQL/92 und SQL/2003. Dieser Standardisierungsprozess zielte darauf ab, eine Sprache zu schaffen, die auf allen relationalen DBMS (Data Base Management Systems) funktioniert, aber dieses Ziel wurde nicht erreicht. Tatsächlich haben die verschiedenen Hersteller die Sprache mit zahlreichen Variationen implementiert und die Standards in der Praxis auf einem Niveau übernommen, das das von Ansi als Einstiegsniveau definierte Minimum nicht überschreitet.
Eigenschaften
SQL ist eine Sprache zum Abfragen und Verwalten von Datenbanken durch die Verwendung von Programmierkonstrukten, die als Abfragen bezeichnet werden . Mit SQL können Sie Daten lesen, ändern, löschen und Verwaltungs- und Verwaltungsfunktionen auf dem Datenbanksystem ausüben. Die meisten Implementierungen haben eine Befehlszeilenschnittstelle für die direkte Befehlsausführung als Alternative zur reinen GUI .
Ursprünglich als deklarative Typsprache konzipiert , hat sie sich seitdem mit der Einführung von prozeduralen Konstrukten, Flusssteuerungsanweisungen , benutzerdefinierten Datentypen und verschiedenen anderen Spracherweiterungen weiterentwickelt. Seit der Definition des SQL: 1999-Standards wurden viele dieser Erweiterungen formell als integraler Bestandteil von SQL in den SQL/PSM-Abschnitt des Standards aufgenommen.
Einige der häufigsten Kritikpunkte an SQL betreffen die mangelnde Codeportabilität zwischen verschiedenen Anbietern, den unangemessenen Umgang mit fehlenden (Null-)Daten und die manchmal unnötig komplizierte Semantik.
Struktur
Als deklarative Sprache erfordert SQL nicht das Schreiben von Operationsfolgen (wie z. B. imperative Sprachen ), anstatt die logischen Eigenschaften der gesuchten Informationen anzugeben. Es ist unterteilt in:
- Data Definition Language (DDL) - ermöglicht das Erstellen und Löschen von Datenbanken oder das Ändern ihrer Struktur
- Data Manipulation Language (DML) - ermöglicht das Einfügen, Löschen und Ändern von Daten
- Data Control Language (DCL) - ermöglicht Ihnen die Verwaltung von Benutzern und Berechtigungen
- Abfragesprache (QL) - ermöglicht das Abfragen der Datenbank, dh das Lesen der Daten.
- Device Media Control Language (DMCL) - ermöglicht Ihnen die Steuerung der Medien ( Massenspeicher ), auf denen die Daten gespeichert sind.
Operatoren
Die vom Standard-SQL zur Verfügung gestellten Operatoren sind in sieben Kategorien unterteilt:
- Zuweisungsoperatoren
- Vergleichsoperatoren
- String-Operatoren
- Rechenzeichen
- Bedingte Operatoren
- Logische Operatoren
- Bit-Bit-Operatoren
Zuweisungsoperatoren
Zuweisungsoperatoren weisen einer Variablen oder einem Feld einen Wert zu.
=Drückt eine Zuweisung aus und gibt keinen Wert zurück.:=Sie drückt eine Zuweisung eines Wertes an eine noch nicht instanziierte Variable aus und gibt keinen Wert zurück.
Vergleichsoperatoren
Vergleichsoperatoren werden verwendet, um Gleichheiten und Ungleichheiten zwischen Werten zu ermitteln und innerhalb der Daten zu suchen. Unten ist ein Tabellendiagramm:
=Drückt die Gleichheit zwischen zwei numerischen Werten oder Zeichenfolgen aus (wo es nicht als Zuweisungsoperator verwendet wird)ISEs wird verwendet, um zu prüfen, ob ein Wert NULL ist oder ob er einem booleschen Wert (TRUE, FALSE, UNKNOWN) entspricht.LIKEDrückt die Ähnlichkeit zwischen zwei Literalwerten aus: Mit dem LIKE-Operator können für Vergleiche die Sonderzeichen % (ersetzt eine beliebige Anzahl von Buchstaben) und _ (ersetzt einen beliebigen Buchstaben) verwendet werden<Bestimmt, ob ein Wert kleiner als ein anderer ist>Bestimmt, ob ein Wert größer als ein anderer ist<=Bestimmt, ob ein Wert kleiner oder gleich einem anderen ist>=Stellt fest, ob ein Wert größer oder gleich einem anderen ist<>Ermittelt, ob sich zwei Werte voneinander unterscheiden!=gleichwertig<>BETWEEN ... ANDRuft einen Wert zwischen zwei Werten abINBestimmt, ob ein Wert in einer Liste möglicher Werte enthalten istEXISTSBestimmt, ob eine bestimmte Unterabfrage einen Wert zurückgibtANYoSOMEBestimmt, ob eine bestimmte Unterabfrage mindestens einen der angegebenen Werte zurückgibtALLBestimmt, ob eine bestimmte Unterabfrage alle gewünschten Werte zurückgibt
Einige dieser Operatoren entsprechen einem entgegengesetzten Operator, der den Begriff NOT verwendet:
IS NOTNOT LIKENOT BETWEENNOT INNOT EXISTS
String-Operatoren
String-Operatoren nehmen zwei Strings als Operanden und geben einen booleschen oder String-Wert zurück.
LIKE-Operator
Der Operator LIKE(MATCHES wird auch verwendet) ist normalerweise die Grundlage für Schlüsselwort-Suchkriterien und Abfragen, die von einer Suchmaschine durchgeführt werden.
Der Unterstrich ( _) mit der Bezeichnung wildchar sucht nach einem einzelnen beliebigen Zeichen; Das Symbol %wird als Platzhalteroperator bezeichnet und sucht nach einer beliebigen Zeichenfolge, dh nach einem Bereich numerischer Werte. Um innerhalb eines Ausdrucks nach dem Unterstrich zu suchen, verwenden Sie die Syntax [_](siehe auch unten).
Die Microsoft Access-Syntax unterscheidet sich geringfügig von diesem internationalen Standard und ist vollständiger. Anstelle des Unterstrichs wird es verwendet ?, um nach einem einzelnen Zeichen (Zahl und Buchstabe) zu suchen; Anstelle des Symbols %wird der Wildcard-Operator durch angegeben *. Access ermöglicht Ihnen die Suche nach einem einzelnen numerischen Wert mit der Hash -Taste (oder Hash - Taste) ( #) und die Suche nach einem Zeichen (Buchstabe und Zahl) innerhalb oder außerhalb einer Gruppe von Werten mit der Syntax []und [!]. Das Intervall kann punktuell oder kollektiv sein: Beispielsweise gibt [AF] die Buchstaben zwischen A und F an, während [A, F] nur die Suche nach diesen beiden Buchstaben angibt. Zum Beispiel sucht eine Anweisung wie 'LIKE P [! AF] C' nach Wörtern, die mit "P" beginnen, mit "C" enden und der zweite Buchstabe hat nicht die Zeichen zwischen den Buchstaben A und F. Diese Vollständigkeit in der Implementierung von LIKE ist darauf zurückzuführen, dass Access keine komplexeren Operatoren wie SIMILAR TO und REGEXP vorsieht.
Trotz dieser Vollständigkeit weist der OLE DB-Treiber für Windows einen bekannten Fehler auf: Der Wildcard-Operator *kann nur innerhalb der Anwendung verwendet werden, während das klassische Symbol über OLE DB / ODBC verwendet werden muss %.
SIMILAR TO- und REGEXP-Operatoren
Der SIMILAR TO-Operator ist Teil des SQL-Standards und ermöglicht Ihnen zu prüfen, ob eine Zeichenfolge mit einem bestimmten regulären Ausdruck übereinstimmt . Die verwendete Syntax unterscheidet sich von den De-facto -Standards , die von Perl und POSIX etabliert wurden, und aus diesem Grund ist die Übernahme dieses Operators durch Hersteller eher begrenzt.
Der REGEXP-Operator ist gebräuchlicher und ermöglicht Ihnen auch zu prüfen, ob eine Zeichenfolge mit einem bestimmten regulären Ausdruck übereinstimmt. Die verwendete Syntax variiert je nach SQL-Implementierung, hält sich jedoch im Allgemeinen an die De-facto -Standards von Perl oder POSIX.
Die SQL enthält auch die komplementären Operatoren NOT SIMILAR TO und NOT REGEXP .
BINÄR
Dieser Operator dient dazu, bei der Anwendung regulärer Ausdrücke zwischen Groß- und Kleinschreibung zu unterscheiden, d. h. dafür zu sorgen, dass Großbuchstaben von Kleinbuchstaben unterschieden werden.
ZUSAMMENFASSEN
Dieser Operator wird verwendet, um anzugeben, welche Kollation (Regelsatz zum Sortieren eines Zeichensatzes) im aktuellen Ausdruck verwendet werden soll.
Arithmetische Operatoren
Arithmetische Operatoren akzeptieren Operatoren eines numerischen Typs (Ganzzahl oder Dezimalzahl) und geben das Ergebnis der entsprechenden arithmetischen Operation zurück. Unten ist ein Tabellendiagramm:
Beschreibung des Operators
+Machen Sie eine Addition oder lassen Sie das Vorzeichen einer Zahl unverändert-Subtrahieren oder das Vorzeichen einer Zahl umkehren*Führen Sie eine Multiplikation durch/Machen Sie eine TeilungMODGibt den Rest einer Division zurückDIVGibt den ganzzahligen Teil einer Division zurück
Bedingte Operatoren
Der einzige Bedingungsoperator von SQL ist WHERE (wo) und wird verwendet, um gezielte Suchkriterien zu definieren.
Logische Operatoren
Die logischen Operatoren von SQL gehören zu den Booleschen logischen Operatoren und sind UND (und), ODER (oder, oder), NICHT (nicht), XOR (auch „exklusives ODER“ genannt).
- Der logische UND- Operator , der zwei Bedingungen verknüpft, gibt genau dann WAHR zurück, wenn beide Operanden wahr sind.
- Der logische OR- Operator , der zwei Bedingungen verknüpft, gibt genau dann TRUE zurück, wenn mindestens einer der Operanden wahr ist.
- Der NOT- Operator akzeptiert nur einen Operanden und gibt den inversen Wert zurück: false, wenn dies wahr ist, true, wenn dies falsch ist.
- Der XOR- Operator , der zwei Bedingungen akzeptiert, gibt genau dann TRUE zurück, wenn nur einer der Operanden wahr ist.
Bitoperatoren
Der SQL-Standard sieht diese Familie von Operatoren nicht vor, sie ist jedoch in vielen Implementierungen vorhanden. Diese Operatoren führen AND-, OR-, NOT- und XOR-Operationen auf Bitebene aus.
Allgemeine Regeln für Operatoren
Ein Ausdruck besteht aus einem Wert oder einer Operation, die einen Wert zurückgibt. Diese Definition ist rekursiv: Ausdrücke können verschachtelt werden. Da die Operatoren immer einen Wert zurückliefern, ist es durchaus legitim, sie zu immer komplexeren Bedingungen zusammenzufassen.
Durch die Verwendung von runden Klammern () innerhalb der Suchausdrücke können Sie die Priorität der Operatoren ändern oder explizit machen, dh die Reihenfolge, in der sie verarbeitet werden. Wenn ein zusammengesetzter Ausdruck ohne Klammern geschrieben wird, wird der Vorrang zwischen den von der Sprache bereitgestellten Operatoren angewendet.
DDL: Datendefinition
DDL ( Data Definition Language ) wird verwendet, um Objekte in einer Datenbank zu erstellen, zu ändern oder zu löschen. Die DDL-Befehle definieren die Struktur der Datenbank und damit der darin enthaltenen Daten, stellen jedoch nicht die Werkzeuge bereit, um die Daten zu modifizieren, für die die DML ( Data Manipulation Language ) verwendet wird. Der Benutzer muss über die erforderlichen Berechtigungen verfügen, um auf die Datenbankstruktur einzuwirken, und diese Berechtigungen werden über die DCL ( Data Control Language ) zugewiesen.
Grunddomänen
SQL stellt sechs Familien elementarer Domänen bereit, aus denen die Domänen definiert werden können, die den Attributen des Schemas zugeordnet werden sollen.
DML: Datenmanipulation
DML ( Data Manipulation Language ) stellt Befehle zum Einfügen, Ändern und Löschen von Daten innerhalb von Tabellen in einer Datenbank bereit. Die Struktur dieser Daten muss bereits durch die DDL definiert worden sein. Darüber hinaus muss dem Benutzer zuvor über die DCL die Erlaubnis zum Zugriff auf solche Daten zugewiesen werden.
Einfügen
Der Befehl hat die Funktion, Daten in die Tabellen einzufügen .
Die Zielspalten (oder -felder) der Werte können im Befehl deklariert werden oder nicht. Wenn sie nicht deklariert sind, muss dem Befehl für jede Spalte der Tabelle ein Wert übergeben werden, wobei die Reihenfolge der Spalten selbst strikt eingehalten werden muss. Wenn hingegen die Zielspalten deklariert sind, können nur die Spalten angegeben werden, für die Werte übergeben werden, sofern die Werte für alle Nicht-Null -Spalten (die nicht Null sein können) der Tabelle gelten werden trotzdem eingetragen.
An sich funktioniert der Einfügebefehl, indem er jeweils nur eine Zeile in die Tabelle einfügt. Es ist jedoch möglich, "automatisch" mehr als eine Zeile einzufügen, indem eine Reihe von Zeilen (oder Tupeln) an das Insert übergeben werden, die sich aus einem Auswahlbefehl ergeben, solange diese Zeilen mit den Spalten der Tabelle kompatibel sind, auf der die Daten werden eingefügt.
Befehlssyntax einfügen
- Einfaches Einfügen:
INSERT INTO tabellenname
VALUES ( Werteliste , alle , Reihenfolge der Tabellenfelder beachten , zB " gespendet " ) ; _ _ _
oder
INSERT INTO tabellenname ( Liste der an der Einfügung beteiligten Felder ) VALUES ( Liste der Werte , alle , unter Berücksichtigung der Reihenfolge der oben deklarierten Felder , Beispiel "gespendet" );
- Einfügen mit Auswählen:
INSERT INTO tabellenname ( Liste der an der Einfügung beteiligten Felder , zB " gespendet " ) AS SELECT ...;
Aktualisieren
Der Aktualisierungsbefehl hat die dreifache Funktion , die Daten der Tabellen zu modifizieren.
Der Name jedes zu ändernden Feldes muss nach dem Schlüsselwort SET deklariert werden, gefolgt von dem (Gleichheits-)Symbol =und dem neuen Wert, den es annehmen muss.
,Sie können mehrere Felder in derselben Zeile in einem einzigen Aktualisierungsbefehl ändern, indem Sie sie mit dem Symbol (Komma)
voneinander trennen .
Der generische Befehl aktualisiert alle Zeilen der Tabelle. Sie können die Anzahl einschränken, indem Sie das zusätzliche Schlüsselwort WHERE verwenden , mit dem Sie eine qualitative Auswahl der Zeilen treffen können, indem Sie den Daten in den Zeilen vor der Aktualisierung Bedingungen auferlegen.
Aktualisierung der Befehlssyntax
- Allgemeines Update:
UPDATE Tabellenname
SET Feldname1 = 'Wert1_neu' ,
Feldname2 = 'Wert2_neu' ,
...
;
- Update mit Bedingung:
UPDATE Tabellenname
SET Feldname1 = 'Wert1_neu' ,
Feldname2 = 'Wert2_neu'
WHERE Feldname3 = 'Wert' ;
Löschen
Der Löschbefehl hat die Funktion, Daten aus Tabellen zu löschen .
Wie der Befehl update kann auch delete generisch arbeiten, indem es alle Zeilen der Tabelle löscht, oder es kann die zu löschenden Zeilen mit dem zusätzlichen Schlüsselwort WHERE und der damit verbundenen Bedingung (oder Bedingungen) identifizieren.
Befehlssyntax delete
- Generisches Löschen:
DELETE FROM Tabellenname ;
- Löschen mit Bedingung:
DELETE FROM tabellenname
WHERE feldname = 'wert' ;
Tabelle kürzen
Wie bereits erwähnt, löscht ein Delete ohne Where-Klausel alle Zeilen aus der angegebenen Tabelle. Es gibt jedoch noch eine andere Möglichkeit, eine Tabelle vollständig zu leeren: den Befehl „Truncate Table “ . Einige DBMS implementieren diesen Befehl (der im SQL-Standard nicht vorhanden ist) schneller als ein Delete, indem sie beispielsweise die Datendatei löschen, ohne sie zu lesen, und sie leer neu erstellen. Dies verhindert jedoch im Allgemeinen, dass einige zusätzliche Informationen zurückgegeben werden, z. B. die Anzahl der gelöschten Zeilen.
Befehlssyntax zum Abschneiden der Tabelle
TRUNCATE [ TABLE ] Tabellenname
Die Transaktion
Eine Transaktion ist ein Block von Anweisungen, die eng miteinander verbunden sind. Falls aus irgendeinem Grund (ein interner Fehler im DBMS, ein Fehler in den SQL-Anweisungen, ein Systemfehler) eine der Anweisungen nicht abgeschlossen wird, wird die gesamte Transaktion abgebrochen. Eine Transaktion wird daher als atomare Operation bezeichnet, das heißt, sie ist nicht teilbar: Wenn sie nicht vollständig ausgeführt wird, wird sie überhaupt nicht ausgeführt. Dies ist eines der am häufigsten verwendeten Tools zur Gewährleistung der Datenintegrität.
Bis eine Transaktion erfolgreich ist, sind die vorgenommenen Änderungen nur für die Sitzung sichtbar, die die Transaktion initiiert hat. Je nach Isolationsstufe können andere Benutzer auf eine ältere Version der Daten zugreifen oder werden angehalten, bis die Transaktion abgeschlossen ist.
Nicht alle DBMS unterstützen Transaktionen, während andere sie nur unter bestimmten Bedingungen unterstützen (zum Beispiel werden sie in MySQL nur für einige Arten von Tabellen unterstützt). Darüber hinaus kann das DBMS Transaktionen auf eine Teilmenge des SQL beschränken (z. B. wird in MySQL die aktuelle Transaktion beendet, wenn ein DDL-Befehl ausgegeben wird).
Einige DBMSs erlauben auch verschachtelte Transaktionen. Änderungen, die von einer Transaktion vorgenommen werden, die in einer anderen enthalten ist, sind unwirksam, bis die äußerste Transaktion erfolgreich abgeschlossen wird.
Eine semantisch sehr ähnliche Alternative sind Savepoints. Sie ermöglichen es Ihnen, eine Version der Daten mitten in einer Transaktion zu speichern. Es ist dann möglich, die gesamte Transaktion abzubrechen oder einen der zuvor festgelegten Sicherungspunkte wiederherzustellen. Diese Speicherung kann in einem bedingten Codeblock erfolgen, was diese Funktion viel dynamischer macht als verschachtelte Transaktionen.
Transaktion beginnen
Um eine Transaktion explizit zu initiieren, verwenden Sie den Befehl BEGIN TRANSACTION . Das Fehlen dieses Befehls bewirkt, dass jede Anweisung als separate Transaktion fungiert.
Befehlssyntax Transaktion beginnen
TRANSAKTION BEGINNEN [ Transaktionsname ];
Bestätigen
Der COMMIT- Befehl wird verwendet, um die Transaktion zu bestätigen . Dabei werden alle zuvor an den Daten vorgenommenen Änderungen gespeichert.
Befehlssyntax commit
COMMIT [ TRANSAKTION ] [ Transaktionsname ];
Zurücksetzen
Der ROLLBACK - Befehl wird verwendet , um die Transaktion abzubrechen . Damit werden alle zuvor (ab Transaktionsbeginn) vorgenommenen Änderungen an den Daten rückgängig gemacht.
Zurücksetzen der Befehlssyntax
ROLLBACK [ TRANSAKTION ] [ Transaktionsname ];
DQL: Datenabfrage
DQL (Data Query Language) enthält Befehle zum Lesen und Verarbeiten von Daten in einer Datenbank. Diese Daten müssen über die DML in Strukturen eingetragen worden sein, die mit der DDL erstellt wurden, während die DCL feststellt, ob der Benutzer darauf zugreifen kann.
Wählen Sie
Mit dem Select - Befehl haben wir die Möglichkeit, die Daten gezielt aus der Datenbank zu extrahieren.
Syntax des select-Befehls
AUSWÄHLEN [ ALLE | EINZIGARTIG | TOP ] selection_elements_list FROM table_list_references
[ WHERE Bedingungsausdruck ] [ GROUP BY Spaltenliste [ HAVING - Bedingung ] ] [ ORDER BY Spaltenliste ] ;
wo ist es:
- list_elements_selection ist die Liste der zu extrahierenden Felder (mit Komma voneinander getrennt);
- reference_list_table ist die Liste der Tabellen, aus denen Daten extrahiert werden sollen;
- Bedingungsausdruck stellt die Liste der Bedingungen dar, d. h. die Anforderungen, die ein Feld erfüllen muss, um von der Abfrage abgerufen zu werden (die Bedingungen werden mithilfe von Vergleichsoperatoren, logischen Konnektoren und Komparatoren wie between , in , like , is null angegeben );
- column_list ist die Spalte oder die Spalten, die als Referenz zum Sortieren der Ausgabedaten verwendet werden müssen.
Standardmäßig arbeitet der SELECT- Befehl mit der ALL- Methode , aber durch die Angabe von DISTINCT (oder UNIQUE , je nach Implementierung) ist es möglich, doppelte Zeilen aus den Ergebnissen zu entfernen.
Die GROUP BY - Klausel wird verwendet, um die Ergebnisse nach Tupeln zu gruppieren , während die relative HAVING -Bedingung verwendet wird, um die Ergebnisse zu filtern.
Verkäufer auswählen , Summe ( Rechnungsbetrag ) AUS Rechnungen GRUPPE NACH Kreditor MIT Summe ( Rechnungsbetrag ) > 10 . 000
In diesem Fall werden die Lieferanten herausgefiltert, die einen Gesamtumsatz von mehr als 10.000 haben.
Die ORDER BY- Klausel wird verwendet, um die Ergebnisse basierend auf einem oder mehreren Feldern zu sortieren.
LIMIT (oder TOP , je nach Implementierung) begrenzt die Anzahl der bereitgestellten Zeilen: LIMIT 10 nimmt die ersten 10 Zeilen meiner Tabelle. Es ist auch möglich, eine Reihe von Zeilen am Anfang der Ergebnisse zu verwerfen, indem ein Parameter zu LIMIT oder der OFFSET- Klausel hinzugefügt wird .
Standard-SQL hat keine Sortierung, wenn Sie die ORDER BY -Klausel nicht angeben , also hat LIMIT ohne sie auch einen unvorhersehbaren Effekt.
Ein Beispiel ist das Folgende:
SELECT DISTINCT Nachname , Vorname , Wohnort
FROM Benutzer
WHERE Jahre > = 18
ORDER BY Nachname
Diese Abfrage extrahiert die Liste aller erwachsenen Benutzer, indem die Ausgabe nach Nachnamen sortiert wird. In den Klauseln GROUP BY und ORDER BY können die Namen der Felder durch die Nummer ersetzt werden, die der Reihenfolge der SELECT- Funktion entspricht : im letzten Fall ORDER BY Nachname können Sie ORDER BY 1 schreiben .
Die Definition von select ist jedoch viel breiter, es bietet viele andere Optionen, aber im Prinzip werden mit diesen Optionen die meisten Abfragen zusammengesetzt.
SELECT DISTINCT *
VON Benutzern
Mit dem Sternchen können Sie alle Spalten der Benutzertabelle in die Auswahl aufnehmen
Mit der Auswahl können auch Berechnungen durchgeführt werden:
Wählen Sie DISTINCT cod_art , price_unit * Bestand AS Total , Bestand * Belastung AS TotIngombro ;
AUS Artikeln
Dabei entstehen extrahierte Daten, aber auch berechnete Daten. Die AS-Klausel wird verwendet, um der neuen Spalte einen Namen zu geben, der im Ergebnis der durchgeführten Auswahl angezeigt wird.
Viele DBMS unterstützen die nicht standardmäßige LIMIT-Klausel, die an letzter Stelle stehen muss und drei Formen annehmen kann:
LIMIT < Anzahl_Ergebnisse >
LIMIT < position_first_result > , < number_results >
LIMIT < Anzahl_Ergebnisse > [ OFFSET < Position_erstes_Ergebnis > ]
number_results ist die Anzahl der zu extrahierenden Zeilen. pos_first_result ist der Index der ersten zu extrahierenden Zeile. Zusammen können sie verwendet werden, um die Ergebnisse in Blöcke zu unterteilen und sie nach und nach zu lesen (z. B. für die Bequemlichkeit des DBA oder zum Paging der von einer Webanwendung angezeigten Ergebnisse).
Beitreten
Eine Auswahlform, die aus mehreren Tabellen mit einem oder mehreren gemeinsamen Feldern besteht, wird durch die Join- Klausel erhalten .
Unterabfrage
Unterabfragen können überall dort eingefügt werden, wo die SQL-Sprache einen Ausdruck zulässt, der einen einzelnen Wert zurückgibt, und in der FROM-Klausel. In diesem zweiten Fall werden die Unterabfragen auch als abgeleitete Tabellen bezeichnet.
Die eigentlichen Unterabfragen können je nach Fall einen einzelnen Wert oder eine Reihe von Ergebnissen zurückgeben. Ein recht einfaches Beispiel ist dasjenige, bei dem man Zahlenwerte über dem Durchschnitt aus einer Tabelle extrahieren möchte. Ein einzelner Select kann nicht den Durchschnitt ablesen und gleichzeitig die Werte, die ihn überschreiten. Zu diesem Zweck haben wir eine Auswahl, die den Durchschnitt liest:
WÄHLEN SIE AVG ( field1 ) FROM my_table ;
Diese Abfrage wird in die WHERE-Klausel der äußersten Abfrage gestellt; Die Unterabfrage wird zuerst ausgeführt:
SELECT * FROM my_table WHERE Feld1 > ( SELECT AVG ( field1 ) FROM my_table );
Wie Sie sehen, ist es aus syntaktischer Sicht notwendig, die Unterabfragen in Klammern zu setzen.
Abgeleitete Tabellen
Abgeleitete Tabellen sind ein Sonderfall der Unterabfrage: Ein interner Select extrahiert die Daten, die dann vom externen Select abgefragt werden.
Das folgende Beispiel dient Bildungszwecken, ist aber kein optimaler Ansatz. Angenommen, Sie möchten die Datensätze extrahieren, für die das E-Mail-Feld nicht leer ist, und sie unter den Benutzern auswählen, deren Registrierung bestätigt wurde. So machen Sie das mit einer abgeleiteten Tabelle:
E- Mail AUSWÄHLEN ( E - Mail VON Benutzern AUSWÄHLEN , WHERE bestätigen = TRUE );
In Wirklichkeit sind abgeleitete Tabellen nützlich, wenn es keine anderen möglichen Ansätze gibt, was passiert, wenn die äußere Abfrage einen JOIN enthält.
DCL: Datenkontrolle
DCL wird verwendet, um Benutzern die erforderlichen Berechtigungen zu erteilen oder zu entziehen, um die DML- und DDL-Befehle sowie die DCL-Befehle selbst verwenden zu können (die sie wiederum benötigen, um die Berechtigungen für einige Objekte ändern zu können).
Gewähren
Der Grant - Befehl gewährt oder gewährt einem bestimmten Benutzer eine oder mehrere Berechtigungen (z. B. die Berechtigung, in eine Tabelle einzufügen, sie zu ändern oder zu löschen) und einen wertvollen Administrator.
Widerrufen
Der Widerrufen- Befehl entzieht einem bestimmten Benutzer eine oder mehrere Berechtigungen (z. B. die Berechtigung zum Löschen aus einer Tabelle).
Gespeicherte Programme
Der Begriff gespeicherte Programme oder Geschäftslogik bezieht sich auf in SQL programmierte Routinen mit prozeduralen Erweiterungen, die Flusskontrolle, Schleifen , Cursor und Fehlerbehandlung ermöglichen. In den vollständigsten SQL-Implementierungen können gespeicherte Programme unterschiedlicher Art sein:
- Gespeicherte Prozedur
- Gespeicherte Funktion
- Abzug
Darüber hinaus ermöglichen einige DBMS, wie MySQL , die Erstellung von SQL-Prozeduren, die zu einem bestimmten Zeitpunkt nur einmal oder in einem bestimmten Zeitintervall wiederholt ausgeführt werden, wie beispielsweise die Cron-Jobs von Unix-Systemen.
Kritik an SQL
SQL ist eine Abfragesprache, die für die Interaktion mit relationalen Datenbanken entwickelt wurde. Theoretiker weisen jedoch darauf hin, dass die ursprünglichen Eigenschaften von SQL, die von der Berechnung von Tupeln inspiriert sind , tatsächlich gegen sie verstoßen . Seine jüngsten Erweiterungen unterstützen das relationale Modell vollständig , haben aber die oben erwähnten Verletzungen verschlimmert .
Darüber hinaus gibt es viele Kritikpunkte an der praktischen Nutzung von SQL:
- Es bietet keine Standardmethode, um einen langen Befehl in kürzere Befehle aufzuteilen, auf die mit einem Namen verwiesen werden kann (obwohl viele Implementierungen diese Funktionalität tatsächlich bereitstellen);
- die verschiedenen Implementierungen sind im Allgemeinen nicht miteinander kompatibel;
- zu viel Vertrauen wird auf NULL -Werte gelegt , ein Meta-Wert, der laut einigen Wissenschaftlern das Fehlen eines Werts anzeigen sollte, laut anderen einen unbekannten Wert, während er in der Praxis am Ende in beide Richtungen oder nur in eine Richtung verwendet wird , aber in widersprüchlicher Weise .
Bibliographie
- ( EN ) "SQL-99 Complete, Really", Peter Gulutzan und Trudy Pelzer, R&D Books, 1999, ISBN 978-0-87930-568-0
Verwandte Artikel
- Relationale Algebra
- Relationales Kalkül
- Datendefinitionssprache
- Datenmanipulierungssprache
- Abfragesprache
- Datenkontrollsprache
- SQL-Injektion
- SQLJ
- 4GL
- PL/SQL
- Transact-SQL
- NoSQL
Andere Projekte
Wikibooks enthält SQL -Text oder Handbücher
Wiktionary enthält das Wörterbuch-Lemma „ SQL “
Wikimedia Commons enthält Bilder oder andere Dateien auf SQL
Externe Links
- ( EN ) Structured Query Language , auf Encyclopedia Britannica , Encyclopædia Britannica, Inc.
- SQL . Kostenloser Leitfaden in italienischer Sprache, erstellt vom Finanzministerium (in pdf).
- SQL-Lernprogramm unter 1keydata.com .
- Grundlegende SQL-Anweisungen unter kb.askmonty.org .
- ( EN ) SQL :: 2003 BNF , auf savage.net.au .
- ( EN ) SQL99 BNF , auf savage.net.au .
- ( EN ) SQL93-Spezifikation ( TXT ), unter contrib.andrew.cmu.edu .
- ( EN ) SQL93 BNF ( TXT ), auf contrib.andrew.cmu.edu .
- ( EN ) SQL92 - Spezifikation , bei savage.net.au .
- ( EN ) SQL92 BNF , auf savage.net.au .
- ( EN ) PostgreSQL , auf postgresql.org .
- ( EN ) Oracle SQL - Tutorials auf freeitsolutions.com .
- ( EN ) wiscorp.com .
- SQL-Handbuch und Tutorial von Webmasterpoint.org , unter webmasterpoint.org .