Einführung in SQL: Befehlsreferenz

Aus Wikibooks

Wechseln zu: Navigation, Suche


Für diese Übersicht[1] gelten die gleichen Hinweise, wie sie unter Einleitung genannt sind.

Die Struktur der Befehle richtet sich nach der SQL-Dokumentation. Beispiele sind nur dann erwähnt, wenn sie in dieser Einführung in SQL nicht enthalten sind, aber dennoch von Bedeutung sein können.

Inhaltsverzeichnis

[Bearbeiten] DDL (Data Definition Language)

Zu dieser Kategorie gehören Befehle, die die Datenbank-Objekte beschreiben. Die grundlegenden Befehle lauten:

CREATE <object> <name> <details>    erzeugt ein Objekt
ALTER  <object> <name> <details>    ändert ein Objekt
DROP   <object> <name>              löscht ein Objekt

[Bearbeiten] TABLE – Tabelle bearbeiten

[Bearbeiten] CREATE TABLE

Legt eine neue Tabelle an.

Die Syntax lautet:

CREATE TABLE <tabellenname> [(<felddefinitionsliste>) | AS <select-statement>]

Syntax einer einzelnen <felddefinition>:

<feldbezeichnung> <feldtyp> [(<feldgröße>)] [<nullable>] [DEFAULT <defaultwert>]

Als <feldtyp> stehen die Datentypen des jeweiligen DBMS zur Verfügung, z.B. CHAR, VARCHAR, INT, FLOAT.

<nullable> gibt an, ob das Feld leer bleiben darf (NULL) oder ob ein Wert vorhanden sein muss (NOT NULL).

Als <defaultwert> kann ein Wert vorgegeben werden, der automatisch gespeichert wird, falls das Feld nicht leer bleiben darf, aber kein Wert eingegeben wurde.

<select-statement> ist eine Abfrage durch SELECT (siehe unten), die als Grundlage für die neue Tabelle verwendet wird.

Beispiele Eine neue Tabelle mit 2 Feldern anlegen.

CREATE TABLE testtab (feld1 varchar (20), feld2 number (20))

Eine neue Tabelle aus einem SELECT-Statement erstellen

CREATE TABLE testtab AS SELECT feld1, feld2 FROM testtab2

           [Nach oben]

[Bearbeiten] ALTER TABLE

verändert eine bestehende Tabelle.

Basissyntax

ALTER TABLE <tabellenname> <alterstatement>

Alterstatement kann eins der folgenden sein:

  • Tabelle umbenennen
RENAME TO <neuername>
  • Feld(er) hinzufügen
ADD (<felddefinitionsliste>)
  • Feld ändern
MODIFY <felddefinition>
  • Feld(er) löschen
DROP (<feldliste>)
  • Haupt-/ Fremdschlüssel hinzufügen
ADD CONSTRAINT <schlüsselname> <schlüsseldefinition>
  • Haupt-/ Fremdschlüssel löschen
    • Hauptschlüssel
DROP PRIMARY KEY
    • Fremdschlüssel
DROP FOREIGN KEY <schlüsselname>
  • Index erstellen
ADD INDEX <indexname> [<indextyp>] (<feldliste>)
  • Index löschen
DROP INDEX <indexname>

Schlüsseldefinition kann eine der folgenden sein:

    • Hauptschlüssel
PRIMARY KEY (<feldliste>)
    • Fremdschlüssel
FOREIGN KEY (<feldliste>) REFERENCES <herkunftstabelle> (<feldliste>)

Indextyp kann (in den meisten Fällen) folgender sein:

    • UNIQUE
    • PRIMARY
    • FULLTEXT           [Nach oben]

Beispiele

Tabelle umbenennen

ALTER, TABLE testtab RENAME TO tab2

Feld hinzufügen

ALTER TABLE testtab ADD (feld1 number(59))
ALTER TABLE testtab ADD (feld2 date NOT NULL)
ALTER TABLE testtab ADD (feld3 number(50) DEFAULT 10)

Ein Feld auf number, Länge 50 und NULL ändern:

ALTER TABLE testtab MODIFY feld1 number (50) NULL

Feld löschen

ALTER TABLE testtab DROP feld1

Primary-Key erstellen:

ALTER TABLE testtab ADD CONSTRAINT primary_key_bezeichnung PRIMARY KEY (feld1)

Primary-Key löschen

ALTER TABLE testtab DROP PRIMARY KEY

Foreign-Key erstellen:

ALTER TABLE testtab ADD CONSTRAINT foreign_key_bezeichnung FOREIGN KEY (feld1) REFERENCES tab2 (feld2)

Foreign-Key löschen

ALTER TABLE testtab DROP FOREIGN KEY foreign_key_bezeichnung

Index erstellen

ALTER TABLE testtab ADD INDEX index_name index_typ (feld1)

Index löschen

ALTER TABLE testtab DROP INDEX index_name

           [Nach oben]

[Bearbeiten] DROP TABLE

Tabelle "testtab" löschen:

DROP TABLE testtab

