SQL - Einführung und Referenz (DE)

Das ist ein Versuch SQL möglichst einfach zu erklären was relationale Datenbanken sind, was das relationale Datenmodell bedeutet wie man diese mittels der strukturierten Abfarespache SQL auswertet. -- english, deutsch, russian --
Categories: 

Vorwort

Diese SQL-Befehlsreferenz hat der Autor in seiner Freizeit geschrieben, um eine ständig griffbereite und schnelle Hilfe in Sachen SQL-Sprache zu haben. Dies ist nur ein Auszug aus dem SQL-Befehlssatz, für weitergehende Informationen zu den herstellerspezifischen SQL-Implementierungen muss auf die Dokumentation der Hersteller verwiesen werden. Die Hersteller relationaler Datenbank Management Systeme (RDBMS) haben den ursprünglichen "Standard-SQL" zum Teil stark erweitert, was aber in diesem Text leider nur zum Teil berücksichtigt werden kann. Die Tabelle nach dem Befehl/Schlüsselwort zeigt in einigen Fällen an, welches System diesen/dieses Befehl/Schlüsselwort unterstützt.

Haftung.
Dieses Dokument ist keine Publikation einer offiziellen Stelle. Das Dokument erhebt weder den Anspruch auf Vollständigkeit noch auf Fehlerfreiheit. Für Fehler in kommerziellen Projekten, die auf falsche oder falsch verstandene Beschreibungen in diesem Dokument zurückzuführen sind, übernimmt der Autor keine Haftung.

Categories: 

Datenbanken

Was sind relationale Datenbanken? Wie erstellt man Datenbanken? Wie löscht man Datenbanken? Wie ändert man die Sturktur von Datenbanken?
Categories: 

CREATE DATABASE - Datenbank erstellen

Syntax:

    CREATE DATABASE dbname
    [ IN dbspace ]
    [ { WITH [ LOCATION = 'dbpath' ] [ TEMPLATE = template ] [ ENCODING = encoding ] }
    | { WITH [ BUFFERED ] LOG }
    | { WITH LOG MODE ANSI } ]

Beschreibung:

    Erstellt eine neue Datenbank. Achtung, die Syntax und die Zusatzoptionen variieren sehr stark in Abhängigkeit vom verwendetem Datenbanksystem.

    Beispiel (allgemein):

CREATE DATABASE example;
  

Erstelle eine neue Datenbank example.

Beispiel (Postgresql):

CREATE DATABASE expamle WITH LOCATION = '/var/lib/postgresql/data' ENCODING='utf-8'
  

Erstelle eine neue Datenbank example mit Datenbankzeichensatz utf-8, welche physisch im Verzeichnis '/var/lib/postgresql/data' gespeichert ist.

Beispiel (Informix):

CREATE DATABASE expamle IN dbsl01 WITH BUFFERED LOG;
  

Erstelle im DB-Slice dbsl01 eine neue Datenbank example mit gepuffertem Logging.

Categories: 

DROP DATABASE - Datenbank löschen

Syntax:

Beschreibung:

    Löscht eine von den im Datenbanksystem verwalteten Datenbanken.

    Beispiel:

DROP DATABASE example;

Löscht die Datenbank example.

Categories: 

Tabellen

Was sind relationale Tabellen? Wie erstellt man Tabellen? Wie löscht man Tabellen? Wie ändert man die Sturktur von Tabellen?
Categories: 

CREATE TABLE - Tabellen erstellen

Syntax Beschreibung:

    CREATE TABLE erzeugt eine neue leere Tabelle in der aktiven Datenbank, deren Struktur hier beschrieben wird.

Datentyp

    Datentyp ist hier der Typ der Daten, die in dieser Tabellenspalte eingegeben werden sollen.

    Textdatentypen:

      CHARACTER - Textfelder
      CHAR - Abkürzung für CHARACTER

    Numerische Datentypen (exact numeric):

      DECIMAL - Festkommazahlen (die maximale Anzahl der Nachkommastellen und der Stellen vor dem Komma wird fest vorgegehen).
      DEC - Abkürzung für DECIMAL
      NUMERIC - wie DECIMAL, aber Anzahl der Kommastellen ...
      INTEGER - Zahlen ohne Kommastellen (ganze Zahlen), wird ohne Grö&szligenangaben verwendet
      weil vom DBMS vorgegeben
      INT - Abkürzung für INTEGER
      SMALLINT - Zahlen ohne Kommastellen (ganze Zahlen), wird ohne Grö&szligenangaben verwendet
      und belegt evtl. weniger Platz, weil für kleine Zahlen gedacht. Wird vom DBMS fest
      vorgegeben.

    Numerische Datentypen (approximate numeric):

      FLOAT - Zahlen in Exponentialform
      REAL - wie FLOAT, aber wird ohne Grö&szligenangaben verwendet, weil vom DBMS vorgegeben
      DOUBLE PRECISION - wie REAL, aber mit evtl. grö&szligeren (doppelten) Genauigkeit
      DOUBLE - Abkürzung für DOUBLE PRECISION

    Weitere Datentypen, die nich im ANSI-Standart definiert sind:

      DATE - Datum, in europäischen Implementierungen meistens im Format dd.mm.yyyy
      TIME - Zeit, in europäischen Implementierungen meistens im Format hh-mm-ss
      VARCHAR - Textdaten variabler länge, abhängig von der Implementierung nicht grö&szliger als 254 bis 2048 Zeichen.
      LONG VARCHAR - Textdaten variabler länge, abhängig von der Implementierung nicht grö&szliger als 16KB Zeichendaten.

    Beispiel:

CREATE TABLE torder (
onum INTEGER,
anz  INTEGER );

Hier wird eine leere Tabelle torder erstellt, die aus Datensätzen mit zwei Feldern
onum und anz besteht.

Größe

    Syntax:

    [Nachkommastellen,] Gesamtgrö&szlige

    Bemerkungen: Nachkommastellen dürfen nur bei DECIMAL und NUMERIC angegeben werden. Gesamtgrö&szlige darf nur bei Datentypen mit variabler Grö&szlige angegeben werden. Wenn die Grö&szlige bei variablen Feldern nicht angegeben wird, dann gilt die Voreinstellung 1. Ausnahme: bei CHARAKTER muss die Gröse immer angegeben werden (keine Voreinstellungen).

    Beispiel:

CREATE TABLE tverkauf (
 vnum  INTEGER,
 vname CHAR(30),
 stadt CHAR(20),
 prov  DECIMAL);

Hier wird eine leere Tabelle tverkauf erstellt, die aus Datensätzen mit vier Feldern besteht: vnum - Zahl, vname - 30 Textzeichen, stadt - 20 Textzeichen und prov - Zahl.

Feldtyp

    Syntax: Feldtyp [...]

    Feldtyp ist hier der Typ der zu generierenden Spalte.

    NOT NULL


      Wird benötigt um sicherzustellen, da&szlig das Feld keine NULL-Werte enthalten darf.

    UNIQUE


      Wird benötigt um nur von den vorher eingegebenen Werten unterschiedliche Werte im Feld zu zulassen , um doppelte Werte zu vermeiden.

    CHECK( Bedingung )


      Wird benötigt um Falscheingaben in das Feld zu vermeiden.

    DEFAULT = Wert


      Hiermit wird ein Vorgabewert für das Feld definiert.

    PRIMARY KEY


      Teilt dem DBMS mit dieses Feld als Primärschlüssel zu benutzen.

    Beispiel:

CREATE TABLE tverkauf (
 vnum  INTEGER NOT NULL UNIQUE PRIMARY KEY,
 vname CHAR(30) NOT NULL UNIQUE,
 stadt CHAR(20) DEFAULT='Berlin',
 prov  DECIMAL CHECK(comm &lt 1) );

Hier wird eine leere Tabelle tverkauf erstellt, deren Datensätze aus vier Feldern bestehen:
vnum - Zahl, die nicht NULL ist, nicht doppelt vorkommt und als Primärschlüssel dient;
vname - Textfeld aus 30 Zeichen, da&szlig nicht NULL ist und nicht doppelt vorkommt;
stadt - Textfeld aus 20 Zeichen, da&szlig mit 'Berlin' vorbelegt ist;
prov - Zahl, die immer kleiner 1 sein muss.

Categories: 

DROP TABLE - Tabellen löschen

Syntax Beschreibung

    Mit DROP TABLE kann mann Tabellen löschen. Die Tabelle muss nicht unbedingt leer leer sein. Dies hängt von der implementierung im Datenbanksystem ab.

    Beispiel:

DROP TABLE tkunden;

Hier wird Kundentabelle tkunden gelöscht.

Categories: 

ALTER TABLE - Tabellen verändern

Syntax

Beschreibung

    Mit ALTER TABLE können Sie Spalten in Tabellen hinzufügen oder löschen. Die Tabelle darf dabei nicht leer sein.

    Beispiel:

ALTER TABLE tkunden ADD COLUMN new_number INTEGER NOT NULL;

Hier wird eine neue Spalte new_number mit Datenfeldern vom Typ INTEGER zur Kundentabelle tkunden mit der Restriktion nicht leer hinzugefügt.

Beispiel:

ALTER TABLE TABLE tkunden DROP COLUMN new_number;

Hier wird die Spalte new_number aus der Kundentabelle tkunden gelöscht.

Categories: 

GRANT - Tabellenrechte vergeben

Syntax

    GRANT { SELECT | INSERT | UPDATE | DELETE | ALL } ON Tabellenname
    TO { User | {GROUP|ROLE} groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ];

Beschreibung

    Mit GRANT können Sie den spezifizierten Usern bzw. Benutzergruppen (Rollen) folgende Berechtigungen geben:
    SELECT - Daten abfragen
    INSERT - Daten/Datensätze hinzufügen
    UPDATE - Daten verändern
    DELETE - Daten/Datensätze löschen
    ALL - alle Tabellenrechte geben

    Wenn anstatt konkreter user und benutzergruppen PUBLIC angegeben wird, werden die Rechte allen Usern gegeben (Je nach RDMBS ggf. nur für die aktuelle Datenbank).

    WITH GRANT OPTION erlaubt es den Usern die neu erworbenen Tabellenrechte an weitere User weiterzugeben.

    Beispiel:

GRANT SELECT ON tkunden TO my_user;

Hier wird der User my_user berechtigt die Daten aus der Kundentabelle tkunden abzufragen/auszuwerten.

Categories: 

REVOKE - Tabellenrechte entfernen

Syntax

Beschreibung

    Mit REVOKE können Sie den spezifizierten Usern bzw. Benutzergruppen (Rollen)
    folgende Berechtigungen entziehen:
    SELECT - Daten abfragen
    INSERT - Daten/Datensätze hinzufügen
    UPDATE - Daten verändern
    DELETE - Daten/Datensätze löschen
    ALL - alle Tabellenrechte entziehen
    Wenn anstatt konkreter User und Benutzergruppen PUBLIC angegeben wird,
    werden die Rechte allen Usern entzogen (Je nach RDMBS ggf. nur für die aktuelle Datenbank).

    Beispiel:

