Notizen zu SQL

Willemers Informatik-Ecke

Data Definition Language (DDL)

Tabellen

Anlegen einer Tabelle

Eine Datenbank besteht aus mehreren Tabellen, die zunächst einmal erzeugt werden müssen.

CREATE TABLE <TabellenName> (
  [ PRIMARY KEY ( <FeldNamensListe> ), ]
  [ FOREIGN KEY ( <FeldName> ) REFERENCES <TabellenName>, ]*
  [ UNIQUE ( <FeldNamensListe> ), ]
  <FeldDeklarationen>
)

Die Verwendung des Schlüsselwortes UNIQUE an dieser Stelle wird nicht von allen Datenbanken unterstützt. In solchen Fällen verwendet man einen INDEX mit dem Attribut UNIQUE.

Löschen einer Tabelle

Mit DROP TABLE <TabellenName> wird eine Tabelle wieder gelöscht.

Ändern der Tabelle

Das Ändern einer Tabelle sollte vermieden werden, kann aber durch den Befehl ALTER TABLE erreicht werden. Nicht alle Datenbanken unterstützen diesen Befehl.

ALTER TABLE <TabellenName> DROP <Spalte>
ALTER TABLE <TabellenName> ADD <FeldDeklarationen>
ALTER TABLE <TabellenName> MODIFY <FeldDeklaration>

Mit DROP wird eine Spalte wieder gelöscht. Mit ADD wird eine oder mehrere Spalten hinzugefügt. Mit MODIFY wird eine Spalte in ihren Datentyp geändert.

Index

Ein Index ist schneller Zugriffspfad auf die Daten. Durch das Wort UNIQUE wird gewährleistet, daß der Inhalt für die Tabelle eindeutig ist.

CREATE [UNIQUE] INDEX <Indexname> 
    ON <TabellenName> ( <FeldNamensListe> );

Key (Primary und Foreign)

Ein Key bietet die Möglichkeit, einzelne Sätze aus anderen Tabellen zu referenzieren. Die Zieltabelle muss einen Primary Key besitzen, über den die Zeilen eindeutig bestimmt werden können. Er wird mit dem CREATE TABLE definiert oder kann mit ALTER TABLE nachdefiniert werden. Ein Primary Key erfordert immer einen unique Index.

Auf den Primary Key kann sich der Foreign Key einer anderen Tabelle beziehen. In dieser Spalte befindet sich der Wert des Primary Key der Zieltabellenzeile, auf den referenziert werden soll. Bevor ein Foreign Key gesetzt wird, muss der Primary Key der Zieltabelle definiert sein.

ALTER TABLE <TabellenName>  { [ADD] | DROP } 
    PRIMARY KEY ( <FeldNamensListe> );
ALTER TABLE <TabellenName>  { [ADD] | DROP } 
    FOREIGN KEY <KeyName> ( <FeldName> ) REFERENCES <TabellenName>;

Ansichten (Views)

Mit CREATE VIEW kann eine Tabelle eingeschr&aml;nkt werden. und damit verschiedenen Benutzern nur Teile der Datenbank zur Verfügung gestellt werden.

CREATE VIEW <ViewName> [ (<FeldNamensListe>) ]
  AS SELECT <Select-Parameter> ;

Wird die FeldNamensListe angegeben, werden die Spaltennamen des FROM-Attribut auf diese Namen umgesetzt.

Data Manipulation Language (DML)

INSERT

INSERT INTO <TabellenName> ( <FeldNamensListe> )
  VALUES (<Wert> [, <Wert>]* );

Es kann durch Kombination mit einer Abfrage auch der Inhalt einer oder mehrerer anderer Tabellen eingefügt werden.

INSERT INTO <Tabellenname> [ ( <Feldname> [, <Feldname]* ) ]
  SELECT <Select-Parameter> ;

UPDATE

UPDATE <TabellenName> SET <FeldName>=<Wert> [,<FeldName>=<Wert>]* <WhereKlausel>

DELETE

DELETE FROM <TabellenName> <WhereKlausel>

Anfragen: SELECT

Eine Abfrage wird durch den Befehl SELECT realisiert. Die Besonderheiten liegen in seinen Parametern.

SELECT {<FeldNamensListe> | '*' } FROM <TabellenName> [ <WhereKlausel> ] ;

WHERE-Klausel

WHERE wird benutzt um eine Selektion zu realisieren, also eine Einschränkung der Zeilenzahl.

	WHERE <Bedingung>

Das WHERE kennt neben =, <, >, <>, <= und >= die Vergleichsoperatoren:

LIKE enthält die Zeichenkette. Dabei gelten die Wildcards _ für ein Zeichen und % für eine beliebige Zeichenkette.
BETWEEN der Wert liegt zwischen zwei Werten. Beispiel: Wert BETWEEN 'A' AND 'Z'
IS NULL der Wert ist bisher nicht besetzt worden. Beispiel: Wert IS NULL