Tabelle "testtab" inklusive Constraints löschen:

DROP TABLE testtab CASCADE CONSTRAINTS

           [Nach oben]

[Bearbeiten] INDEX – Index bearbeiten

[Bearbeiten] CREATE INDEX

CREATE INDEX <indexname> on <tabellenname> (<feld>);
CREATE INDEX <indexname> on <tabellenname> (<feld1>,<feld2>,...);

[Bearbeiten] DROP INDEX

DROP INDEX <indexname>

           [Nach oben]

[Bearbeiten] VIEW – Ansicht auf Tabellen

Einzelheiten zu VIEWS siehe Erstellen von Views.

[Bearbeiten] CREATE VIEW

Eine spezielle Sicht auf eine oder mehrere Tabellen erzeugen:

CREATE VIEW <name> AS <select expression>

Als <select expression> kann ein "beliebiger" SELECT-Befehl verwendet werden.

[Bearbeiten] DROP VIEW

DROP VIEW <name>

           [Nach oben]

[Bearbeiten] DML – Data Manipulation Language

Diese Kategorie umfasst die Befehle, die etwas mit einem Datenbestand machen.

[Bearbeiten] Abfragen mit SELECT

Mit dem SELECT-Befehl werden Daten aus einer oder mehreren Tabellen abgerufen.

 SELECT 
   [ DISTINCT | ALL ] 
     <select list>
     FROM     <table reference list>
   [ WHERE    <bedingungsliste> ]
   [ GROUP BY <spaltenliste>    ]
   [ HAVING   <bedingungsliste> ]
   [ { UNION [ALL] | INTERSECT | MINUS } <abfrage-ausdruck> ]
   [ ORDER BY <spaltenliste>    ]

Dieser Befehl und seine Klauseln werden ausführlich unter Ausführliche SELECT-Struktur behandelt.            [Nach oben]

[Bearbeiten] Neuaufnahmen mit INSERT

Mit dem INSERT-Befehl werden Daten in einer Tabelle erstmals gespeichert. Als Syntax gibt es vor allem zwei Varianten:

INSERT INTO <name> [ <spaltenliste> ] VALUES ( <werteliste> )
INSERT INTO <name> [ <spaltenliste> ] SELECT <select expression>

Als <name> ist eine vorhandene Tabelle anzugeben. Unter bestimmten starken Einschränkungen kann auch eine VIEW angegeben werden, siehe dazu Erstellen von Views.

Als <spaltenliste> können eine oder mehrere Spalten der Tabelle aufgeführt werden.

  • Spalten, die in dieser Liste genannt werden, bekommen einen Wert aus der <werteliste> bzw. dem SELECT-Ausdruck zugewiesen.
  • Spalten, die in dieser Liste nicht genannt werden, bekommen einen DEFAULT-Wert oder NULL zugewiesen; dies hängt von der Tabellendefinition für die betreffende Spalte ab.
  • Die Reihenfolge der Spalten in der <spaltenliste> muss mit der Reihenfolge der Daten in der <werteliste> bzw. dem <select expression> übereinstimmen. Die Datentypen müssen übereinstimmen oder zumindest soweit "kompatibel" sein, dass sie automatisch (implizit) konvertiert werden können.

Wenn durch <spaltenliste> keine Spalten angegeben werden, müssen alle Spalten aus der Tabellendefinition in dieser Reihenfolge mit Inhalt versehen werden, und sei es ausdrücklich mit NULL.

Die <werteliste> besteht aus einem oder mehreren Werten (entsprechend der <spaltenliste>). Dabei kann es sich um konstante Werte oder Ergebnisse einfacher Funktionen handeln, aber auch um Abfragen. Wenn komplexe Ausdrücke als Werte zugewiesen werden sollen, ist die Variante mit SELECT zu verwenden.

Einzelheiten werden behandelt in:

[Bearbeiten] Änderungen mit UPDATE

Mit dem UPDATE-Befehl werden Daten in einer Tabelle geändert, und zwar für eine oder mehrere Spalten in einem oder mehreren Datensätzen. Der Befehl benutzt diese Syntax:

UPDATE <name>
   SET <spalte1> = <wert1> [ ,
       <spalte2> = <wert2>   , usw. 
       <spalten> = <wertn> ]
[ WHERE <bedingungsliste>  ];

Als <name> ist eine vorhandene Tabelle anzugeben. Unter bestimmten starken Einschränkungen kann auch eine VIEW angegeben werden, siehe dazu Erstellen von Views.

Die Wertzuweisungsliste in der SET-Klausel besteht aus einer oder (mit Komma verbunden) mehreren Wertzuweisungen.

Die WHERE-Klausel arbeitet mit einer oder mehreren Bedingungen in der gleichen Weise wie beim SELECT-Befehl, siehe WHERE-Klausel im Detail. Wenn keine WHERE-Bedingung angegeben wird, werden alle Zeilen geändert.

Einzelheiten werden behandelt in:

[Bearbeiten] Löschungen mit DELETE