REVOKE UPDATE ON tkunden TO my_user;

Hier wird dem User my_user das recht entzogen die Daten in der Kundentabelle tkunden zu verändern.

Categories: 

Daten und Datensätze

Was sind Datensätze? Wie erstellt man Datensätze? Wie löscht man Datensätze? Wie ändert man die Sturktur von Datensätze?
Categories: 

SELECT - Daten abfragen

-- english, deutsch, russian --

Syntax Beschreibung:

    Die SELECT-Anweisungen rufen Daten aus den Tabellen einer oder, in bestimmten Fällen, auch mehrerer Datenbanken ab. SELECT liefert eine Ergebnistabelle, die in diesem Befehl aus den Tabellen der gerade aktiven Datenbank erzeugt wird. Mit SELECT kann mann z.B: nur bestimmte Datensätze einer Tabelle auswählen oder Summen der Felder erzeugen, oder auch eine neue Ergebnistabelle aus mehreren Ausgangstabellen ertsellen.

DISTINCT

    DISTINCT teilt dem DBMS mit nur unterschiedliche Datensätze auszuwählen. Auswahl doppelter Datensätze wird somit vermieden.

    Beispiel:

SELECT DISTINCT vnum
 FROM torder;

Als Ergebnismenge werden hier alle unterschiedlichen Werte des Feldes vnum aus der Tabelle torder selektiert.

FROM { [OUTER] Tabellenname [ Alias ] } [,...]

    Mit FROM wird dem DBMS mitgeteilt aus welchen Tabellen der Datenbank die Datensätze selektiert werden.
    Das Schlüsselwort OUTER wird verwendet, wenn bei der Vernküpfung mehrerer Tabellen, die Daten der führenden Tabelle auch dann angezeigt werden sollen, wenn in den anderen Tabellen keine Daten da sind. Diese werden dann mit OUTER vor dem Tabellennamen gekennzeichnet, die Join-Bedingung bzw. die Tabellenverknüpfung wird bei dieser Syntax in der WHERE-Klausel beschrieben. Siehe weiteres unter der Beschreibung der einzelnen Join-Typen (left join, left outer join, right join, right outer join).

    Beispiel:

SELECT vnum
 FROM torder;

Als Ergebnismenge werden hier die Werte des Feldes vnum aus allen Datensätzen der Tabelle torder selektiert.

WHERE Bedingung

    Mit WHERE kann mann die Auswahl der Datensätze aus den angegebenen Tabellen einschränken.

    Beispiel:

SELECT tkunden.knum, tverkauf.vnum, tverkauf.prov
 FROM tkunden, tverkauf
 WHERE tkunden.vnum=tverkauf.vnum;

Als Ergebnismenge wird hier eine Tabelle aus den Feld knum der Ausgangstabelle tkunden und den Feldern vnum und prov der Ausgangstabelle tverkauf generiert, wo über die WHERE-Bedingung sichergestellt ist, da&szlig in den Datensätzen der Ergebnistabelle nur die zu den knum passenden vnum und prov stehen.

GROUP BY { Feldname | Integer } [,...]

    GROUP BY wird häufig im Zusammenhang mit den Aggregierungs-Funktionen benutzt um diese nur auf bestimmte Gruppen von Datensätzen wirken zu lassen. An Stelle des Feldnamens kann hier die Nummer des Feldes in der Liste der zu selektierenden Felder benutzt werden.

    Beispiel:

SELECT vnum, MAX(preis)
 FROM torder
 GROUP BY vnum;

Als Ergebnismenge werden hier die maximalen Werte des Feldes preis pro gefundene Datensatzgruppe mit gleicher vnum ausgewählt.

HAVING Bedingung

    HAVING wird innerhalb von GROUP benutzt um nur bestimmte Gruppen auszuwählen, die die nachgestellte Begingung erfüllen.

    Beispiel:

SELECT vnum, MAX(preis)
 FROM torder
 GROUP BY vnum
 HAVING AVG(preis)>10

Aus der Ergebnismenge der Gruppierung aller datensästze mit gleicher vnum, wo zu einem Schlüssel vnum alle preise aufsummiert werden, werden hier nur die herausgefiltert, wo der druchschnittliche Preis > 10 ist.

ORDER BY { Feldname | Integer [ ASC|DESC ] } [,...]

    ORDER BY sortiert die Datensätze der Ergebnismenge. Wenn ORDER BY innerhalb des GROUP BY Befehles benutzt wird, dann werden die Datensätze innerhalb der einzelnen Datensatzgruppen sortiert. An Stelle des Feldnamens kann hier die Nummer des Feldes in der Liste der zu selektierenden Felder benutzt werden. ASC sortiert die Datensätze in aufsteigender Reihenfolge, DESC in absteigender.

    Beispiel:

UNION [ALL] SELECT-Befehl

    UNION wird verwendet um zwei oder mehrere Abfragen (SELECT-Befehle) in eine Ergebnistabelle zusammenzuführen. Dabei müssen die Feldlisten der auszuwählenden Felder in den SELECT-Befehlen kompatibel sein. Wenn ALL nicht angegeben ist werden doppelte Datensätze aus dem Ergebniss entfernt. Mit UNION werden die Ergebnisse beider SELECT-Befehle in das Resultat aufgenommen.

    Beispiel:

SELECT vnum, vname
 FROM tverkauf
 WHERE stadt='Berlin'
 UNION
SELECT knum, kname
 FROM tkunden
 WHERE stadt='Berlin'
ORDER BY 1;

Hier wird eine Abfrage-Tabelle erzeugt, die alle v- und knum, sowie v- und kname entählt, wo stadt gleich Berlin ist und das Egrebnis nach der ersten Spalte sortiert ist. Doppelte Datensätze werden eliminiert.

INTERSECT [ALL] SELECT-Befehl

    ANSI DB2 Informix Oracle SQL Server Interbase
    nein ja ja ja ? ?

    INTERSECT wird verwendet um zwei oder mehrere Abfragen (SELECT-Befehle) in eine Ergebnistabelle zusammenzuführen. Dabei müssen die Feldlisten der auszuwählenden Felder in den SELECT-Befehlen kompatibel sein. Wenn ALL nicht angegeben ist werden doppelte Datensätze aus dem Ergebniss entfernt. Mit INTERSECT werden die Datensätze in das Ergebniss aufgenommen, die sowohl im ersten SELECT-Befehl, wie auch im zweitem SELECT-Befehl enthalten sind.

    Beispiel:

SELECT vnum, vname
 FROM tverkauf
 WHERE stadt='Berlin'
 INTERSECT
SELECT knum, kname
 FROM tkunden
 WHERE stadt='Berlin'
ORDER BY 1;

Hier wird eine Abfrage-Tabelle mit allen Verkäufern, die gleichzeitig auch Kunden sind, erzeugt. Das Egrebnis nach der ersten Spalte sortiert ist. Doppelte Datensätze werden eliminiert.

EXCEPT [ALL] SELECT-Befehl

    Wichtig: in einigen SQL-Dialekten wird anstatt EXCEPT - MINUS oder DIFFERENCE verwendet, die Syntax bleibt aber gleich.

    ANSI DB2 Informix Oracle SQL Server Interbase
    nein ja nein ? ? ?

    EXCEPT wird verwendet um zwei oder mehrere Abfragen (SELECT-Befehle) in eine Ergebnistabelle zusammenzuführen. Dabei müssen die Feldlisten der auszuwählenden Felder in den SELECT-Befehlen kompatibel sein. Wenn ALL nicht angegeben ist werden doppelte Datensätze aus dem Ergebnis entfernt. Mit EXCEPT werden die Datensätze in das Ergebniss aufgenommen, die im ersten SELECT-Befehl enthalten sind, aber nicht im zweitem SELECT-Befehl vorkommen.

    Beispiel:

SELECT vnum, vname
 FROM tverkauf
 WHERE stadt='Berlin'
 EXCEPT
SELECT knum, kname
 FROM tkunden
 WHERE stadt='Berlin'
ORDER BY 1;

Hier wird eine Abfrage-Tabelle mit allen Verkäufern, die nicht gleichzeitig auch Kunden sind, erzeugt. Das Egrebnis nach der ersten Spalte sortiert ist. Doppelte Datensätze werden eliminiert.

INTO TEMP Tabellenname

    ANSI DB2 Informix Oracle SQL Server Interbase
    nein ja ja ? nein nein

    INTO {TEMP|SCRATCH} wird verwendet um eine temporäre Tabelle zu erzeugen, die nach Beenden der SQL-Session gelöscht wird. Wird häfig zur optimierung von Abfragen verwendet.

Categories: 

SELECT - Schritt für Schritt

