Praxis Teil II
Wir wollen:
Aufgabe:
Aus unser ursprünglichen Tabelle eine normalisiertere Form erstellen.
Aus einer Tabelle zwei Tabellen generieren und Daten anpassen.
Datensätze aus beiden Tabellen zusammenführen.
Eine Tabelle anlegen und diese wieder löschen.
Datensätze verändern und löschen
Einen bestehenden Datensatz löschen.
Verändern eines bestehenden Datensatzes
Einen Schlüssel (Primary key) für jede Tabelle anlegen!
Analyse der Aufgabe: Probleme? Fragen? Optimieren?
Mögliches DB Design:
Exemplarische SQL Statments:
CREATE TABLE cdinterpret
SELECT interpret
FROM cdsammlung
GROUP BY interpret;
DROP TABLE cdinterpret;
CREATE TABLE cdinterpret
(
ID int(12) NOT NULL AUTO_INCREMENT PRIMARY KEY,
interpret char(32) NOT NULL
)
SELECT interpret
FROM cdsammlung
GROUP BY interpret
INSERT INTO cdinterpret
(interpret)
VALUES
('Alice in Chains'),
('All Star'), ('Hallelulija'),
('Helloween'),
('Nationalgalerie'),
('Soundtrack'),
('stone temple pilots'),
('TALK'),
('Westernhagen')
UPDATE cdsammlung SET interpret = 1 WHERE interpret = 'Alice in Chains';
UPDATE cdsammlung SET interpret = 2 WHERE interpret = 'All Star';
UPDATE cdsammlung SET interpret = 3 WHERE interpret = 'Hallelulija';
UPDATE cdsammlung SET interpret = 4 WHERE interpret = 'Helloween';
UPDATE cdsammlung SET interpret = 5 WHERE interpret = 'Nationalgalerie';
UPDATE cdsammlung SET interpret = 6 WHERE interpret = 'Soundtrack';
UPDATE cdsammlung SET interpret = 7 WHERE interpret = 'stone temple pilots';
UPDATE cdsammlung SET interpret = 8 WHERE interpret = 'TALK';
UPDATE cdsammlung SET interpret = 9 WHERE interpret = 'Westernhagen';
Ausblick auf die nächste Theorie...
SELECT cdsammlung.titel, cdinterpret.interpret
FROM cdsammlung, cdinterpret
WHERE cdinterpret.id = cdsammlung.interpret AND cdinterpret.id = 1
UPDATE cdinterpret SET interpret='Talk' WHERE interpret = 'TALK';
DELETE from cdinterpret WHERE interpret = 'Talk';
Gibt es auch eine elegantere Lösung?
Mit Hilfe eines SELECTS lässt sich direkt ein CREATE TABLE antriggern:
CREATE TABLE interpreten ( id int NOT NULL AUTO_INCREMENT, primary key(id) ) AS SELECT interpret FROM `cdsammlung` ; # Oder aber ohne Dubletten
CREATE TABLE interpreten ( id int NOT NULL AUTO_INCREMENT, primary key(id) ) AS SELECT lower(interpret) FROM `cdsammlung` GROUP BY lower(interpret);
Alternative Syntax für einen CREATE/SELECT :
SELECT interpret FROM `cdsammlung` INTO interpreten
|