URL: https://it.desy.de/dienste/datenbanken/oracle/erste_schritte/sql_faltblatt/index_ger.html
Breadcrumb Navigation
SQL-Faltblatt Kurzreferenz
Abfragen (Queries, Subqueries)
Grundstruktur einer SQL-Abfrage (reine Projektion)
SELECT [DISTINCT] {* | Spaltenname [[AS] “Aliasname“ ] | Ausdruck} *
FROM Tabellenname;
Beispiele
1. Auswahl aller Spalten
SELECT *
FROM Tabellenname;
2. Auswahl bestimmter Spalten
SELECT Spaltenname1, Spaltenname2
FROM Tabellenname;
3. Auswahl bestimmter Spalten mit Definition von Aliasnamen
SELECT Spaltenname1 as MeineSpalte1, Spaltenname2 as MeineSpalte2
FROM Tabellenname;
4. Verwendung von Ausdrücken
SELECT Spaltenname1 + 100 / 26 as MeineBerechnung1
FROM Tabellenname;
Hinweis: Spaltenname1 muss hierfür numerisch definiert sein.
5. Auswahl mit Unterdrückung von Doppelnennungen
SELECT DISTINCT Spaltenname2
FROM Tabellenname;
SQL-Abfragen mit Selektion
SELECT [DISTINCT] {* | Spaltenname [[AS] “Aliasname“ ] | Ausdruck} *
FROM Tabellenname
WHERE Bedingungen;
Hinweis:
Eine Bedingung wird mit Hilfe von Vergleichsoperatoren definiert.
Die gängigsten Vergleichsoperatoren sind:
= > >= < <= <> IS NULL IS NOT NULL BETWEEN...AND... IN (Liste) und LIKE
Mehrere Bedingungen werden über die logischen Operatoren AND, OR und NOT miteinander verknüpft.
Beispiele für die Bedingungen in der WHERE-Klausel
Hinweis: der Where-Klausel steht ein SELECT … FROM … vor.
1. Auswahl der Zeilen, wo der Spaltenname1 null ist:
…
WHERE Spaltenname1 is null;
2. Auswahl der Zeilen, wo die Spalteninhalte von Spaltenname1 und Spaltenname2 gleich sind:
…
WHERE Spaltenname1 = Spaltenname2;
3. Auswahl der Zeilen, wo die Spalteninhalte von Spaltenname1 und Spaltenname2 gleich sind und der Wert von Spaltenname3 nicht null sein darf:
…
WHERE Spaltenname1 = Spaltenname2
AND Spaltenname3 is not null;
4. Auswahl der Zeilen, wo die Spalteninhalte von Spaltenname1 und Spaltenname2 gleich sind oder der Wert von Spaltenname3 null ist:
…
WHERE Spaltenname1 = Spaltenname2
OR Spaltenname2 is null;
Verwendung von Sortierung
SELECT [DISTINCT] {* | Spaltenname [[AS] “Aliasname“ ] | Ausdruck} *
FROM Tabellenname
[WHERE Bedingungen]
[ORDER BY {Spaltenname}* | Spaltenposition | Ausdruck] [ASC|DESC];
Hinweis:
ASC – aufsteigende Sortierung (DEFAULT)
DESC – absteigende Sortierung
ORDER BY steht, wenn es verwendet wird, IMMER zuletzt im SQL-Statement!
Die Spalte, nach der sortiert wird, muss nicht in der SELECT-Klausel vorkommen.
Join‘s
Equijoin
SELECT [DISTINCT] {* | TabellenAlias.Spaltenname | Ausdruck} *
FROM Tabelle1 TabellenAlias1, Tabelle2 TabellenAlias2
WHERE TabellenAlias1.Spalte1 = TabellenAlias2.Spalte1;
oder alternativ:
SELECT [DISTINCT] {* | TabellenAlias.Spaltenname | Ausdruck} *
FROM (Tabelle1 TabellenAlias1 [INNER] JOIN Tabelle2 TabellenAlias2
ON TabellenAlias1.Spalte1 = TabellenAlias2.Spalte1)
WHERE ( Bedingungen ) ;
Outerjoin
SELECT [DISTINCT] {* | TabellenAlias.Spaltenname | Ausdruck} *
FROM Tabelle1 TabellenAlias1, Tabelle2 TabellenAlias2
WHERE TabellenAlias1.Spalte1 [(+)] = TabellenAlias2.Spalte1 [(+)];
(+) steht bei der Tabellenspalte, wo die fehlende Information durch NULL ergänzt werden soll.
oder alternativ:
SELECT [DISTINCT] {* | TabellenAlias.Spaltenname | Ausdruck} *
FROM (Tabelle1 TabellenAlias1 [LEFT|RIGHT|FULL|OUTER] JOIN Tabelle2 TabellenAlias2
ON TabellenAlias1.Spalte1 = TabellenAlias2.Spalte1)
WHERE ( Bedingungen ) ;
Gruppenfunktionen
SELECT Spaltenname1, Gruppenfunktion(Spaltenname2), . . .
FROM Tabellenname
[WHERE Bedingung(en)]
[GROUP BY Gruppenausdruck]
[HAVING Gruppenbedingung]
[ORDER BY {Spaltenname} | Ausdruck | Aliasname} [ ASC | DESC ] ];
Hinweis:
Gruppenfunktionen können nicht in der WHERE-Klausel verwendet werden, hierfür gibt es die HAVING-Klausel, sie verhält sich wie die WHERE-Klausel, nur auf Gruppen bezogen.
Gruppenfunktionsübersicht
Gruppenfunktion | Bedeutung |
AVG (Gruppenelement) | Ermittelt den Durchschnittswert |
SUM (Gruppenelement) | Ermittelt die Summe des Gruppenelements |
MIN (Gruppenelement) | Ermittelt den kleinsten Wert d. Gruppenelements |
MAX (Gruppenelement) | Ermittelt den größten Wert d. Gruppenelements |
STDDEV (Gruppenelement) | Ermittelt den Wert der Standardabweichung |
VARIANCE (Gruppenelement) | Ermittelt den Wert f. d. Varianz |
COUNT (Gruppenelement) | Zählt die Werte d. Gruppenelements |
COUNT DISTINCT (Gruppenelement) | Ermittelt die Anzahl unterschiedlicher Werte d. Gruppenelements |
COUNT (*) | Ermittelt die Anzahl Zeilen in einer Tabelle |
Gruppenelement := Spalte | Ausdruck
Beispiele für die Verwendung von Gruppenfunktionen
Zählt die Anzahl Zeilen in Tabelle Tabellenname:
SELECT COUNT(*)
FROM Tabellenname;
Zählt die Anzahl Zeilen für jeden Wert in Spaltenname1 in Tabelle Tabellenname:
SELECT Spaltenname1, COUNT(*)
FROM Tabellenname
GROUP BY Spaltenname1;
Bildet für jedes Wertpaar Spaltenname1, Spaltenname2 die Summe von Spaltenname3
SELECT Spaltenname1, Spaltenname2, SUM(Spaltenname3)
FROM Tabellenname
GROUP BY Spaltenname1, Spaltenname2;
Bildet die Summe von Spaltenname1, den Durchschnittswert für Spaltenname1 und den größten Wert von Spaltenname2 aus Tabelle Tabellenname:
SELECT SUM(Spaltenname1), AVG(Spaltenname1), MAX(Spaltenname2)
FROM Tabellenname;
Für jeden Wert von Spaltenname1 wird die Anzahl Zeilen ermittelt. Allerdings nur dann, wenn der maximale Wert von Spaltenname1 grösser als 100 ist. Die Ausgabe wird nach Spaltenname4 sortiert:
SELECT Spaltenname1, COUNT(*)
FROM Tabellenname1
WHERE Spaltenname3 is not null
GROUP BY Spaltenname1, Spaltenname2
HAVING MAX(Spaltenname1) > 100
ORDER BY Spaltenname4;
Subqueries / Unterabfragen
Subqueries können in folgenden SQL-Klauseln verwendet werden:
SELECT, FROM, WHERE, HAVING implizit auch in der GROUP BY und ORDER BY-Klausel, da sich dort auf einen Wert bezogen werden kann.
SELECT {Spaltenname | Ausdruck | Subquery} *
FROM Tabellenname | Subquery
[WHERE Bedingung(en)]
[GROUP BY Gruppenausdruck]
[HAVING Gruppenbedingung]
[ORDER BY {Spaltenname} | Ausdruck | Aliasname} [ ASC | DESC ] ];
WHERE – Bedingungen
Subqueries, die einen Wert zurückliefern
SELECT {Spaltenname | Ausdruck | Subquery} *
FROM Tabellenname
WHERE Spaltenname Operation (Select-Statement)
[ AND . . . ];
Subqueries, die mehrere Werte zurückliefern
Operatoren: IN; ANY; ALL; EXISTS
SELECT {Spaltenname | Ausdruck | Subquery} *
FROM Tabellenname
WHERE Spaltenname {{=,>,...} [ANY|ALL] | IN }
(SELECT Spaltenname
FROM Tabellenname
[ WHERE Bedingung(en) ] );
SELECT {Spaltenname | Ausdruck | Subquery} *
FROM Tabellenname
WHERE (Spaltenname1, Spaltenname2,... ) [= | IN]
(SELECT Spaltenname1, Spaltenname2, ...
FROM Tabellenname
[ WHERE Bedingung(en) ] );
SELECT {Spaltenname | Ausdruck | Subquery} *
FROM Tabellenname
WHERE EXISTS
(SELECT . . .
FROM Tabellenname
[ WHERE Bedingung(en) ] );
FROM-Klausel (Inline View)
SELECT {Spaltenname | Ausdruck | Subquery} *
FROM Tabellenname1 Aliasname1,
(SELECT {Spaltenname | Ausdruck | Subquery} *
FROM Tabellenname
GROUP BY ... ) Aliasname2
WHERE Aliasname1.Spaltenname1 = Aliasname2.Spaltenname2
[ AND ... ];
Data Manipulation Language DML
DML-Kommandos verändern die Inhalte in Tabellen. Sie erzeugen, ändern und löschen Datenzeilen.
Insert - Einfügen neuer Datensätze
INSERT INTO Tabellenname [(Spalten-Liste)]
VALUES ( Werte-Liste ) ;
Datensätze einer Tabelle in eine andere Tabelle kopieren.
INSERT INTO Tabellenname1 [(Spalten-Liste)]
(SELECT {Spaltenname | Ausdruck | Subquery} *
FROM Tabellenname2
[WHERE Bedingung(en)] );
Update - Ändern von Datensätzen
UPDATE Tabellenname
SET Spaltenname1 = Wert1 , [Spaltenname2 = Wert2 , . . . ]
[WHERE Bedingung(en)];
Ändern von Datensätzen basierend auf anderen Tabellen
UPDATE Tabellenname1
SET
Spaltenname1 =
(SELECT {Spaltenname | Ausdruck | Subquery} *
FROM Tabellenname2
[WHERE Bedingung(en)]),
Spaltenname2 =
(SELECT {Spaltenname | Ausdruck | Subquery} *
FROM Tabellenname 3
[WHERE Bedingung(en)]);
Delete - Löschen von Datensätzen
DELETE [FROM] Tabellenname
[WHERE Bedingung(en)] ;
bzw.
DELETE [FROM] Tabellenname
WHERE Spaltenname=
(SELECT {Spaltenname | Ausdruck | Subquery} *
[WHERE Bedingung(en)] );
Truncate Table – Tabellen löschen – mit Speicherfreigabe
TRUNCATE TABLE Tabellenname;
Data Definition Language DDL
DDL-Kommandos erzeugen, ändern und löschen Datenbankobjekte. Weiterhin dienen sie dem Verwalten von Rechten.
Create Table – Tabellen erzeugen
CREATE TABLE Tabellenname
(Spaltenname1 Datentyp [DEFAULT Ausdruck]
[, Spaltenname2 Datentyp [DEFAULT Ausdruck], . . . ]);
Alter Table – Tabellen verändern
ALTER TABLE Tabellenname {ADD | MODIFY}
(Spaltenname1 Datentyp1 [DEFAULT Ausdruck]
[, Spaltenname2 Datentyp2 [DEFAULT Ausdruck], . . . ]);
ALTER TABLE Tabellenname
DROP COLUMN Spaltenname1;
Drop Table – Tabellen löschen
DROP TABLE Tabellenname;
Transaktionssteuerung
Anweisung | Bedeutung |
COMMIT | Beendet die akt. Transaktion und schreibt Datenänderungen fest. |
SAVEPOINT name | Markiert einen Savepoint innerhalt einer Transaktion. |
ROLLBACK | Beendet die akt. Transaktion und verwirft alle durchgeführten Änderungen. |
ROLLBACK TO SAVEPOINT name | Beendet die Transaktion und verwirft alle durchgeführten Änderungen bis zum Savepoint. |
Beispiel – das Insert wird Rückgängig gemacht
UPDATE …;
SAVEPOINT update_done; -- Savepoint created
INSERT …;
ROLLBACK TO update_done; -- Rollback complete