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