Eine View (Sicht) ist eine virtülle Tabelle, die durch eine gespeicherte SELECT-Abfrage definiert wird. Sie speichert keine eigenen Daten, sondern berechnet das Ergebnis bei jedem Zugriff neu.
-- View erstellen
CREATE VIEW Kursübersicht AS
SELECT k.bezeichnung, l.name AS lehrkraft, COUNT(b.schueler_id) AS teilnehmer
FROM Kurs k
JOIN Lehrkraft l ON k.lehrkraft_id = l.lehrkraft_id
LEFT JOIN Belegung b ON k.kurs_id = b.kurs_id
GROUP BY k.bezeichnung, l.name;
-- View verwenden wie eine normale Tabelle
SELECT * FROM Kursübersicht WHERE teilnehmer > 20;Vorteile von Views:
Eine Transaktion ist eine logische Einheit aus einer oder mehreren Datenbankoperationen, die ganz oder gar nicht ausgeführt werden.
BEGIN TRANSACTION;
UPDATE Konto SET saldo = saldo - 100 WHERE konto_id = 1;
UPDATE Konto SET saldo = saldo + 100 WHERE konto_id = 2;
COMMIT;
-- Bei Fehler: ROLLBACK;Bei einem Fehler wird ein ROLLBACK durchgeführt: Alle Änderungen seit dem BEGIN werden rückgängig gemacht.
Transaktionen müssen die vier ACID-Eigenschaften erfüllen:
Ein Index ist eine zusätzliche Datenstruktur (häufig ein B-Baum), die den Zugriff auf bestimmte Spalten beschleunigt – vergleichbar mit einem Stichwortverzeichnis in einem Buch.
-- Index erstellen
CREATE INDEX idx_schueler_name ON Schüler(name);
-- Abfrage profitiert automatisch vom Index
SELECT * FROM Schüler WHERE name = 'Müller';Vorteile: Deutlich schnellere Suchoperationen (von O(n) auf O(log n) bei B-Baum).
Nachteile: Zusätzlicher Speicherverbrauch. Schreiboperationen (INSERT, UPDATE, DELETE) werden langsamer, da der Index aktualisiert werden muss.
Erweiterte Abfragetechniken für komplexe Datenabfragen:
-- Subquery: Schüler mit überdurchschnittlicher Note
SELECT name FROM Schüler s
JOIN Belegung b ON s.schueler_id = b.schueler_id
WHERE b.note < (SELECT AVG(note) FROM Belegung);
-- LEFT JOIN: Alle Kurse, auch ohne Belegungen
SELECT k.bezeichnung, COUNT(b.schueler_id) AS anzahl
FROM Kurs k
LEFT JOIN Belegung b ON k.kurs_id = b.kurs_id
GROUP BY k.bezeichnung;
-- HAVING: Nur Kurse mit mehr als 5 Teilnehmern
SELECT k.bezeichnung, COUNT(*) AS anzahl
FROM Kurs k JOIN Belegung b ON k.kurs_id = b.kurs_id
GROUP BY k.bezeichnung
HAVING COUNT(*) > 5;Abitur-Tipp: Präge dir die ACID-Eigenschaften mit einem Bankbeispiel ein: Überweisung von 100€ muss atomar sein (beide Konten ändern oder keines), konsistent (Gesamtsumme bleibt gleich), isoliert (andere Transaktionen sehen keinen Zwischenzustand) und dauerhaft (nach Commit nicht verlierbar). Views und Subqueries sind typische SQL-Aufgaben im Abitur.