Aufgabe 2 - Datenbanken Join - Notendatenbank
Aufgabe 2: Notendatenbank
Es ist eine Datenbank für Noten gegeben. Die Datenbank enthält 3 Tabellen: Schüler, Tests und Ergebnisse.
Erstellen der Datenbank und befüllen der Tabellen
/* ==================================== */
/* Tabellen erstellen */
/* ==================================== */
CREATE TABLE Schueler (
Schueler_ID INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (Schueler_ID),
Vorname VARCHAR(20),
Nachname VARCHAR(20),
Klasse VARCHAR(6),
Geburtsdatum DATE,
Geschlecht ENUM ('W','M')
);
CREATE TABLE Tests (
Test_ID INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (Test_ID),
Datum DATE,
Fach VARCHAR(10),
Klasse VARCHAR(6)
);
CREATE TABLE Ergebnisse (
Schueler_ID INT NOT NULL,
Test_ID INT NOT NULL,
PRIMARY KEY (Schueler_ID,Test_ID),
Note INT
);
/* ==================================== */
/* Tabelle Schueler */
/* ==================================== */
INSERT INTO Schueler (Klasse, Vorname, Nachname, Geschlecht, Geburtsdatum)
VALUES
('5BHELS','Max','Mustermann','M','2004-09-10'),
('5BHELS','Javier','Brouse','M','2004-12-24'),
('5BHELS','Jerri','Prevo','W','2005-02-28'),
('5BHELS','Lenore','Boes','W','2005-04-18'),
('5BHELS','Emilia','Scot','W','2003-10-11'),
('5BHELS','Javier','Hartson','M','2005-07-05'),
('4BHELS','Lonnie','Hier','W','2005-11-20'),
('4BHELS','Sofia','Friscia','W','2005-12-01'),
('4BHELS','Max','Bundick','M','2006-06-30'),
('4BHELS','Darren','Parkerson','M','2005-10-17'),
('4BHELS','Tameka','Welles','W','2005-09-21'),
('4BHELS','Lance','Respass','M','2003-06-01'),
('4BHELS','Earlene','Fullenwider','W','2006-04-01'),
('4BHELS','Ted','Muraoka','M','2005-10-26'),
('3BHELS','Mathew','Evanson','M','2006-12-12'),
('3BHELS','Ted','Marquette','M','2007-03-13'),
('3BHELS','Perrella','Gaolia','W','2007-02-10'),
('3BHELS','Lance','Meola','M','2007-01-17'),
('3BHELS','Ted','Polich','M','2006-11-05'),
('3BHELS','Penelope','Bernhard','W','2006-09-01'),
('3BHELS','Malinda','Capo','W','2007-01-02');
/* ==================================== */
/* Tabelle Tests */
/* ==================================== */
INSERT INTO Tests (Datum,Fach,Klasse)
VALUES
('2023-10-23','FSST','5BHELS'),
('2023-11-03','HWE','5BHELS'),
('2023-12-04','MTRS','5BHELS'),
('2023-12-17','FSST','5BHELS'),
('2023-10-15','FSST','4BHELS'),
('2023-10-17','D','4BHELS'),
('2023-11-20','E','4BHELS'),
('2023-09-30','AM','3BHELS'),
('2023-10-09','HWE','3BHELS'),
('2023-10-16','HWE','3BHELS');
/* ==================================== */
/* Tabelle Ergebnisse */
/* ==================================== */
INSERT INTO Ergebnisse (Schueler_ID, Test_ID, Note)
VALUES
/* 5BHELS: 1-6 */
/* 4BHELS: 7-14 */
/* 3BHELS: 15-20 */
/*5BHELS FSST*/
(1,1,1),(2,1,2),(3,1,2),(4,1,3),(5,1,5),(6,1,3),
/*5BHELS HWE*/
(1,2,3),(2,2,4),(3,2,2),(4,2,4),(5,2,5),(6,2,4),
/*5BHELS MTRS*/
(1,3,2),(2,3,2),(3,3,3),(4,3,1),(5,3,1),(6,3,2),
/*5BHELS FSST*/
(1,4,5),(2,4,5),(3,4,4),(4,4,2),(5,4,4),(6,4,5),
/*4BHELS FSST*/
(7, 5,4),(8, 5,4),(9, 5,3),(10,5,5),(11,5,1),(12,5,1),(13,5,2),(14,5,3),
/*4BHELS D*/
(7, 6,2),(8, 6,1),(9, 6,2),(10,6,3),(11,6,1),(12,6,4),(13,6,3),(14,6,1),
/* 4BHELS E */
(7, 7,4),(8, 7,5),(9, 7,2),(10,7,3),(11,7,4),(12,7,5),(13,7,1),(14,7,2),
/* 3BHELS AM */
(15,8,4),(16,8,5),(17,8,5),(18,8,4),(19,8,4),(20,8,5),
/* 3BHELS HWE */
(15,9,2),(16,9,3),(17,9,5),(18,9,2),(19,9,3),(20,9,1),
/* 3BHELS HWE */
(15,10,1),(16,10,3),(17,10,4),(18,10,3),(19,10,5),(20,10,4);
Übungsabfragen
Aufgabe 1: Einstieg
1.a. Auflistung aller Ergebnisse
Liste alle Ergebnisse auf und gib Schülernamen,
Klasse
,Fach
,Datum
sowie dieNote
aus.1.b. Eingeschränkte Aufzählung
Liste alle Schüler:innen auf, die in einem
HWE
-Test einen 3er haben. ZeigeVorname
,Nachname
undKlasse
an und vermeide, dass ein:e Schüler:in mehrfach aufgelistet wird.Hilfestellung: Mit der Anweisung
GROUP BY
können Datensätze zusammengefasst werden1.c. Fleißige Schüler:innen
Ermittle die Anzahl aller Schüler:innen die an mehr als 3 Tests teilgenommen haben.
Hilfestellung: Verwende dazu ein “Nested Select”.
Aufgabe 2: Burschen und Mädchen
JOIN
können auf gleichen Tabellen (z.B.:Person JOIN Person
) und auf die Ergebnisse vonSELECT
Abfragen (z.B.:(SELECT ...) JOIN (SELECT ...)
) angewendet werden.Diese Aufgabe ist eine Anwendung der zweiten Variante.
Aufgabe
Ermittle in der Schülerdatenbank (Tabelle Students) alle Klassen in denen mehr Buben als Mädchen sind.Anleitung
- Mache zuerst eine Abfrage die Klasse und Zahl der Mädchen pro Klasse ermittelt. Tipp: Verwende
COUNT
undGROUP BY
- Dann die gleiche Abfrage für alle Burschen.
- Verknüpfe diese beiden
SELECT
Ergebnisse (temporäre Tabellen) mitJOIN
. Beachte - Den temporären Tabellen müssen mitAS
Namen zugewiesen werden:SELECT ... FROM (...Tabelle Maedchen...) AS tabw JOIN (...Tabelle Burschen...) AS tabm ON ...gleiche Klasse...;
- Verwende eine
WHERE
Bedingung um nur die Zeilen anzuzeigen wo mehr Burschen sind.
Aufgabe 3: Notendatenbankabfragen
Erstelle folgende Abfragen in der Notendatenbank:
3.a. Test-Auswertung
Von einem Test sind bekannt: Datum, Fach, Klasse. Ermittle:
- alle Schüler (Namen) die an einem bestimmten Test teilgenommen haben,
- die Durchschnittsnote für alle FSST-Tests,
- alle Schüler die besser als der Durchschnitt abgeschnitten haben.
3.b. Schüler:innen-Auswertung
Ermittle für einen konkreten Schüler oder Schülerin (gegeben durch den Namen):
- alle Tests an denen dieser teilgenommen hat,
- die Anzahl der Tests, Notendurchschnitt, beste und schlechteste Note für diesen Schüler,
- die Endnote in jedem Fach (Durchschnitt).
3.c Notendurchschnitt
- Gib für alle Tests den Notendurchschnitt für Mädchen und Buben getrennt aus.
- Ermittle den Schüler mit dem besten Notendurchschnitt
- Aufgabe 1 - Datenbanken Select - Einstieg
- Aufgabe 2 - Datenbanken Select - Mitarbeiter
- Aufgabe 1 - Datenbanken Join - Einstieg
- Aufgabe 2 - Datenbanken Join - Notendatenbank
- Aufgabe 3 - Datenbanken Join - Online-Shop