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

82 lines
2.0 KiB
Markdown
Raw Permalink 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();
```