Eine Unterabfrage ist eine SELECT-Abfrage innerhalb einer anderen. Ein Index (CREATE INDEX) beschleunigt Suchen auf einer Spalte, verlangsamt aber Schreibvorgänge leicht. Transaktionen (BEGIN ... COMMIT/ROLLBACK) fassen mehrere Befehle zu einer unteilbaren Einheit zusammen: Entweder gelingen alle oder keiner (ACID).
Sicherheit: Baue SQL aus Nutzereingaben nie per Textverkettung zusammen, sondern nutze Parameter, sonst droht SQL-Injection.
-- Unterabfrage: Nutzer, die mehr als der Durchschnitt bestellt haben
SELECT name FROM nutzer
WHERE id IN (
SELECT nutzer_id FROM bestellung
GROUP BY nutzer_id
HAVING SUM(betrag) > (SELECT AVG(betrag) FROM bestellung)
);
CREATE INDEX idx_bestellung_nutzer ON bestellung(nutzer_id);
BEGIN;
UPDATE konto SET stand = stand - 50 WHERE id = 1;
UPDATE konto SET stand = stand + 50 WHERE id = 2;
COMMIT; -- oder ROLLBACK bei einem FehlerMerke
Unterabfragen verschachteln SELECTs
Indizes beschleunigen Suchen
Transaktionen: alles oder nichts (ACID)
Aufgabe
Überweise per Transaktion einen Betrag zwischen zwei Konten.