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