close

Strukturierte Abfragesprache

Zur Navigation springen Zur Suche springen
SQL
-Programmiersprache
SQL-ANATOMIE wiki.svg
Die Teile einer Anweisung.
AutorDonald Chamberlin
Entstehungsdatum1974
Letzte VersionSQL: 2016 (Dezember 2016 )
VerwendungszweckErstellung, Abfrage, Datenbankverwaltung
ParadigmenMultiparadigma
Tippenstatisch, 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:

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:

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 ab
  • INBestimmt, ob ein Wert in einer Liste möglicher Werte enthalten ist
  • EXISTSBestimmt, ob eine bestimmte Unterabfrage einen Wert zurückgibt
  • ANYo SOMEBestimmt, ob eine bestimmte Unterabfrage mindestens einen der angegebenen Werte zurückgibt
  • ALLBestimmt, ob eine bestimmte Unterabfrage alle gewünschten Werte zurückgibt

Einige dieser Operatoren entsprechen einem entgegengesetzten Operator, der den Begriff NOT verwendet:

  • IS NOT
  • NOT LIKE
  • NOT BETWEEN
  • NOT IN
  • NOT 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 Teilung
  • MODGibt den Rest einer Division zurück
  • DIVGibt 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:

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

Verwandte Artikel

Andere Projekte

Externe Links