Der SQL-Befehl zum Abfragen von Daten aus einer Datenbank ist sehr mächtig und kann daher ganz schön komplex werden. Daher versuche ich hier Ihnen eine kleine Schritt-für-Schritt-Hilfestellung zum Aufbau bzw. zum Formulieren eines SELECT-Befehls zu geben. Es wird Ihnen evtl. leichter falen, wenn Sie die folgenden Fragen nach einander beantworten und Ihren SELECT-Befehl dabei Schritt für Schritt aufbauen/ergänzen:

  1. Welche Daten(-Felder) benötigen Sie?
  2. Zu allererst müssen Sie wissen und, wenn Sie es nicht wissen, suchen, in welche Datenfeldern die von Ihnen benötigte Information in der Datenbank gespeichert wird. In diesem Beispiel möchten wir eine einfache Statistik über die Anzahl von einem Verkäufer betreuten Kunden fahren. Die Verkäufernummer, der Verkäufername und die Kundennummer müssten dazu ausreichend sein.

    SELECT vnum, vname, knum
    ;
  3. In welchen Tabellen stehen die benötigten Daten?
  4. Die Verkäufernummer und der Verkäufername stehen in der Verkäufertabelle tverkauf und für die Kundennummer ist die Kundentabelle wahrscheinlich am bessten.

    SELECT a.vnum, a.vname, b.knum
    FROM tverkauf a, tkunden b
    ;
  5. In welcher Beziehung stehen die Tabellen zu einander und wie können Sie verknüpft werden?
  6. Ünber die zwei hier verwendeten Tabellen wissen wir folgendes:
    Nicht jeder Verkäufer hat einen Kunden, daher müssen die Daten aus den Tabellen so zusammengebracht werden, dass bei der Tabellenverknüpfung kein Verkäufer ausgelassen wird: wir brauchen alle Datensätze aus der Tabelle tverkauf und suchen dazu passende Daten aus der Tabelle tkunden, wenn welche da sind --> LEFT JOIN
    In der Kundentabelle ist zusätzlich die Verkäufernummer des betreuenden verkäufers gespeichert, da dies auch der Schlüssel der anderen Tabelle ist, können die Daten über die Verkäufernummer verknüpft werden --> a.vnum = b.vnum

    SQL92::
    SELECT a.vnum, a.vname, b.knum
    FROM tverkauf a LEFT JOIN tkunden b ON a.vnum=b.vnum
    ;
    Standard-SQL::
    SELECT a.vnum, a.vname, b.knum
    FROM tverkauf a, OUTER tkunden b
    WHERE a.vnum=b.vnum
    ;

    Wenn das LEFT JOIN oder das OUTER weggelassen wird, dann werden nur Verkäufer ausgegeben, die auch einen korrespondieren Datensatz in der Kundetabelle haben, daher keine Verkäufer ohne Kunden.
    Wenn das Verknüpfungskriterium a.vnum=b.vnum weggelassen wird, dann wird ein sog. kartesisches Produkt erzeugt - die Kombination aller Verkäufer mit allen Kunden, was in unserem Fall einen ziemlichen Datenmüll ergeben würde.

  7. Sollen alle Daten ausgegeben werden, oder kann man bzw. sollen sie einschränkt werden?
  8. Sagen wir mal, dass uns nur die Verkäufer in Berlin interessieren:

    SQL92::
    SELECT a.vnum, a.vname, b.knum
    FROM tverkauf a LEFT JOIN tkunden b ON a.vnum=b.vnum
    WHERE a.stadt='Berlin'
    ;
    Standard-SQL::
    SELECT a.vnum, a.vname, b.knum
    FROM tverkauf a, OUTER tkunden b
    WHERE a.vnum=b.vnum
    AND a.stadt='Berlin'
    ;
  9. Werden Detailinformationen bzw. einzelne Daten benötigt oder wird eine Statistik/Gruppierung/Verdichtung benötigt?
  10. Da wir wissen wollen, wie viel Kunden von einem Verkäufer betreut werden, müssen wie alle Kunden pro Verkäufer zählen --> COUNT.
    Dies bedeutet, dass wir die Daten hier Aggregieren bzw. Gruppieren müssen --> GROUP BY

    SQL92::
    SELECT a.vnum, a.vname, COUNT(DISTINCT b.knum) AS anzahl
    FROM tverkauf a LEFT JOIN tkunden b ON a.vnum=b.vnum
    WHERE a.stadt='Berlin'
    GROUP BY vnum, vname
    ;
    Standard-SQL::
    SELECT a.vnum, a.vname, COUNT(*) AS anzahl
    FROM tverkauf a, OUTER tkunden b
    WHERE a.vnum=b.vnum
    AND a.stadt='Berlin'
    GROUP BY vnum, vname
    ;
  11. Soll die gebildete Statistik/Gruppierung/Verdichtung noch weiter bereinigt werden?
  12. Nehmen wir an, dass wir auf der Suche nach schwarzen Schafen unter den Verkäufern sind und Verkäufer mit Vielen Kunden von voirn herein nicht betrachten wollen. Dann müssen wie aus den Ergebnissen der Kundenzählung zu allen verkäufern nur die ausselektieren, die uns interessieren. In diesem beispiel, wollen wir alle Verkäufe nicht betrachten, wie 100 und mehr Kunden haben:

    SELECT a.vnum, a.vname, COUNT(DISTINCT b.knum) AS anzahl
    FROM tverkauf a LEFT JOIN tkunden b ON a.vnum=b.vnum
    WHERE a.stadt='Berlin'
    GROUP BY vnum, vname
    HAVING COUNT(DISTINCT b.knum) 
    ;
  13. Wie sollen die Ergebnisse sortiert werden?
  14. Auf unserer Suche nach den "scharzen Schafen" wollen wir zuerst die Verkäufer sehen die weniger Kunden haben, daher soll das Ergebnis nach der Kundeanzahl aufsteigend sortiert werden:

    SELECT a.vnum, a.vname, COUNT(DISTINCT b.knum) AS anzahl
    FROM tverkauf a LEFT JOIN tkunden b ON a.vnum=b.vnum
    WHERE a.stadt='Berlin'
    GROUP BY vnum, vname
    HAVING COUNT(DISTINCT b.knum) ORDER BY anzahl ASC
    ;
  15. Möchten Sie die Anzahl der ausgegebenen Datensätze beschränken?
  16. Da wir unserem Verkaufs-Chef nur einige Mitarbeitergespräche zumuten wollen, begrenzen wir die Anzahl der Datensätze im Ergebnis auf 10:

    SQL92::
    SELECT a.vnum, a.vname, COUNT(DISTINCT b.knum) AS anzahl
    FROM tverkauf a LEFT JOIN tkunden b ON a.vnum=b.vnum
    WHERE a.stadt='Berlin'
    GROUP BY vnum, vname
    HAVING COUNT(DISTINCT b.knum) LIMIT 10
    ;
    Informix::
    SELECT FIRST 10 a.vnum, a.vname, COUNT(DISTINCT b.knum) AS anzahl
    FROM tverkauf a LEFT JOIN tkunden b ON a.vnum=b.vnum
    WHERE a.stadt='Berlin'
    GROUP BY vnum, vname
    HAVING COUNT(DISTINCT b.knum) 
    
  17. Sollen die Ergebnisse in eine, ggf. temporäre, Tabelle geschrieben werden?
  18. Wenn die so gebildeten Daten noch weiter verarbeitet werden sollen, z.B. in weiteren SELECT-Befehlen, dann können die Ergebnisse in eine (temporäre) Tabelle geschrieben werden. So will der besagte Verkaufschef vielleicht selbst entscheiden, wie viel Mitarbeitergespräche er führen will. Dann bauen wie die Datensatz-Anzahl-Begrenzung wieder aus und schreiben stattdesen die Daten in eine Tabelle:

    Temporäre Tabelle
    SELECT a.vnum, a.vname, COUNT(DISTINCT b.knum) AS anzahl
    FROM tverkauf a LEFT JOIN tkunden b ON a.vnum=b.vnum
    WHERE a.stadt='Berlin'
    GROUP BY vnum, vname
    HAVING COUNT(DISTINCT b.knum) INTO TEMP verkauf_score
    ;
    Reguläre, fest angelegte Tabelle (muss vorher mit CREATE TABLE angelegt sein)
    INSERT INTO verkauf_score
    SELECT a.vnum, a.vname, COUNT(DISTINCT b.knum) AS anzahl
    FROM tverkauf a LEFT JOIN tkunden b ON a.vnum=b.vnum
    WHERE a.stadt='Berlin'
    GROUP BY vnum, vname
    HAVING COUNT(DISTINCT b.knum) 
    
Categories: 

INNER JOIN - normale Tabellen-Verknüpfung

Syntax

    WHERE a.feld1 = b.feld2
    vor SQL92 (implizite Beschreibung von Tabellen-Verknüpfungen)

    FROM Tabelle1 [Alias1] INNER JOIN Tabelle2 [Alias2] ON {Tabelle1|Alias1}.vnum = {Tabelle2|Alias2}.vnum
    ab SQL92 (explizite Beschreibung von Tabellen-Verknüpfungen)

Beschreibung
    Der Inner Join bzw. Equal Join oder Equivalent Join ist die "normale" Tabellenverküpfung, welche Datensätze aus zwei Tabellen verknüpft, bei denen ein Feld (das jeweilige) dieselben Werte enthält.

    Beuspiel:

-- before SQL 92
SELECT a.vnum, a.vname, b.knum, b.kname
FROM tverkauf a, tkunden b
WHERE a.vnum = b.vnum
ORDER BY vnum;

-- SQL 92
SELECT a.vnum, a.vname, b.knum, b.kname
FROM tverkauf a INNER JOIN tkunden b ON a.vnum=b.vnum
ORDER BY vnum;

Ergebnis:

vnum vname   knum kname
1    Mueller 1    Lehmann
1    Mueller 2    Schmidt
1    Mueller 3    Schumacher
2    Meyer   4    Schroeder
2    Meyer   5    Stoiber
3    Schulz  6    Lohmann
3    Schulz  7    Krupp
3    Schulz  8    Stradivari
3    Schulz  9    Schumacher

LEFT JOIN - linke Inklusionsverknüpfung

Syntax

    FROM Tabelle1 [Alias1], OUTER Tabelle2 [Alias2]
    WHERE a.Feld1 = b.Feld2

    Informix, vor SQL92 (implizite Beschreibung von Tabellen-Verknüpfungen)

    WHERE (a.Feld1 = b.Feld2(+))
    Oracle, vor SQL92 (implizite Beschreibung von Tabellen-Verknüpfungen)

    FROM Tabelle1 [Alias1] LEFT JOIN Tabelle2 [Alias2] ON {Tabelle1|Alias1}.vnum = {Tabelle2|Alias2}.vnum
    ab SQL92 (explizite Beschreibung von Tabellen-Verknüpfungen)

Beschreibung
    Der Left Join bzw. Left Outer Join ist die Tabellenverküpfung, welche zusätzlich zu den Datensätzen aus zwei Tabellen, bei denen ein Feld (das jeweilige) dieselben Werte enthält auch alle Datensätze aus der ersten (linken) Tabelle mit in das Ergebnis einfügt.

    Beispiel:

-- Informix
SELECT a.vnum, a.vname, b.knum, b.kname
FROM tverkauf a, OUTER tkunden b
WHERE a.vnum = b.vnum
ORDER BY vnum;

-- Oracle
SELECT a.vnum, a.vname, b.knum, b.kname
FROM tverkauf a, tkunden b
WHERE (a.vnum = b.vnum(+))
ORDER BY vnum;

-- SQL 92
SELECT a.vnum, a.vname, b.knum, b.kname
FROM tverkauf a LEFT JOIN tkunden b ON a.vnum=b.vnum
ORDER BY vnum;

Ergebnis:

vnum vname       knum kname
1    Mueller     1    Lehmann
1    Mueller     2    Schmidt
1    Mueller     3    Schumacher
2    Meyer       4    Schroeder
2    Meyer       5    Stoiber
3    Schulz      6    Lohmann
3    Schulz      7    Krupp
3    Schulz      8    Stradivari
3    Schulz      9    Schumacher
4    Burgmueller 
In der Ergebnismenge taucht zusätzlich der Verkäufer Nummer 4 auf, welcher noch keine Kunden hat.

RIGHT JOIN - rechte Inklisionsverknüpfung

Syntax

    FROM OUTER Tabelle1 [Alias1], Tabelle2 [Alias2]
    WHERE a.Feld1 = b.Feld2

    Informix, vor SQL92 (implizite Beschreibung von Tabellen-Verknüpfungen)

    WHERE (a.Feld1(+) = b.Feld2)
    Oracle, vor SQL92 (implizite Beschreibung von Tabellen-Verknüpfungen)

    FROM Tabelle1 [Alias1] RIGHT JOIN Tabelle2 [Alias2] ON {Tabelle1|Alias1}.Feld1 = {Tabelle2|Alias2}.Feld2
    ab SQL92 (explizite Beschreibung von Tabellen-Verknüpfungen)

