-- 1) Selektieren Sie die Employee ID, Vornamen und Nachname aller Angestellten - sortieren Sie absteigend nach Nachname und dann nach Vorname. select emp_id "Employee ID", fname Vorname, lname Nachname from employee order by lname desc, fname; -- 2) Holen Sie Kontonummer, Kundennummer und Kontostand für alle aktiven Konten mit mehr als 2500 Dollar (nutzen Sie als Kontostand avail_balance). select account_id Kontonummer, cust_id Kundennummer, avail_balance Kontostand from account where status = 'ACTIVE' and avail_balance > 2500; -- 3) Holen Sie aus der Tabelle account alle IDs der Angestellten, die ein Konto eröffnet haben - geben Sie dabei jede ID nur einmal aus (Tipp: DISTINCT). select distinct open_emp_id "ID des Angestellten" from account; -- 4) Zählen Sie die Zeilen in der account-Tabelle. select count(*) from account; -- 5) Geben Sie eine Tabelle aus, in der in der ersten Spalte der Name des Kunden und in einer zweiten Spalte die Anzahl Konten dieses Kunden steht - Hinweis: hier reicht es aus, die Namen der Individualkunden zu verwenden (individual), Geschäftskunden dürfen ignoriert werden. select individual.fname || ' ' || individual.lname "Name", count(*) "Anzahl Konten" from customer join individual on customer.cust_id = individual.cust_id join account on customer.cust_id = account.cust_id group by "Name"; -- 6) Wie 5), aber zeigen Sie nur Kunden an, die 2 oder mehr Konten haben. select individual.fname || ' ' || individual.lname "Name", count(*) "Anzahl Konten" from customer join individual on customer.cust_id = individual.cust_id join account on customer.cust_id = account.cust_id group by "Name" having count(*) >= 2; -- 7) Geben Sie eine Query an, die alle Accounts findet, die im Jahr 2002 eröffnet wurden, ohne die Symbole > oder < zu verwenden. select * from account where extract('year' from open_date) = '2002'; -- 8) Geben Sie eine Query an, die alle Kunden ("individual") findet, deren Nachname an der zweiten Stelle ein 'a' danach an beliebiger Stelle ein 'e' enthält. select * from individual where individual.lname like '_a%e%'; -- 9) Schreiben Sie eine Query, die alle Account-IDs für jeden Nicht-Geschäftskunden holt, dazu die fed_id des Kunden und den Namen des Produkts, auf dem der Account basiert. select account.account_id "Account-ID", customer.fed_id "fed_id des Kunden", product.name "Name des Produkts" from account join customer on customer.cust_id = account.cust_id join product on product.product_cd = account.product_cd where customer.cust_type_cd = 'I'; -- 10) Schreiben Sie eine Query, die alle Angestellten findet, deren Supervisor in einer anderen Abteilung (department) arbeitet. Selektieren Sie ID, Vor- und Nachname. select emp.emp_id "ID", emp.fname "Vorname", emp.lname "Nachname" from employee emp join employee sup on sup.emp_id = emp.superior_emp_id where emp.dept_id != sup.dept_id; -- 11) (2 Punkte) Selektieren Sie alle Vornamen und Nachnamen in einer Tabelle (sowohl die der Individual-Kunden, als auch die der Angestellten). Tipp: Machen Sie sich mit der UNION-Anweisung vertraut. select fname "Vorname", lname "Nachname" from individual union all select fname "Vorname", lname "Nachname" from employee; -- 12) (2 Punkte) Selektieren Sie folgende Tabelle: Vorgesetzter (Name), komma-getrennte Liste der Mitarbeiter, die zu einem Vorgesetzten gehören (Tipp 1: superior_emp_id, Tipp 2: Recherchieren Sie per Internetsuche oder ChatGPT, wie man in einer Query zweimal dieselbe Tabelle nutzen kann.) select sup.fname || ' ' || sup.lname "Vorgesetzter", array_agg(emp.fname || ' ' || emp.lname) "Mitarbeiter" from employee sup join employee emp on emp.superior_emp_id = sup.emp_id group by "Vorgesetzter"; -- 13) (2 Punkte) Selektieren Sie alle Account-IDs und die dazugehörige Customer-ID. Wenn es ein Geschäftskunde ist, dann soll noch der Firmenname in der dritten Spalte stehen, sonst soll in der dritten Spalte der Vor- und Nachname des Privatkunden stehen (Tipp: COALESCE). select a.account_id "Account-ID", c.cust_id "Customer-ID", coalesce(b.name, i.fname || ' ' || i.lname) "Name" from account a join customer c on c.cust_id = a.cust_id left join individual i on i.cust_id = c.cust_id left join business b on b.cust_id = c.cust_id; -- 14) (2 Punkte) Selektieren Sie den Namen des Kunden mit dem höchsten Gesamtvermögen (nur eine Gesamt-Query - Subqueries dürfen genutzt werden) select coalesce(b.name, i.fname || ' ' || i.lname) "Name" from account a join customer c on c.cust_id = a.cust_id left join individual i on i.cust_id = c.cust_id left join business b on b.cust_id = c.cust_id order by a.avail_balance desc limit 1; -- 15) (2 Punkte) Selektieren Sie alle Namen der Bank-Produkte (Tabelle product, Verbindung product_cd) mit den Accounts (account_id), die auf diesem Produkt basieren. Dabei sollen alle Produkte auftauchen, auch die ohne Account. select p.name "Name des Bank-Produkts", array_agg(a.account_id) "Accounts" from product p left join account a on a.product_cd = p.product_cd group by "Name des Bank-Produkts";