Datentypen

TypAliasBeschreibung
INTEGERINTGanze Zahl
DECIMAL(p,s)NUMERICKommazahl mit p stellen, davon s nach dem Komma
DOUBLEREALFließkommazahl
CHARACTER(l)CHARZeichenkette mit fixer Länge l
CHARACTER VARYING(l)VARCHARZeichenkette mit max. Länge l
DATEJahr-Monat-Tag

DDL

CREATE TABLE

CREATE TABLE kunden (
	kundennummer SERIAL PRIMARY KEY,
	name VARCHAR(100) NOT NULL,
	email VARCHAR(500) CHECK (email LIKE '%@%') UNIQUE,
	passwort CHAR(32),
	land VARCHAR(100) DEFAULT 'Deutschland',
	geworben_von INT REFERENCES kunden(kundennummer)
		ON DELETE SET NULL ON UPDATE CASCADE
);
CREATE TABLE privatkunden (LIKE kunden); -- Übernimmt Attribute
CREATE TABLE privatkunden2 AS SELECT * FROM kunden -- Übernimmt Zeilen

ALTER TABLE

ALTER TABLE kunden ADD/DROP/RENAME COLUMN my_col INT;

DROP TABLE

DROP TABLE kunden;

DML

Insert

INSERT INTO kunden(kundennummer, name) VALUES (default, 'jeff');

Update

UPDATE kunden SET name='jeff' WHERE kundennummer=3;

Delete

DELETE FROM kunden WHERE ...;
TRUNCATE TABLE kunden;

Select

SELECT DISTINCT H.land, COUNT(*) AS anzahl, AVG(P.preis) AS avg_preis
FROM hersteller H JOIN produkte P ON H.firma = P.hersteller
WHERE P.preis > 3
GROUP BY h.land
HAVING COUNT(*) < 5
ORDER BY COUNT(*);

CTE

WITH ... AS (SELECT ...) SELECT ...

UNION/INTERSECT/EXCEPT

SELECT ... UNION/INTERSECT/EXCEPT [ALL] SELECT ...

CAST

CAST(col_name AS VARCHAR(50))

CASE WHEN

SELECT bezeichnung, preis,
CASE preis WHEN 0 THEN 'kostenlos' ELSE preis END
FROM produkte ORDER BY preis;