Beschreibung
    Der Right Join bzw. Right Outer Join ist die Tabellenverküpfung, welche zusätzlich zu den Datensätzen aus zwei Tabellen, bei denen ein Feld (das jeweilige) dieselben Werte enthält auch alle Datensätze aus der zweiten (rechten) Tabelle mit in das Ergebnis einfügt.

    Beispiel:

-- Informix
SELECT a.vnum, a.vname, b.knum, b.kname
FROM OUTER tverkauf a, tkunden b
WHERE a.stadt = b.stadt
ORDER BY vnum;

-- Oracle
SELECT a.vnum, a.vname, b.knum, b.kname
FROM tverkauf a, tkunden b
WHERE (a.stadt(+) = b.stadt)
ORDER BY vnum;

-- SQL 92
SELECT a.vnum, a.vname, b.knum, b.kname
FROM tverkauf a RIGHT JOIN tkunden b ON a.stadt = b.stadt
ORDER BY vnum;

Ergebnis:

vnum vname   knum kname
1    Mueller 1    Lehmann
1    Mueller 2    Schmidt
1    Mueller 4    Schroeder
3    Schulz  5    Stoiber
             3    Schumacher
             6    Lohmann
             7    Krupp
             8    Stradivari
             9    Schumacher
             10   Testcustomer
Auflistung aller Kunden mit Anzeige der Verkäufer, falls sie in der gleichen Stadt wohnen.

FULL JOIN - beidseitige Inklusionsverknüpfung

Syntax

    FROM Tabelle1 [Alias1] FULL JOIN Tabelle2 [Alias2] ON {Tabelle1|Alias1}.Feld1 = {Tabelle2|Alias2}.Feld2
    ab SQL92 (explizite Beschreibung von Tabellen-Verknüpfungen)

    SELECT Feldliste FROM Tabelle1 [Alias1] LEFT JOIN Tabelle2 [Alias2] ON {Tabelle1|Alias1}.Feld1 = {Tabelle2|Alias2}.Feld2 UNION
    SELECT Feldliste FROM Tabelle1 [Alias1] RIGHT JOIN Tabelle2 [Alias2] ON {Tabelle1|Alias1}.Feld1 = {Tabelle2|Alias2}.Feld2

    ab SQL92 (falls die direkte deklaration eines Union Joins nicht unterstützt wird)

    SELECT Feldliste FROM Tabelle1 [Alias1], OUTER Tabelle2 [Alias2]
    WHERE {Tabelle1|Alias1}.Feld1 = {Tabelle2|Alias2}.Feld2 UNION
    SELECT Feldliste FROM OUTER Tabelle1 [Alias1], Tabelle2 [Alias2]
    WHERE {Tabelle1|Alias1}.Feld1 = {Tabelle2|Alias2}.Feld2

    Informix vor SQL92 (implizite Join-Deklaration)

    SELECT Feldliste FROM Tabelle1 [Alias1], Tabelle2 [Alias2]
    WHERE ({Tabelle1|Alias1}.Feld1 = {Tabelle2|Alias2}.Feld2(+)) UNION
    SELECT Feldliste FROM Tabelle1 [Alias1], Tabelle2 [Alias2]
    WHERE ({Tabelle1|Alias1}.Feld1(+) = {Tabelle2|Alias2}.Feld2)

    Oracle vor SQL92 (implizite Join-Deklaration)

Beschreibung

    Der Full Join bzw. Full Outer Join ist die Tabellenverküpfung, welche zusätzlich zu den Datensätzen aus zwei Tabellen, bei denen ein Feld (das jeweilige) dieselben Werte enthält auch alle Datensätze aus der ersten (linken) und der zweiten (rechten) Tabelle mit in das Ergebnis einfügt, welche keine Entsprechung in der jeweils anderen tabelle haben.

    Wichtig ist, dass wenn ein Full-Join nicht direkt durch die datenbank unterstützt wird (Syntax 1), alle verknüpfbaren Datensätze durch die zwei SELECT-Statements zwei mal ausgewählt werden und erst im zweiten Schritt durch die UNION-Klausel ohne ALL-Zusatz bereinigt werden.

    Beispiel:

-- SQL 92
SELECT a.vnum, a.vname, b.knum, b.kname
FROM tverkauf a FULL JOIN tkunden b ON a.vnum = b.vnum
ORDER BY vnum;

Ergebnis:

vnum vname       knum kname
                 10   Testcustomer
1    Mueller     1    Lehmann
1    Mueller     2    Schmidt
1    Mueller     3    Schumacher
2    Meyer       4    Schroeder
2    Meyer       5    Stoiber
3    Schulz      6    Lohmann
3    Schulz      7    Krupp
3    Schulz      8    Stradivari
3    Schulz      9    Schumacher
4    Burgmueller 		
Auflistung aller Verkäufer und aller dazu passenden Kunden, ohne irgendwelche Datensätze aus einer der beiden Tabellen auszulassen.

CROSS JOIN - kartesisches Produkt

Syntax

    SELECT {Tabelle1|Alias1}.Feld1 [,...] , {Tabelle2|Alias2}.Feld2 [,...]
    FROM Tabelle1 [Alias1], Tabelle2 [Alias2]

    vor SQL92 (keine Beschreibung von Tabellen-Verknüpfungen)

    FROM Tabelle1 [Alias1] CROSS JOIN Tabelle2 [Alias2]
    ab SQL92 (explizite Beschreibung von Tabellen-Verknüpfungen)

Beschreibung
    Der Cross Join bzw. kartesische Produkt ist "gar keine" Tabellenverküpfung, welche bewirkt, dass alle möglichen Kombinationen aller Datensätze beider Tabellen erzeugt werden.

    Beispiel:

-- before SQL 92
SELECT a.vnum, a.vname, b.knum, b.kname
FROM tverkauf a, tkunden b
ORDER BY vnum;

-- SQL 92
SELECT a.vnum, a.vname, b.knum, b.kname
FROM tverkauf a CROSS JOIN tkunden b
ORDER BY vnum;

Ergebnis:

vnum	vname	knum	kname
1	Mueller 	1	Lehmann
1	Mueller 	2	Schmidt
1	Mueller 	3	Schumacher
1	Mueller 	4	Schroeder
1	Mueller 	5	Stoiber
1	Mueller 	6	Lohmann
1	Mueller 	7	Krupp
1	Mueller 	8	Stradivari
1	Mueller 	9	Schumacher
1	Mueller 	10	Testcustomer
2	Meyer 	1	Lehmann
2	Meyer 	2	Schmidt
2	Meyer 	3	Schumacher
2	Meyer 	4	Schroeder
2	Meyer 	5	Stoiber
2	Meyer 	6	Lohmann
2	Meyer 	7	Krupp
2	Meyer 	8	Stradivari
2	Meyer 	9	Schumacher
2	Meyer 	10	Testcustomer
3	Schulz 	1	Lehmann
3	Schulz 	2	Schmidt
3	Schulz 	3	Schumacher
3	Schulz 	4	Schroeder
3	Schulz 	5	Stoiber
3	Schulz 	6	Lohmann
3	Schulz 	7	Krupp
3	Schulz 	8	Stradivari
3	Schulz 	9	Schumacher
3	Schulz 	10	Testcustomer
4	Burgmueller 	1	Lehmann
4	Burgmueller 	2	Schmidt
4	Burgmueller 	3	Schumacher
4	Burgmueller 	4	Schroeder
4	Burgmueller 	5	Stoiber
4	Burgmueller 	6	Lohmann
4	Burgmueller 	7	Krupp
4	Burgmueller 	8	Stradivari
4	Burgmueller 	9	Schumacher
4	Burgmueller 	10	Testcustomer

Andere Join-Typen

Natural Join

    Verknüpft die Tabellen über die Gleichheit aller jeweils gleich benannten Felder/Spalten. Diese gleich benannte Felder/Spalten aus den zwei Tabellen werden im Ergebnis nur einmal angezeigt. Gibt es keine gleich benannten Felder/Spalten, wird der Natural Join zum kartesischen produkt, zum Cross Join.

    Für den Natural Join gibt es keinen speziellen SQL92-Befehl. Er kann jederzeit durch einen Inner Join bzw. Equal Join erzeugt werden.

Union Join

    Analog zu dem Full Outer Join werden alle Datensätze beider Tabellen aufgenommen. Im Unterschied dazu. werden sie aber nicht (über eine Bedingung) verknüpft.

    Der Union Join wird erst ab SQL 92 Intermediate Level direkt unterstützt.

    Beispiel:

SELECT *
FROM tverkauf a UNION JOIN tkunden b
ORDBER BY 1;
Semi Join

    Ist ein Natural Join zweier Tabellen, wobei in das ergebnis nur die Felder/Spalten der ersten Tabelle aufgenommen werden.

    Für den Natural Join gibt es keinen speziellen SQL92-Befehl. Er kann jederzeit durch einen Inner Join bzw. Equal Join erzeugt werden.

Theta Join, Non equivalent Join

    Analog zum Equal Join, nur dass anstatt einer Gleicheits-Bedingung eine Ungleicheitsbedingung verwendet wird.

    Beispiel:

SELECT a.vnum, a.vname, b.knum, b.kname
FROM tverkauf a INNER JOIN tkunden b ON a.vnum <= b.vnum
ORDER BY vnum;
Self Join
    Ein beliebiger Join bei dem die gleiche Tabelle mit sich selbst verknüpft wird.

INSERT - Daten eingeben

Syntax

Beschreibung:

    INSERT INTO fügt neue Datensätze in die mit Tabellenname angegebene Tabelle, die entweder mit festen Werten belegt werden oder Ergebnis eines SELECT-Befehls sind.

    Beispiel:

INSERT INTO tberlin
 SELECT *
 FROM tverkauf
 WHERE stadt='Berlin'

Hier werden alle Datensätze aus der Tabelle tverkauf, wo stadt gleich Berlin ist, in die Tabelle tberlin eingefügt.

VALUES ( Wert [,...] )

    Mit VALUES kann mann in dem INSERT-Befehl einen neuen Datensatz in eine Tabelle schreiben, der mit festen Werten belegt wird.

    Beispiel:

INSERT INTO tverkauf (vnum,vname,stadt)
 VALUES ( 1001, 'Müller', 'Berlin' );

Hier wird ein neuer Datensatz, bestehend aus 1001,'Müller','Berlin',NULL in die Tabelle tverkauf geschrieben.

Categories: 

DELETE FROM - Daten löschen

Syntax

Beschreibung

    Mit DELETE FROM werden Datensätze aus einer Datenbanktabelle gelöscht.

    Beispiel:

DELETE FROM tverkauf
 WHERE stadt='Kleinstadt'