Mit dem DELETE-Befehl werden Daten in einer Tabelle gelöscht, und zwar null, eine, mehrere oder alle Zeilen mit einem einzigen Befehl. Dieser benutzt die folgende Syntax:

DELETE FROM <name>
[ WHERE <bedingungsliste>  ];

Als <name> ist eine vorhandene Tabelle anzugeben. Unter bestimmten starken Einschränkungen kann auch eine VIEW angegeben werden, siehe dazu Erstellen von Views.

Die WHERE-Klausel arbeitet mit einer oder mehreren Bedingungen in der gleichen Weise wie beim SELECT-Befehl, siehe WHERE-Klausel im Detail. Wenn keine WHERE-Bedingung angegeben wird, werden alle Zeilen gelöscht.

Einzelheiten werden behandelt in:

[Bearbeiten] Tabelle leeren mit TRUNCATE

Mit dem TRUNCATE-Befehl werden sämtliche Daten in einer Tabelle gelöscht:

TRUNCATE TABLE <name>;

Dies entspricht dem DELETE-Befehl ohne WHERE-Klausel:

DELETE FROM <name>;

Bei diesen beiden Befehlen gibt es allerdings den Unterschied, dass die gelöschten Daten nach TRUNCATE nicht mehr mit ROLLBACK wiederhergestellt werden können, da die Transaktion implizit abgeschlossen wird. Da deshalb keine Protokollierung stattfindet, ist die Anweisung üblicherweise schneller als eine entsprechende DELETE-Anweisung.

Achtung: TRUNCATE TABLE kann nicht mit Foreign Keys umgehen!            [Nach oben]

[Bearbeiten] TCL – Transaction Control Language

Transaktionen sorgen für die Datenintegrität: Anweisungen, die logisch zusammengehören, werden entweder alle vollständig oder überhaupt nicht ausgeführt. Die TCL-Anweisungen steuern Transaktionen.

[Bearbeiten] Bestätigen mit COMMIT

Abschließen einer Transaktion, wobei alle seit Beginn der Transaktion durchgeführten Änderungen bestätigt und endgültig gespeichert werden.

COMMIT;

Nicht alle Datenbanken unterstützen Transaktionen. Einige können auch je nach Konfiguration oder verwendetem Tabellentyp in verschiedenen Modi arbeiten. So findet im sogenannten "Auto Commit"-Modus nach Ausführung jeder DML-Anweisung sofort ein COMMIT statt, die Änderungen können also nicht mehr über ROLLBACK rückgängig gemacht werden.

[Bearbeiten] Widerruf mit ROLLBACK

Abschließen einer Transaktion, wobei alle seit Beginn der Transaktion durchgeführten Änderungen rückgängig gemacht werden.

ROLLBACK;

Insofern das verwendete DBMS Transaktionen unterstützt, wird durch die ROLLBACK-Anweisung der Dateninhalt auf den Zustand vor Ausführung der seit dem letzten COMMIT/ROLLBACK durchgeführten Datenmanipulationen zurückgesetzt.            [Nach oben]

[Bearbeiten] DCL – Data Control Language

Eine "vollwertige" SQL-Datenbank enthält umfassende Regelungen über die Vergabe von Rechten für den Zugriff auf Objekte (Tabellen, einzelne Felder, interne Funktionen usw.). Am Anfang stehen diese Rechte nur dem Ersteller der Datenbank und dem System-Administrator zu. Andere Benutzer müssen ausdrücklich zu einzelnen Handlungen ermächtigt werden.

Die vielfältigen Abstufungen der Rechte und Optionen sind in der jeweiligen DBMS-Dokumentation nachzulesen.

[Bearbeiten] GRANT

Mit diesem Befehl wird ein Recht übertragen:

GRANT <privileg> ON <objekt> TO <benutzer>

Beispiele:

Der Benutzer Herr_Mueller darf Abfragen auf die Tabelle Abteilungen ausführen
Crystal Clear app terminal.png SQL-Quelltext:

GRANT SELECT ON Abteilungen TO Herr_Mueller

Die Benutzerin Frau_Schulze darf die Tabelle Abteilungen ändern
Crystal Clear app terminal.png SQL-Quelltext:

GRANT UPDATE ON Abteilungen TO Frau_Schulze

           [Nach oben]

[Bearbeiten] REVOKE

Mit diesem Befehl wird ein Recht widerrufen:

REVOKE <privileg> ON <objekt> FROM <benutzer>

Beispiel:

Herr_Mueller darf künftig keine solche Abfragen mehr ausführen
Crystal Clear app terminal.png SQL-Quelltext:

REVOKE SELECT ON Abteilungen FROM Herr_Mueller

           [Nach oben]


Fußnoten
  1. Diese Befehlsreferenz war Teil eines nicht mehr vorhandenen Buches "SQL". Bei der Übernahme wurden Gliederung und Struktur angepasst, Beispiele weitgehend gestrichen, weil sie sowieso Teil des Buches sind, und auf die WebLinks verzichtet, weil diese in der Einleitung und den Weblinks stehen.


Persönliche Werkzeuge