- Data Definition Language (DDL)
- Data Manipulation Language (DML)
- Funktionen
- Verschiedenes
- Herstellerspezifisches
- Definitionen
- Notation der Befehle
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ä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> ] [ <OrderKlausel> ]; |
WHERE-Klausel
WHERE wird benutzt um eine Selektion zu realisieren, also eine Einschränkung der Zeilenzahl.
WHERE <Bedingung> |
ORDER-Klausel
ORDER BY wird benutzt um eine Selektion zu sortieren. Als Argument wird eine FeldNamensListe angegeben. Durch den nachfolgenden Befehl ASC wird aufsteigend, mit DESC wird absteigend sortiert.
ORDER BY <FeldNamensListe> ASC | DESC |
Funktionen
Boolesche Ausdrücke: Bedingungen
- Eine Bedingung kennt für Zahlenwerte die Operatoren
=, <, >, <>, <= und >= - Zeichenketten können mit = auf Gleichheit überprüft werden.
- Der Zeichenkettenvergleichsoperator LIKE erlaubt das Vergleichen mit Wildcards. Ein Prozentzeichen steht für beliebig viele beliebige Zeichen. Der Unterstrich steht für genau ein Zeichen.
- Mit den Befehlen BETWEEN und AND lässt sich ein Bereich eingrenzen.
charwert BETWEEN 'A' AND 'Z' zahlenwert BETWEEN 12 AND 25
- IS NOT NULL oder IS NULL stellt fest ob der Wert bereits besetzt wurde oder nicht.
- NOT
- AND
- OR
- XOR
String-Funktionen
- CONCAT(str1, str2, ...) verbindet mehrere Strings miteinander
- FIND_IN_SET(str, stringliste) sucht nach einen String
- LOWER(str) konvertiert den String in Kleinbuchstaben.
- UPPER(str) konvertiert den String in Großbuchstaben.
- Die Funktion LENGTH(str) ermittelt die Länge des Strings.
- SUBSTR(str FROM pos FOR len) liefert den Teilstring, der bei pos beginnt und die Länge len hat.
Datumsfunktionen
Das Datum liegt in der Regel in der folgenden Form vor:'2019-05-31 17-12:58'
- Die Funktion NOW() liefert den aktuellen Zeitpunkt
- Um eine Zeitspanne zu einem Datum zu addieren gibt es die Funktion DATE_ADD, zum subtrahieren DATE_SUB. Als Parameter erwarten sie das Datum und den Zeitraum.
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ä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 FLOAT Fließkomma DATE Datum: 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 * |