SQL-Befehle
SQL-Befehle
Die vollständige Referenz der wichtigsten SQL-Befehle – von DDL über DML bis zu JOINs, Unterabfragen und Transaktionen. Mit praxisnahen Beispielen und Best Practices.
Inhaltsverzeichnis
Schnellübersicht
- Definition: Was ist SQL und wofür wird es eingesetzt?
- DDL: CREATE, ALTER, DROP, TRUNCATE – Tabellenstrukturen verwalten
- DML: SELECT, INSERT, UPDATE, DELETE – Daten manipulieren
- DCL: GRANT, REVOKE – Berechtigungen steuern
- TCL: COMMIT, ROLLBACK, SAVEPOINT – Transaktionen verwalten
- JOINs: INNER, LEFT, RIGHT, FULL, CROSS
- Aggregatfunktionen: COUNT, SUM, AVG, MIN, MAX
- Unterabfragen & CTEs: Verschachtelte Abfragen
- Best Practices: Performance, Sicherheit, Stil
- FAQ: Häufige Fragen & Antworten
1. Was ist SQL?
Definition
SQL (Structured Query Language) ist die Standardsprache zur Verwaltung und Abfrage relationaler Datenbanken. Mit SQL können Sie Tabellen erstellen, Daten einfügen, ändern und löschen, komplexe Abfragen formulieren und Berechtigungen verwalten.
SQL wird von allen großen Datenbanksystemen unterstützt: MySQL, PostgreSQL, Microsoft SQL Server, Oracle, SQLite, MariaDB und vielen weiteren. Obwohl der SQL-Standard (ANSI/ISO) weitgehend einheitlich ist, hat jedes System eigene Erweiterungen und Dialekte.
SQL-Befehle werden in vier Kategorien unterteilt: DDL (Strukturdefinition), DML (Datenmanipulation), DCL (Berechtigungssteuerung) und TCL (Transaktionskontrolle).
2. Die vier SQL-Kategorien
DDL
Definiert und verändert die Struktur der Datenbank (Tabellen, Views, Indexes).
CREATETabelle, View, Index erstellenALTERStruktur ändern (Spalten hinzufügen)DROPObjekt löschenTRUNCATEAlle Zeilen löschen (Struktur bleibt)RENAMEObjekt umbenennen
DML
Bearbeitet die Daten innerhalb der Tabellen – der am häufigsten verwendete Bereich.
SELECTDaten abfragenINSERTNeue Zeilen einfügenUPDATEVorhandene Zeilen ändernDELETEZeilen löschenMERGEEinfügen oder Aktualisieren
DCL
Steuert Zugriffsrechte und Berechtigungen auf Datenbankobjekte.
GRANTRechte vergebenREVOKERechte entziehenDENYRechte explizit verweigern (MSSQL)
TCL
Verwaltet Transaktionen und sorgt für Datenkonsistenz (ACID-Prinzip).
COMMITTransaktion bestätigenROLLBACKTransaktion zurücksetzenSAVEPOINTZwischenpunkt setzenSET TRANSACTIONIsolationsebene festlegen
3. DDL – Tabellenstrukturen verwalten
CREATE TABLE
Erstellt eine neue Tabelle mit definierten Spalten und Datentypen.
ALTER TABLE
Ändert die Struktur einer bestehenden Tabelle.
DROP TABLE
Löscht eine Tabelle inklusive aller Daten und der Struktur.
TRUNCATE TABLE
Löscht alle Zeilen einer Tabelle, behält aber die Struktur. Schneller als DELETE ohne WHERE.
Wichtige Datentypen
- INT / BIGINT: Ganze Zahlen
- DECIMAL(p,s): Dezimalzahlen mit fester Genauigkeit
- VARCHAR(n): Zeichenketten variabler Länge
- TEXT: Lange Texte
- DATE / DATETIME / TIMESTAMP: Datum und Uhrzeit
- BOOLEAN: Wahr/Falsch
- BLOB: Binäre Daten (Bilder, Dateien)
4. DML – Daten manipulieren
SELECT
Der wichtigste SQL-Befehl – fragt Daten aus einer oder mehreren Tabellen ab.
INSERT
Fügt neue Zeilen in eine Tabelle ein.
UPDATE
Ändert vorhandene Daten. Immer WHERE verwenden!
DELETE
Löscht Zeilen aus einer Tabelle. Immer WHERE verwenden!
5. SELECT vertieft – WHERE, ORDER BY, GROUP BY
Ausführungsreihenfolge
SQL-Befehle werden nicht in der Reihenfolge ausgeführt, in der sie geschrieben werden:
- FROM / JOIN – Tabellen bestimmen
- WHERE – Zeilen filtern
- GROUP BY – Gruppieren
- HAVING – Gruppen filtern
- SELECT – Spalten auswählen
- ORDER BY – Sortieren
- LIMIT / OFFSET – Ergebnis begrenzen
6. Aggregatfunktionen
| Funktion | Beschreibung | Beispiel | Ergebnis |
|---|---|---|---|
| COUNT(*) | Anzahl aller Zeilen | COUNT(*) | 42 |
| COUNT(col) | Anzahl nicht-NULL-Werte | COUNT(email) | 40 |
| SUM() | Summe aller Werte | SUM(gehalt) | 2.340.000 |
| AVG() | Durchschnittswert | AVG(gehalt) | 55.714 |
| MIN() | Kleinster Wert | MIN(gehalt) | 28.000 |
| MAX() | Größter Wert | MAX(gehalt) | 120.000 |
| GROUP_CONCAT() | Werte zu String verbinden | GROUP_CONCAT(name) | 'Max, Anna, Tom' |
7. JOINs – Tabellen verknüpfen
JOINs verbinden Daten aus zwei oder mehr Tabellen basierend auf einer gemeinsamen Spalte.
INNER JOIN
Nur Zeilen, die in beiden Tabellen ein Match haben.
LEFT JOIN
Alle Zeilen aus links, plus passende aus rechts (sonst NULL).
RIGHT JOIN
Alle Zeilen aus rechts, plus passende aus links (sonst NULL).
FULL OUTER JOIN
Alle Zeilen aus beiden Tabellen (NULL wo kein Match).
CROSS JOIN
Kartesisches Produkt – jede Zeile von A mit jeder von B.
8. Unterabfragen & CTEs
Unterabfrage (Subquery)
Eine Abfrage innerhalb einer anderen Abfrage.
CTE (Common Table Expression)
Temporäre, benannte Ergebnismenge – besser lesbar als verschachtelte Subqueries.
9. DCL & TCL – Berechtigungen & Transaktionen
GRANT
Vergibt Berechtigungen an Benutzer oder Rollen.
REVOKE
Entzieht zuvor vergebene Berechtigungen.
COMMIT & ROLLBACK
Bestätigt oder setzt eine Transaktion zurück (ACID-Prinzip).
SAVEPOINT
Setzt einen Zwischenpunkt innerhalb einer Transaktion.
10. Best Practices
Performance
- Nur benötigte Spalten abfragen (kein SELECT *)
- Indexe auf häufig gefilterte Spalten setzen
- EXPLAIN / EXPLAIN ANALYZE zur Query-Optimierung nutzen
- N+1-Queries vermeiden (JOINs statt Loops)
- LIMIT für große Ergebnismengen verwenden
Sicherheit
- Prepared Statements gegen SQL-Injection
- Prinzip der geringsten Rechte (Least Privilege)
- Niemals Benutzereingaben direkt in SQL einfügen
- Sensible Daten verschlüsseln
- Audit-Logs für kritische Operationen
Code-Stil
- SQL-Schlüsselwörter GROSS schreiben
- Tabellen- und Spaltennamen klein_mit_unterstrich
- Komplexe Queries kommentieren
- Aliase für Tabellen verwenden (m, a, o)
- Konsistente Einrückung und Formatierung
Transaktionen
- UPDATE und DELETE immer in Transaktionen
- Immer WHERE-Klausel bei UPDATE/DELETE
- Transaktionen so kurz wie möglich halten
- Deadlocks vermeiden (gleiche Reihenfolge)
- Backup vor Massen-Operationen
Die gefährlichsten Fehler
- UPDATE ohne WHERE: Ändert ALLE Zeilen in der Tabelle
- DELETE ohne WHERE: Löscht ALLE Zeilen in der Tabelle
- DROP TABLE: Löscht die gesamte Tabelle unwiederbringlich
- SQL-Injection: Unsichere String-Verkettung erlaubt Angriffe
- SELECT *: Holt unnötig viele Daten und verlangsamt die Abfrage
11. FAQ – Häufige Fragen & Antworten
Häufige Fragen zu SQL
DELETE: Löscht Zeilen einzeln, kann mit WHERE gefiltert werden, kann mit ROLLBACK rückgängig gemacht werden, löst Trigger aus. Langsamer bei vielen Zeilen.
TRUNCATE: Löscht alle Zeilen auf einmal, kann NICHT mit WHERE gefiltert werden, ist in den meisten Datenbanken nicht rollback-fähig, setzt AUTO_INCREMENT zurück. Deutlich schneller.
Regel: TRUNCATE für "alles löschen", DELETE für "bestimmte Zeilen löschen".
SQL-Injection ist ein Angriff, bei dem ein Angreifer schädlichen SQL-Code über Eingabefelder einschleust:
Schutz: Immer Prepared Statements (parametrisierte Queries) verwenden:
Index erstellen auf Spalten, die:
- Häufig in WHERE-Klauseln verwendet werden
- In JOIN-Bedingungen vorkommen
- In ORDER BY verwendet werden
- Fremdschlüssel (Foreign Keys) sind
Keinen Index erstellen auf:
- Sehr kleine Tabellen (Full Scan ist schneller)
- Spalten mit wenigen unterschiedlichen Werten (z.B. Boolean)
- Tabellen mit sehr vielen INSERT/UPDATE-Operationen (Index verlangsamt Schreiben)
WHERE: Filtert Zeilen vor der Gruppierung. Kann keine Aggregatfunktionen verwenden.
HAVING: Filtert Gruppen nach der Gruppierung. Kann Aggregatfunktionen verwenden.
NULL bedeutet "unbekannt" oder "nicht vorhanden" – es ist nicht dasselbe wie 0 oder ein leerer String.
IS NULL/IS NOT NULL– auf NULL prüfenCOALESCE(wert, ersatz)– Ersatzwert bei NULLIFNULL(wert, ersatz)– MySQL-spezifisch- NULL = NULL ergibt UNKNOWN, nicht TRUE
- Aggregatfunktionen ignorieren NULL-Werte (außer COUNT(*))
ACID garantiert die Zuverlässigkeit von Datenbanktransaktionen:
- Atomicity (Atomarität): Alles oder nichts – die Transaktion wird ganz oder gar nicht ausgeführt
- Consistency (Konsistenz): Die Datenbank bleibt in einem gültigen Zustand
- Isolation (Isolation): Gleichzeitige Transaktionen beeinflussen sich nicht gegenseitig
- Durability (Dauerhaftigkeit): Nach COMMIT sind die Daten dauerhaft gespeichert
Schritt-für-Schritt-Ansatz:
- EXPLAIN ANALYZE: Ausführungsplan analysieren
- Indexe prüfen: Werden die richtigen Indexe genutzt?
- SELECT *: Nur benötigte Spalten abfragen
- N+1-Problem: JOINs statt einzelner Abfragen in Schleifen
- Subqueries: Durch JOINs oder CTEs ersetzen
- Paginierung: LIMIT/OFFSET oder Keyset-Pagination
- Partitionierung: Große Tabellen aufteilen
Zusammenfassung
Die wichtigsten Punkte
- DDL: CREATE, ALTER, DROP, TRUNCATE – Tabellenstruktur verwalten
- DML: SELECT, INSERT, UPDATE, DELETE – Daten manipulieren
- DCL: GRANT, REVOKE – Berechtigungen steuern
- TCL: COMMIT, ROLLBACK, SAVEPOINT – Transaktionen verwalten
- JOINs: INNER, LEFT, RIGHT, FULL, CROSS – Tabellen verknüpfen
- Aggregatfunktionen: COUNT, SUM, AVG, MIN, MAX
- CTEs: Besser lesbar als verschachtelte Subqueries
- Sicherheit: Immer Prepared Statements gegen SQL-Injection
- Performance: Indexe, EXPLAIN, kein SELECT *
- Immer WHERE: Bei UPDATE und DELETE niemals WHERE vergessen
Weiterführende Themen
Relationale Datenbanken, Normalisierung, ER-Modelle und Schlüssel.
Zu Datenbank-GrundlagenMySQL, PostgreSQL, MSSQL, Oracle – Vergleich und Einsatzgebiete.
Zu SQL-DatenbankenIndexe, Query-Optimierung, Partitionierung und Performance-Tuning.
Zur OptimierungDatenbanken skalieren – Master-Slave, Multi-Master, horizontale Aufteilung.
Zur Replikation