Hier werden alle Datensätze der Tabelle tverkauf gelöscht, wo stadt gleich Kleinstadt ist.

Categories: 

UPDATE - Daten verändern

Syntax

Beschreibung:

    UPDATE wird dazu verwendet um bestimmte Werte in den Feldern einer Tabelle mit anderen Werten zu ersetzen.

SET { Feldname=Wert } [,...]

    Mit SET werden die angegebenen Felder in der Liste mit den angegebenen Werten ersetzt.

    Beispiel:

UPDATE tverkauf
 SET prov = prov + .01
 WHERE 2 &lt=
 ( SELECT COUNT(knum) FROM tkunden WHERE tkunden.vnum=tverkauf.vnum );

Hier wird das Feld prov bei den Datensätzen der Tabelle tverkauf um .01 erhöht, die mit nicht mehr als zwei Datensätzen der Tabelle tkunden über das Feld vnum verbunden sind, z.B. Provisionserhöhung bei Verkäufern mit weniger als drei Kunden...

Categories: 

CASE - Befehl

Syntax:

Beschreibung:

    Mit CASE können Daten in Abhängigkeit von anderen Daten verarbeitet werden.

    Beispiel

SELECT knum, kname,
CASE
  WHEN stadt <> 'Berlin'
  THEN LEFT('Das ist ein Nichtberliner, der sehr schlecht ist...',40)
  ELSE stadt
END berlin_ja_nein
FROM tkunden
WHERE rating>1;

Hier werden alle Kunden selektiert, deren Rating größer ist als 1, wobei nur nach Berlinern und Nichtberlinern unterschieden wird.

LOAD - Daten aus einer Datei laden

Syntax:

Beschreibung:

    Wird verwendet um Daten aus einer flachen Datei in eine Tabelle zu laden. Es ist möglich jedes Zeichen als Trennzeichen (Delimiter) anzugeben. Wenn kein Delimiter angegeben ist, dann wird der in den meisten RDBMS '|' verwendet.

Categories: 

UNLOAD - Daten in eine Textdatei schreiben

Syntax

Beschreibung:

    Wird verwendet um die Ergebnisse einer SQL-Abfrage in eine flache Datei zu schreiben. Es ist möglich jedes Zeichen als Trennzeichen (Delimiter) anzugeben. Wenn kein Delimiter angegeben ist, dann wird der in den meisten RDBMS '|' verwendet.

Categories: 

Operatoren

Was sind Operatoren? Wie benutzt man Operatoren?
Categories: 

SQL-spezifische Operatoren

Hier finden Sie Informationen zu den SQL-spezifische Operatoren, welche nicht ooder nicht nicht in dieser Form in anderem Computer-Sprachen vorkommen.

Categories: 

* - alle Felder

Syntax

    *

Beschreibung:

    Synonym für alle Felder der ausgewählten Tabellen.

    Beispiel:

SELECT *
 FROM torder
 ;

Selektiert alle Datensätze der Tabelle torder mit allen Feldern.

Categories: 

ALL - alle Werte

Syntax

Beschreibung:

    ALL wird vervendet um alle (ohne Ausnahmen) Werte/Tabellenzeilen auszuwählen.

    Beispiel:

SELECT *
 FROM tkunden
 WHERE rating > ALL ( SELECT rating FROM tkunden WHERE stadt='Berlin' );

Alle Kunden selektieren, deren rating grö&szliger ist als das rating aller Kunden in Berlin.

ANY - einige Werte

Syntax

Beschreibung:

    ANY und SOME sind Synonyme. Werden verwendet wenn das ergebnis erwünscht ist wenn wenigstens ein Datensätz rechts von dem Operator die logische Bedingung erfüllt.

    Beispiel:

SELECT *
 FROM tkunden
 WHERE rating > ANY ( SELECT rating FROM tkunden WHERE stadt='Berlin' );

Alle Kunden selektieren, deren rating grö&szliger ist als das rating mindestens eines der Kunden in Berlin.

Categories: 

BETWEEN - zwischen zwei Werten

Syntax

Beschreibung:

    WW BETWEEN W1 AND W2 zeigt dem DBMS an, da&szlig WW nur Werte zwischen W1 und W2 enthalten darf.

    Beispiel:

SELECT vnum,anz,preis
 FROM torder
 WHERE preis BETWEEN 100 AND 500

Hier werden die Felder vnum, anz und preis der Datensätze der Tabelle torder ausgewählt bei den das Feld preis nicht kleiner als 100 und nicht größer als 500 sein darf.

Categories: 

EXISTS - es existieren Werte

Syntax

Beschreibung:

    EXISTS wird im Zusammenhang mit gekapselten SQL-Abfragen verwendet und liefert den logischen Wert wahr zurück, wenn der SELECT-Befehl Daten zurücklifert. Wenn keine Daten ausgewählt werden, dann ist das Ergebnis unwahr.

    Beispiel:

SELECT DISTINCT knum
 FROM tkunden outer
 WHERE EXISTS
 ( SELECT * FROM tkunden inner
   WHERE inner.vnum=outer.vnum AND inner.knum&lt&gtouter.knum );

Hier werden die Kunden (knum) selektiert, die nicht allein von einem Verkäufer betreut werden.

Categories: 

IN - innerhalb einer Wertliste

Syntax

Beschreibung:

    WW IN ( Wert [,...] ) zeigt dem DBMS an, daß WW nur Werte aus der Werteliste annehmen darf.

    Beispiel:

SELECT *
 FROM torder
 WHERE preis IN (100,200,300,400,500);

Hier werden alle Datensätze mit allen Feldern der Tabelle torder ausgawählt bei den das Feld preis NUR Werte 100, 200, 300, 400 der 500 enthalten darf.

Categories: 

IS NULL - kein Wert bzw. kein Inhalt

Syntax

Beschreibung:

    Mit diesem Operator kann mann sicherstellen, da&szlig leere Daten selektiert werden oder da&szlig nur nicht leere Datensätze ausgewählt werden.

    Beispiel:

SELECT *
 FROM tkunden
 WHERE stadt IS NOT NULL;

Hier werden alle Kunden selektiert, wo auch das Feld stadt gefüllt ist.

Categories: 

LIKE - ähnliche Werte

Syntax

Beschreibung:

    LIKE wird nur auf CHAR und VARCHAR Datentypen angewendet. Für den Formatstring gelten folgende regeln:
    _ (Unterstrich) steht für alle möglichen Buchstaben, die an dieser Stelle vorkommen können.
    % (Prozent) steht für alle möglichen Buchstabenkombinationen (auch mehrere Buchstaben ) , die an dieser Stelle vorkommen können (wildcard, Platzhalter für mehrere Zeichen).

    Beispiel:

SELECT *
 FROM tkunden
 WHERE kname LIKE 'G%';

Hier werden alle Kunden selektiert, bei denen der Name mit G beginnt.

Categories: 

MATCHES - Ähnliche Werte

Syntax (Informix)

Beschreibung:

    MATCHES wird nur auf CHAR und VARCHAR Datentypen angewendet. Für den Formatstring gelten folgende regeln:
    ? (Fragezeichen) steht für alle möglichen Buchstaben, die an dieser Stelle vorkommen können.
    * (Stern) steht für alle möglichen Buchstabenkombinationen (auch mehrere Buchstaben ), die an dieser Stelle vorkommen können (wildcard, Platzhalter für mehrere Zeichen).
    [Zeichenbereich] die eckigen Klammern mit einem angegebenen Zeichenbereich innen, zeigen erlaubte Buchstaben die an dieser Stelle vrkommen dürfen.

    Beispiel:

SELECT *
 FROM tkunden
 WHERE kname MATCHES '?[AaBb]*';

Hier werden alle Kunden selektiert, bei ein A,a,B oder b an zweiter Stelle im Namen steht.

Categories: 

SOME - einige Werte

Syntax

Beschreibung:

    SOME und ANY sind Synonyme. Werden verwendet wenn das ergebnis erwünscht ist wenn wenigstens ein Datensätz rechts von dem Operator die logische Bedingung erfüllt.

    Beispiel:

SELECT *
 FROM tkunden
 WHERE rating &gt SOME ( SELECT rating FROM tkunden WHERE stadt='Berlin' );

Alle Kunden selektieren, deren rating grö&szliger ist als das rating mindestens eines der Kunden in Berlin.

Categories: 

Logische Operatoren

Innerhalb von Bedingungen können Unterbedingungen, Formeln und Werte mit logischen Operatoren verknüpft werden. So werden auch diverse Vergleiche, wie, zum Beispiel, Gleichheit, Ungleichheit usw. ermöglicht.

OperatorBedeutungBeispielBeschreibung
AND Logisches UND, z.B. bedeutet aa AND bb - aa und bb. Priorität bei der Ausführung ist (zumindest in SQL) größer als OR, aber kleiner als NOT. preis > 10 AND preis < 100; Preis muss größer 10 und kleiner 100 sein
NOT Logische negation, z.B. wenn aa wahr ist, ist NOT aa - unwahr u.s.w. Priorität bei der Ausführung ist (zumindest in SQL) größer als AND. NOT preis=0 Preis ist NICHT gleich 0 ist.
OR Logisches ODER, z.B. bedeutet aa OR bb - aa oder bb. Priorität bei der Ausführung ist (zumindest in SQL) kleiner als AND. preis > 10 AND preis < 100 OR preis > 1000 Preis ist größer 10 und kleiner 100 ist, sowie bzw. oder Preis größer 1000.
= Gleichheistoperator,z.B. aa=bb bedeutet aa ist gleich mit bb. Priorität bei der Ausführung ist (zumindest in SQL) größer als NOT, AND, OR. preis = 10 Preis ist gleich 10
> Grö&szliger als, z.B. aa &gt bb ist wahr, wenn aa grö&szliger als bb ist. Priorität bei der Ausführung ist (zumindest in SQL) größer als NOT, AND, OR. preis > 0 Preis ist größer als 0.
>= Grö&szliger oder gleich als, z.B. aa >= bb ist wahr, wenn aa grö&szliger als bb ist oder wenn aa gleich bb ist. Priorität bei der Ausführung ist (zumindest in SQL) größer als NOT, AND, OR. preis >= 300 Preis ist größer oder gleich 300.
&lt Kleiner als, z.B. aa &lt bb ist wahr, wenn aa kleiner als bb ist. Priorität bei der Ausführung ist (zumindest in SQL) größer als NOT, AND, OR. preis < 300 Preis ist kleiner als 300.
<= Kleiner oder gleich als, z.B. aa &lt= bb ist wahr, wenn aa kleiner als bb ist oder wenn aa gleich bb ist. Priorität bei der Ausführung ist (zumindest in SQL) größer als NOT, AND, OR. preis <= 300 Preis ist kleiner als oder gleich 300.
<> Ungleich, z.B. aa &lt&gt bb ist wahr, wenn aa nicht gleich bb ist. Priorität bei der Ausführung ist (zumindest in SQL) größer als NOT, AND, OR. preis <> 0 Preis ist ungleich 0.
Categories: 

