progress
This commit is contained in:
parent
b2fa196612
commit
8124daeb67
|
@ -0,0 +1,90 @@
|
||||||
|
USE filmeDatenbank;
|
||||||
|
|
||||||
|
#a. Lassen Sie sich mit SELECT alle Datensätze Ihrer DVD-Sammlung ausgeben.
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM dvd_sammlung;
|
||||||
|
|
||||||
|
#b. Erstellen Sie eine Anweisung, die alle Filmtitel und die jeweils zugehörige Nummer ausgibt.
|
||||||
|
SELECT
|
||||||
|
film
|
||||||
|
, nummer
|
||||||
|
FROM dvd_sammlung;
|
||||||
|
|
||||||
|
#c. Erstellen Sie eine Anweisung, die alle Filmtitel und den jeweils zugehörigen Regisseur ausgibt.
|
||||||
|
SELECT
|
||||||
|
film
|
||||||
|
, regisseur
|
||||||
|
FROM dvd_sammlung;
|
||||||
|
#d. Erstellen Sie eine Liste mit allen Filmen von Quentin Tarantino.
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM dvd_sammlung
|
||||||
|
WHERE regisseur = 'Quentin Tarantino';
|
||||||
|
|
||||||
|
#e. Erstellen Sie eine Liste mit allen Filmen von Steven Spielberg.
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM dvd_sammlung
|
||||||
|
WHERE regisseur = 'Steven Spielberg';
|
||||||
|
|
||||||
|
#f. Erstellen Sie eine Liste aller Filme, in denen der Regisseur den Vornamen "Steven" hat.
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM dvd_sammlung
|
||||||
|
WHERE regisseur LIKE 'Steven%';
|
||||||
|
|
||||||
|
#g. Erstellen Sie eine Liste mit allen Filmen, die länger als 2 Stunden sind.
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM dvd_sammlung
|
||||||
|
WHERE laenge_minuten > 120;
|
||||||
|
|
||||||
|
#h. Erstellen Sie eine Liste mit allen Filmen, die von Tarantino oder von Spielberg gedreht wurden.
|
||||||
|
SELECT
|
||||||
|
film, regisseur
|
||||||
|
FROM dvd_sammlung
|
||||||
|
WHERE regisseur = 'Steven Spielberg'
|
||||||
|
OR regisseur = 'Quentin Tarantino';
|
||||||
|
|
||||||
|
#i. Suchen Sie alle Filme heraus, die von Tarantino gedreht wurden und kürzer als 90 Minuten sind.
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM dvd_sammlung
|
||||||
|
WHERE regisseur = 'Quentin Tarantino'
|
||||||
|
AND laenge_minuten < 90;
|
||||||
|
|
||||||
|
#j. Sie erinnern sich an einen Film, in dessen Titel "Sibirien" vorkam. Suchen Sie ihn.
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM dvd_sammlung
|
||||||
|
WHERE film LIKE '%Sibirien%';
|
||||||
|
|
||||||
|
#k. Lassen Sie sich alle Teile von "Das große Rennen" ausgeben.
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM dvd_sammlung
|
||||||
|
WHERE film = 'Das große Rennen';
|
||||||
|
|
||||||
|
#l. Lassen Sie sich eine Liste aller Filme ausgeben, sortiert nach Regisseur.
|
||||||
|
SELECT
|
||||||
|
film
|
||||||
|
, regisseur
|
||||||
|
FROM dvd_sammlung
|
||||||
|
ORDER BY regisseur;
|
||||||
|
|
||||||
|
#m. Lassen Sie sich eine Liste aller Filme ausgeben, sortiert nach Regisseur, dann nach Filmtitel.
|
||||||
|
SELECT
|
||||||
|
film
|
||||||
|
, regisseur
|
||||||
|
FROM dvd_sammlung
|
||||||
|
ORDER BY regisseur, film;
|
||||||
|
|
||||||
|
#n. Lassen Sie sich eine Liste aller Filme von Tarantino ausgeben, die längsten zuerst.
|
||||||
|
SELECT
|
||||||
|
film
|
||||||
|
, laenge_minuten
|
||||||
|
, regisseur
|
||||||
|
FROM dvd_sammlung
|
||||||
|
WHERE regisseur = 'Quentin Tarantino'
|
||||||
|
ORDER BY laenge_minuten DESC;
|
|
@ -0,0 +1,73 @@
|
||||||
|
|
||||||
|
SELECT * FROM kunden
|
||||||
|
LEFT JOIN orte
|
||||||
|
ON ort_postleitzahl = postleitzahl;
|
||||||
|
|
||||||
|
#a) Geben Sie Name, Postleitzahl und Wohnort aller Kunden aus. Die Liste enthält den Kundennamen und den Namen des Orts, wo er wohnt.
|
||||||
|
SELECT
|
||||||
|
kunden.Name
|
||||||
|
, ort_Postleitzahl
|
||||||
|
, orte.name
|
||||||
|
FROM kunden
|
||||||
|
LEFT JOIN orte
|
||||||
|
ON kunden.ort_postleitzahl = orte.postleitzahl;
|
||||||
|
|
||||||
|
#b) Geben Sie Name und Wohnort aller Kunden aus, die die Postleitzahl 79312 haben.
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
kunden.Name
|
||||||
|
, orte.name
|
||||||
|
FROM kunden
|
||||||
|
LEFT JOIN orte
|
||||||
|
ON kunden.ort_postleitzahl = orte.postleitzahl
|
||||||
|
WHERE kunden.ort_postleitzahl = 79312;
|
||||||
|
|
||||||
|
#c) Geben Sie Name und Wohnort aller Kunden aus, die in Emmendingen wohnen (Einschränkungskrite-rium ist NICHT die Postleitzahl, sondern 'Emmendingen').
|
||||||
|
SELECT
|
||||||
|
kunden.Name
|
||||||
|
, orte.name
|
||||||
|
FROM kunden k
|
||||||
|
LEFT JOIN orte
|
||||||
|
ON kunden.ort_postleitzahl = orte.postleitzahl
|
||||||
|
WHERE orte.name = 'Emmendingen';
|
||||||
|
|
||||||
|
#d) Geben Sie Name, Wohnort und Einwohnerzahl für alle Kunden aus, die in einem Ort mit mehr als 70000 Einwohnern wohnen.
|
||||||
|
SELECT
|
||||||
|
kunden.Name
|
||||||
|
, orte.name
|
||||||
|
, orte.Einwohnerzahl
|
||||||
|
FROM kunden
|
||||||
|
LEFT JOIN orte
|
||||||
|
ON kunden.ort_postleitzahl = orte.postleitzahl
|
||||||
|
WHERE orte.einwohnerzahl > 70000;
|
||||||
|
|
||||||
|
#e) Geben Sie alle Orte aus, die weniger als 1000000 Einwohner haben.
|
||||||
|
SELECT
|
||||||
|
name
|
||||||
|
, Einwohnerzahl
|
||||||
|
FROM orte
|
||||||
|
WHERE einwohnerzahl < 1000000;
|
||||||
|
|
||||||
|
#f) Geben Sie Kundename und Ortname aus für alle Kunden, die in Orten mit einer Einwohnerzahl zwischen 100.000 und 1.500.000 leben.
|
||||||
|
SELECT
|
||||||
|
kunden.Name
|
||||||
|
, orte.name
|
||||||
|
, orte.Einwohnerzahl
|
||||||
|
FROM kunden
|
||||||
|
LEFT JOIN orte
|
||||||
|
ON kunden.ort_postleitzahl = orte.postleitzahl
|
||||||
|
WHERE orte.einwohnerzahl BETWEEN 100000 AND 1500000;
|
||||||
|
|
||||||
|
#g) Geben Sie Kundename, Postleitzahl und Ortname aus für alle Kunden, deren Name ein "e" enthält
|
||||||
|
# und alle Orte, die ein "u" oder ein "r" enthalten (frEd aus stUden wird also genau so angezeigt wie jEssE aus bRnz,
|
||||||
|
# frEd aus salzen aber nicht und martin aus hambURg auch nicht).
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
kunden.Name
|
||||||
|
, kunden.ort_postleitzahl
|
||||||
|
, orte.name
|
||||||
|
FROM kunden
|
||||||
|
LEFT JOIN orte
|
||||||
|
ON kunden.ort_postleitzahl = orte.postleitzahl
|
||||||
|
WHERE kunden.name LIKE '%e%'
|
||||||
|
AND (orte.name LIKE '%u%'OR orte.name like '%r%');
|
|
@ -0,0 +1,82 @@
|
||||||
|
#1.a
|
||||||
|
SELECT MAX(gehalt), MIN(gehalt)
|
||||||
|
FROM lehrer;
|
||||||
|
|
||||||
|
#1.b
|
||||||
|
SELECT
|
||||||
|
MAX(l.gehalt)
|
||||||
|
FROM lehrer l
|
||||||
|
INNER JOIN lehrer_hat_faecher lhf
|
||||||
|
ON lhf.idlehrer = l.id
|
||||||
|
INNER JOIN faecher f
|
||||||
|
ON f.id = lhf.idfaecher
|
||||||
|
WHERE f.fachbezeichnung = 'Mathe';
|
||||||
|
|
||||||
|
#1.c
|
||||||
|
SELECT MAX((s.noteMathe+s.noteDeutsch)/2)
|
||||||
|
FROM schueler s;
|
||||||
|
|
||||||
|
#1.d
|
||||||
|
SELECT MIN(orte.einwohnerzahl) AS 'Niedrigste Einwohnerzahl', MAX(orte.einwohnerzahl) 'Höchste Einwohnerzahl'
|
||||||
|
FROM orte;
|
||||||
|
|
||||||
|
#1.e
|
||||||
|
SELECT MAX(orte.einwohnerzahl) - MIN(orte.einwohnerzahl) AS 'Differenz'
|
||||||
|
FROM orte;
|
||||||
|
|
||||||
|
#1.f
|
||||||
|
SELECT COUNT(*)
|
||||||
|
FROM schueler;
|
||||||
|
|
||||||
|
#1.g
|
||||||
|
SELECT COUNT(*)
|
||||||
|
FROM schueler
|
||||||
|
WHERE idSmartphones is not null;
|
||||||
|
|
||||||
|
#1.h
|
||||||
|
SELECT COUNT(schueler.id)
|
||||||
|
FROM schueler
|
||||||
|
INNER JOIN smartphones phone
|
||||||
|
ON schueler.idsmartphones = phone.id
|
||||||
|
WHERE phone.marke = 'Samsung'
|
||||||
|
OR phone.marke = 'HTC';
|
||||||
|
|
||||||
|
#1.i
|
||||||
|
SELECT COUNT(schueler.id)
|
||||||
|
FROM schueler
|
||||||
|
INNER JOIN orte
|
||||||
|
ON schueler.idOrte = orte.id
|
||||||
|
WHERE orte.name = 'Waldkirch';
|
||||||
|
|
||||||
|
#1.j
|
||||||
|
SELECT COUNT(schueler.id)
|
||||||
|
FROM schueler
|
||||||
|
INNER JOIN orte
|
||||||
|
ON schueler.idOrte = orte.id
|
||||||
|
INNER JOIN lehrer_hat_schueler lhs
|
||||||
|
ON schueler.id = lhs.idSchueler
|
||||||
|
INNER JOIN lehrer
|
||||||
|
ON lhs.idLehrer = lehrer.id
|
||||||
|
WHERE orte.name = 'Emmendingen'
|
||||||
|
AND lehrer.name = 'Bohnert';
|
||||||
|
|
||||||
|
#1.k
|
||||||
|
SELECT COUNT(schueler.id)
|
||||||
|
FROM schueler
|
||||||
|
INNER JOIN lehrer_hat_schueler lhs
|
||||||
|
ON schueler.id = lhs.idSchueler
|
||||||
|
INNER JOIN lehrer
|
||||||
|
ON lhs.idLehrer = lehrer.id
|
||||||
|
WHERE lehrer.name = 'Zelawat';
|
||||||
|
|
||||||
|
#1.l
|
||||||
|
SELECT COUNT(schueler.id)
|
||||||
|
FROM schueler
|
||||||
|
INNER JOIN lehrer_hat_schueler lhs
|
||||||
|
ON schueler.id = lhs.idSchueler
|
||||||
|
INNER JOIN lehrer
|
||||||
|
ON lhs.idLehrer = lehrer.id
|
||||||
|
WHERE lehrer.name = 'Zelawat'
|
||||||
|
AND schueler.nationalitaet = 'RU';
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
-- 1. Ergänzen Sie folgende Statements und überprüfen Sie die Funktion:
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
kundenliste.kunde_id
|
||||||
|
, kundenliste.name
|
||||||
|
, kundenliste.ort_postleitzahl
|
||||||
|
FROM kunden AS kundenliste
|
||||||
|
WHERE kundenliste.ort_postleitzahl > 80000;
|
||||||
|
-- -- ausgegeben werden sollen kunde_id, Name des Kunden und Postleitzahl des Kunden
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
o.name
|
||||||
|
, k.name
|
||||||
|
FROM kunden AS k
|
||||||
|
INNER JOIN orte AS ON o.postleitzahl = k.ort_postleitzahl
|
||||||
|
WHERE o.name LIKE '%n'
|
||||||
|
|
||||||
|
|
||||||
|
-- 2. Korrigieren Sie die folgenden Statements, dass sie funktionieren.
|
||||||
|
-- -- Aliasse 'prfz' und 'hrgs' bitte nicht verändern!
|
||||||
|
SELECT kunde_id
|
||||||
|
, hrgs.name
|
||||||
|
, prfz.name
|
||||||
|
FROM kunde AS hrgs
|
||||||
|
INNER JOIN ort AS prfz ON prfz.postleitzahl = hrgs.ort_postleitzahl
|
||||||
|
ORDER BY hrgs.kunde_id
|
||||||
|
|
||||||
|
-- -- Fügen Sie die notwendigen Aliasse ein!
|
||||||
|
SELECT
|
||||||
|
k.name
|
||||||
|
, o.postleitzahl
|
||||||
|
, o.name
|
||||||
|
FROM kunden AS k
|
||||||
|
INNER JOIN orte AS o ON k.ort_postleitzahl = o.postleitzahl
|
||||||
|
WHERE k.name LIKE '%a%'
|
||||||
|
AND o.name LIKE '%u%'
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
#1.a
|
||||||
|
SELECT
|
||||||
|
COUNT(schueler.id) AS 'Anzahl'
|
||||||
|
, schueler.nationalitaet
|
||||||
|
FROM schueler
|
||||||
|
GROUP by schueler.nationalitaet;
|
||||||
|
|
||||||
|
#1.b
|
||||||
|
select
|
||||||
|
orte.name AS 'Ort'
|
||||||
|
, COUNT(schueler.id) AS 'Anzahl der Schüler'
|
||||||
|
FROM schueler
|
||||||
|
INNER JOIN orte
|
||||||
|
ON schueler.idOrte = orte.id
|
||||||
|
GROUP BY orte.name
|
||||||
|
order by COUNT(schueler.id) DESC;
|
||||||
|
|
||||||
|
#1.c
|
||||||
|
SELECT
|
||||||
|
f.fachbezeichnung
|
||||||
|
, COUNT(l.id) AS 'Anzahl'
|
||||||
|
FROM lehrer l
|
||||||
|
INNER JOIN lehrer_hat_faecher lhf
|
||||||
|
ON lhf.idlehrer = l.id
|
||||||
|
INNER JOIN faecher f
|
||||||
|
ON f.id = lhf.idfaecher
|
||||||
|
GROUP BY f.fachbezeichnung
|
||||||
|
ORDER BY COUNT(distinct l.id) DESC;
|
||||||
|
|
||||||
|
#1.d
|
||||||
|
SELECT
|
||||||
|
l.name AS Lehrername,
|
||||||
|
GROUP_CONCAT(f.fachbezeichnung) AS 'Fächer'
|
||||||
|
FROM lehrer l
|
||||||
|
INNER JOIN lehrer_hat_faecher lhf
|
||||||
|
ON lhf.idLehrer = l.id
|
||||||
|
INNER JOIN faecher f
|
||||||
|
ON f.id = lhf.idFaecher
|
||||||
|
GROUP BY l.id
|
||||||
|
ORDER BY Lehrername;
|
||||||
|
|
||||||
|
#1.e
|
||||||
|
SELECT
|
||||||
|
s.name,
|
||||||
|
GROUP_CONCAT(DISTINCT l.name) `Lehrer`,
|
||||||
|
GROUP_CONCAT(DISTINCT f.fachbezeichnung) `Fächer`
|
||||||
|
FROM lehrer l
|
||||||
|
INNER JOIN lehrer_hat_faecher lhf
|
||||||
|
ON lhf.idLehrer = l.id
|
||||||
|
INNER JOIN faecher f
|
||||||
|
ON f.id = lhf.idFaecher
|
||||||
|
INNER JOIN lehrer_hat_schueler lhs
|
||||||
|
ON lhs.idLehrer = l.id
|
||||||
|
INNER JOIN schueler s
|
||||||
|
ON s.id = lhs.idSchueler
|
||||||
|
GROUP BY s.name
|
||||||
|
ORDER BY s.name
|
|
@ -0,0 +1,48 @@
|
||||||
|
#1.a
|
||||||
|
SELECT
|
||||||
|
s.name `Schülername`,
|
||||||
|
(s.noteDeutsch + s.noteMathe) / 2 AS Durchschnittsnote
|
||||||
|
FROM schueler s
|
||||||
|
HAVING Durchschnittsnote > 4;
|
||||||
|
|
||||||
|
#1.b
|
||||||
|
SELECT
|
||||||
|
s.name `Schülername`,
|
||||||
|
ROUND(((s.noteDeutsch + s.noteMathe) / 2), 1) AS Durchschnittsnote
|
||||||
|
FROM schueler s
|
||||||
|
HAVING Durchschnittsnote > 4
|
||||||
|
ORDER BY Durchschnittsnote ASC;
|
||||||
|
|
||||||
|
#2
|
||||||
|
SELECT
|
||||||
|
l.name, (gehalt * 0.7) AS nettogehalt
|
||||||
|
FROM lehrer l
|
||||||
|
HAVING nettogehalt > 3000;
|
||||||
|
|
||||||
|
#3
|
||||||
|
SELECT
|
||||||
|
s.klassenzimmer, COUNT(s.id) AS `Anzahl`
|
||||||
|
FROM schueler s
|
||||||
|
GROUP BY klassenzimmer
|
||||||
|
HAVING `Anzahl` < 15;
|
||||||
|
|
||||||
|
#4.a
|
||||||
|
SELECT
|
||||||
|
COUNT(s.id) AS `Anzahl`, o.name AS `Ort-Name`
|
||||||
|
FROM schueler s
|
||||||
|
INNER JOIN orte o
|
||||||
|
ON s.idOrte = o.id
|
||||||
|
WHERE s.nationalitaet = 'RU'
|
||||||
|
GROUP BY o.id
|
||||||
|
ORDER BY `Ort-Name`
|
||||||
|
|
||||||
|
#4.b
|
||||||
|
SELECT
|
||||||
|
COUNT(s.id) AS `Anzahl`, o.name AS `Ort-Name`
|
||||||
|
FROM schueler s
|
||||||
|
INNER JOIN orte o
|
||||||
|
ON s.idOrte = o.id
|
||||||
|
WHERE s.nationalitaet = 'RU'
|
||||||
|
GROUP BY o.id
|
||||||
|
HAVING `Anzahl` >= 10
|
||||||
|
ORDER BY `Ort-Name`
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Referentielle Datenintegrität
|
||||||
|
|
||||||
|
Zeit: 30 Min.<br>
|
||||||
|
Form: 2er Team
|
||||||
|
|
||||||
|
Lesen Sie zuerst aus dem Skript [Skript_M164_Themenübersicht](../../02_Theorie_Unterlagen/Skript_M164_Themenuebersicht.pdf) das Kapitel 3 *Löschen in professionellen Datenbanken* aufmerksam durch.
|
||||||
|
|
||||||
|
|
||||||
|
## Aufgabe 1
|
||||||
|
1. Weshalb können in professionellen Datenbanken nicht einfach so Daten gelöscht werden?
|
||||||
|
2. Wer stellt die referentielle Integrität sicher?
|
||||||
|
|
||||||
|
## Aufgaben 2
|
||||||
|
|
||||||
|
Verwenden Sie die Lösung von "Tourenplaner" und importieren Sie das Dump-File [tourenplaner_dump](../90_Dumps/tourenplaner_dump.sql)
|
||||||
|
|
||||||
|
1. Als Datenbank-Entwickler stellen Sie fest, dass bei der Dateneingabe ein Fehler passiert ist. Anstatt «4000 Basel» sollte «3000 Bern» heissen. Versuchen Sie in der Tabelle «tbl_ort» die Ortschaft «Basel» zu löschen.
|
||||||
|
Was stellen sie fest? Erklären Sie!
|
||||||
|
2. Was müssten Sie tun, damit nun die richtige Ortschaft in der Datenbank eingetragen sowie die falsch eingegebene Ortschaft gelöscht werden kann?
|
||||||
|
Setzen Sie Ihren Plan um.
|
||||||
|
|
||||||
|
---
|
|
@ -0,0 +1,6 @@
|
||||||
|
# Tag 6
|
||||||
|
|
||||||
|
## Inhaltsverzeichnis
|
||||||
|
|
||||||
|
- [Datensicherung](datensicherung.md)
|
||||||
|
- [Bulk Import](bulk-import.md)
|
|
@ -0,0 +1,8 @@
|
||||||
|
# Bulk Import
|
||||||
|
|
||||||
|
## Inhaltsverzeichnis
|
||||||
|
- [Bulk Import](#bulk-import)
|
||||||
|
- [Inhaltsverzeichnis](#inhaltsverzeichnis)
|
||||||
|
- [placeholder](#placeholder)
|
||||||
|
|
||||||
|
## placeholder
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Datensicherung
|
||||||
|
## Inhaltsverzeichnis
|
||||||
|
- [Datensicherung](#datensicherung)
|
||||||
|
- [Inhaltsverzeichnis](#inhaltsverzeichnis)
|
||||||
|
- [Backup/Dumping von Datenbanken](#backupdumping-von-datenbanken)
|
||||||
|
- [Sourcing von Dumps](#sourcing-von-dumps)
|
||||||
|
|
||||||
|
## Backup/Dumping von Datenbanken
|
||||||
|
Ein Datenbank-Dump kann leicht hergestellt werden mit folgendem Command:
|
||||||
|
```bash
|
||||||
|
$ mysqldump <datenbankname> -u <user> -p=<passwort>
|
||||||
|
```
|
||||||
|
Dieser Command gibt aber nur das Script hinaus, es schreibt es nicht in eine Datei. Um dies zu erreichen leiten wir einfach den Output zu einer Datei weiter:
|
||||||
|
```bash
|
||||||
|
$ mysqldump <datenbankname> -u <user> -p=<passwort> > /path/to/database_dump.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
## Sourcing von Dumps
|
||||||
|
Damit ein Backup oder ein selbstgeschriebenes Script eingespielt werden kann, verwenden wir folgenden Command in MySQL/MariaDB:
|
||||||
|
```
|
||||||
|
mysql> source /path/to/database_dump.sql
|
||||||
|
```
|
||||||
|
Dieser Command führt den angegebenen Script in MySQL aus.
|
Loading…
Reference in New Issue