Aufgaben zur personal-Datenbank


In [2]:
%load_ext sql

In [3]:
%sql mysql://steinam:steinam@localhost/personal


Out[3]:
'Connected: steinam@personal'

  1. Welcher Mitarbeiter steht in einer alphabetisch sortierten Liste an letzter Stelle? Es sollen die Mitarbeiternummer, der Nachname und der Vorname angezeigt werden.

In [5]:
%%sql
select MNr, MName, MVorname from Mitarbeiter 
order by MName desc limit 1;


1 rows affected.
Out[5]:
MNr MName MVorname
16 Zimmermann Ludwig
  • Welche Mitarbeiter haben an

    • welchen Projekten
    • welcher Kunden
    • wieviele Stunden gearbeitet?

Zeigen sie Mitarbeiternummer (Sortierkriterium), Nachname und Vorname des Mitarbeiters, Projektnummer, Projektname, Stunden und Firma an


In [10]:
%%sql
select Mitarbeiter.MNr, MName, Stunden, Projektname, Firma
from Mitarbeiter inner join Projektbearbeitung
    on MItarbeiter.MNr  = Projektbearbeitung.MNr
    inner join Projekte
        on Projektbearbeitung.ProjNr = Projekte.ProjektNr
    inner join Kunden on Kunden.KundenNr = Projekte.KundenCode


15 rows affected.
Out[10]:
MNr MName Stunden Projektname Firma
2 Bayerlein 5.0 PKR FOSBOS
7 Matzke 30.0 PKR FOSBOS
11 Fromm 3.0 PKR FOSBOS
1 Kölbel 3.0 PKR Orgasys
14 Bund 10.0 PKR Orgasys
15 Stubenrauch 10.0 PKR Orgasys
2 Bayerlein 2.0 Unternehmensmodell_B Multidata
6 Amann 5.0 Unternehmensmodell_B Multidata
11 Fromm 15.0 Unternehmensmodell_B Multidata
22 Senso 3.0 Unternehmensmodell_B Multidata
1 Kölbel 3.0 DBR mehrstufig Multidata
2 Bayerlein 3.0 DBR mehrstufig Multidata
6 Amann 6.0 DBR mehrstufig Multidata
15 Stubenrauch 20.0 DBR mehrstufig Multidata
18 Grüner 2.0 DBR mehrstufig Multidata
  • Die Unternehmensleitung möchte die Summe der Monatsgehälter für jede Abteilung wissen. Die Spalten Abteilungsnummer, Abteilungsname und Summe der Monatsgehälter sollen angezeigt werden.

In [14]:
%%sql
select Abteilung.AbtName, sum(Monatsgehalt)
from Abteilung inner join Mitarbeiter
    on Mitarbeiter.AbtNr = Abteilung.AbtNr
    inner join Gehalt 
        on Mitarbeiter.MNr = Gehalt.MNr
group by Abteilung.Abtname


5 rows affected.
Out[14]:
AbtName sum(Monatsgehalt)
Geschäftsleitung 10000.0
Marketing 39600.0
Projektierung Kosten- und Leistungsrechnung 17800.0
Projektierung Produktionsplanung und -steuerung 38000.0
Verwaltung 16600.0
  • Es soll das durchschnittliche Alter aller Mitarbeiter, das Alter des ältesten Mitarbeiters und Alter des jüngsten Mitarbeiters ermittelt werden. Es genügt ein Näherungswert in Jahren

In [27]:
%%sql
select avg((year(now()) - year(MGeburtsdatum))) from Mitarbeiter


1 rows affected.
Out[27]:
avg((year(now()) - year(MGeburtsdatum)))
52.4286
  • Wie viele Mitarbeiter arbeiten in der Abteilung 3?

In [23]:
%%sql

/* geht
select count(MNr) from Mitarbeiter
where Mitarbeiter.AbtNr = 3
*/

/*
gehjt auch, weil wir wegen dem where vor dem Groupen nur noch Datensätze haben,
die die AbtNr 3 haben; dann kann das group by auch wegbleiben

select Abteilung.AbtNr, Abteilung.AbtName,  count(Mitarbeiter.MNr)
from Abteilung inner join Mitarbeiter
    on Abteilung.AbtNr = Mitarbeiter.AbtNr
    where Abteilung.AbtNr = 3
    
*/


1 rows affected.
Out[23]:
AbtNr AbtName count(Mitarbeiter.MNr)
3 Verwaltung 5
  • Alle Mitarbeiter in der Abteilung 4, die mehr verdienen als der Mitarbeiter der Abteilung 5 mit dem höchsten Monatsgehalt, sind mit der Mitarbeiternummer, dem Nachnamen und dem Monatsgehalt anzuzeigen.

In [29]:
%%sql


select Mitarbeiter.MName, Monatsgehalt 
from Mitarbeiter inner join Gehalt
on Mitarbeiter.MNr = Gehalt.MNr
where Mitarbeiter.AbtNr = 4
and MOnatsgehalt > 
(
    select max(Monatsgehalt) from Gehalt inner join Mitarbeiter
    on Mitarbeiter.MNr = Gehalt.MNr
    where Mitarbeiter.AbtNr = 5
)


2 rows affected.
Out[29]:
MName Monatsgehalt
Kölbel 15000.0
Matzke 10000.0
  • Welche Mitarbeiter haben ein kleineres Monatsgehalt als das durchschnittliche Monatsgehalt aller Mitarbeiter? Nachname, Vorname und Monatsgehalt dieser Mitarbeiter sollen angezeigt werden.

In [35]:
%%sql

select Mitarbeiter.MName, Monatsgehalt 
from Mitarbeiter inner join Gehalt
on Mitarbeiter.MNr = Gehalt.MNr
where Monatsgehalt <
(
    select avg(Monatsgehalt) from Gehalt
)


7 rows affected.
Out[35]:
MName Monatsgehalt
Amann 5000.0
Meier 4000.0
Kaiser 8000.0
Stubenrauch 3800.0
Grüner 4200.0
Sieber 3400.0
Riem 8000.0
  • In welchen Abteilungen arbeiten mehr als vier Mitarbeiter? Die Abteilungsnummer und die Anzahl der Mitarbeiter sollen angezeigt werden.

In [42]:
%%sql
select AbtNr, count(*) as Anzahl from Mitarbeiter M
group by AbtNr
having Anzahl > 4


2 rows affected.
Out[42]:
AbtNr Anzahl
2 8
3 5
  • Sie wollen wissen, wieviel Kosten (Stunden * Stundensatz) bisher für das Projekt PKR aufgelaufen sind.

In [47]:
%%sql
select sum(Stundensatz * Stunden), ProjNr
from Projektbearbeitung inner join Mitarbeiter
        on Projektbearbeitung.MNr = Mitarbeiter.MNr
    inner join Stundensatz 
        on Mitarbeiter.StundensatzNr = Stundensatz.StundensatzNr
where ProjNr = 'A1'


1 rows affected.
Out[47]:
sum(Stundensatz * Stunden) ProjNr
7540.0 A11