Arithmetische Operatoren

Innerhalb von Formeln können numerische Werte und Felder mit arithmetischen Operatoren verknüpft werden.

OperatorBedeutungBeispielBedeutung
-Negatives Vorzeichen-0.01Minus 0,01
+Positives Vorzeichen (optional)+.9Plus 0,9
*Multiplikation2*Field32 mal Inhalt des Feldes Field3
/DivisionProzent3/100Inhalt des Feldes Prozent3 geteilt durch 100
+Addition, SubtraktionFeldA + (-0.9)Summe von FeldA und -0,9
-SubtraktionFeldA - 0.01FeldA minus 0,01
Categories: 

Prioritäten der Operatoren

Die verschiedenen Operatoren haben folgende Prioritäten bei der Anwendung/Ausführung innerhalb von Formeln:

OperatorBedeutungPriorität
+- Vorzeichen 0
* /Multiplikation, Division 1
+ -Addition, Subtraktion 2
=gleich 3
<>ungleich 3
>größer 3
<kleiner 3
>=größer gleich 3
<=kleiner gleich 3
[NOT] BETWEEN ... AND ...[nicht] zwischen ... und ... 3
IS [NOT] NULL [nicht] NULL-Wert 3
[NOT] IN [nicht] in der Menge 3
NOT Negation 4
AND logisches UND 5
OR logisches ODER 6
Categories: 

Funktionen

Was sind Funktionen? Wie benutzt man Funktionen?
Categories: 

Daten Aggregation

Hier finden Sie alle Aggregatfunktionen bzw. Daten-Aggregierungs-Funktionen, welche in Verbindung mit dem GROUP BY innerhalb des Select Befehls verwendet werden und Daten aggregieren bzw. statistische Funktionen auf mehrere Werte anwenden.
Categories: 

AVG - Mittelwert

Syntax

Beschreibung

    AVG ermittelt das arithmetische Mittel aller Werte im angegebenen Feld.

    Beispiel:

SELECT AVG(preis)
 FROM torder

Dieser SELECT-Befehl ermittelt den Durchschnittspreis aller Order...

COUNT - Datensätze zählen

Syntax

Beschreibung

    COUNT zählt die Anzahl der Datensätze mit nicht-NULL werten in dem angegebenen Feld.
    COUNT DISTICNT zählt die Anzahl der unterschiedlichen Nicht-NULL-Werte in dem angegebenen Feld.

    Beispiel:

SELECT COUNT(DISTINCT preis)
 FROM torder

Dieser SELECT-Befehl zählt die Anzahl der unterschiedlichen Nicht-NULL-Werte des Feldes preis der Tabelle torder.

SUM - Werte summieren

Syntax

Beschreibung

    SUM ermittelt die arithmetische Summe aller Werte im angegebenen Feld.

    Beispiel:

SELECT SUM(preis)
 FROM torder

Dieser SELECT-Befehl ermittelt die Summe aller Werte des Feldes preis der Tabelle torder, z.B. Umsatz

MIN - Minimum

Syntax

Beschreibung

    MIN ermittelt den kleinsten aller Werte im angegebenen Feld.

    Beispiel:

SELECT MIN(preis)
 FROM torder

Dieser SELECT-Befehl ermittelt den kleinsten Wert des Feldes preis in der Tabelle torder, z.B. den kleinsten Preis...

MAX - Maximum

Syntax

Beschreibung

    MAX ermittelt den grö&szligten aller Werte im angegebenen Feld.

    Beispiel:

SELECT MAX(preis)
 FROM torder

Dieser SELECT-Befehl ermittelt den grö&szligten Wert des Feldes preis in der Tabelle torder, z.B. den grö&szligten Preis...

RANGE - Wertebereich (MAX - MIN)

Syntax (nicht alle Datenbanksysteme)

Beschreibung

    RANGE ermittelt die Differenz zwischen den größten und den kleinsten Wert in der angegebenen Spalte.
    Falls Ihre Datenbank RANGE nicht unterstützt, behelfen Sie sich mit einer Formel:
    MAX(Feldname)-MIN(Feldname)
    oder, Falls auch negative Werte vorkommen,
    ABS(MAX(Feldname)-MIN(Feldname))

    Beispiel:

SELECT PANGE(preis)
 FROM torder

Dieser SELECT-Befehl ermittelt die Differenz zwischen den größten und den kleinsten Preis.

STDDEV - Standardabweichung

Syntax

Beschreibung

    STDDEV berechnet die Standardabweichung der gewählten Zeilen, wobei diese als Stichprobe einer Population behandelt werden. Standardabweichung ist die Quadratwurzel der Varianz.

    Beispiel:

SELECT STDDEV(preis)
 FROM torder

Dieser SELECT-Befehl ermittelt die Standardabweichung der Preise in der Tabelle torder.

VARIANCE - Varianz

Syntax

Beschreibung

    VARIANCE berechnet die Stichprobenvarianz der gewählten Zeilen zurück.

    Beispiel:

SELECT VARIANCE(preis)
 FROM torder;

Dieser SELECT-Befehl berechnet die Stichprobenvarianz der Preise in der Tabelle torder.

Mathematische Funktionen

Hier finden Sie die wichtigsten mathematischen und arithmetischen Funktionen, welche in den meisten SQL-Datenbanken unterstützt werden.

SyntaxBeschreibung
ABS(Formel) ABS liefert das Formelresultrat selbst zurück, wenn es positiv ist, und (-1)*Formelresultat, wenn es negativ ist.
CEIL(Formel) Mit CEIL kann mann einen Wert (Zahl mit Kommastellen) oder Formelergebniss auf die nächstgrö&szligere ganze Zahl aufrunden.
HEX(Formel) HEX gibt dem Hexadecimal-Code eines Wertes oder Formelergebnisses zurück.
FLOOR(Formel) Mit FLOOR kann mann einen Wert (Zahl mit Kommastellen) oder Formelergebniss auf die nächstkleinere ganze Zahl abrunden.
MOD(Formel1, Formel2) MOD gibt den Modulo bzw. Restwert der Division zweier Zahlen oder Formeln.
ROUND( Formel [, Integer ] ) Rundet den angegebenen Wert oder Formel auf Integer kommastellen. Wenn die Anzahl der Kommastellen nicht angegeben ist, dann dird auf die nächste ganze Zahl gerundet.
SQRT(Formel) SQRT liefert die Quadratwurzel des Formelergebnisses zurück.
TAN(Formel) TAN gibt den Tangens eines Wertes oder Formel zurück.
TRUNC(Formel) TRUNC entfent die Nachkommastellen, Ergebnis ist eine Ganze Zahl.

Text und Zeichenketten

Hier finden Sie die wichtigsten Text- und Zeichenketten-Funktionen, welche in den meissten in SQL-Datenbanken unterstützt werden.

SyntaxBeschreibung
LENGTH(Formel) Liefert als Ergebniss die Länge des Strings in Zeichen.
LEFT( Formel1 , Formel2 ) Liefert als Ergebniss einen Teilstring aus den ersten Formel2 Zeichen des Strings Formel1.
RIGHT(Formel1, Formel2) Liefert als Ergebniss einen Teilstring aus den letzten Formel2 Zeichen des Strings Formel1.
SUBSTR(Formel1, Formel2, Formel3) Liefert als Ergebniss einen Teilstring aus Formel3 Zeichen des Strings Formel1 von der Position Formel2 an.
TRIM(Formel) TRIM schneidet Leerzeichen am Anfang und am Ende des Strings ab.
VALUE(Formel) DB2. Wandelt das Formelergebniss (vom Typ CHAR oder VARCHAR) in eine Zahl um.

Datumsfunktionen

Hier finden Sie die wichtigsten Datums-Funktionen, welche von den meissten SQL-Datenbanken unterstützt werden.

SyntaxBeschreibung
CURRENT Liefert das aktuelle Datum und Uhrzeit als ein DATETIME zurück.
DATE(Formel) Wandelt ein Formelergebnis oder einen Wert in ein Datum um.
DAY(Formel) Liefert den Tag des Monats aus dem angegebenen Datum zurück.
EXTEND(Datum, [ von TO bis ] ) Definiert die Genauigkeit eines DATE- oder DATETIME-Werts.
Beipiel:
SELECT EXTEND(odatum, YEAR TO MONTH) as time, sum(anz) as orders
 FROM torder
 GROUP BY 1

Liefert eine Statistik über die Anzahl der Bestellungen.
MDY(Formel1, Formel2, Formel3) Liefert ein DATE zurück, das aus Tag, Monat und Jahr zusammengebaut wird.
MONTH(Datum) Liefert den Monat aus dem angegebenen Datum zurück.
TODAY Liefert das aktuelle Datum als ein DATETIME zurück.
WEEKDAY(Datum) Liefert den Tag der Woche aus dem angegebenen Datum zurück.
YEAR(Datum) Liefert das Jahr aus dem angegebenen Datum zurück.

Sonstige Funktionen

Hier finden Sie einige der wochtigen sonstigen und Hilfs-Funktionen in SQL.

Views

Was sind Views? Wie erstellt man Views? Wie löscht man Views? Wie ändert man Views?

Categories: 

CREATE VIEW - Sicht erzeugen

Syntax

Beschreibung:

    CREATE VIEW erzeugt eine Sicht auf eine oder mehrere Tabellen in der aktiven Datenbank in Form einer neuen virtuellen (quasi nur im Hauptspreicher erzeugten) Tabelle. Innerhalb von CREATE VIEW wird je nach verwendeter Datenbankserversoftware nur ein Teil der Funktionalität des SELECT-Befehls unterstützt.

    Beispiel:

CREATE VIEW myorders (
 my_onum,
 my_anz ) AS
SELECT
 onum,
 anz
 FROM torder
 WHERE preis > 0;

Erzeugt eine neue Sicht auf die Tabelle 'torders', die nur die Felder 'anum' und 'anz' enthält von Ordern mit preis>0.

Categories: 

DROP VIEW - Sicht löschen

Syntax

Beschreibung

    Mit DROP VIEW wird ein vorher mit CREATE VIEW erstellter View gelöscht.

    Beispiel:

DROP VIEW myorders;

Der vorher erstellte View 'myorders' wird gelöscht.

Categories: 

Stored procedures

Was sind Stored Procedures? Wie erstellt man Stored Procedures? Wie löscht man Stored Procedures? Wie ändert man Stored Procedures?

CREATE PROCEDURE - gespeicherte Prozedur erzeugen

Syntax

Beschreibung

    Mit CREATE PROCEDURE wird eine Prozedur (Programm/Funktion) in der Datenbank gespreichert, die später innnerhalb eines SQL-Statements oder eines Programms/Prozedur aufgerufen werden kann.

    Beispiel:

