## a) UNION, INTERSECT, EXCEPT ![[Pasted image 20250308160323.png]] ```sql SELECT cust_id FROM customer UNION SELECT cust_id FROM account; SELECT cust_id FROM customer UNION ALL SELECT cust_id FROM account; SELECT cust_id FROM customer INTERSECT SELECT cust_id FROM account; SELECT cust_id FROM customer EXCEPT SELECT cust_id FROM account; ``` ## b)  Partial Index Ein _Partial Index_ ist ein Index, der nur für einen Teil der Datensätze einer Tabelle erstellt wird, die einer bestimmten Bedingung entsprechen. z.B. für alle aktiven accounts. ## c) View Eine _View_ ist eine virtuelle Tabelle, die im Grunde die SQL Abfrage zusammenfasst. Man kann sie sich wie eine Python-Funktion vorstellen, die das Ergebnis einer Abfrage zurückgibt. ```sql CREATE VIEW customer_accounts AS SELECT c.cust_id, p.fname, p.lname, a.account_id, a.avail_balance FROM customer c JOIN person p ON c.cust_id = p.person_id JOIN account a ON c.cust_id = a.cust_id; ``` ## d) Postgres Auto-Increment ### Deprecated (SERIAL) ```sql CREATE TABLE example (   id SERIAL PRIMARY KEY,   ... ); ``` ### Aktuell (GENERATED) ```sql CREATE TABLE products ( product_id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, product_name TEXT NOT NULL ); ``` ## e) Trigger Ein _Trigger_ ist eine Datenbankfunktion, die automatisch vor oder nach bestimmten Ereignissen (z.B. INSERT, UPDATE oder DELETE) auf einer Tabelle ausgeführt wird. WICHTIG: Kann bei schlechter Dokumentation sehr schnell, zu unerwünschten Seiteneffekten führen. In der Bank-Datenbank könnte ein Trigger verwendet werden, um das Feld last_activity_date einer Kontotabelle zu aktualisieren, wenn eine neue Transaktion erfolgt: ```sql CREATE FUNCTION update_last_activity() RETURNS trigger AS $$ BEGIN UPDATE account SET last_activity_date = NEW.txn_date WHERE account_id = NEW.account_id; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER trg_update_last_activity AFTER INSERT ON transaction FOR EACH ROW EXECUTE FUNCTION update_last_activity(); ```