 |
SQL Kurzreferenz / SQL Referenz
Empfehlung
Um auf Datenbanken per SQL zuzugreifen (unabhängig vom
Datenbank-System), um SQL Batch Jobs laufen zu lassen oder einfach den
Inhalt von Datenbanken zu browsen, verwende ich das kostenlose
Freeware-Programm SQL
Workbench von Thomas Kellerer.
nach oben
Data Definition Language (DDL): Zum Erzeugen und Löschen von
Datenbankobjekten
DATENBANK: Erstellen - Löschen
|
- Erstellen:
|
CREATE
|
DATABASE
|
datenbankname;
|
|
- Löschen:
|
DROP
|
DATABASE
|
datenbankname;
|
|
- Beispiel:
|
CREATE
|
DATABASE
|
biblio;
|
TABELLE: Erstellen - Löschen
|
- Erstellen:
|
CREATE
|
TABLE
|
tabellenname
|
|
|
|
|
|
|
(
|
spaltenname
|
datentyp
|
[NOT NULL],
|
|
|
|
|
|
[...,]
|
|
|
|
|
|
|
|
spaltenname
|
datentyp
|
[NOT NULL]
|
);
|
|
- Löschen:
|
DROP
|
TABLE
|
tabellenname;
|
|
|
|
|
- Datentypen:
|
CHAR(n), INT, SMALLINT, NUMBER, FLOAT(n), REAL, DOUBLE
PRECISION, DEC(m, [n]), DATE. Weitere Informationen über
Datentypen sind in DDL Seite 4 zu finden.
|
TABELLE: Spalten hinzufügen - entfernen
|
- Hinzufügen:
|
ALTER TABLE
|
tabellenname
|
|
|
|
|
ADD
|
spaltenname
|
datentyp
|
[NOT NULL],
|
|
|
|
[...,]
|
|
|
|
|
|
spaltenname
|
datentyp
|
[NOT NULL];
|
|
- Entfernen:
|
ALTER TABLE
|
tabellenname
|
|
|
|
|
|
DROP
|
(spaltenname,
|
|
|
|
|
|
[...,]
|
|
|
|
|
|
spaltenname);
|
|
|
- Oder 1:
|
ALTER TABLE
|
tabellenname
|
|
|
|
|
|
DROP
|
COLUMN
|
spaltenname;
|
INDEX: Definieren - Löschen
|
- CREATE [UNIQUE]
|
INDEX indexname ON tabellenname (spaltenname, [...]);
|
|
- DROP
|
INDEX indexname;
|
nach oben
Data Manipulation Language (DML): Zum Ändern, Löschen und
Hinzufügen von Daten
DATEN: In Tabelle eingeben - aktualisieren - löschen
|
- Zeilenweise:
|
INSERT
|
INTO
|
tabellenname
|
|
|
|
|
|
|
|
(spaltenname,
|
[...,]
|
spaltenname)
|
|
|
|
|
VALUES
|
(wert,
|
[...,]
|
wert);
|
|
|
- Mehrere Sätze:
|
INSERT
|
INTO
|
tabellenname
|
|
|
|
|
|
SELECT
|
spaltenname,
|
[...,]
|
spaltenname
|
FROM
|
tabellen;
|
|
- Aktualisieren:
|
UPDATE
|
|
tabellenname
|
|
|
|
|
|
|
SET
|
spaltenname =
|
ausdruck,
|
|
|
|
|
|
|
[...,]
|
|
|
|
|
|
|
|
spaltenname =
|
ausdruck
|
|
|
|
|
|
WHERE
|
bedingung;
|
|
|
|
|
- Löschen:
|
DELETE
|
FROM
|
tabellenname
|
[aliasname]
|
|
|
|
|
|
WHERE
|
|
bedingung;
|
|
|
nach oben
Commit und Rollback: Bestätigen und Verwerfen einer
Datenänderung
COMMIT, ROLLBACK: Beschreibung
|
- COMMIT;
|
Niederschreiben zwischenzeitlich gemachter Änderungen an
den Daten einer Datenbank.
|
|
- ROLLBACK;
|
Macht Änderungen an den Daten rückgängig.
Hinweis:
- nicht alle Änderungen können rückgängig
gemacht werden
- damit Änderungen rückgängig gemacht werden
können, muss die Datenbank-Funktion AUTOCOMMIT
ausgeschaltet sein
|
nach oben
Data Query Language (DQL): Daten in der Datenbank auswählen,
aufbereiten und auslesen
WHERE-Klausel: Logische Ausdrücke
|
- [NOT]
|
BETWEEN x AND y
|
|
|
- [NOT]
|
IN (x1, x2, x3, ..., xn)
|
|
|
- [NOT]
|
LIKE ‚jokerzeichenfolge'
|
‚_' ersetzt ein beliebiges Zeichen
|
|
|
|
‚%' ersetzt beliebig viele Zeichen
|
|
- Operatoren:
|
+, -, *, /, =, != (ungleich), >, <, >=, <=, AND,
OR, NOT
|
|
- IS [NOT]
|
NULL bei Frage nach ‚NULL'-Wert
|
DISTINCT: Verhindert Mehrfachnennung
- SELECT DISTINCT spalte FROM tabelle;
Arithmetische Funktionen
|
-
|
@ABS(x) --> |x|, @FACTORIAL(x) --> x!, @LN(x) -->
ln(x), @LOG(x) --> lg(x)
|
|
-
|
@INT(x) --> int(x), @ROUND(x, y) --> x auf y Stellen
gerundet
|
|
-
|
@SIN(x) --> sin(x), @COS(x) --> cos(x), @TAN(x) -->
tan(x)
|
|
-
|
@ACOS(x) --> arccos(x), @ASIN(x) --> arcsin(x), @ATAN
(x) --> arctan(x)
|
|
-
|
@SQRT(x) --> Wurzel von (x)
|
Arithmetische Gruppenfunktionen
|
-
|
AVG(M) --> Durchschnitt von (M), COUNT(M) --> Anzahl der
Einträge (M)
|
|
-
|
MAX(M)/MIN(M) --> größter/kleinster Eintrag von
(M), SUM(M) --> Summe(M)
|
|
-
|
MEDIAN(M) --> Median von (M), SDV(M) -->
Standardabweichung von (M)
|
GROUP BY-Klausel: Faßt gleiche Spalteninhalte
zusammen
- SELECT deptno, SUM(sal) FROM emp GROUP BY deptno
HAVING-Klausel: Bedingung für GROUP BY (ähnlich
WHERE, nur für Gruppen)
- SELECT job, AVG (sal) FROM emp GROUP BY job HAVING COUNT (*)
> 2;
ORDER BY-Klausel: Sortiert die Ausgabe nach der/den angegebenen
Spalte(n)
- SELECT ename, sal, empno FROM emp WHERE deptno = 30 ORDER BY
sal;
Bearbeitung alphanumerischer Felder
|
-
|
@UPPER(‚xYz') --> ‚XYZ', @LOWER(‚xYz') --> ‚xyz'
|
|
-
|
SELECT ename FROM emp WHERE @UPPER (ename) = ‚WARD';
|
Konversion von NULL-Werten: @NULLVALUE (wert, ersatzwert)
- SELECT ename, (sal + @NULLVALUE (comm,0)) FROM emp;
Inner Join: Verknüpfung von Tabellen
|
- Beispiel:
|
SELECT
|
b.buch_nr,
|
autor,
|
titel,
|
leser_nr
|
|
|
FROM
|
buecher b,
|
verleih v
|
|
|
|
|
WHERE
|
b.buch_nr =
|
v.buch_nr;
|
|
|
|
- Beschreibung:
|
Hier werden die beiden Spalten buecher.buch_nr und
verleih.buch_nr verglichen, und bei gleichem Inhalt in der Tabelle
ausgegeben. Somit erhält man eine Tabelle mit dem Inhalt von
mehreren Tabellen. Alias-Namen sind nicht zwingend, aber ratsam.
|
Auto Join/Self Join: Verknüpfung einer Tabelle mit sich
selbst
|
- Beispiel:
|
SELECT
|
emp1.name,
|
emp1.sal,
|
emp2.name,
|
emp2.sal
|
|
|
FROM
|
emp emp1,
|
emp emp2
|
|
|
|
|
WHERE
|
(
|
(emp2.sal >
|
emp1.sal)
|
|
|
|
|
AND
|
(emp1.ename =
|
‚BLAKE')
|
);
|
|
- Beschreibung:
|
Hier können Angaben einer Tabelle miteinander
verknüpft und verglichen werden. Alias-Namen sind wegen der
garantiert doppelt vorkommenden Namen Pflicht.
|
Outer Join: Verknüpfung von Tabellen
|
- Beispiel:
|
SELECT * FROM u, v WHERE u.s1(+) = v.s1(+);
|
--> vollständig
|
|
|
SELECT * FROM u, v WHERE u.s1(+) = v.s1;
|
--> einseitig
|
|
- Beschreibung:
|
Bei dieser Tabellenverknüpfung werden auch Zeilen
dargestellt, die nur in einer Tabelle vorhanden sind. Die Spalten der
anderen Tabelle bleiben an dieser Stelle leer. Beim vollständigen
Outer Join geschieht dies bidirektional, beim einseitigen Outer Join
nur in eine Richtung.
|
Unterabfragen: Einzeilige (= Single Row Subquery)
|
- Beispiel:
|
SELECT
|
ename
|
FROM
|
emp
|
|
|
|
|
WHERE
|
hiredate > (
|
SELECT
|
hiredate
|
FROM
|
emp
|
|
|
|
|
WHERE
|
ename =
|
‚FORD'
|
);
|
|
- Beschreibung:
|
Eine SELECT-Unterabfrage ist dann einzeilig (=Single Row
Subquery), wenn sie genau eine Zeile als Ergebnis liefert. Das Ergebnis
der einzeiligen SELECT-Abfrage kann mit <, =, >, <= und >=
verglichen werden.
|
Unterabfragen: Mehrzeilige (= Multiple Row Subquery)
|
- Beispiel:
|
SELECT
|
*
|
FROM
|
buecher
|
|
|
|
|
|
|
|
WHERE
|
|
buch_nr
|
IN (
|
SELECT
|
buch_nr
|
FROM
|
verleih
|
);
|
|
- Beschreibung:
|
Eine SELECT-Unterabfrage ist dann mehrzeilig (=Multiple Row
Subquery), wenn sie als Ergebnis eine mehrzeilige Tabelle liefert, die
nur mit Mengenoperatoren verglichen werden kann.
|
|
- Mengenoperatoren sind:
|
ANY, ALL, [NOT] IN, EXISTS, UNION, INTERSECT, MINUS. Auf den
Seiten DQL 40 und DQL 42 werden diese beschrieben.
|
Unterabfragen: Abhängige (=Correlated Subquery)
|
- Beschreibung:
|
Eine Abhängige Unterabfrage bezieht sich auf die
übergeordnete SELECT-Klausel und wird in DQL ab Seite 43
beschrieben.
|
VIEW: Gefilterte Ausgabe einer Tabelle
|
- VIEW anlegen:
|
CREATE
|
VIEW
|
viewname
|
|
|
|
|
|
|
|
AS
|
SELECT
|
spalte1,
|
spalten
|
|
|
|
|
|
|
FROM
|
tabelle
|
|
|
|
|
|
|
|
WHERE
|
bedingung;
|
|
|
|
|
- VIEW ausgeben:
|
SELECT
|
*
|
FROM
|
viewname;
|
|
|
|
|
- Beschreibung:
|
Eine VIEW ist eine Art Alias-Name für einen kompletten
SELECT-Befehl. Wenn in der VIEW beispielsweise verschiedene Spalten
(z.B. mit persönlichen Daten) ausgeblendet sind, so können
diese auch später nicht mehr ausgegeben werden. Man könnte
auch sagen, eine VIEW ist eine gefilterte Tabelle.
|
VIEW: Auch für Dateneingabe geeignet
VIEWs können zur Dateneingabe verwendet werden wenn:
|
-
|
HAVING, GROUP BY, DISTINCT, UNION nicht vorkommen
|
|
-
|
VIEW sich nur auf eine Tabelle bezieht
|
|
-
|
Keine Unterabfragen in der SELECT-Klausel vorkommen
|
|
-
|
Keine arithmetischen Ausdrücke als Felder vorkommen
|
Wenn eine dieser Bedingungen zutrifft, wird die VIEW
automatisch zur READ-ONLY-VIEW, d.h. man darf Daten der VIEW nicht
ändern, löschen oder erweitern.
Vielen Dank für
Verbesserungsvorschläge und Tipps:
1) Daniel Lehmann, Die Schweizerische Post
|
 |