CREATE PROCEDURE table_drop ( )
 DROP TABLE proc_test;
 END PROCEDURE;

Hier wird eine in der Datenbank gespeicherte Prozedur 'table_drop' erstellt, die bei Aufruf die Tabelle 'proc_test' in der aktuellen Datenbank löscht.

DBA

    DBA teilt dem DBMS mit eine Prozedur mit DBA-Privilegien (Administrator-Rechten) zu erzeugen.

    Beispiel:

CREATE DBA PROCEDURE table_create ( )
 CREATE TABLE proc_test (
  fid  smallint,
  ag   smallint,
  vsnr integer
  );
END PROCEDURE;

Hier wird eine in der Datenbank gespeicherte Prozedur 'table_create' erstellt, die bei Aufruf in der aktuellen Datenbank eine Tabelle 'proc_test' mit drei Feldern 'fid', 'ag' und 'vsnr' erstellt.

Durch das Schlüsselwort DBA erhätl die Prozedur ...

REFERENCES { BYTE | TEXT }

    REFERENCES ...

    Beispiel:

under contsruction ...

Hier wird eine in der Datenbank gespeicherte Prozedur '...' erstellt.

DEFAULT { Wert | NULL }

    DEFAULT spezifiziert einen Vorgabewert, der Verwendet wird, denn keine Parameter übergeben werden.

    Beispiel:

CREATE PROCEDURE square ( par INTEGER DEFAULT 0 )
 RETURNING INTEGER;
 DEFINE rez INTEGER;
 LET rez = par * par;
 RETURN rez;
END PROCEDURE;

Hier wird eine in der Datenbank gespeicherte Prozedur 'square' erstellt, bei der der einzige Aufrufparameter 'par' optional ist und per Voreinstellung gleich Null ist. Wenn die Prozedur ohne Parameter aufgerufen wird, liefert sie 0*0 zurück, wenn mit Parameter, dann par*par.

RETURNING { Feldtyp | REFERENCES { BYTE | TEXT } }

    RETURNING teilt dem DBMS mit, wie viele Werte vom welchen Typ die Prozedur zurückgibt.

    Beispiel:

CREATE PROCEDURE aam_table_insert ( )
 RETURNING INT;
 DEFINE i INT;
 INSERT INTO aam_proc_test ( fid, ag, vsnr )
 VALUES ( 1, 2, 3 );
 INSERT INTO aam_proc_test ( fid, ag, vsnr )
 VALUES ( 0, 9, 9 );
 LET i = SELECT COUNT(*) FROM proc_test;
 RETURN i;
END PROCEDURE;

Hier wird eine in der Datenbank gespeicherte Prozedur 'table_insert' erstellt, die zwei neue Datensätze in die Tabelle 'proc_test' einfügt.

Statement

    Ein SPL-Statement bzw. Befehl, z.B. DEFINE, RETURN, IF, FOR, FOREACH, WHILE, usw.

    Beispiel:

CREATE PROCEDURE table_run ( )
 DEFINE i INT;
 SET ISOLATION TO dirty read;
 SET LOCK MODE to wait 60;
 SET PDQPRIORITY 5;
 CALL table_drop();
 CALL table_create();
 LET i = table_insert();
END PROCEDURE;

Hier wird eine in der Datenbank gespeicherte Prozedur 'table_run' erstellt, die einige andere Prozeduren aufruft und ein Rückgabewert verarbeitet.

Umfassendes Beispiel

    Beispiel:

CREATE PROCEDURE table_show ( )
 RETURNING INT, INT, INT;
 DEFINE my_fid, my_ag, my_vsnr INTEGER;
 CALL table_run();
 FOREACH
  SELECT square(fid+1) fid, ag, vsnr
  INTO my_fid, my_ag, my_vsnr
  FROM proc_test
  RETURN my_fid, my_ag, my_vsnr
  WITH RESUME;
 END FOREACH;
END PROCEDURE;

Hier wird eine in der Datenbank gespeicherte Prozedur 'table_show' erstellt, die alle Datensätze der Tabelle proc_test zurückgibt, die Sie vorher dort mit der Unterprozedur 'table_run' eingefügt hat.

DROP PROCEDURE - gespeicherte Prozedur löschen

Syntax

Beschreibung:

    DROP PROCEDURE löscht eine gespeicherte Prozedur aus der Datenbank.

    Beispiel:

DROP PROCEDURE table_show;

Hier wird die gespeicherte Prozedur 'table_show' gelöscht.

EXECUTE PROCEDURE - gespeicherte Prozedur ausführen

Syntax

Beschreibung:

    EXECUTE PROCEDURE führt eine in der Datenbank gespeicherte Prozedur aus.

    Beispiel:

EXECUTE PROCEDURE table_show;

Hier wird die gespeicherte Prozedur 'table_show' gestartet.

GRANT - Prozedurrechte vergeben

Syntax

    GRANT { EXECUTE | ALL }
    ON Prozedurname
    TO
    { User | {GROUP|ROLE} groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ];

Beschreibung

    Mit GRANT können Sie den spezifizierten Usern bzw. Benutzergruppen (Rollen)
    folgende Berechtigungen auf Prozeduren geben:
    EXCEUTE - Prozedur starten, ausführen bzw. aufrufen
    ALL - alle Rechte geben

    Wenn anstatt konkreter user und benutzergruppen PUBLIC angegeben wird, werden die Rechte allen Usern gegeben (Je nach RDMBS ggf. nur für die aktuelle Datenbank).

    WITH GRANT OPTION erlaubt es den Usern die neu erworbenen Tabellenrechte an weitere User weiterzugeben.

    Beispiel:

GRANT EXECUTE ON random_number TO my_user;

Hier wird der User my_user berechtigt die Prozedur random_number zu verwenden.

REVOKE - Prozedurrechte entfernen

Syntax

Beschreibung

    Mit REVOKE können Sie den spezifizierten Usern bzw. Benutzergruppen (Rollen)
    Berechtigungen auf Prozeduren wieder wegnehmen:
    EXCEUTE - Prozedur starten, ausführen bzw. aufrufen
    ALL - alle Rechte entfernen

    Wenn anstatt konkreter user und benutzergruppen PUBLIC angegeben wird, werden die Rechte aller User entfernt (Je nach RDMBS ggf. nur für die aktuelle Datenbank).

    Beispiel:

REVOKE EXECUTE ON random_number FROM my_user;

Hier wird dem User my_user das Recht entzogen, die Prozedur random_number zu verwenden.

Transaktionen

Was sind Transktionen, wie nutzt man sie, wie beginnt man sie und wie beendet man sie.

BEGIN WORK - Transaktion beginnen

Syntax

Beschreibung:

    Markiert den Beginn einer Transaktion, einer Folge zusammenhängender SQL-Befehle, die von dem RDBMS als eine Einheit betrachtet werden und in Fehlerfall alle rückgängig gemacht werden können. Wird in der Regel aus externen Programmen verwendet, die eine Fehlererkennungslogik implementieren.

COMMIT WORK - Transaktion beenden

Syntax

Beschreibung:

    Markiert das Ende einer Transaktion, einer Folge zusammenhängender SQL-Befehle, die von dem RDBMS als eine Einheit betrachtet werden und in Fehlerfall alle rückgängig gemacht werden können. Wird in der Regel aus externen Programmen verwendet, die eine Fehlererkennungslogik implementieren.

ROLLBACK WORK - Transaktion abbrechen

Syntax

Beschreibung:

    Macht alle Befehle einer Transaktion rückgängig, "rollt" sie zurück. Wird in der Regel aus externen Programmen verwendet, die eine Fehlererkennungslogik implementieren.

Hilfsbefehle in SQL

Hier finden Sie einige der wichtigsten Hilfsbefehle in SQL.

SET ISOLATION TO - Isolationsstufe setzen

Syntax

    SET ISOLATION TO { DIRTY READ | COMMITTED READ | CURSOR STABILITY | REPEATABLE READ };

Beschreibung:

    SET ISOLATION TO DIRTY READ setzt die Isolationsstufe so, daß bei einem Befehl keine Rücksicht auf evtl. gesetzte Datensatzsperren und laufende Updates genommen wird.

SET PDQPRIORITY - Ressourcenporiritäten setzen

Syntax


    SET PDQPRIORITY nn;


Beschreibung:

    Setzt die Priorität der Verarbeitung auf nn. Vorgabewert ist 0 (keine Prioritätsstufe),
    wenn keine speziellen Einstellungen vorgenommen wurden.

    Beispiel:

SET PDQPRIORITY 5;

Setzt die Priorität auf 5 (kleine Priorität).

SET LOCKMODE TO WAIT - Timeout setzen

Syntax:

Beschreibung:

    Setzt das Timeout (die Zeit, die der DB-Server auf die Aufhabung einer Sperre wartet) auf nn Sekunden.

    Beispiel:

    SET LOCK MODE TO WAIT 60;

    Setzt das Timeout auf 60 Sekunden.

Syntaxdiagramme, Zeichen, Begriffe, Tabellen

Hier finden Sie ergänzende Informationen zu den Syntaxdiagrammen sowie Begriffserklärungen und entsprechende Syntaxbeispiele.

Hilfszeichen f&uuml;r Syntaxdiagramme

Hier finden Sie erklärungen zu den in den Syntaxdiagrammen verwendeten Hilfszeichen

[ ]

    Optionales Element. Alles, was in eckigen Klammern steht, ist optional und nicht zwingend vorgeschrieben. Diese Klammern sollen an dieser Stelle nicht in den Quelltext eingefügt werden.

{ }

    Ein Element. Alles, was in geschweiften Klammern steht, ist als eine syntaktische Einheit zu betrachten. Diese Klammern sollen an dieser Stelle nicht in den Quelltext eingefügt werden.

< >

    Obligatorisches Element. Alles, was in diesen Klammern steht, ist als eine syntaktische Einheit zu betrachten und ist eine Pflichtangabe. Diese Klammern sollen an dieser Stelle nicht in den Quelltext eingefügt werden.

|

    Der senkrechte Strich | bedeutet, daß im Quelltext nur entweder das Element rechts oder links von dem Strich verwendet werden darf. Dieser senkrechte Strich wird an dieser Stelle nicht im Quelltext verwendet.

[...]

    Alles, was vor [...] steht, kann sich beliebig wiederholen.

[,...]

    Alles, was vor [,...] steht, kann sich beliebig wiederholen; die einzelnen Elemente der Liste werden durch komma getrennt.

TextGroßKlein

    Textbezeichner, bestehend aus Gro&szlig- und Kleinbuchstaben, deuten auf Datenbezeichner wie Tabellennamen oder -Listen und Feldnamen oder Listen u.s.w.

TEXTGROß

    Textbezeichner, bestehend nur aus Gro&szligbuchstaben deuten auf SQL-Schlüsselwörter (-Befehle).

