EMZETT.
Login

Kurz: INSERT INTO produkte (name, preis) VALUES (‘Stift’, 1.5); SELECT * FROM produkte; `output id name preis lager aktiv -- ----- ----- ----- ----- 1 Stift 1.5 0 1

Teil des Kurses SQL

Kapitel 2 von 15 im Kurs SQL. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Tabellen anlegen

CREATE TABLE produkte (
    id      INTEGER PRIMARY KEY,
    name    TEXT    NOT NULL,
    preis   REAL    NOT NULL CHECK (preis >= 0),
    lager   INTEGER DEFAULT 0,
    aktiv   INTEGER DEFAULT 1
);
 
INSERT INTO produkte (name, preis) VALUES ('Stift', 1.5);
SELECT * FROM produkte;

Ausgabe:

id  name   preis  lager  aktiv
--  -----  -----  -----  -----
1   Stift  1.5    0      1

Datentypen

Die Namen unterscheiden sich je nach System. Gängige Typen:

ZweckStandard / PostgreSQLMySQLSQLite
GanzzahlINTEGER, BIGINT, SMALLINTINT, BIGINTINTEGER
Dezimal exaktNUMERIC(10,2)DECIMAL(10,2)NUMERIC
GleitkommaREAL, DOUBLE PRECISIONFLOAT, DOUBLEREAL
TextVARCHAR(n), TEXTVARCHAR(n), TEXTTEXT
WahrheitswertBOOLEANBOOLEAN (= TINYINT)INTEGER (0/1)
Datum/ZeitDATE, TIMESTAMPDATE, DATETIMETEXT (ISO-Format)
BinärBYTEABLOBBLOB

Tipp

Geldbeträge gehören in NUMERIC/DECIMAL oder in ganze Cent, nicht in Gleitkommazahlen: 0.1 + 0.2 ist dort nicht exakt 0.3.

SQLite ist besonders: Es hat dynamische Typisierung (der Wert bestimmt den Typ). Mit typeof() siehst du ihn:

SELECT typeof(42) AS a, typeof(3.14) AS b, typeof('x') AS c, typeof(NULL) AS d, typeof(x'ff') AS e;
SELECT 0.1 + 0.2 AS summe, 0.1 + 0.2 = 0.3 AS gleich;

Ausgabe:

a        b     c     d     e
-------  ----  ----  ----  ----
integer  real  text  null  blob
summe  gleich
-----  ------
0.3    0

Einschränkungen (Constraints)

ConstraintWirkung
PRIMARY KEYeindeutiger Schlüssel der Zeile
NOT NULLWert ist Pflicht
UNIQUEkeine Duplikate
DEFAULT xStandardwert, wenn nichts angegeben
CHECK (bedingung)beliebige Regel
FOREIGN KEYVerweis auf andere Tabelle (später)
CREATE TABLE konto (
    iban  TEXT PRIMARY KEY,
    inhaber TEXT NOT NULL,
    stand REAL NOT NULL DEFAULT 0 CHECK (stand >= -500),
    email TEXT UNIQUE
);
INSERT INTO konto (iban, inhaber, email) VALUES ('DE01', 'Mia', 'mia@x.de');
SELECT * FROM konto;

Ausgabe:

iban  inhaber  stand  email
----  -------  -----  --------
DE01  Mia      0.0    mia@x.de

Verstößt ein Befehl gegen eine Regel, bricht die Datenbank ihn ab:

CREATE TABLE konto (iban TEXT PRIMARY KEY, stand REAL NOT NULL CHECK (stand >= 0));
INSERT INTO konto VALUES ('DE01', 10);
INSERT INTO konto VALUES ('DE01', 20);

Fehlermeldung:

Runtime error near line 3: UNIQUE constraint failed: konto.iban (19)

Tabellen ändern und löschen

CREATE TABLE t (id INTEGER PRIMARY KEY, name TEXT);
ALTER TABLE t ADD COLUMN notiz TEXT;
ALTER TABLE t RENAME COLUMN notiz TO bemerkung;
ALTER TABLE t RENAME TO tabelle;
INSERT INTO tabelle (name) VALUES ('x');
SELECT * FROM tabelle;
DROP TABLE tabelle;
DROP TABLE IF EXISTS gibt_es_nicht;
SELECT count(*) AS tabellen FROM sqlite_master WHERE type = 'table';

Ausgabe:

id  name  bemerkung
--  ----  ---------
1   x
tabellen
--------
0

Achtung

DROP TABLE löscht Tabelle und Daten endgültig, ohne Rückfrage.

Auto-Inkrement

INTEGER PRIMARY KEY zählt in SQLite automatisch hoch. In anderen Systemen: PostgreSQL GENERATED ALWAYS AS IDENTITY (oder SERIAL), MySQL AUTO_INCREMENT.

CREATE TABLE gaeste (id INTEGER PRIMARY KEY, name TEXT);
INSERT INTO gaeste (name) VALUES ('A'), ('B'), ('C');
SELECT * FROM gaeste;
SELECT last_insert_rowid() AS letzte_id;

Ausgabe:

id  name
--  ----
1   A
2   B
3   C
letzte_id
---------
3

Merke

  • CREATE TABLE legt Struktur an, ALTER TABLE ändert sie, DROP TABLE löscht sie
  • Wichtige Typen: Ganzzahl, Dezimal, Text, Datum, Wahrheitswert (Namen variieren)
  • Constraints (NOT NULL, UNIQUE, CHECK, DEFAULT) sichern Datenqualität
  • Geld nie als Gleitkommazahl speichern
  • Jede Tabelle braucht einen Primärschlüssel

Übungsaufgabe

Lege eine Tabelle buecher mit Primärschlüssel, Pflichttitel, Seitenzahl (nur positiv) und Erscheinungsjahr an.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Einführung in SQL und Datenbanken

Weiter: Daten einfügen, ändern und löschen

Alle Kapitel: SQL im Überblick