Was ist SQL?
SQL (Structured Query Language, gesprochen "S-Q-L" oder "Sequel") ist die Standardsprache für relationale Datenbanken. Du beschreibst, welche Daten du willst, nicht wie sie gefunden werden; das entscheidet die Datenbank.
Eine relationale Datenbank speichert Daten in Tabellen: Spalten sind die Eigenschaften, Zeilen die einzelnen Datensätze.
| id | name | ort |
|---|---|---|
| 1 | Mia | Berlin |
| 2 | Tom | Hamburg |
Wichtige Datenbanksysteme
| System | Typisch für |
|---|---|
| SQLite | eingebettet, eine Datei, Apps, Handys, Tests |
| PostgreSQL | Allrounder, sehr standardnah, viele Funktionen |
| MySQL / MariaDB | Webanwendungen |
| SQL Server | Microsoft-Umgebungen |
| Oracle | Konzerne |
Der Kern von SQL ist überall gleich; Details (Datentypen, Funktionen, LIMIT vs TOP) unterscheiden sich. Dieser Kurs nutzt SQLite und weist auf Unterschiede hin.
Die Sprachbereiche
| Bereich | Befehle | Zweck |
|---|---|---|
| DDL (Definition) | CREATE, ALTER, DROP | Struktur festlegen |
| DML (Manipulation) | INSERT, UPDATE, DELETE | Daten ändern |
| DQL (Abfrage) | SELECT | Daten lesen |
| TCL (Transaktionen) | BEGIN, COMMIT, ROLLBACK | Änderungen bündeln |
| DCL (Rechte) | GRANT, REVOKE | Zugriff steuern |
Dein erstes SQL
SELECT 'Hallo SQL' AS gruss, 6 * 7 AS antwort;Ausgabe
gruss antwort --------- ------- Hallo SQL 42
SQL ist nicht case-sensitiv bei Schlüsselwörtern, aber man schreibt sie meist GROSS. Anweisungen enden mit einem Semikolon. Kommentare: -- bis Zeilenende oder /* mehrzeilig */.
-- Das ist ein Kommentar
SELECT 1 + 1 AS summe; /* noch einer */
SELECT sqlite_version() IS NOT NULL AS laeuft;Ausgabe
summe ----- 2 laeuft ------ 1
Der Kurs im Überblick
Alle Beispiele nutzen dieselbe kleine Beispieldatenbank mit Kunden und Bestellungen. Jedes Beispiel ist in sich geschlossen: Du kannst den Code kopieren und in einer leeren SQLite-Datenbank ausführen.
CREATE TABLE kunden (id INTEGER PRIMARY KEY, name TEXT NOT NULL, ort TEXT, punkte INTEGER);
CREATE TABLE bestellungen (id INTEGER PRIMARY KEY, kunde_id INTEGER, produkt TEXT, preis REAL, menge INTEGER, datum TEXT);
INSERT INTO kunden VALUES (1,'Mia','Berlin',120),(2,'Tom','Hamburg',80),(3,'Zoe','Berlin',200),(4,'Ben','München',NULL),(5,'Eva','Köln',150);
INSERT INTO bestellungen VALUES
(1,1,'Laptop',999.00,1,'2025-01-10'),(2,1,'Maus',25.50,2,'2025-01-12'),(3,2,'Monitor',189.90,1,'2025-02-01'),
(4,3,'Tastatur',49.00,1,'2025-02-15'),(5,3,'Maus',25.50,1,'2025-03-03'),(6,3,'Laptop',999.00,1,'2025-03-20'),
(7,NULL,'Kabel',5.00,3,'2025-03-21');
SELECT * FROM kunden;Ausgabe
id name ort punkte -- ---- ------- ------ 1 Mia Berlin 120 2 Tom Hamburg 80 3 Zoe Berlin 200 4 Ben München 5 Eva Köln 150
So führst du den Code aus: Ausprobieren ohne Installation in einem SQL-Playground im Browser, lokal mit SQLite (sqlite3 test.db) oder PostgreSQL (psql). Die Beispiele dieses Kurses laufen in SQLite und fast alle auch in PostgreSQL und MySQL.
Merke
- SQL beschreibt was du willst; die Datenbank findet den Weg
- Daten liegen in Tabellen aus Spalten und Zeilen
- Befehle gliedern sich in DDL, DML, DQL, TCL, DCL
- Schlüsselwörter sind nicht case-sensitiv, Anweisungen enden mit
; - Der Kern ist in allen Systemen gleich, Details unterscheiden sich
Aufgabe
Gib mit einem SELECT die Zahl 2025 und den Text Jahr als zwei benannte Spalten aus.