Praxis Teil III
Wir wollen:
Aufgabe:
Weiter Normalisieren
Ein eigenes ER Modell aufstellen (Auf dem Papier oder gemeinsam an der Tafel?)
Daten in Excel erfassen und einlesen
Eine weitere Tabelle bilden (Adressen)
Trennen von CD und Interpreten
Sinnvolle Indexe anlegen
Eine Select per EXPLAIN überprüfen
Verschiedene Joins ausprobieren
- Welche Interpreten haben meine CDs?
- Wer hat welche CD mit welchem Interpret ausgeliehen?
- Welche CDs sind NICHT ausgeliehen
Analyse der Aufgabe: Probleme? Fragen? Optimieren?
Exemplarische SQL Statments
CREATE TABLE ausgeliehen (
cd_id int(10) unsigned NOT NULL default '0',
ausleiher_id int(10) unsigned NOT NULL default '0',
name varchar(46) NOT NULL default '',
PRIMARY KEY (cd_id,ausleiher_id),
UNIQUE KEY cd_id (cd_id)
)
INSERT INTO ausgeliehen VALUES (1, 1, 'Thomas');
INSERT INTO ausgeliehen VALUES (2, 1, 'Thomas');
INSERT INTO ausgeliehen VALUES (3, 2, 'Hans');
INSERT INTO ausgeliehen VALUES (4, 2, 'Hans');
ALTER TABLE ausgeliehen ADD INDEX(name)
ALTER TABLE cd.ausgeliehen CHANGE name Vorname VARCHAR(46) NOT NULL
SELECT titel, interpret, name from cdsammlung c JOIN ausgeliehen a WHERE c.id = a.cd_id
SELECT titel, interpret, name FROM cdsammlung c LEFT JOIN ausgeliehen a ON c.id = a.cd_id WHERE a.cd_id IS NULL
CREATE TABLE Adressen (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
vorname VARCHAR(64) NOT NULL,
nachname VARCHAR(64) NOT NULL,
telefon VARCHAR(32) NOT NULL,
email VARCHAR(32) NOT NULL,
UNIQUE (`id`)
);
ALTER TABLE `ausgeliehen`
DROP `Vorname`;
INSERT INTO `adressen` (`id`, `vorname`, `nachname`, `Telefon`, `email`) VALUES ('', 'Thomas', 'Butz', '0179/6997522', 'tbee@tbee.de');
INSERT INTO `adressen` (`id`, `vorname`, `nachname`, `Telefon`, `email`) VALUES ('', 'Hans', 'Muster', '08150', 'muster@musterman.de');
select *
from cdsammlung c
LEFT JOIN ausgeliehen a
ON c.id = a.cd_id
JOIN adressen d
WHERE a.ausleiher_id = d.id
select * from
cdsammlung c
LEFT JOIN ausgeliehen a
ON c.id = a.cd_id
LEFT JOIN adressen d
ON a.ausleiher_id = d.id
|