textklein

    Textbezeichner,bestehend nur aus Kleinbuchstaben, deuten auf Tabellen- oder Feldnamen und werden hier nur in Beispielen verwendet.

SQL-Sprachelemente in den Syntaxdiagrammen

Hier finden einige Erklärungen und Beispiele zu den SQL-Sprachelementen in den Syntaxdiagrammen.

( )

    Runde Klammern. Werden u.a. bei Grö&szligenangaben für Felddefinitionen, in logischen Bedingungskonstrukten und in Formeln verwendet.

Alias

    Alias ist ein Spitzname für den eigentlichen Tabellennamen, der in dem Befehl alternativ zu diesem benutzt werden kann.

    Beispiel:
    mytable1

Feldname

    Feldname ist der Name eines der in den gewählten Tabellen enthaltenen Datensatzfelder.

    Beispiel:
    preis

Feldliste

    'Feldliste' ist eine Liste durch komma getrennter Feldnamen, die in den gewählten Tabellen enthalten sind.

    Beispiel:
    onum, preis, anz

Wert

    Wert ist hier ein Wert den der entsprechende SQL-Datentyp annehmen kann, z.B. ganze Zahl, Festkommazahl, Text in Hochkomma.

    Beispiel:
    'Berlin'

Wertliste

    Wertliste ist eine Liste aus durch Komma getrennten Werten (siehe Wert).

    Beispiel:
    1001, 'Müller', 'Berlin', .12

Tabellenname

    Tabellenname ist ein Name einer in der gewählten Datenbank entahltenen Datentabellen.

    Beispiel:
    torder

Bedingung

Formel

Integer

    Integer ist hier eine Zahl ohne Kommastellen.

    Beispiel:
    17

In Beispielen benutzte Tabellen

Hier finden Sie die in den Beispielen benutzten Tabellen:

Tabelle tverkauf (Verkäufer) :

    CREATE TABLE tverkauf (
    vnum INTEGER NOT NulL UNIQUE PRIMARY KEY,
    vname CHAR(40),
    stadt CHAR(40),
    prov DECIMAL );

    INSERT INTO tverkauf VALUES ( 1,'Mueller','Berlin', 1.5 );
    INSERT INTO tverkauf VALUES ( 2,'Meyer','Frankfurt', 2.5 );
    INSERT INTO tverkauf VALUES ( 3,'Schulz','Munich', 3.5 );
    INSERT INTO tverkauf VALUES ( 4,'Burgmueller','Hamburg', 0.5 );
 

Tabelle tkunden (Kunden) :

    CREATE TABLE tkunden (
    knum INTEGER NOT NulL UNIQUE PRIMARY KEY,
    kname CHAR(40),
    stadt CHAR(40),
    rating INTEGER,
    vnum INTEGER );

    INSERT INTO tkunden VALUES ( 1,'Lehmann','Berlin', 10, 1 );
    INSERT INTO tkunden VALUES ( 2,'Schmidt','Berlin', 20, 1 );
    INSERT INTO tkunden VALUES ( 3,'Schumacher','Kerpen', 50, 1 );
    INSERT INTO tkunden VALUES ( 4,'Schroeder','Berlin', 10, 2 );
    INSERT INTO tkunden VALUES ( 5,'Stoiber','Munich', 20, 2 );
    INSERT INTO tkunden VALUES ( 6,'Lohmann','Nuremberg', 5, 3 );
    INSERT INTO tkunden VALUES ( 7,'Krupp','Duesseldorf', 10, 3 );
    INSERT INTO tkunden VALUES ( 8,'Stradivari','Rom', 20, 3 );
    INSERT INTO tkunden VALUES ( 9,'Schumacher','Salzburg', 50, 3 );
    INSERT INTO tkunden VALUES ( 10,'Testcustomer','Nowhere', 0, 0 );
 

Tabelle torder (Aufträge) :

    CREATE TABLE torder (
    onum INTEGER NOT NulL UNIQUE PRIMARY KEY,
    preis DECIMAL(2,30),
    anz REAL,
    odatum DATE,
    knum INTEGER
    vnum INTEGER );

    INSERT INTO torder VALUES ( 1, 100.00, 2, '01.01.2004', 1, 1 );
    INSERT INTO torder VALUES ( 2, 100000.00, 1, '03.09.2004', 9, 3 );
 

Tabelle tposition (Auftragspositionen) :

    CREATE TABLE tposition (
    pnum INTEGER NOT NulL UNIQUE PRIMARY KEY,
    onum INTEGER,
    anum INTEGER,
    menge INTEGER );

    INSERT INTO tposition VALUES ( 1, 1, 1, 100 );
    INSERT INTO tposition VALUES ( 2, 1, 2, 10 );
    INSERT INTO tposition VALUES ( 3, 1, 3, 10 );
    INSERT INTO tposition VALUES ( 4, 1, 4, 10 );
    INSERT INTO tposition VALUES ( 5, 2, 5, 1 );
 

Tabelle tartikel (Artikel) :

    CREATE TABLE tartikel (
    anum INTEGER NOT NulL UNIQUE PRIMARY KEY,
    name CHAR(40),
    preis DECIMAL(2,30),
    hnum INTEGER );

    INSERT INTO tartikel VALUES ( 1, 'Showergel', 0.50, 1 );
    INSERT INTO tartikel VALUES ( 2, 'Soap', 0.35, 1 );
    INSERT INTO tartikel VALUES ( 3, 'Daycream', 2.35, 1 );
    INSERT INTO tartikel VALUES ( 4, 'Nightcream', 3.35, 1 );
    INSERT INTO tartikel VALUES ( 5, 'BMW 520i', 100000.00, 4 );
 

Tabelle thersteller (Hersteller) :

    CREATE TABLE thersteller (
    hnum INTEGER NOT NulL UNIQUE PRIMARY KEY,
    hname CHAR(40) );

    INSERT INTO thersteller VALUES ( 1, 'Beiersdorf' );
    INSERT INTO thersteller VALUES ( 2, 'Volkswagen' );
    INSERT INTO thersteller VALUES ( 3, 'Audi' );
    INSERT INTO thersteller VALUES ( 4, 'BMW' );
    INSERT INTO thersteller VALUES ( 5, 'Mercedes' );
    INSERT INTO thersteller VALUES ( 6, 'Smart' );
 

SQL-Standards - eine Übersicht

SQL, die stukturierte Abfragesprache für relationale Datenbanken, wurde 1986 publiziert und hat seither diverse Standardisierungsschritte durchlaufen. Die folgenden Darstellungen sind nach Standards und den Bestandteilen/Erweiterungen gegliedert.
  • 1989 - SQL-89, Standard SQL, SQL-1
  • 1992 - SQL-92, SQL-2 (ANSI specification X3.135-1992)
      * ANSI X3.135-1992 Database Language SQL (the 1992 standard)
      * ANSI/ISO/IEC 9075-1992 Technical Corrigendum 1 (errata)
      * ANSI/ISO/IEC 9075-3-1995: Part 3: Call-Level Interface (CLI)
    • DDL (Data Description Language): BLOB's, VARCHAR, DATE, TIME, TIMESTAMP, BOOLEAN
    • DML (Data Manipulation Language): OUTER/INNER-Joins, Mengenoperationen (UNION, CROSS)
    • Transactions: set transaction
    • Cursors:
    • Bindings: Dynamic SQL
    • Domain checks and constraints: DEFAULT, CHECK (rudimentäres Domain-Konzept), Basiskonzept der Referentiellen Integrität (Referenzen auf Primärschlüssel und Schlüsselkandidaten)
    • Connections: connect, set connection
    • Catalogs: Systemtabellen oder Systemkatalog
    • Fehler & Diagnostik: SQLSTATE, GET DIAGNOSTICS
    • Misc.: cursors, ALTER (altering and dropping), CAST (data type converions)

  • 1999 - SQL-99, SQL-3 (ISO/IEC 9075:1999(E) Information technology - Database languages - SQL)
      * INCITS/ISO/IEC 9075-1 01-Jan-1999 SQL-Part 1: Framework (SQL/Framework)
      * INCITS/ISO/IEC 9075-2 01-Jan-1999 SQL-Part 2: Foundation (SQL/Foundation)
      * INCITS/ISO/IEC 9075-3 01-Oct-1999 SQL-Part 3: Call Level Interface (SQL/CLI)
      * INCITS/ISO/IEC 9075-4 01-Jan-1999 SQL-Part 4: Persistent Stored Modules (SQL/PSM)
      * INCITS/ISO/IEC 9075-5 01-Jan-1999 SQL-Part 5: Host Language Bindings (SQL/Bindings)
    • Framework:
    • DDL (Data Definition Language): Time-Series-Data, User defined types (UDT), Rollen
    • DML (Data Manipulation Language): recursive queries
      Intermediate Level - CASCADE DELETE
      Full Level - CASCADE UPDATE
    • Transactions:
    • Cursors:
    • Bindings: Precompilers, embedded and dynamic SQL, OLB (Object Language Bindings) mit SQLJ for Java
    • Domain checks and constraints: triggers
      Full Level - Subquery in CHECK, Assertions, DEFERRED
    • CLI (Callable Level Interface): ODBC, JDBC, OLE DB
    • PSM (Persistent Storage Modules): stored Procedures
    • Mediums: Management of external data

    • 2003 - SQL-2003
      • DDL (Data Description Language): MULTISET, generierte Attribute (Ableitung aus anderen Attributen), Identitätsattribute (automatische Generierung künstlicher Schlüssel)
      • DML (Data Manipulation Language): tabellenwertige Funktionen (Tabellenerzeugung durch Funktionen), TABLESAMPLE, MERGE-Anweisung.
      • SQL/Schemata: Information and Definition Schemas
      • SQL/XML: XML-related Specifications
      • SQL/MED (Mediums): Zugriff auf externe Daten

    • Categories: 

      Verweise auf die Dokumentation der Datenbankhersteller

      Kommerzielle Datenbank-Management-Systeme:

      Open Source:

      Categories: 

      Copyright und Haftung

      Copyright © 2004. Dieses Objekt ist open source. Sie dürfen es kopieren und/oder modifizieren unter den Bestimmungen der Universal General Public Lizenz (UGPL).

      Hier ein Auszug aus der UGPL:

      Distribution Concerns

      You may not copy, modify, sublicense, or distribute the Object except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the object is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

      USAGE

      BECAUSE THE OBJECT IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE OBJECT, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE OBJECT IS WITH YOU. SHOULD THE OBJECT PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

      DAMAGES AND LOSSES

      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE OBJECT AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE OBJECT (INCLUDING BUT NOT LIMITED TO LOSSES OF MONEY AND/OR INVESTMENTS OR INPUT BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE OBJECT TO OPERATE WITH ANY OTHER OBJECT), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

      Eine ältere Version von der SQL-Hilfe kann hier heruntergeladen werden: http://aam.ugpl.de/node/1141

      Categories: