a) Was machen die Schlüsselwörter UNION, UNION ALL, INTERSECT und EXCEPT? Geben Sie jeweils ein Beispiel an. UNION: Mit UNION kann man zwei SELECT Ergebinisse in einem kombinieren. Beispiel: SELECT col1, col2 FROM table1 UNION SELECT col3, col4 FROM table2; Mit diesem Syntax wird die erste SELECT Abfrage mit der zewiten kombiniert. UNION hat diverse Regeln, die befolgt werden müssen: - Gleiche Anzahl an Spalten. Die SELECT Abfragen müssen die genau gleiche Anzal Spalten haben - Kompatible Datentypen. Die entsprechenden Spalten in jeder SELECT Abfrage müssen kompatible Datentypen aufweisen - Spaltennamen. Die Spaltennamen der zweiten Abfrage bestimmen die Spaltennamen der resultierenden Tabelle - Reihenfolge. UNION führt die SELECT-Anweisungen unabhängig voneinander aus und kombiniert die Ergebnismengen - Ergebinisse Sortieren. Verwendung von ORDER BY nach der zweiten Abfrage um die Zeilen zu Sortieren UNION ALL: Mit UNION ALL werden im Ergebniss auch die Duplicate angezeigt. Beispiel: Tabelle A: | id | |-------| | 1 | | 2 | Tabelle B: | id | |-------| | 2 | | 3 | Verwendung von UNION Verwendung von UNION ALL SELECT SELECT id id FROM FROM a a UNION UNION ALL SELECT SELECT id id FROM FROM b; b; Ergebiniss: Ergebiniss: | id | | id | |-------| |-------| | 1 | | 1 | | 2 | | 2 | | 3 | | 2 | | 3 | INTERSECT: INTERSECT findet die gemeinsamen Zeilen der Ergebnismengen zweier SELECT Abfragen. Syntax: SELECT col1, col2 FROM table1 INTERSECT SELECT col1, col2 FROM table2; Mit diesem Syntax werden nur die Zeilen mit Gemeinsamkeiten angezeigt. INTERSECT muss die gleichen Regelen wie UNION befolgen. Beispiel: Tabelle A: | id | |-------| | 1 | | 2 | | 3 | Tabelle B: | id | |-------| | 2 | | 3 | | 4 | SELECT id FROM a INTERSECT SELECT id FROM b; Ergebiniss: | id | |-------| | 2 | | 3 | EXCEPT: EXCEPT ist das gegenstück von INTERSECT. Es entfent Gemeinsamkeiten. Syntax: SELECT col1, col2 FROM table1 EXCEPT SELECT col1, col2; Mit diesem Syntax werden nur die Zeilen ohne Gemeinsamkeiten angezeigt. EXCEPT muss die gleichen Regelen wie UNION befolgen. Beispiel: Tabelle A: | id | |-------| | 1 | | 2 | | 3 | Tabelle B: | id | |-------| | 2 | | 3 | | 4 | SELECT id FROM a EXCEPT SELECT id FROM b; Ergebiniss: | id | |-------| | 1 | | 4 | b) Was versteht man unter einem "Partial Index"? Partial Index: Ein Parial Index eine Funktion, die dazu dient, die Abfrageleistung zu verbessern und gleichzeitig die Indexgrösse zu minimieren. Sie ermöglichen die spezifische Angabe, welche Zeilen indexiert werden sollen. Abfragen, die WHERE Bedingugen mit konstanten Werten verwenden, werden deutlich beschleunigt. Beispiel: Tabelle A | id | status | |-------|-----------| | 1 | 1 | | 2 | 0 | | 3 | 0 | CREATE INDEX idx_status ON a(status) WHERE status = 0; Ein Index wird erstellt, aber, wegen der Bedingug "WHERE status = 0" nur auf die Spalte status. Eine SELECT Abfrage ist wegen dem Index leistungsfähiger. SELECT id FROM a WHERE status = 0; c) Was ist eine View? Nennen Sie eine Anwendungsmöglichkeit in der Bank-Datenbank. SQL Views: Views sind gespeicherte Abfragen im Datenbank System. Das DBMS speichert Views nicht als Tabelle sondern nur ihre Definition, der SQL Code. Wenn man einen View abfragt, werden die Daten aus der Datenbank geholt. Der Anwendungsfall ist für immerwiederkehrende Abfragen. In der Bank Datenbank könne man eine View dafür verwenden, um den Gesamvermögen eines Kunden über all seine Konten zusammenzutragen. In der Aufgabe 2. 14) war die verwendung einer Sub-Query sinnvoll. Diese Sub-Query hätte man als View speichern können: CREATE VIEW balance AS SELECT cust_id, SUM(avail_balance) AS balance FROM account GROUP BY cust_id ORDER BY balance DESC LIMIT 1; Im DBMS ist nun eine View "balance" gepseichrt. Jetzt kann man von dieser Abfragen machen. SELECT COALESCE(b.name, i.fname || ' ' || i.lname) customer_name FROM balance ...; d) Wie kann man in Postgres eine Primärschlüsselspalte erzeugen, die automatisch fortlaufende (ganzzahlige) IDs erzeugt? In SQL wird diese Funktion als "auto increment" bezeichnet. Der Prozess vereinfacht die generierung eindeutiger IDs. In Postgres wird dafür der Schlüsselbegriff "SERIAL" verwendet. Es gibt drei verschiedene Variationen: - SMALLSERIAL: verwendet 2 Bytes und speichert Wete von 1 bis 32'767 - SERIAL: verwendet 4 Bytes und speichert Werte von 1 bis 2'147'483'647 - BIGSERIAL: verwendet 8 Bytes und speichert Werte von 1 bis 9'223'372'036'854'775'807 Syntax: CREATE TABLE table_name( id SERIAL ); e) Was versteht man unter einem Trigger, und wo kann man diese einsetzen? Geben Sie ein Beispiel für die Bank-Datenbank an. Mit Triggers können vordefiniderte Funktionen als Reaktion auf ein bestimmtes Ereignis ausgeführt werden. Ein Trigger ist immer mit einer bestimmten Tabelle assoziiert. Löscht man die Tabelle, löscht man auch alle dazugehörigen Trigger. Ein Trigger wird entweder vor oder nach dem folgenden Ereignis aufgerufen: - INSERT: wenn eine neue Zeile hinzugefügt wird - UPDATE: wenn eine Zeile geändert wird - DELETE: wenn eine Zeile gelöscht wird - TRUNCATE: wenn alle Zeilen aus einer Tabelle entfernt werden In der Bank Datenbank könnte man einen Trigger erstellen, der bei der erstellung eines neuen Kunden auch automatisch ein neues Konto erstellt. Syntax: CREATE TRIGGER trigger_name [BEFORE|AFTER] event ON table_name trigger_type BEGIN -- trigger_logic END; Beispiel: In einem Online-Shop soll die Verfügbarkeit von Produkten überwacht werden. Jedes Mal, wenn eine Bestellung in die Datenbank eingegeben wird, sollte der Lagerbestand für das bestellte Produkt automatisch aktualisiert werden. CREATE TRIGGER update_inventory AFTER INSERT ON orders FOR EACH ROW BEGIN UPDATE products SET stock = stock - NEW.quantity WHERE product_id = NEW.product_id; END;