7.2 KiB
7.2 KiB
SQL
Spracharten
DDL (Data Definition Language)
DML (Data Manipulation Language)
DCL (Data Control Language)
SQL als DDL
-
CREATE
-
CREATE TABLE tabellenname ( spaltenname1 datentyp [Einschränkungen], spaltenname2 datentyp [Einschränkungen], ... PRIMARY KEY (spaltenname1, spaltenname2) );
-
CREATE INDEX indexname ON tabellenname (spaltenname) ASC;
-
-
ALTER
-
ALTER TABLE tabellenname ADD spaltenname datentyp [Einschränkungen]; ALTER TABLE tabellenname DROP COLUMN spaltenname; ALTER TABLE tabellenname ALTER COLUMN spaltenname SET NOT NULL; ALTER TABLE tabellenname RENAME COLUMN alter_spaltenname TO neuer_spaltenname; ALTER TABLE tabellenname DROP CONSTRAINT constraint_name;
-
-
DROP
- Löschen einer gesamten Tabelle/Index/View
-
DROP TABLE tabellenname; DROP INDEX indexname; DROP VIEW viewname;
Datentypen
- integer (oder auch integer4, int),
- smallint (oder auch integer2),
- real (vergleichbar zu float),
- decimal(p,q) und numeric(p,q) mit jeweils p Stellen gesamt und davon q Nachkommastellen,
- character(n) (oder kurz char(n), bei n = 1 auch char) für Zeichenketten (Strings) fester Länge n,
- character varying(n) (oder kurz varchar(n) für Strings variabler Länge bis zur Maximallänge n,
- bit(n) oder bit varying(n) analog für Bitfolgen, und
- date, time bzw. timestamp für Datums-, Zeit- und kombinierte Datums-Zeit-Angaben
- blob (binary large object) für sehr große binäre Daten
- text oder clob für sehr große Strings
Constraints
- NOT NULL: Spalte darf nicht leer sein
- DEFAULT: Standardwert für die Spalte
- UNIQUE, bzw. PRIMARY KEY: Spalte muss eindeutige Werte haben
- FOREIGN KEY: Verweis auf eine andere Tabelle
- CHECK: Bedingung, die für die Spalte gelten muss
CREATE TABLE person (
id SERIAL PRIMARY KEY,
name VARCHAR(20) NOT NULL,
email VARCHAR(50) UNIQUE,
age INT CHECK (age >= 0),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
FOREIGN KEY (personalId) REFERENCES andere_tabelle(id)
);
Referentielle Integrität
- CASCADE: Operation wird auf alle zugehörigen Datensätze angewendet
- SET DEFAULT: Fremdschlüssel wird auf den Standardwert gesetzt
- SET NULL: Fremdschlüssel wird auf NULL gesetzt
- RESTRICT: Operation wird nur ausgeführt, wenn keine Fremdschlüsselbedingung verletzt wird
- NO ACTION: Keine Aktion, wenn Fremdschlüsselbedingung verletzt wird (Standardverhalten)
CREATE TABLE bestellung (
id SERIAL PRIMARY KEY,
kunde_id INT,
produkt_id INT,
FOREIGN KEY (kunde_id) REFERENCES kunde(id) ON DELETE CASCADE,
FOREIGN KEY (produkt_id) REFERENCES produkt(id) ON DELETE SET NULL
);
SQL als DML
- Insert
-
INSERT INTO tabellenname (spaltenname1, spaltenname2, ...) VALUES (wert1, wert2, ...);
-
- Update
-
UPDATE tabellenname SET spaltenname1 = wert1, spaltenname2 = wert2, ... WHERE bedingung;
-
- Delete
-
DELETE FROM tabellenname WHERE bedingung;
-
Alle Tabelleninhalte löschen
TRUNCATE TABLE tabellenname;
Relationenalgebra
-
SELECT DISTINCT
- Nur einmalige Werte auswählen
-
SELECT DISTINCT spaltenname1, spaltenname2 FROM tabellenname;
-
WHERE
-
SELECT spaltenname1, spaltenname2 FROM tabellenname1, tabellenname2 WHERE bedingung;
- BETWEEN
-
SELECT spaltenname1, spaltenname2 FROM tabellenname WHERE spaltenname BETWEEN wert1 AND wert2;
-
- AND
-
SELECT spaltenname1, spaltenname2 FROM tabellenname WHERE bedingung1 AND bedingung2;
-
- OR
-
SELECT spaltenname1, spaltenname2 FROM tabellenname WHERE bedingung1 OR bedingung2;
-
- LIKE
-
SELECT spaltenname1, spaltenname2 FROM tabellenname WHERE spaltenname LIKE 'muster%';
-
- IS [NOT] NULL
-
SELECT spaltenname1, spaltenname2 FROM tabellenname WHERE spaltenname IS NULL;
-
-
-
[NOT] IN
- geschachtelte Anfragen
-
SELECT spaltenname1, spaltenname2 FROM tabellenname WHERE spaltenname1 IN (SELECT spaltenname1 FROM tabellenname2 WHERE bedingung);
-
FROM
- JOIN...ON
-
SELECT spaltenname1, spaltenname2 FROM tabellenname1 JOIN tabellenname2 ON tabellenname1.spaltenname = tabellenname2.spaltenname;
- LEFT JOIN
- übernimmt alle Zeilen aus der linken Tabelle und die passenden aus der rechten
-
SELECT spaltenname1, spaltenname2 FROM tabellenname1 LEFT JOIN tabellenname2 ON tabellenname1.spaltenname = tabellenname2.spaltenname;
- RIGHT JOIN
- übernimmt alle Zeilen aus der rechten Tabelle und die passenden aus der linken
-
SELECT spaltenname1, spaltenname2 FROM tabellenname1 RIGHT JOIN tabellenname2 ON tabellenname1.spaltenname = tabellenname2.spaltenname;
- FULL OUTER JOIN
- übernimmt alle Zeilen aus beiden Tabellen, auch wenn keine Übereinstimmung besteht
-
SELECT spaltenname1, spaltenname2 FROM tabellenname1 FULL OUTER JOIN tabellenname2 ON tabellenname1.spaltenname = tabellenname2.spaltenname;
- NATURAL JOIN
- gleiche Spaltennamen in beiden Tabellen werden automatisch verbunden (falls auch gleicher Datentyp)
-
SELECT spaltenname1, spaltenname2 FROM tabellenname1 NATURAL JOIN tabellenname2;
-
- JOIN...ON
-
AS
- Spalten umbenennen
-
SELECT spaltenname1 AS aliasname1, spaltenname2 AS aliasname2 FROM tabellenname;
-
SELECT spaltenname1+4 AS aliasname FROM tabellenname;
-
EXCEPT
-
INTERSECT
-
UNION
-
GROUP BY...[HAVING]
- Gruppierung von Zeilen
-
SELECT spaltenname1, COUNT(*) FROM tabellenname GROUP BY spaltenname1; HAVING COUNT(*) > 1;
-
Aggregatfunktionen
- COUNT: Anzahl der Zeilen
- SUM: Summe der Werte
- AVG: Durchschnitt der Werte
- MIN: Minimalwert
- MAX: Maximalwert