Aufgabe zu MySQL

Werbung
Aufgabe zu MySQL
Es soll eine Kurs- Datenbank (unten vereinfachtes Modell) in MySQL erstellt werden.
Die Daten stehen In Excel – Tabellen zur Verfügung. Ferner sollen einige Abfragen
an dieser Datenbank durchgeführt werden.
Funktionen
1
m
c
Kurskontrolle
m
Kursthemen
1
1
1
m
Personen
1
m
c
1
m
c
Kursbesuche
m
c
Kurse
m
c
1
Kursleiter
Lokal Attribute
Personen (PNr, Name, Vorname, FNr, Lohnstufe)
Funktionen (FNr, Funktion)
Kurse (KNr, Kursbezeichnung, KTNr, Kursort)
Kursthemen (KTNr, Themengebiet)
Kursleiter (KLNr, Status, PNr, Name, Vorname, Firma, Kurserfahrung)
Kursbesuche (Pnr, KNr, KLNr, Datum)
Kurskontrolle (Fnr, KNr)
Erstellen Sie zunächst die Datenbank mit Hilfe von PHP-MyAdmin und importieren
Sie die Daten aus den Excel - Tabellen.
Zunächst sollen DDL- (Data Definitieon Language) und DML-Befehle an einer
weiteren Übungsdatenbank (KURSE1) geübt werden. Notieren Sie sich dazu
zunächst schriftlich die entsprechenden SQL- Befehle und geben Sie diese dann im
SQL—Editor von php-MyAdmin ein.
1. Erstellen Sie die Tabelle Kursleiter mit folgenden Feldern und Datentypen:
Status VARCHAR(1), PNr LONG, Nachname VARCHAR(15), Vorname
VARCHAR (15), Kerf (1 BYTE Länge)
Abfrage:
2. Ändern Sie den Namen von Kursleiter in Kursleiter1 um
Abfrage:
3. Indizieren Sie das Feld Nachname um Such- und Sortiervorgänge, die den
Nachnamen beinhalten zu beschleunigen.
Abfrage:
4. Fügen Sie der Tabelle Kursleiter1 das Feld Firma VARCHAR(20) an
Abfrage:
5. Fügen Sie der Tabelle Kursleiter1 das Feld KLNr (BYTE) als Primärschlüssel
an
Abfrage:
6. Erstellen Si die Tabelle Personen1 (ohne ID-Schlüssel) mit den Attributen: PNr
(Integer), Name (20 Zeichen variable Speicherung , Vorname (15 Zeichen fixe
speicherung), GebDat (Geburtsdatum: Datumsfeld, Groesse (Zahl: maximale
Zahl der Ziffern=3, Ziffern nach dem Dezimalpunkt=2))
Abfrage:
7. Fügen Sie der Tabelle Personen das Feld Lohnstufe (1 Byte) an.
Abfrage:
8. Ändern Sie den Datentyp von Lohnstufe auf eine 2-stellige Dezimalzahl ohne
Nachkommastelle. Nullwerte sind zugelassen.
Abfrage:
9. Erstellen Sie die Tabelle Kurse1(KNr (Integer:6), Kursbezeichnung (Länge
20), Kursort(Länge 20))
Abfrage:
10. Erstellen Sie die Tabelle Kursbesuche1(PNR, KNr, Datum) und erzeugen Sie
(danach) einen eindeutigen Index (ID_Kursbesuche) auf die beiden Attribute
PNr und KNr.
Abfrage:
11. Erstellen Sie einen Index (ID-Kursdatum) auf das Datumsfeld von
Kursbesuche
Abfrage:
12. Stellen Sie zu den Fremdschlüsseln in Kursbesuche1 Referentielle Integrität
her.
Abfrage:
Arbeiten Sie nun mit der Original- Datenbank (KURSE) weiter
13. Fügen Sie in die Tabelle Kursleiter den internen Kursleiter Hugo Meier
(Kursleiternummer 1) und mit 3 Jahren Kurserfahrung ein. Firmenname und
Personennummer werden nicht mit angegeben.
Abfrage:
14. Speichern Sie in der Tabelle Kursleiter1 einen neuen Kursleiter mit der
Kurleiternummer 5 der bereits in der Tabelle Personen1 gespeichert ist und
die PNr 345678 besitzt.
Abfrage:
15. Erhöhen Sie die Lohnstufen aller Personen der Funktionsgruppe 4 um eine
Stufe
Abfrage:
16. Ändern Sie alle Datensätze der Tabelle Kursbesuche mit der Kursnummer 412
dahingehend, dass als Instruktor Stefan Krieg auftritt.
Abfrage:
17. Löschen Sie alle Datensätze aus der Tabelle Kursbesuche welche die
Personalnummer 100001 enthalten.
Abfrage:
18. Lassen Sie alle Daten der Tabelle Kursthemen anzeigen.
Abfrage:
19. Lassen Sie die Personennummer, Name und Vorname sowie das Gehalt
(Berechnet aus (Lohnstufe-1)-10000+50000) ausgeben.
Abfrage:
20. Lassen Sie die Anzahl der Kursbesuche sowie das erste und das letzte
Kursbesuchsdatum ausgeben.
Abfrage:
21. Lassen Sie anzeigen, wie viele verschiedene Kurse angeboten werden.
Abfrage:
22. Lassen Sie alle Vorarbeiter mit Personennummer, Namen und Vornamen
ausgeben
Abfrage:
23. Lassen Sie alle Meister und Chemiker (außer Herrn Steffen) ausgeben deren
Lohnstufe höher als 5 ist.
Abfrage:
24. Geben Sie alle Funktionsnummern mit dazugehöriger Funktion aus. Die
Sortierung soll nach dem Funktionsnamen erfolgen.
Abfrage:
25. Geben Sie alle Funktionsnummern mit dazugehöriger Funktion aus. Die
Sortierung soll absteigend nach dem Funktionsnummer erfolgen.
Abfrage:
26. Aus Kursbesuche sollen die Personennummer die Kursnummer und das
Kursdatum ausgegeben werden. Die Sortierung soll nach Personennummer
und nach Kursnummer aufsteigend, aber nach Datum absteigend erfolgen.
Abfrage:
27. Ausgegeben werden sollen die Anzahl der Personen innerhalb einer
Funktionsgruppe sowie das mittlere Gehalt innerhalb der einzelnen
Funktionsgruppen. (Berechnung des Gehalts s.o.). Sortierung nach
Funktionsnummer absteigend.
Abfrage:
28. Lassen Sie die Personennummern der Kursteilnehmer die mindestens einen
Kurs nach dem 1.9.1991 besucht haben und die Anzahl der Kursbesuche
dieser Personen ausgeben.
Abfrage:
29. Welche Kurse (Kursnummer und Kursbezeichnung) hat Herr Felix Steffen
schon besucht? Ausgabe sortiert nach Kursbezeichnung.
Abfrage:
30. Listen Sie die Spitzenverdiener der Lohnstufen mit Funktionsnummer (höcste
zuerst) Name (aufsteigend), Vorname und Lohnstufe auf.
Abfrage:
31. Lassen Sie alle möglichen Kombinationen aus den Tabellen Funktionen und
Personen anzeigen
Abfrage:
32. Lassen Sie alle zusammengehörigen Datensätze aus den Tabellen
Funktionen und Personen anzeigen
Abfrage:
33. Welche Personen (PNr, Name, Vorname) haben gemäß Kurskontrolle noch
mehr als drei Kurse zu besuchen?
Abfrage:
A1:
CREATE TABLE kursleiter (
Status CHAR( 1 ) NOT NULL ,
PNr INT NOT NULL ,
Nachname VARCHAR( 15 ) NOT NULL ,
Vorname VARCHAR( 15 ) NOT NULL ,
Kerf TINYINT NOT NULL
);
A2:
ALTER TABLE kursleiter RENAME kursleiter1;
A3:
ALTER TABLE kursleiter1 ADD INDEX ( Nachname );
oder
CREATE INDEX ind_name ON kursleiter1 (nachname);
A4:
ALTER TABLE `kursleiter1` ADD `Firma` VARCHAR( 20 ) NOT NULL ;
A5:
ALTER TABLE `kursleiter1` ADD `KLNr` SMALLINT NOT NULL ;
ALTER TABLE `kursleiter1` ADD PRIMARY KEY ( `KLNr` ) ;
Oder
ALTER TABLE `kursleiter1` ADD `KLNr` TINYINT PRIMARY KEY;
A6:
CREATE TABLE `Personen1` (
`PNr` INT( 6 ) NOT NULL ,
`Name` VARCHAR( 20 ) NOT NULL ,
`Vorname` CHAR( 15 ) NOT NULL ,
`GebDat` DATE NOT NULL ,
`Groesse` DECIMAL( 3, 2 ) NOT NULL
);
A7:
ALTER TABLE `personen1` ADD `Lohnstufe` TINYINT NOT NULL;
A8:
ALTER TABLE `personen1` CHANGE `Lohnstufe` `Lohnstufe`
DECIMAL( 2 ) DEFAULT '0' NULL
A9:
CREATE TABLE `Kurse1` (
`KNr` INT( 6 ) NOT NULL ,
`Kursbezeichnung` VARCHAR( 20 ) NOT NULL ,
`Kursort` VARCHAR( 20 ) NOT NULL ,
PRIMARY KEY ( `KNr` )
);
A10:
CREATE TABLE `Kursbesuche1` (
`PNr` INT( 6 ) NOT NULL ,
`KNr` INT( 6 ) NOT NULL ,
`Datum` DATE NOT NULL
);
CREATE UNIQUE INDEX ID_Kursbesuche ON kursbesuche1(
PNr,
KNr
);
oder
CREATE TABLE
`PNr` INT( 6
`KNr` INT( 6
`Datum` DATE
UNIQUE (
`PNr` ,
`KNr`
)
);
`Kursbesuche1` (
) NOT NULL ,
) NOT NULL ,
NOT NULL ,
A11:
ALTER TABLE `kursbesuche1` ADD INDEX ( `Datum` )
A12:
ALTER TABLE kursbesuche1 ADD CONSTRAINT BEZ1 FOREIGN KEY (
PNr ) REFERENCES Personen1( PNr )
ALTER TABLE kursbesuche1 ADD CONSTRAINT BEZ2 FOREIGN KEY (
KNr ) REFERENCES Kurse1( KNr )
A13:
INSERT INTO Kursleiter( KLNr, Status, Vorname, Name,
Kurserfahrung)
VALUES (1, ‘I’, ‘Hugo’, ‘Meier’, 3)
A14:
INSERT INTO Kursleiter( KLNr, PNr, Name, Vorname, STATUS )
SELECT 5 , PNr, Name, Vorname, 'I'
FROM Personen
WHERE PNr =345678
A15:
UPDATE Personen SET Lohnstufe = Lohnstufe +1 WHERE FNr =4
A16:
UPDATE Kursbesuche SET KlNr = (SELECT KlNr
FROM Kursleiter
WHERE Name = 'Krieg'
AND Vorname = 'Stefan' )
WHERE KNr =412;
A17
DELETE FROM Kursbesuche WHERE PNr=10001;
A18
SELECT *
FROM kursthemen;
A19
SELECT PNr, Name, Vorname,
(Lohnstufe -1) *10000 +50000 AS Salaer
FROM personen;
A20
SELECT COUNT( * ) Anzahl, MIN( Datum ) Erster, MAX( Datum )
Letzter
FROM Kursbesuche;
A21
SELECT COUNT( DISTINCT KNr ) Verschiedene_Kurse
FROM Kursbesuche;
A22
SELECT PNr, Name, Vorname
FROM Personen
WHERE fnr =1;
A23
SELECT PNr, Name, Vorname
FROM Personen
WHERE Lohnstufe >=5
AND (FNr =2 OR FNr =3)
AND NOT (Name = 'Steffen')
A24
SELECT *
FROM Funktionen
ORDER BY Funktion
A25
SELECT *
FROM Funktionen
ORDER BY FNr DESC;
A26
SELECT PNr, KNr, Datum
FROM Kursbesuche
ORDER BY PNr ASC, KNr ASC, Datum DESC;
A27
SELECT Personen.FNr, COUNT( Personen.FNr ) AS Anzahl, AVG( (
Personen.Lohnstufe -1) *10000 +50000 ) AS DSalaer
FROM Personen
GROUP BY Personen.FNr
ORDER BY Personen.FNr DESC;
A28
SELECT PNr, count( KNr ) Anzahl
FROM Kursbesuche
WHERE Datum >= ’91-09-01’
GROUP BY PNR
HAVING COUNT( KNr ) >1;
A29
SELECT KNr, Kursbezeichnung
FROM Kurse
WHERE KNr IN(
SELECT KNr
FROM Kursbesuche
WHERE PNr = (
SELECT PNr
FROM Personen
WHERE Name = 'Steffen'
AND Vorname = 'Felix' ))
ORDER BY Kursbezeichnung;
Oder
SQL-Befehl:
SELECT Kurse.KNr, Kurse.Kursbezeichnung
FROM Personen
INNER JOIN (
Kurse
INNER JOIN Kursbesuche ON Kurse.KNr = Kursbesuche.KNr
) ON Personen.PNr = Kursbesuche.PNr
WHERE (
(
(
Personen.Name
) = "Steffen"
)
AND (
(
Personen.Vorname
) = "Felix"
))
ORDER BY Kursbezeichnung
A30
SELECT FNr, Name, Vorname, Lohnstufe
FROM personen
WHERE (
FNr, Lohnstufe
)
IN (
SELECT FNr, max( Lohnstufe )
FROM Personen
GROUP BY FNr
)
A31
SELECT *
FROM Funktionen, Personen
SELECT Personen.PNr, Personen.Name, Personen.Vorname,
Funktionen.Funktion
FROM Funktionen INNER JOIN Personen ON Funktionen.FNr =
Personen.FNr;
SELECT Personen.PNr, Personen.Name, Personen.Vorname,
Funktionen.Funktion
FROM Funktionen LEFT JOIN Personen ON Funktionen.FNr =
Personen.FNr;
A32
SELECT PNr, Name, Vorname, Funktion
FROM Funktionen, Persone
WHERE Personen.FNr=Funktionen.FNr;
Herunterladen