Aufgabe 12 - SQL DML (INSERT, SELECT, UPDATE, DELETE)
Aufgabe 12 - SQL DML (INSERT, SELECT, UPDATE, DELETE)
Abschnitt betitelt „Aufgabe 12 - SQL DML (INSERT, SELECT, UPDATE, DELETE)“Worum geht es?
Abschnitt betitelt „Worum geht es?“In dieser Übung werden die vier zentralen DML-Befehle INSERT, SELECT, UPDATE und DELETE an einem Buchkatalog geübt (siehe Kapitel 5 - SQL-Grundlagen und Kapitel 6 - SQL DML-Funktionen). Der Expertenteil führt zu Transaktionssicherheit, UPSERT und gezieltem Löschen über Subqueries.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel 5 und 6.
- Ein PostgreSQL-Server und ein SQL-Editor.
- Eine Datei
aufgabe12.sql.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie fügen Daten einzeln und mehrzeilig ein und deuten Constraint-Fehler.
- Sie lesen und filtern Daten mit
WHERE,IN,LIKEund Vergleichsoperatoren. - Sie ändern und löschen Daten gezielt mit
WHERE. - Sie sichern riskante Operationen mit Transaktionen ab und setzen UPSERT und
RETURNINGein.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: Daten einfügen und Constraints testen (Teil A).
- Reorganisation und Transfer: Daten filtern und ändern (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: riskante Löschungen absichern und fortgeschrittene Muster einsetzen (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Schema (Buchkatalog)
Abschnitt betitelt „Schema (Buchkatalog)“CREATE TABLE author ( author_id SERIAL PRIMARY KEY, pen_name VARCHAR(80) NOT NULL, email VARCHAR(120) NOT NULL UNIQUE, country VARCHAR(60), birth_year INTEGER CHECK (birth_year BETWEEN 1900 AND 2020));
CREATE TABLE book ( book_id SERIAL PRIMARY KEY, author_id INTEGER NOT NULL REFERENCES author(author_id), title VARCHAR(160) NOT NULL, isbn VARCHAR(20) NOT NULL UNIQUE, published_date DATE, price NUMERIC(6,2) NOT NULL CHECK (price >= 0), genre VARCHAR(40));Teil A - Einfügen und Constraints testen
Abschnitt betitelt „Teil A - Einfügen und Constraints testen“- Mindestens drei Autorinnen/Autoren einfügen, davon mindestens ein
INSERTmit mehreren Zeilen; danach mitSELECTkontrollieren. - Mindestens fünf Bücher einfügen, darunter eines mit Genre
'Education', eines mit'Non-Fiction'und eines mitisbn = '978-0-00-000003-5'. - Mindestens drei absichtlich fehlerhafte Inserts durchführen (doppelte
email, doppelteisbn,price = -5, nicht existierendeauthor_id) und die Fehlermeldung dokumentieren.
Teil B - Lesen (SELECT)
Abschnitt betitelt „Teil B - Lesen (SELECT)“- Alle Bücher; nur Titel und Preis; Bücher mit
price > 20. - Bücher mit Genre
'Education'oder'Non-Fiction'(mitIN). - Autoren, deren
pen_namemitAbeginnt (mitLIKE); Bücher nach2022-12-31undgenre <> 'Thriller'.
Teil C - Ändern (UPDATE)
Abschnitt betitelt „Teil C - Ändern (UPDATE)“- Preis des Buchs mit
isbn = '978-0-00-000003-5'auf16.90setzen. - Bei einer Autorin/einem Autor
countryundemailin einemUPDATEändern. - Preis aller
'Education'-Bücher um2.00erhöhen; bei einem Buchpublished_dateaufNULLsetzen. Nach jedem Update mitSELECTprüfen.
Teil D - Expertenteil: Sicher löschen und fortgeschrittene Muster
Abschnitt betitelt „Teil D - Expertenteil: Sicher löschen und fortgeschrittene Muster“-
Transaktionssicheres Massenlöschen: Alle Bücher mit
price < 13.00löschen, aber vorher absichern:BEGIN;SELECT count(*) FROM book WHERE price < 13.00; -- check how many are affectedDELETE FROM book WHERE price < 13.00;SELECT count(*) FROM book; -- verify the resultROLLBACK; -- or COMMIT if the result is correctErklären, wozu
BEGINundROLLBACKhier dienen und was einDELETEohneWHEREangerichtet hätte. -
UPSERT: Ein Buch mit einer bereits vorhandenen
isbn„einfügen oder aktualisieren” mitINSERT ... ON CONFLICT:INSERT INTO book (author_id, title, isbn, price, genre)VALUES (1, 'New Edition', '978-0-00-000003-5', 18.90, 'Education')ON CONFLICT (isbn) DO UPDATESET title = EXCLUDED.title, price = EXCLUDED.price;Danach zeigen, dass keine doppelte Zeile entstanden ist, sondern die bestehende aktualisiert wurde.
-
Löschen über Subquery: Alle Bücher löschen, deren Autorin/Autor aus einem bestimmten Land stammt, ohne die
author_idvon Hand herauszusuchen:DELETE FROM bookWHERE author_id IN (SELECT author_id FROM author WHERE country = 'Austria'); -
RETURNING: Ein
UPDATEoderDELETEmitRETURNING *ausführen und erklären, wozu die zurückgegebenen Zeilen nützlich sind. -
Fremdschlüssel-Verhalten: Versuchen, eine Autorin/einen Autor zu löschen, die/der noch Bücher hat; die Fehlermeldung dokumentieren und erklären, in welcher Reihenfolge korrekt gelöscht werden muss (oder wie
ON DELETE CASCADEdas ändern würde).
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Warum ist ein
DELETEoderUPDATEohneWHEREgefährlich? - Wozu dienen
BEGINundROLLBACKbeim Testen einer riskanten Löschung? - Was macht
INSERT ... ON CONFLICT ... DO UPDATE? - Wie löscht man Zeilen abhängig von Werten einer anderen Tabelle?
- Welcher Constraint verhindert das Löschen einer Autorin, die noch Bücher hat?
- Eine SQL-Datei
aufgabe12.sqlmit Schema, allen Statements in sinnvoller Reihenfolge, den Constraint-Tests und dem Expertenteil D, jeweils kurz kommentiert.
HTL Villach, Schuljahr 2025-2026,
https://www.htl-villach.at