Wie lässt man die Datenbanken anzeigen
SHOW DATABASES
zeigt alle Datenbanken
Wie lässt man eine Datenbank erstellen?
CREATE DATABASE datenbankname
CREATE DATABASE zoo
Wie öffnet man eine Datenbank?
USE datenbankname
Hilft um die auf eine andern Datenbank zu wechseln wenn man gerade aktik auf eine Datenbank ist und nun auf eine anderen möchte
Wie löscht man eine Datenbank?
DROP DATABASE datenbankname
Wie lässt man die Tabellen in einer Datenbank anzeigen
SHOW TABLES;
MySQL zeigt dir alle Tabellen an, die in der aktuell aktiven Datenbank liegen
Die aktive Datenbank musst du vorher mit USE <datenbankname>; gesetzt haben.
SHOW TABLES FROM fom;
Du gibst explizit an, aus welcher Datenbank MySQL die Tabellen zeigen soll – unabhängig davon, welche aktuell aktiv ist.
Du brauchst vorher kein USE gemacht zu haben.
Wie lässt man eine Tabellenstruktur anzeigen?
DESCRIBE tabellenname; oder DESC tabellenname;
Zeigt dir die Struktur an
DESCRIBE zoo.kunden;
Wenn vorher kein USE datenname ausgeführt wurde
Gibt das zurück :
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | INT | NO | PRI | NULL | auto_increment |
| name | VARCHAR(50) | YES | | NULL | |
| geburt | DATE | YES | | NULL | |
Wie löscht man eine Tabellen?
DROP TABLE datenname;
Wie legt man eine ( einfache) Tabelle an?
CREATE TABELE datenbankname (
feldname_1 datentyp,
feldname_2 datentyp,
...
feldname_n datentyp
);
Wie lässt man in einer Tabelle Werte eingeben?
INSERT INTO tabellenname
(feld_1, feld_2, ..., feld_n)
VALUES
(wert_1, wert_2, ..., wert_n);
INSERT INTO kunden (id, name, geburtstag)
VALUES (1, 'Mia Meier', '2000-05-12');
INSERT INTO mitglieder (id, name, beitritt)
(1, 'Lisa Lange', '2023-01-10'),
(2, 'Tobi Thiel', '2024-02-20'),
(3, 'Sami Schmidt', '2025-05-01');
Wie lässt man sich Werte ( einfach) in einer Tabelle anzeigen?
SELECT * FROM tabellenname;
SELECT * FROM zoo.kunden;
Beispiel:
+----+------------+-------------+
| id | name | ort |
| 1 | Mia Müller | Köln |
| 2 | Leo Lange | Düsseldorf |
In großen Datenbanken mit vielen Spalten (z. B. 50 oder 100) ist SELECT * ineffizient.
Dort schreibt man lieber gezielt:
SELECT name, ort FROM kunden;
Was macht ein Datentyp in MySQL?
Der Datentyp bestimmt:
Welche Art von Wert in einem Feld gespeichert werden darf (Text? Zahl? Ja/Nein?)
Wie viel Speicherplatz belegt wird
Wie der Wert intern verarbeitet wird (Sortierung, Vergleiche, Rechenoperationen)
ihij
Kategorie Text
Beispiele: Namen, Städte, E-Mail
Datentyp: CHAR(x), VARCHAR(x), TE
Kategorie Numerisch ganzzahlig
Beispiele: Alter, ID, Anzahl
Datentyp: INT, TINYINT, BIGINT
Kategorie Numerisch reell
Beispiele: Preis, Gewicht, Temperatur
Datentyp: FLOAT, DOUBLE, DECIMAL
Kategorie Logisch
Beispiele: Wahr/Falsch, Ja/Nein
Datentyp: BOOLEAN (bzw. TINYINT(1))
Kategorie Sonstige
Beispiele: Datum, Uhrzeit, Blob, JSON
Datentyp: DATE, TIME, DATETIME, BLOB
Was macht der Datentyp CHAR (x)?
Für Texte gedacht
Reserviert es immer gleich viel Speicher
Du kannst CHAR(1) bis CHAR(255) schreiben.
Das bedeutet: Du kannst Texte bis zu 255 Zeichen lang speichern.
Aber bei CHAR(255) werden immer 255 Zeichen Speicherplatz verwendet, auch wenn du nur ‘Ali’ speicherst.
Am besten geeignet:
Wenn man ganz sicher weißt, dass alle Werte immer exakt gleich lang sind
Beispiele:
Ländercode (DE, FR, IT)
ISO-Codes wie ISO3166, ISO9001
Geschlechtskürzel (M, W, D)
Postleitzahl (z. B. in DE)
Was Was macht der Datentyp VARCHAR (x)?
Geeignet für Text
Es speichert nur so viele Zeichen, wie wirklich gebraucht werden (+1–2 Bytes Info).
Man kann kurze und lange Werte mischen, ohne Platz zu verschwenden.
Üblich für Namen, E-Mails usw.
Weil Textlängen unterschiedlich sind
perfekt für Benutzereingaben
Man weißt nie, wie lang ein Name oder ein Kommentar ist – VARCHAR passt sich an
65.535 Byte ist das absolute Limit in MySQL
Das gilt pro Zeile insgesamt, also nicht nur für ein Feld!
Wenn maximale Länge ≤ 255 Zeichen ➜ +1 Byte für die Längeninfo
VARCHAR(100)
Man speichert z. B. 'Ali' → 3 Zeichen
MySQL braucht:
3 Bytes für 'Ali'
1 Byte für die Längenangabe
Insgesamt: 4 Bytes
Wenn maximale Länge ≥ 256 Zeichen ➜ +2 Bytes für die Längeninfo
VARCHAR(500)
Man speichert z. B. 'Hallo' → 5 Zeichen
➡️ MySQL braucht:
5 Bytes für 'Hallo'
2 Bytes für die Längenangabe
✅ Insgesamt: 7 Bytes
Was sind TEXT und BLOB?
Das sind Datentypen für sehr große Inhalte, also:
sehr lange Texte (z. B. Artikel, Kommentare, Lebensläufe)
Binärdaten (z. B. Bilder, PDFs, Videos, Dateien)
TEXT:
Beachtet nicht Groß- und Kleinschreibung
CREATE TABLE artikel (
id INT,
titel VARCHAR(255),
inhalt TEXT
INSERT INTO artikel (id, titel, inhalt)
VALUES (
1,
'Wie man SQL lernt',
'In diesem Artikel lernen Sie die Grundlagen von SQL...'
BLOB:
Beachtet Groß- und Kleinschreibung
CREATE TABLE uploads (
dateiname VARCHAR(255),
datei BLOB
INSERT INTO
uploads (id, dateiname, datei)
(1, 'lebenslauf.pdf', LOAD_FILE('/pfad/zur/datei/lebenslauf.pdf'));
DEFAULT ist bei beiden nicht erlaubt
Welche verschiedene Text-Datentypen gibt es in MySQL?
Typ
Max. Zeichen
Speicherinfo
Wann verwenden?
TINYTEXT
255 Zeichen
x + 1 Byte
Für kurze Notizen
TEXT
65.535 Zeichen
x + 2 Bytes
Für normale Texte, z. B. Artikel
MEDIUMTEXT
~16,7 Mio. Zeichen
x + 3 Bytes
Für große Texte, z. B. AGB, Bücher
LONGTEXT
~4,29 Mrd. Zeichen
x + 4 Bytes
Für extreme Datenmengen, z. B. Archive
Welche verschiedene BLOP-Datentypen gibt es in MySQL?
Max. Größe
Wofür geeignet?
TINYBLOB
255 Bytes (sehr klein)
Mini-Daten (z. B. Icons, kleine Checksummen)
BLOB
65.535 Bytes (~64 KB)
Kleine Dateien (z. B. PDFs, Avatare)
MEDIUMBLOB
~16,7 Mio Bytes (~16 MB)
Bilder, Audio, ZIP-Dateien
LONGBLOB
~4,29 Mrd. Bytes (~4 GB)
Videos, große Dokumente, alles Große
Welche unterschiedliche Datentypen für nummerisch ganzzahlige Zahlen gibt es?
TINYINT
1 Byte
Wertebereich (normal)
-128 bis 127
Wertebereich (UNSIGNED)
0 bis 255
SMALLINT
2 Byte
–32.768 bis +32.767
0 bis 65.535
MEDIUMINT
3 Bytes
–8.388.608 bis +8.388.607
0 bis 16.777.215
INT
4 Bytes
–2.147.483.648 bis +2.147.483.647
0 bis 4.294.967.295
BIGINT
8 Bytes
–9 Trillionen bis +9 Trillionen
0 bis 18 Triliionen
Was sind nummerisch normale Werte
n = gesamte Anzahl an Ziffern (inkl. Vorkomma + Nachkomma)
d = Anzahl Nachkommastellen
FLOAT(n,d)
mittel (max 24 Nachkommastellen)
schnell, aber ungenau bei Rechenfehlern
FLOAT(6,2) → erlaubt z. B. 1234.56
DOUBLE(n,d)
hoch (max 53 Nachkommastellen)
für sehr große oder präzise Werte
DECIMAL(n,d)
exakt
perfekt für Geld, wird als Zeichen gespeichert (keine Rundungsfehler)
Weclche Datentyp Datumwerte gibt es
YEAR:
Nur Jahre von 1901 bis 2155
Alles außerhalb → ungültig → wird zu 0000 gesetzt
00–69 → interpretiert MySQL als 2000–2069
Am besten immer vierzahlen angeben
DATE:
Format:
YYYY-MM-DD ->
Bereich:
von 1000-01-01 bis 9999-12-31
'2025-06-16
DATETIME:
1000-01-01 00:00:00 bis 9999-12-31 23:59:59
YYYY-MM-DD HH:MM:SS
'2025-06-16 13:45:00'
TIME:
-838:59:59 bis 838:59:59
HH:MM:SS
'13:45:00'
Was macht TIMESTAMP
TIMESTAMP speichert automatisch das aktuelle Datum + aktuelle Uhrzeit,
wenn ein Datensatz eingefügt oder geändert wird
CREATE TABLE login_log (
benutzer VARCHAR(50),
login_zeit TIMESTAMP
INSERT INTO login_log (benutzer) VALUES ('Ali');
login_zeit wird automatisch z. B. 2025-06-16 18:45:32
Was macht der Datentyp SET?
SET ist ein Datentyp, mit dem du eine oder mehrere Optionen aus einer festen Liste in einem einzigen Feld speichern kannst
CREATE TABLE benutzer (
name VARCHAR(50),
interessen SET('Sport', 'Musik', 'Kunst', 'Reisen')
INSERT INTO benutzer (name, interessen)
VALUES ('Ali', 'Sport,Musik');
Wichtige Regeln:
Man kann mehrere Werte auswählen
Maximal 64 verschiedene Werte in der Liste erlaubt
Keine Kommas im Wert selbst
Komma ist Trennung
Was macht der Datentyp ENUM
ENUM erlaubt dir, genau einen Wert aus einer festen Liste auszuwählen
geschlecht ENUM('männlich', 'weiblich', 'divers')
Mann kann nur eines davon eintragen
Max Anzahl Werte sind 65535
Wie legt man eine Tabelle einfach an?
CREATE TABLE pizza (
Bezeichnung VARCHAR(30),
Preis FLOAT(4,2),
Zusatz SET("Knoblauch", "extra scharf", "doppelt Käse"),
Groesse ENUM("groß", "mittel", "klein")
Was ist ein Primary Key?
Der Primärschlüssel ist eine Spalte (oder Kombination aus Spalten),
die jeden Datensatz in einer Tabelle eindeutig identifiziert
Merkmal:
Eindeutig
NOT NULL
Nur 1× pro Tabelle
CREATE TABLE lieferant (
lid INT UNSIGNED PRIMARY KEY,
nachname VARCHAR(30)
Jeder Lieferant braucht eine ID
UNSIGNED = nur positive Werte (z. B. ID: 1, 2, 3 …)
Was ist ein zusammengesetzter Primary Key?
Ein PRIMARY KEY kann aus mehreren Spalten bestehen.
Das nennt man dann einen zusammengesetzten (kombinierten) Schlüssel.
Stell dir das wie einen Türschlüssel mit zwei Zacken vor:
Zacken 1 = fk_auftrag
Zacken 2 = fk_artikel
Du hast eine Tabelle bestellposition. Eine Bestellung (fk_auftrag) kann mehrere Artikel enthalten, z. B.:
fk_auftrag und fk_artikel
1001 fk_auftrag kann mehrfach vorkommen (weil eine Bestellung mehrere Artikel hat)
200 kann bei fk_artikel mehrfach vorkommen (weil derselbe Artikel in verschiedenen Bestellungen vorkommen kann)
Aber: Die Kombination 1001 & 200 darf nur einmal vorkommen
(weil du nicht denselben Artikel zwei Mal in derselben Bestellung anlegen darfst)
Was bedeutet UNIQUE?
Ein UNIQUE-Feld darf keinen doppelten Wert enthalten,
aber es darf NULL sein (leerer Wert), außer du verbietest das mit NOT NULL
nachname VARCHAR(30),
plz CHAR(5) UNIQUE
lid ist der eindeutige Primärschlüssel (wie ein Ausweis)
plz (Postleitzahl) ist einzigartig, aber kein Primärschlüssel
Vorteil: Es darf nur eine Zeile mit derselben plz existieren
Was bedeutet NULL?
Kein Wert vorhanden
NOT NULL:
Man muss ein Wert angeben
Feld dar nicht leer sein
Was macht DEFAULT?
DEFAULT legt einen Standardwert fest,
der automatisch in eine Spalte eingetragen wird,
wenn du beim INSERT keinen eigenen Wert angibst
art_nr INT UNSIGNED PRIMARY KEY,
artbez VARCHAR(30),
einzelpreis FLOAT(6, 2) DEFAULT 0.99
INSERT INTO artikel (art_nr, artbez)
VALUES (101, 'Kugelschreiber');
Kugelschreiber wird automatsich mit dem Einzelpreis 0.99 eingetragen
Was macht AUTO_INCREMENT?
AUTO_INCREMENT sorgt dafür,
dass die Werte in einer Spalte automatisch hochgezählt werden
Beipiel:
lid INT PRIMARY KEY AUTO_INCREMENT,
umsatz FLOAT(6, 2) DEFAULT 0.99
lid ist Primärschlüssel und wird automatisch gezählt → 1, 2, 3, …
nachname muss manuell eingetragen werden
umsatz wird automatisch auf 0.99 gesetzt, wenn man keinen Wert angibt
Was macht ZEROFILL
ZEROFILL füllt Zahlen mit führenden Nullen auf
damit sie immer eine bestimmte Länge hab
betrifft nur ganzzahlige Datentypen wie INT, SMALLINT, TINYINT, …
Es sorgt dafür, dass eine Ganzzahl wie 7 z. B. als 00007 angezeigt wird
INT(5) → 5 Stellen = 00007.
Vorteile:
Optische Einheitlichkeit – alle Nummern haben die gleiche Länge
Bessere Sortierbarkeit (z. B. alphabetisch in Excel)
Sieht professioneller aus in Berichten, Formularen, Rechnungen
Was macht Alter?
Mit diesem Befehl änderst du die Struktur einer bestehenden Tabelle –
du fügst neue Spalten hinzu, ohne die Tabelle komplett neu zu erstellen
ALTER TABLE tabellenname
ADD spaltenname datentyp [weitere Attribute];
ALTER TABLE kunde
ADD letzter_Zugriff TIMESTAMP;
Das bedeutet:
Die bestehende Tabelle kunde bekommt eine neue Spalte letzter_Zugriff
Diese Spalte hat den Typ TIMESTAMP, also Datum & Uhrzeit
Auch mehrere Spalten gleichzeitig möglich:
ADD email VARCHAR(100),
ADD telefonnummer VARCHAR(20);
Wenn du ALTER TABLE ... ADD ... benutzt, wird die neue Spalte standardmäßig am Ende der Tabelle hinzugefügt.
1. ... ADD feld_1 datentyp_1 FIRST;
Fügt die Spalte ganz vorne ein – also als erste Spalte der Tabelle.
2. ... ADD feld_1 datentyp_1 AFTER feldname_x;
Fügt die neue Spalte nach einer bestimmten vorhandenen Spalte ein (z. B. nach email).
Wie löscht man ein Feld einer Tabelle
Allgemeine Form
DROP feld_x;
ALTER TABLE fahrten
DROP entfernung;
Die Spalte entfernung wird vollständig aus der Tabelle fahrten gelöscht – inklusive aller Daten, die dort drin standen
Wie fügt man ein Primary Key hinzu?
ADD PRIMARY KEY (kundennr);
MachT das Feld kundennr zum Primärschlüssel der Tabelle kunde
Das geht nur, wenn alle Werte in kundennr eindeutig sind und nicht NULL.
ALTER IGNORE TABLE kunde
Mit IGNORE wird beim Ausführen versucht, Konflikte zu ignorieren oder aufzulösen
Wenn es doppelte Werte in kundennr gibt:
Ohne IGNORE: ❌ Es kommt zu einem Fehler.
Mit IGNORE: ✅ Die Zeilen mit doppelten Werten werden gelöscht oder ignoriert, sodass der Primärschlüssel trotzdem gesetzt werden kann.
Wie entfernt man einen bestehenden Primärschlüssel aus einer Tabelle
DROP PRIMARY KEY;
Das entfernt den bestehenden Primärschlüssel aus einer Tabelle.
Wichtig: Danach hat die Tabelle keinen Primärschlüssel mehr, das heißt:
Es gibt keine eindeutige Identifikation mehr für Datensätze.
Du kannst NULL- oder doppelte Werte im ehemaligen Schlüssel-Feld speichern (sofern nicht anders eingeschränkt).
Was macht ein INDEX?
Ein Index:
Beschleunigt Suchabfragen (SELECT) auf bestimmten Spalten.
Macht WHERE, JOIN, ORDER BY, GROUP BY usw. viel schneller.
Hat keinen Einfluss auf die Daten selbst.
Hinzufügen eines INDEX:
Ohne Indexnamen:
ALTER TABLE kunden
ADD INDEX (plz);
Mit Indexnamen:
ADD INDEX idx_plz (plz);
Technisch gleich aber später wenn man den löschen möchte einfacher:
DROP INDEX idx_plz;
Wie definiert man eine Spalte im Nachhinein als eindeutig (UNIQUE)?
ALTER TABLE vertreter
ADD UNIQUE (region);
In der Tabelle vertreter darf jede Region nur einmal vorkommen.
Zwei Vertreter dürfen nicht dieselbe Region haben.
Merkmale:
Alle Werte in diesem Feld müssen einzigartig sein.
Doppelte Einträge sind nicht erlaubt.
Es wird automatisch ein eindeutiger Index auf dieses Feld erstellt.
Du kannst mehrere UNIQUE Felder haben
Du darfst mehrere NULL Werte haben, außer du verbietest es extra.
Wie änderet oder löscht man ein Standartwert?
Ändern eines Standardwerts (SET DEFAULT)
ALTER feld_x SET DEFAULT wert;
Damit legst du fest, welcher Wert automatisch verwendet wird, wenn kein Wert für dieses Feld beim Einfügen angegeben wird.
ALTER entfernung SET DEFAULT 0;
Wenn du später INSERT INTO fahrten ... machst und keine Entfernung angibst, wird automatisch 0 eingesetzt
Löschen eines Standardwerts (DROP DEFAULT)
ALTER feld_x DROP DEFAULT;
Wenn du später INSERT INTO fahrten ... machst und keine Entfernung angibst, wird automatisch 0 eingesetzt.
ALTER entfernung DROP DEFAULT;
Jetzt gibt es keinen automatischen Wert mehr – du musst beim Einfügen entweder einen Wert angeben oder NULL zulassen.
Weitere Befehle?
CHANGE entfernung entf SMALLINT;
Hier passieren zwei Dinge gleichzeitig:
Umbenennen der Spalte:
Die Spalte entfernung wird umbenannt in entf
Ändern des Datentyps:
Der Datentyp wird von dem bisherigen (z. B. INT) zu SMALLINT geändert.
Wie ändert man den Datentypen eines Feldes?
MODIFY ändert nur den Datentyp (z. B. INT zu MEDIUMINT) einer bestehenden Spalte. Der Spaltenname bleibt dabei gleich.
MODIFY entfernung MEDIUMINT;
In der Tabelle fahrten
wird der Datentyp der Spalte entfernung
von z. B. INT auf MEDIUMINT geändert
Wie setzt man AUTO_INCREMENT auf einen neuen Wert?
AUTO_INCREMENT = 1;
Wenn keine Datensätze mehr vorhanden sind:
Der Zähler beginnt wieder bei 1.
Wenn Datensätze vorhanden sind:
Der neue AUTO_INCREMENT-Wert überschreibt den nächsten automatisch vorgeschlagenen Wert (z. B. setzt ihn auf 1000, auch wenn der bisher höchste nur 20 war).
Wie lässt man einfach Werte eingeben
VALUES (wert_1, wert_2, ..., wert_n);
Achtung: Hier muss die Anzahl und Reihenfolge der Werte exakt zur Spaltendefinition in der Tabelle passen.
Sobald z. B. eine Spalte dazukommt, schlägt dieser Befehl fehl, wenn du ihn nicht aktualisierst.
Funktioniert gut nur bei kleinen, fest strukturierten Tabellen
Dann musst du exakt so viele Werte angeben, wie es Spalten gibt – egal ob NOT NULL oder NULL erlaubt ist.
Denn: Die Reihenfolge und Anzahl müssen 1:1 zu deiner Tabelle passen.
→ Wenn eine Spalte fehlt, gibt es einen Fehler.
Pflichten:
Du musst alle Spaltenwerte angeben (auch NULL oder DEFAULT),
und die Reihenfolge der Spalten muss exakt der Tabellendefinition entsprechen.
Mitangaben der Spalten:
Du kannst Felder weglassen (z. B. nachname, plz, id).
Reihenfolge frei wählbar.
Fehlende Felder bekommen:
NULL (wenn erlaubt),
oder ihren DEFAULT-Wert,
oder bei AUTO_INCREMENT den nächsten Zählerwert automatisch.
Was ist die alternative Set-Syntax?
INSERT INTO kunde
SET vorname = "Emil", nachname = "Fritze", plz = "40195", ort = "Düsseldorf";
Vorteil:
Du musst nicht alle Spalten angeben.
Spalten, die einen DEFAULT-Wert oder AUTO_INCREMENT haben, kannst du einfach weglassen.
Sehr leserfreundlich, besonders bei vielen Spalten.
Hinweis:
Die SET-Variante ist MySQL-spezifisch – nicht alle Datenbanksysteme unterstützen das.
In professionellen Umgebungen verwendet man meist die klassische VALUES-Schreibweise, weil sie portabler ist.
Was macht UPDATE?
Syntax:
UPDATE tabellenname
SET feld_1 = wert_1, feld_2 = wert_2, ..., feld_n = wert_n
WHERE bedingung;
UPDATE kunden
SET ort = 'Berlin'
WHERE kundennr = 5;
Ohne WHERE wird jede Zeile geändert!
Mit dem UPDATE-Befehl kannst du nicht nur Werte direkt ändern, sondern auch Berechnungen mit bestehenden Werten durchführen.
UPDATE artikel
SET einzelpreis = einzelpreis * 0.95
WHERE art_nr = 555;
Tabelle: artikel
Feld: einzelpreis
Was passiert?
Der Einzelpreis des Artikels mit der Artikelnummer 555 wird um 5 % reduziert.
Also z. B. von 10.00 → 9.50
Was macht REPLACE?
vorname
nachname
plz
Erwin
Müller
4
Trude
Meier
6
Claudia
Schulze
9
REPLACE INTO vertreter (vorname, nachname, plz)
VALUES ("Hans", "Hutmacher", 6);
Was passiert genau?
MySQL schaut: Gibt es schon einen Eintrag mit plz = 6?
Ja! ➝ Es gibt: Trude Meier mit PLZ 6.
Weil plz UNIQUE ist, wird dieser Eintrag komplett gelöscht.
Danach wird ein neuer Datensatz eingefügt: Hans Hutmacher mit PLZ 6.
Wichtig zu wissen:
REPLACE ist also wie:
1. DELETE des alten Eintrags mit der gleichen UNIQUE-Spalte.
2. INSERT des neuen Eintrags.
Es funktioniert nur, wenn eine Spalte als UNIQUE oder PRIMARY KEY definiert ist.
REPLACE ist wie eine Kombination aus DELETE + INSERT.
Alles, was du nicht explizit angibst, wird auf NULL gesetzt!
Was macht DELETE?
Löscht Inhalte:
DELETE FROM kunde;
Löscht alle Datensätzte
DELETE FROM kunden WHERE id = 5;
löscht den Datensatz von Kunde mit der id 5
DELETE FROM kunde
WHERE letzter_Zugriff < "2007-01-01";
Löscht alle Kunden, die sich vor dem 01.01.2007 zuletzt eingeloggt haben.
Was sind Transaktionbefehle?
BEGIN
Startet eine Transaktion. Damit sagst du der Datenbank: „Jetzt kommt ein Block von Befehlen, die zusammengehören.“
BEGIN;
UPDATE konto SET kontostand = kontostand - 100 WHERE kunde_id = 1;
UPDATE konto SET kontostand = kontostand + 100 WHERE kunde_id =2;
-- Noch kein COMMIT, also ist nichts dauerhaft gespeichert!
SAVEPOINT
Setzt einen Zwischenspeicherpunkt innerhalb einer Transaktion. Falls später ein Fehler passiert, kannst du zu diesem Punkt zurückkehren.
SAVEPOINT geld_abgezogen;
UPDATE konto SET kontostand = kontostand + 100 WHERE kunde_id = 999; -- Kunde gibt's nicht!
ROLLBACK
Macht alle Änderungen seit BEGIN (oder seit dem letzten SAVEPOINT) rückgängig – wie „alles zurück!“.
COMMIT
Bestätigt die Transaktion. Alle Änderungen werden dauerhaft gespeichert.
UPDATE konto SET kontostand = kontostand + 100 WHERE kunde_id = 2;
COMMIT; -- jetzt ist alles fest gespeichert
Was sind Befehle die Filtern?
WHERE
Filtert einzelne Zeilen in der Datenbank bevor irgendetwas gruppiert oder gerechnet wird.
SELECT * FROM kunden WHERE land = 'DE';
Klassischer Filter auf Zeilenbasis.
HAVING
Filtert nach GROUP BY – also wenn du Daten gruppiert hast und danach noch sagst:
„Zeig mir nur Gruppen, die bestimmte Bedingungen erfüllen.“
SELECT land, COUNT(*) FROM kunden
GROUP BY land
HAVING COUNT(*) > 10;
Filtert Gruppen, nicht einzelne Zeilen.
LIMIT
Filtert nicht nach Inhalt, sondern sagt:
„Zeig mir nur die ersten X Zeilen.“
SELECT * FROM kunden LIMIT 10;
Zeig mir nur die ersten 10 zeilen
SELECT *
FROM kunde
LIMIT 8, 3;
Starte bei Zeile 9 (weil Zählung bei 0 beginnt)
Gib 3 Zeilen aus → Zeile 9, 10, 11
Mengenbegrenzung = auch ein Filter.
Was macht LENGTH()?
Gibt die Zeichenanzahl eines Textes zurück
SELECT LENGTH('Hallo'); -- ergibt 5
Was macht DISTINCT()?
Schlüsselwort
Entfernt Doppelwerte aus dem Ergebnis
SELECT DISTINCT land FROM kunden;
Gibt jede Land-Bezeichnung nur einmal zurück
Was macht CONTACT?
Verbindet Zeichenketten zu einer neuen
SELECT CONCAT('Ali', ' ', 'Müller'); -- ergibt: 'Ali Müller'
funktioniert pro Zeile, nicht über viele Zeilen
Was ist das besondere an Primary Key?
Ein PRIMARY KEY ist der eindeutige Fingerabdruck jeder Zeile in einer Tabelle.
Eigenschaften:
Eindeutig: Jede Zeile muss einen anderen Wert haben
Nicht NULL: Es muss ein Wert vorhanden sein
Oft benutzt man AUTO_INCREMENT, um IDs automatisch zu vergeben
Was ist das Besondere an FOREIGN KEY?
Verbindet zwei Tabellen miteinander.
Sorgt dafür, dass der Wert in der anderen Tabelle existieren muss
Dient der Referenzierung (z. B. „Dieser Kunde gehört zu dieser Bestellung“)
Was macht CHECK?
Stell dir vor, du machst eine Tabelle für Produkte, und du willst sagen:
„Der Preis darf nicht kleiner als 0 sein!“
→ Das ist eine Regel, und genau dafür ist CHECK da.
CREATE TABLE produkte (
id INT PRIMARY KEY,
name VARCHAR(100),
preis DECIMAL(5,2) CHECK (preis > 0)
Welche SQL-Funktionen manipulieren Zeichenfolgen?
CONCAT() :
Funktion: Verbindet (konkateniert) zwei oder mehr Texte
SELECT CONCAT('Ali', ' ', 'Müller'); -- Ergebnis: 'Ali Müller'
SUBSTRING()
Funktion: Holt einen Teil aus einem Text heraus
SELECT SUBSTRING('Hallo Welt', 1, 5); -- Ergebnis: 'Hallo'
Erklärung:
Start bei Position 1
Hole 5 Zeichen
UPPER()
Funktion: Wandelt Text in Großbuchstaben um
SELECT UPPER('hallo'); -- Ergebnis: 'HALLO'
LEFT():
Funktion: Holt die linken (ersten) X Zeichen aus einem Text
SELECT LEFT('Banane', 3); -- Ergebnis: 'Ban'
Welche SQL Abfrage gibt es?
SELECTION
Auswahl bestimmter Zeilen nach Kriterien (also: welche Datensätze?)
WHERE ort = "hamburg";
Alle Kunden sollen angezeigt werden, aber nur die aus Hamburg.
JOIN
Zusammenführen mehrerer Tabellen (über gemeinsame Spalten)
Wenn man Daten aus mehreren Tabellen gemeinsam anzeigen möchte – z. B.:
Tabelle kunde: Kundendaten
Tabelle bestellung: Bestellungen
Projection
Auswahl von Spalten (also: welche Infos anzeigen?)
SELECT kd_nr, nachname, plz
FROM kunde;
Das ist eine Projektion, weil nur ausgewählte Spalten angezeigt werden.
Was macht INNER JOIN?
Es sollen nur die Mitarbeiter angezeigt werden,
die auch tatsächlich Projektleiter in einem Projekt sind.
FROM mitarbeiter
INNER JOIN projekt
ON persnr = leiter;
Alternative Variante
FROM
mitarbeiter, projekt
WHERE persnr = leiter;
Was macht LEFT JOIN ?
Der LEFT JOIN sagt:
„Zeig mir ALLE Zeilen aus der linken Tabelle, egal ob sie zur rechten Tabelle passen oder nicht.“
Wenn ein Datensatz keinen passenden Treffer in der rechten Tabelle findet, dann zeigt SQL immer noch den Datensatz aus der linken Tabelle an – und füllt die Werte aus der rechten Tabelle mit NULL (also „nichts drin“) aus.
Was macht RIGHT JOIN?
Zeigt alle Zeilen aus der rechten Tabelle, auch wenn es links keinen passenden Wert gibt.
Wenn links kein passender Datensatz existiert, wird die linke Seite mit NULL aufgefüllt.
Was macht ein CROSS JOIN
Ein CROSS JOIN macht das kartesische Produkt zweier Tabellen:
Jeder Datensatz aus Tabelle A wird mit jedem Datensatz aus Tabelle B kombiniert.
Was macht OR, AND, NOT?
AND
SELECT * FROM kunde
WHERE ort = 'Hamburg'
AND plz = '20095';
Nur Kunden aus Hamburg UND mit der PLZ 20095 werden angezeigt.
OR
OR plz = '20095';
Kunden aus Hamburg oder mit PLZ 20095 (auch wenn sie aus einer anderen Stadt kommen).
NOT
WHERE NOT ort = 'Hamburg';
Zeigt Kunden, die entweder aus Hamburg oder PLZ 20095 haben, aber nicht beides gleichzeitig.
Was macht ORDER BY?
Aufsteigend ASC
ORDER BY name ASC;
Sortiert:
Alphabetisch von A → Z
Zahlen von klein nach groß
Datum von früh nach spät
Absteigend DESC
ORDER BY name DESC;
Spaltennummer
SELECT name, ort, umsatz
ORDER BY 2;
Es sortiert nach der zweiten Spalte, die du im SELECT geschrieben hast.
Weitere SQL Befehle?
Funktion
Bedeutung
Beispiel
COUNT(*)
Zählt alle Zeilen
SELECT COUNT(*) FROM kunde
COUNT(DISTINCT ...)
Zählt nur unterschiedliche Werte
SELECT COUNT(DISTINCT ort) FROM kunde
SUM()
Gibt die Summe aller Werte
SELECT SUM(umsatz) FROM kunde
MAX()
Gibt den größten Wert zurück
SELECT MAX(umsatz) FROM kunde
MIN()
Gibt den kleinsten Wert zurück
SELECT MIN(umsatz) FROM kunde
AVG()
Gibt den Durchschnitt zurück
SELECT AVG(umsatz) FROM kunde
GROUP_CONCAT()
Verbindet mehrere Werte zu Text
SELECT GROUP_CONCAT(name) FROM kunde → „Ali, Samira“
Was macht IN und ON
ON
wird verwendet, um zwei Tabellen miteinander zu verknüpfen.
gehört zu JOIN
IN
wird verwendet, um zu prüfen, ob ein Wert in einer Liste oder in einem Unterergebnis enthalten ist.
gehört zu Bedingungen in WHERE
Was bedeutet „Referentielle Integrität“?
Referentielle Integrität stellt sicher,
dass Verknüpfungen zwischen Tabellen immer gültig sind.
Eine Bestellung darf nur einen Kunden referenzieren, der auch wirklich existiert.
kundennr = 3 ist nicht erlaubt, weil es diesen Kunden nicht gibt → das wäre ein Verstoß gegen referentielle Integrität.
Wie wird das verhindert
Mit einem sogenannten Fremdschlüssel (Foreign Key).
ALTER TABLE bestellung
ADD CONSTRAINT fk_kunde
FOREIGN KEY (kundennr)
REFERENCES kunde(kundennr);
Diese kundennr in bestellung muss in der Tabelle kunde vorhanden sein.
REFERENCES kunde(kundennr)
ON DELETE CASCADE
ON UPDATE CASCADE
Was ist ein SQL Befehl?
Ein Befehl, der eine Aktion in der Datenbank ausführt.
✅ Beispiele:
SELECT → Daten abfragen
INSERT → Neue Daten einfügen
UPDATE → Daten ändern
DELETE → Daten löschen
CREATE TABLE → Neue Tabelle erstellen
📌 Merkmale:
Steht immer am Anfang einer SQL-Anweisung
Führt eine komplette Aktion durch
Was ist ein SQL Funktion?
Eine eingebaute Berechnung oder Umwandlung, die du innerhalb eines Befehls nutzt.
COUNT(*) → Anzahl der Zeilen zählen
SUM(preis) → Summe berechnen
UPPER(name) → Großbuchstaben machen
NOW() → aktuelles Datum/Zeit
Wird im SELECT oder WHERE verwendet
Gibt einen Wert zurück
Was ist ein SQL Schlüsselwortl?
Ein reserviertes Wort in SQL – die Bausteine der Sprache.
FROM, WHERE, ORDER BY, GROUP BY, AS, JOIN, NULL
Auch: SELECT, INSERT usw. zählen streng genommen auch als Schlüsselwörter, sind aber gleichzeitig Befehle
Kann nicht als Name für Spalten oder Tabellen verwendet werden
Hat feste Bedeutung in SQL
Was ist ein SQL Constraint?
Eine Regel, die Daten in der Tabelle validiert oder schützt.
PRIMARY KEY → eindeutig & nicht NULL
FOREIGN KEY → verweist auf andere Tabelle
NOT NULL → darf nicht leer sein
UNIQUE → jeder Wert nur einmal
CHECK (alter >= 18) → nur gültige Werte erlaubt
Gehört zur Tabellenstruktur
Sorgt für Datenqualität & Konsistenz
Zuletzt geändertvor 4 Tagen