Verschiedenes

Rechtevergabe

Mit dem Befehl GRANT werden Rechte an Datenbankbenutzer vergeben.

GRANT <Rechte> ON <Objekt> TO <Benutzer>

Als Objekt werden in der Regel Tabellen oder Datenbanken angegeben. Als Rechte können einzelne SQL-Befehle aufgeführt werden oder ALL PRIVILEGES, um alle Rechte über das Objekt zu erlangen.

Mit dem Befehl REVOKE werden diese Rechte wieder entzogen.

REVOKE <Rechte> ON <Objekt> FROM <Benutzer>

Konstanten

NULL unterscheidet sich von der 0. W&aml;hrend 0 einfach eine Zahl ist, bedeutet NULL, dass dieses Feld keinen Inhalt hat.

Ein Feld kann durch IS NULL auf NULL abgefragt werden. NOT NULL ist die Festlegung in der Tabellendefinition, dass ein Feld niemals leer sein darf.

Eine Zeichenkettenkonstante wird durch einfache Hochkommata eingeschlossen. Zeichenkettenkonstanten, die nur durch Zeilenvorschübe getrennt sind, werden wie eine Zeichenkettenkonstante behandelt.

Ein Datum wird nach ISO-8601 in der Reihenfolge Jahr, Monat und Tag durch Minuszeichen getrennt geschrieben. Der 23. Mai 1949 schreibt sich also '1949-05-23'. Die Konstante CURRENT_DATE steht für das heutige Datum.

Kommentare

Kommentare werden durch zwei Minuszeichen abgegrenzt. Der Rest der Zeile wird vom Interpreter ignoriert.

Herstellerspezifisches

Die Systemtabellen

Die Anzeige der Datenbankstruktur erfolgt durch Abfrage der Data Dictionary Tabellen. Es handelt sich um ganz normale
Abfragebefehle, die auf die Systemtabellen angewendet werden. Die Namen und die Struktur der Tabellen sind von Hersteller zu Hersteller verschieden.

Oracle

SELECT * FROM USER_TABLES;
SELECT * FROM ALL_TABLES;
SELECT * FROM DBA_TABLES;

gupta/Centura

SELECT * FROM systables;                           zeigt alle angelegten Tabellen der DB
SELECT * FROM syscolumns WHERE tbname='ORDERS';    zeigt alle Spalten der Tabelle ORDERS

Ex- und Import der Datenbankdaten

gupta / Centura

UNLOAD  {  ASCII | DIF | [ DATA ] SQL } <DateiName> [ OVERWRITE ] <TabellenName>
LOAD { ASCII | DIF | SQL } <DateiName> ;

Mit dem Schlüsselwort ASCII werden reine Textdateien mit den Tabelleninhalten erzeugt. DIF ist ein Standard zum Austausch von Tabellen zwischen Datenbanken und Spreadsheets und enthält keine Strukturinformation. SQL erzeugt eine Datei, die SQL-Befehle enthält, die die Tabelle mit allen Inhalten erzeugen.

Beim Export (UNLOAD) sind nur Tabellen, nicht aber VIEWs zulässig. Auch das Anhängen von WHERE ist nicht möglich.

<DateiName> bezeichnet einen Dateinamen, wie er im Betriebssystem des lokalen Rechners üblich ist.

Definitionen

FeldDeklarationen::
<Feldname> <Typ> [NOT NULL] [ , <Feldname> <Typ> [NOT NULL] ]*

FeldNamensListe::
<Feldname> [ ,<Feldname> ]*

Eine durch Komma getrennte Liste von Feldnamen.

Typ::
Der Datentyp kann einer der folgenden sein:

CHAR(<n>)Zeichenkette
NUM [(<StellenZahl> [, <NachKommaStellen>])]ganzzahlig
FLOATFließkomma
DATEDatum: Konstante: 12/24/1999

TabellenName
Eine Tabelle, ein View oder eine virtuelle Tabelle, die durch eine Abfrage gebildet wird.
Rechte::
<Recht> [ ,<Recht> ]*

Eine durch Komma getrennte Liste von Rechten.

Recht::
{ SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER | CREATE | TEMPORARY | EXECUTE | USAGE | ALL PRIVILEGES }

Notation der Befehle

 <xxx> 
xxx ist durch etwas anderes zu füllen, beispielsweise Namen oder Werte
 [xxx] 
xxx kann auftreten, muß aber nicht.
 [xxx]* 
xxx kann nicht oder mehrfach auftreten.
 { xxx | yyy | zzz } 
Es muß exakt eines von xxx oder yyy oder zzz auftreten.
 'x' 
Hier ist das Zeichen x, nicht das Metazeichen x gemeint. Bsp.: '*' meint das Zeichen *

Homepage (C) Copyright 1999, 2002, 2010 Arnold Willemer