2025-04-17 13:18:29 +02:00

2.0 KiB

a) UNION, INTERSECT, EXCEPT

!Pasted image 20250308160323.png

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.

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)

CREATE TABLE example (
  id SERIAL PRIMARY KEY,
  ...
);

Aktuell (GENERATED)

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:

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();