
SQL-Sprachreferenz
|
CREATE
TABLE
<Tabellenname> [( Spaltenname Datentyp [,Spaltenname, Datentyp]...)]; |
Erzeugen einer neuen Tabelle.
Beispiel:
CREATE TABLE Kunde
(Kunden_Nr CHAR(4),
Vorname CHAR(15),
Name CHAR(15),
Strasse CHAR(15),
PLZ CHAR(6),
Ort CHAR(15));
Wichtige Datentypen:
|
INTEGER |
numerisch, Wertebereich -9.999.999.999 ... 99.999.999.999 |
|
|
DECIMAL(p, q) |
numerisch, p: 1 .. 19, q: 0 .. 18 |
Beispiel: -0.97856 |
|
NUMBER(p, q) |
numerisch, p: 1 .. 20, q: 0 .. 18 |
Beispiel: 0.9e+24 |
|
CHAR(n) |
Zeichenkette, n: 1 .. 254 |
Beispiel: 'Testwort' |
|
DATE |
Datum |
Beispiel: '25.04.96' |
|
ALTER TABLE <Tabellenname> |
Hinzufügen von Spalten.
Beipiel:
ALTER TABLE Kunde
ADD (GebDatum DATE);
|
DROP TABLE <Tabellenname>; |
Löschen einer Tabelle.
Beispiel:
DROP TABLE Kunde;
|
INSERT INTO <Tabellenname>
[(<Spaltenliste>)] |
Fügt eine Reihe von Daten in die Tabelle ein.
Beispiel:
INSERT INTO Kunde
VALUES ('K001', 'Heiner', 'Müller', 'Am Burggraben', '02345', 'Wallstedt');
|
UPDATE <Tabellenname> |
Verändern bestehender Zeilen.
Beispiel:
UPDATE Kunde
SET Zuname = 'Meier'
WHERE Kunden_Nr = 'K001';
|
COMMIT; |
- alle innerhalb einer Transaktion gemachten
Änderungen bleibend machen
- eine Transaktion beenden
|
CREATE
VIEW
<Viewname> [(<Spaltenliste>)] |
Erzeugen einer Sicht (virtuelle Tabelle).
Beispiel:
CREATE VIEW KundView (Rufname, Familienname)
AS SELECT Vorname, Zuname
FROM Kunde;
|
DROP VIEW <Viewname>; |
Löschen einer Sicht (virtuellen Tabelle).
Beispiel:
DROP VIEW KundView;
SQL-Plus-Kommandos müssen nicht mit einem Semikolon abgeschlossen werden.
|
CONNECT <Datenbankname> |
Stellt eine Verbindung zu der angegebenen
Datenbank her. Eine bestehende Verbindung wird beendet.
|
START <Filename> |
Führt die in der Textdatei <Filename>
gespeicherten SQL-Kommandos aus.
|
QUIT |
Verlassen von SQL-Plus
|
SELECT [DISTINCT] * |
<Spaltenliste> |
DISTINCT (engl.: unterschiedlich) verhindert, daß im Ergebnis mehrere Zeilen mit denselben Werten vorkommen.
In der <Spaltenliste> werden die Namen der gewünschten Spalten der in der <Tabellenliste> angegebenen Tabellen aufgeführt:
[<Qualifikator>.] <Spaltenname> [, [<Qualifikator>.]<Spaltenname>] ...
Vor dem Spaltennamen kann ein s.g. Qualifikator stehen. Das ist eine Namenserweiterung, damit der Spaltenname eindeutig wird.
Ein Qualifikator kann entweder der vollständige Tabellenname oder ein in der <Tabellenliste> festlegbarer Aliasname der Tabelle sein. Ein Aliasname ist nur innerhalb eines Select-Befehles gültig !
Beispiel: siehe Beispiel für Vergleichsausdrücke (weiter unten)
Wird anstelle der <Spaltenliste> der Stern
(*) angegeben, so werden alle Spalten der in der Tabellenliste
verzeichneten Tabellen zurückgegeben. (keine Auswahl von Spalten)
In der <Tabellenliste>
werden die Tabellennamen angegeben, auf die sich der SELECT-Befehl bezieht.
Mehr als ein Tabellenname erzeugt aus diesen Tabellen einen s.g. Verbund
(engl.: join)
Der WHERE-Komponente folgt eine
<Ausdrucksliste>, die die Suchbedingung des SELECT-Befehls
darstellt.
Die Auswertung der Suchbedingung ergibt entweder den Wert wahr oder falsch.
Dadurch wird entschieden, ob eine Zeile in das Ergebnis des SELECT-Befehls
aufgenommen wird oder nicht.
Mit Suchbedingungen werden Prädikate geschrieben. Das sind
Aussagen über eine Eigenschaft einer Zeile.
Ein Prädikat kann aus mehreren Teilprädikaten bestehen, die über logische
Operatoren (AND / OR / NOT) miteinander verknüpft sind.
|
Prädikat |
Beispiel |
|
einfacher Vergleichsausdruck |
Preis > 1000 |
|
zusammengesetzter Vergleichsausdruck |
Name
>= 'A' AND Name < 'N' |
|
BETWEEN-Prädikat |
Betrag BETWEEN 100 AND 1000 |
|
IN-Prädikat |
Ort IN ('Halle', 'Merseburg', 'Querfurt') |
|
EXISTS-Prädikat |
EXISTS (Select Kunden_Nr FROM Rechnung) |
|
LIKE-Prädikat |
Titel
LIKE '%Oracle%' |
Vergleichsoperatoren:
= gleich
< kleiner
> größer
<= kleiner oder gleich
>= größer oder gleich
<> ungleich
Einer der Operanden in einem Vergleichsausdruck muß einen Spaltennamen enthalten !
In der WHERE-Komponente eines SELECT-Befehls ist es möglich, einen weiteren SELECT-Befehl anzugeben. Dieser geschachtelte SELECT-Befehl wird Unterabfrage (engl: subquery) genannt.
Beispiel: Kundendaten des Kunden mit dem höchsten
Rechnungsbetrag, mindestens jedoch 1000,-DM
SELECT Kunden_Nr, Vorname, Name, Ort
FROM Kunde K
WHERE 1000 <= (SELECT MAX (Betrag)
FROM Rechnung R
WHERE R.Kunden_Nr = K.Kunden_Nr);
In dieser Unterabfrage wurde zusätzlich eine SQL-Funktion (MAX) verwendet, die
im obigen Falle den größten Wert der Spalte mit dem Namen Betrag ermittelt.
Außerdem wurde mit Alias-Namen für die beiden Tabellen Rechnung
und Kunde gearbeitet.
Mit dem BETWEEN-Prädiakt kann
geprüft werden, ob ein Wert innerhalb eines Intervalls (Bereichsgrenzen
eingeschlossen) liegt.
Mit NOT BETWEEN kann leicht getestet werden, ob ein Wert außerhalb eines
Intervalls liegt.
Beispiel: Kundendaten der Kunden, deren
Kundennummer nicht im Bereich K100 bis K400 liegt
SELECT Kunden_Nr, Name, Ort
FROM Kunde
WHERE Kunden_Nr NOT BETWEEN 'K100' AND 'K200';
Es wird getestet, ob der vor IN
angeführte Ausdruck in einer nach IN angegebenen Ausdrucksliste (Wertemenge)
enthalten ist.
Diese Wertemenge kann auch Ergebnis einer Unterabfrage sein.
Beispiel: Ausgabe der Kundendaten der Kunden,
die eine Rechnung über 1000 Mark erhalten haben
SELECT Kunden_Nr, Name, Vorname, Ort
FROM Kunde
WHERE Kunden_Nr IN (SELECT Kunden_Nr
FROM Rechnung
WHERE Betrag > 1000);
Es wird bestimmt, ob die dem EXIST-Prädikat folgende Unterabfrage mindestens eine Ergebniszeile liefert.
Beispiel: Auswahl aller Kundendaten, die auch
(mindestens) eine Rechnung erhalten haben.
SELECT *
FROM Kunde
WHERE EXISTS (SELECT Kunden_Nr
FROM Rechnung
WHERE Rechnung.Kunden_Nr = Kunde.Kunden_Nr;
In dem nach LIKE angegebenen Ausdruck können Platzhalter verwendet werden. So bedeutet der Unterstrich '_' genau ein beliebiges Zeichen, das Prozentzeichen '%' steht für eine beliebig lange Zeichenkette.
Beispiel: Kundendaten der Kunden, die
Meierhofer, Mayerhofer oder so ähnlich heißen.
SELECT *
FROM Kunde
WHERE name LIKE 'M__erhofer';
Die GROUP BY-Komponente faßt mehrere
Zeilen zu einer Zeile zusammen (gruppiert Zeilen)
Der in der GROUP BY-Komponente verwendete Spaltenname muß in der
<Spaltenliste> der SELECT-Komponente ebenfalls angegeben worden sein.
Zusätzlich zu diesem Spaltennamen dürfen in der Spaltenliste ebenfalls
SQL-Funktionen (s.u.) auftreten.
Beispiel: Kundennummer, Zuname und Summe der
Rechnungsbeträge je Kunde.
SELECT K.Kunden_Nr, Name, SUM(Betrag)
FROM Kunde K, Rechnung R
WHERE K.Kunden_Nr = R.Kunden_Nr
GROUP BY K.Kunden_Nr, Name;
Mit der ORDER BY-Komponente wird das Ergebnis einer Abfrage in der gewünschten Reihenfolge bereitgestellt. Die Ergebnisreihen werden nach den angegebenen Spalten sortiert, je nach ASC oder DESC aufsteigend oder absteigend.
Beispiel: Alle Studenten des Matrikel INF94
geordnet nach Alter (der jüngste zuerst)
SELECT *
FROM Studenten
WHERE Matrikel = 'INF94'
ORDER BY GebDatum DESC;
Werden mehrere Spaltennamen angegeben, so ergibt sich eine hierarchische
Sortierung.
Beispiel: Alle Kunden geordnet nach Name und
Vorname ausgeben:
SELECT *
FROM Kunde
ORDER BY Name, Vorname;
COUNT
Die COUNT-Funktion liefert die Anzahl der ausgewählten Reihen anstelle ihrer Niederschrift.
Beispiel: Anzahl der Kunden in der
Kundendatei:
SELECT COUNT(*)
FROM Kunde;
SUM
Die SUM-Funktion liefert die Summe aller Werte in den selektierten Reihen einer numerischen Spalte.
Beispiel: Summe aller Rechnungsbeträge des
Kunden K001.
SELECT SUM(Betrag)
FROM Rechnung
WHERE Kunden_Nr = 'K001';
MIN, MAX
Die MIN-Funktion liefert den kleinsten Wert aller
selektierten Reihen einer Spalte.
Die MAX-Funktion liefert den größten Wert aller selektierten Reihen einer
Spalte.
Beispiel: Der kleinste Rechnungsbetrag.
SELECT MIN(Betrag)
FROM Rechnung;
AVG
Die Funktion AVG liefert den Durchschnitt (Gewogenes arithmetisches Mittel) aller selektierten Reihen einer numerischen Spalte.
Beispiel: Der durchschnittliche
Rechnungsbetrag.
SELECT AVG(Betrag)
FROM Rechnung;
(C) Klaus Rittmeier