2025-04-17 13:21:08 +02:00

82 lines
2.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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