92 lines
4.9 KiB
SQL
92 lines
4.9 KiB
SQL
-- 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";
|