sql 2b Flashcards
Erstellen Sie eine Liste aller Kunden mit ihren Bestellungen
select Kunden.KundenNr, Kunden.Name, Bestellung.BestellNr,
Bestellung.Datum
from Kunden, Bestellung
where Kunden.KundenNr = Bestellung.KundenNr;
select Kunden.KundenNr, Kunden.Name, Bestellung.BestellNr,
Bestellung.Datum
from Kunden INNER JOIN Bestellung
ON Kunden.KundenNr = Bestellung.KundenNr;
Erstellen Sie eine Liste mit allen Artikeln und ihren Bestellungen, wobei auch
diejenigen Artikel ausgegeben werden sollen, die noch nie bestellt wurden.
select A.*, BA.BestellNr, BA.Menge
from Artikel A LEFT JOIN BestellungArtikel BA
ON A.ArtikelNr = BA.ArtikelNr;
Erstellen Sie eine Liste mit allen Bestellungen mit ihren Lieferungen, wobei
auch diejenigen Bestellungen ausgegeben werden sollen, die noch keine
Lieferung erfolgt ist.
select BA.*, L.Datum, L.Menge
from BestellungArtikel BA LEFT JOIN Lieferung L
ON BA.ArtikelNr = L.ArtikelNr
AND BA.BestellNr = L.BestellNr;
Erstellen Sie eine Liste mit allen Bestellungen, auch mit denjenigen, für die
noch keine Artikel erfasst wurden.
select B.BestellNr, BA.ArtikelNr, BA.Menge
FROM Bestellung B LEFT JOIN BestellungArtikel BA
ON B.BestellNr = BA.BestellNr;
Welcher Mitarbeiter hat das kleinste Gehalt
select name, min(gehalt)
FROM Mitarbeiter;
select name, min(gehalt)
FROM Mitarbeiter
group by name;
select *
FROM Mitarbeiter
where gehalt = min(gehalt);
Welcher Mitarbeiter hat das kleinste Gehalt
select *
FROM Mitarbeiter
where gehalt = (select min(gehalt) from mitarbeiter);
Welcher Mitarbeiter hat das größte Gehalt
select *
FROM Mitarbeiter
where gehalt = (select max(gehalt) from mitarbeiter);
Welche Mitarbeiter bekommen ein größeres Gehalt als der Durschnitt aller
Mitarbeiter
select *
FROM Mitarbeiter
where gehalt > (select avg(gehalt) from mitarbeiter);
Welcher Mitarbeiter hat ein Gehalt, das genauso hoch ist, wie das kleinste
Gehalt der Mitarbeiter, die nach dem 1.1.2000 eingestellt wurden.
select *
from mitarbeiter
where gehalt = (select min(gehalt)
from mitarbeiter
where einstellung > ‘2000-1-1’)
Welcher Mitarbeiter, der nach dem 1.1.2000 eingestellt wurde, hat ein
Gehalt, das genauso hoch ist, wie das kleinste Gehalt aller Mitarbeiter.
select * from mitarbeiter
where gehalt = (select min(gehalt) from mitarbeiter)
and einstellung > ‘2000-1-1’
Welche Mitarbeiter haben ein Gehalt, das größer ist, als das Durchschnitts-
gehalts der Mitarbeiter, die nach dem 1.1.2008 eingestellt wurden.
select * from mitarbeiter
where gehalt > (select avg(gehalt)
from mitarbeiter
where einstellung > ‘2008-1-1’)
Welcher Mitarbeiter hat ein Gehalt, das größer ist, wie das Doppelte des
Durchschnittsgehaltes aller Mitarbeiter.
select * from mitarbeiter
where gehalt > 2* (select 2*avg(gehalt *2) *2
from mitarbeiter) *2;
Welche Kunden haben bereits Bestellungen gemacht, wobei ein Kunde nur
1x ausgegeben werden darf.
Ausgabe: Attribute der Tabelle Kunden; Lösung mit join
select k.kundenNr, k.Name
from Kunden k, bestellung b
where k.kundenNr = b.kundenNr
group by k.kundenNr, k.name;
Aufgabe wie oben; Lösung mit subquery
SELECT kundenNr, Name
FROM Kunden
where kundenNr IN (select kundenNr
from bestellung);
Welche Artikel wurden nach dem 31.1.2008 bestellt
Ausgabe: Artikelnummer; Lösung mit join
select artikelNr
from bestellungartikel ba,bestellung b
where ba.bestellnr=b.bestellnr
and datum > ‘2008-1-31’;
Aufgabe wie oben; Lösung mit subquery
SELECT artikelNr
FROM bestellungartikel
where bestellnr in (select bestellnr
from bestellung
where datum>’2008-1-31’)
Welche Artikel wurden nach dem 31.1.2008 bestellt
Ausgabe: Artikelnummer, Bezeichnung; Lösung mit join
select a.*
from bestellungartikel ba, bestellung b, artikel a
where ba.bestellnr = b.bestellnr
and ba.artikelnr = a.artikelnr
and datum > ‘2008-1-31’;
Aufgabe wie vorhin; Lösung mit subquery
select a.*
from bestellungartikel ba, artikel a
where bestellnr in (select bestellnr
from bestellung
where datum > ‘2008-1-31’)
and ba.artikelnr = a.artikelnr;
select *
from artikel
where artikelnr in (select ba.artikelnr
from bestellungartikel ba, bestellung b
where ba.bestellnr = b.bestellnr
and datum > ‘2008-1-31’)
Welche Kunden haben noch keine Bestellungen gemacht.
Ausgabe: Attribute der Tabelle Kunden
SELECT kundenNr, Name
FROM Kunden
where kundenNr NOT IN (select kundenNr
from bestellung);
Gleiche Abfrage wie oben aber mit outer-join
SELECT k.kundennr, name
FROM Kunden k LEFT JOIN bestellung b
ON k.kundennr = b.kundennr
WHERE bestellnr is null;
Welche Artikel wurden noch nie bestellt
SELECT artikelNr, bezeichnung
FROM artikel
WHERE artikelNr not in (select artikelNr
from bestellungArtikel);
Gleiche Abfrage wie oben aber mit outer-join
SELECT a.artikelNr, bezeichnung
FROM artikel a LEFT JOIN bestellungArtikel ba
ON a.artikelNr = ba.artikelNr
WHERE ba.artikelNr is null;
Geben Sie eine Liste der Beträge aus; neben dem Betrag soll die Summe
aller Beträge angezeigt werden
select betrag, (select sum(betrag) from transaktionen)
from transaktionen;
Geben Sie eine Liste der Beträge aus; neben dem Betrag soll der %-Anteil
diese Betrages an der Summe aller Beträge angezeigt werden
SELECT betrag,
Betrag / (select sum(betrag) from transaktionen) *100 as
“%-Anteil”
FROM transaktionen;
Geben Sie eine Liste der Beträge aus; neben dem Betrag soll der %-Anteil
diese Betrages an der Summe aller Beträge angezeigt werden
SELECT betrag,
Betrag::decimal / (select sum(betrag) from
transaktionen) *100 as “%-Anteil”
FROM transaktionen;
Wieviele unterschiedliche Abteilungen befinden sich in Tabelle Mitarbeiter
select count(distinct abteilung)
from mitarbeiter
Lösung als subquery an Stelle einer Tabelle (from)
select count(*)
from (select distinct(abteilung) from mitarbeiter) s
Hinweis: bei subqueries bei from ist ein table alias erforderlich, auch wenn
dieser nicht verwendet wird