Relationales Modell eines Zoos:

Werbung
Relationales Modell eines Zoos: Übungsaufgaben Erstellen Sie SQL-­‐Abfragen zu folgenden Aufgabenstellungen: 1. Ausgabe einer Telefonliste aller Mitarbeiter, die im Freigehege arbeiten, mit TierpflegerID, Anrede, Vorname, Name und Telefon geordnet nach Name 2. Die Tabelle Tierpfleger soll um die Emailadresse (email) erweitert werden. 3. Bestimmen Sie alle Schimpansen mit TierID, Name, Geschlecht und Geburtsdatum, die im Affenhaus untergebracht sind. 4. Bestimmen Sie die Gehegenamen und die Anzahl der Tierpfleger, die in den einzelnen Gehegen arbeiten, geordnet nach Gehegename! 5. Richten Sie ein Elefantenhaus ein. 6. Welche Tiere sind im Affenhaus untergebracht (geordnet nach Gattung)? 7. Welche Tiere im Zoo bekommen um 9 Uhr Bananen (mit TierID, Name und Gattungsname)? 8. Die Fortpflanzungsversuche im Gehege Streichelzoo waren erfolgreich. Am 28.11.2007 wurde das Eselbaby Eisbein (weiblich) geboren. Aktualisieren Sie die Datenbank entsprechend. 9. Ermitteln Sie alle Gehege, für die noch keine Gehegebetreuung festgelegt wurde. 10. Welche Tiere (mit Gattungsangabe) erhalten kein Futter? 11. Welche Tiergehege sind nicht belegt? 12. Welche Tiergehege sind mit mehr als 2 Tieren belegt? Die Datenbank Zoo ausprobieren Erstellen Sie die Datenbank ‚zoo’ in phpMyAdmin von XAMPP. In dieser Datenbank wählen sie dann den Reiter ‚SQL’, kopieren Sie alles folgende in das Textfeld und bestätigen mit ‚OK’. -- Datenbank: `zoo`
-- ---------------------------------------------------------- Tabellenstruktur für Tabelle `futter`
-DROP TABLE IF EXISTS `futter`;
CREATE TABLE IF NOT EXISTS `futter` (
`FutterID` int(11) NOT NULL auto_increment,
`Futtername` varchar(30) collate latin1_german1_ci NOT NULL,
`Futterbeschreibung` varchar(100) collate latin1_german1_ci NOT NULL,
PRIMARY KEY (`FutterID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
--- Daten für Tabelle `futter`
-INSERT INTO `futter` (`FutterID`, `Futtername`, `Futterbeschreibung`)
VALUES (1, 'Brot', ''),
(2, 'Obst', ''),
(3, 'Fischfutter trocken', ''),
(4, 'Fleisch', ''),
(5, 'Gemuese', ''),
(6, 'Fisch', ''),
(7, 'Hafer', ''),
(8, 'Heu', ''),
(9, 'Maus', ''),
(10, 'Banane', '');
-- ---------------------------------------------------------- Tabellenstruktur für Tabelle `futterration`
-DROP TABLE IF EXISTS `futterration`;
CREATE TABLE IF NOT EXISTS `futterration` (
`FutterrationsID` int(11) NOT NULL auto_increment,
`TierID` int(11) NOT NULL,
`FutterID` int(11) NOT NULL,
`Menge` varchar(30) collate latin1_german1_ci NOT NULL,
`Fuetterungszeit` time NOT NULL,
PRIMARY KEY (`FutterrationsID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
--- Daten für Tabelle `futterration`
-INSERT INTO `futterration` (`FutterrationsID`, `TierID`, `FutterID`,
`Menge`, `Fuetterungszeit`) VALUES (1, 2, 3, 'klein', '11:00:00'),
(2, 1, 3, 'klein', '11:00:00'),
(3, 3, 2, '0.5 kg', '09:00:00'),
(4, 4, 2, '0.5 kg', '09:00:00'),
(5, 3, 5, '1 kg', '14:00:00'),
(6, 4, 5, '1kg', '14:00:00'),
(7, 5, 7, '1 Fuder', '11:00:00'),
(8, 6, 7, '1 Fuder', '11:00:00'),
(9, 5, 8, '1 Gabel', '16:00:00'),
(10, 6, 8, '1 Gabel', '16:00:00'),
(11, 7, 6, '0.5 kg', '09:00:00'),
(12, 8, 6, '0.5 kg', '09:00:00'),
(13, 7, 9, '2', '13:00:00'),
(14, 8, 9, '2', '13:00:00');
-- ---------------------------------------------------------- Tabellenstruktur für Tabelle `gattung`
-DROP TABLE IF EXISTS `gattung`;
CREATE TABLE IF NOT EXISTS `gattung` (
`GattungsID` int(11) NOT NULL auto_increment,
`Gattungsname` varchar(30) collate latin1_german1_ci NOT NULL,
`Beschreibung` varchar(200) collate latin1_german1_ci NOT NULL,
PRIMARY KEY (`GattungsID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
--- Daten für Tabelle `gattung`
-INSERT INTO `gattung` (`GattungsID`, `Gattungsname`, `Beschreibung`)
VALUES
(1, 'Loewe', ''),
(2, 'Goldfisch', ''),
(3, 'Elefant', ''),
(4, 'Weissstorch', ''),
(5, 'Orang-Utan', ''),
(6, 'Schimpanse', ''),
(7, 'Haengebauchschwein', ''),
(9, 'Hausgans', ''),
(10, 'Esel', '');
-- ---------------------------------------------------------- Tabellenstruktur für Tabelle `gehege`
-DROP TABLE IF EXISTS `gehege`;
CREATE TABLE IF NOT EXISTS `gehege` (
`GehegeID` int(11) NOT NULL auto_increment,
`Gehegename` varchar(30) collate latin1_german1_ci NOT NULL,
PRIMARY KEY (`GehegeID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
--- Daten für Tabelle `gehege`
-INSERT INTO `gehege` (`GehegeID`, `Gehegename`) VALUES (1,
'Affenhaus'),
(2, 'Streichelzoo'),
(3, 'Aquarium'),
(4, 'Freigehege');
-- ---------------------------------------------------------- Tabellenstruktur für Tabelle `gehegebetreuung`
-DROP TABLE IF EXISTS `gehegebetreuung`;
CREATE TABLE IF NOT EXISTS `gehegebetreuung` (
`BetreuungsID` int(11) NOT NULL auto_increment,
`MitarbeiterID` int(11) NOT NULL,
`GehegeID` int(11) NOT NULL,
PRIMARY KEY (`BetreuungsID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
--- Daten für Tabelle `gehegebetreuung`
-INSERT INTO `gehegebetreuung` (`BetreuungsID`, `MitarbeiterID`,
`GehegeID`)
VALUES (1, 1, 1),
(2, 2, 2),
(3, 3, 3),
(4, 4, 4),
(5, 2, 1),
(6, 5, 1),
(7, 5, 4);
-- ---------------------------------------------------------- Tabellenstruktur für Tabelle `tier`
-DROP TABLE IF EXISTS `tier`;
CREATE TABLE IF NOT EXISTS `tier` (
`TierID` mediumint(9) NOT NULL auto_increment,
`Name` varchar(30) collate latin1_german1_ci NOT NULL,
`Geschlecht` varchar(10) collate latin1_german1_ci NOT NULL,
`Geburtsdatum` date NOT NULL,
`GattungsID` int(11) NOT NULL,
`GehegeID` int(11) NOT NULL,
PRIMARY KEY (`TierID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
--- Daten für Tabelle `tier`
-INSERT INTO `tier` (`TierID`, `Name`, `Geschlecht`, `Geburtsdatum`,
`GattungsID`, `GehegeID`) VALUES (1, 'Nemo', 'm', '2006-11-20', 2, 3),
(2, 'Eva', 'w', '2005-05-12', 2, 3),
(3, 'Hugo', 'm', '2004-01-01', 5, 1),
(4, 'Elise', 'w', '2004-03-03', 5, 1),
(5, 'Hansi', 'm', '2000-01-02', 10, 2),
(6, 'Wilhelmine', 'w', '0000-00-00', 10, 2),
(7, 'Omo', 'm', '1999-01-01', 3, 4),
(8, 'Uli', 'm', '2000-01-01', 4, 4),
(12, 'Horst', 'w', '2007-12-06', 2, 0);
-- ---------------------------------------------------------- Tabellenstruktur für Tabelle `tierpfleger`
-DROP TABLE IF EXISTS `tierpfleger`;
CREATE TABLE IF NOT EXISTS `tierpfleger` (
`TierpflegerID` int(11) NOT NULL auto_increment,
`Anrede` varchar(10) collate latin1_german1_ci NOT NULL,
`Name` varchar(30) collate latin1_german1_ci NOT NULL,
`Vorname` varchar(30) collate latin1_german1_ci NOT NULL,
`Strasse` varchar(30) collate latin1_german1_ci NOT NULL,
`PLZ` varchar(6) collate latin1_german1_ci NOT NULL,
`Ort` varchar(30) collate latin1_german1_ci NOT NULL,
`Telefon` varchar(30) collate latin1_german1_ci NOT NULL,
`email` varchar(30) collate latin1_german1_ci default NULL,
PRIMARY KEY (`TierpflegerID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
--- Daten für Tabelle `tierpfleger`
-INSERT INTO `tierpfleger` (`TierpflegerID`, `Anrede`, `Name`,
`Vorname`, `Strasse`, `PLZ`, `Ort`, `Telefon`, `email`) VALUES
(1, 'Herr', 'Meier', 'Otto', 'Otto-Strasse 10', '47259', 'Duisburg',
'0203-889911', NULL),
(2, 'Frau', 'Werter', 'Iris', 'Werter Platz 5', '47045', 'Duisburg',
'0203-778822', NULL),
(3, 'Frau', 'Heizmann', 'Eva', 'Heizstr. 6', '47200', 'Duisburg',
'0203-60889', NULL),
(4, 'Herr', 'Mieser', 'Gerd', 'Mieser Weg 1', '57300', 'Duisburg',
'0203-456789', NULL),
(5, 'Herr', 'Zeller', 'Karl', 'Oststr. 10', '45430', 'Bergheim', '02904711', NULL);
Lösungen 1. Ausgabe einer Telefonliste aller Mitarbeiter, die im Freigehege arbeiten, mit TierpflegerID, Anrede, Vorname, Name und Telefon geordnet nach Name SELECT tierpfleger.tierpflegerid, tierpfleger.anrede,
tierpfleger.vorname, tierpfleger.name, tierpfleger.telefon
FROM tierpfleger, gehege, gehegebetreuung
WHERE tierpfleger.tierpflegerid=gehegebetreuung.mitarbeiterid
AND gehege.gehegeid=gehegebetreuung.gehegeid
AND gehege.gehegename='Freigehege'
ORDER BY tierpfleger.name
2. Die Tabelle Tierpfleger soll um die Emailadresse (email) erweitert werden. ALTER TABLE tierpfleger ADD COLUMN ( email varchar(30) )
3. Bestimmen Sie alle Schimpansen mit TierID, Name, Geschlecht und Geburtsdatum, die im Affenhaus untergebracht sind. SELECT tier.tierid, tier.name, tier.geschlecht, tier.geburtsdatum
FROM tier, gehege, gattung
WHERE tier.gehegeid = gehege.gehegeid
AND gattung.gattungsid = tier.gattungsid
AND gehege.gehegename = 'Affenhaus'
AND gattung.gattungsname = 'Schimpanse'
4. Bestimmen Sie die Gehegenamen und die Anzahl der Tierpfleger, die in den einzelnen Gehegen arbeiten, geordnet nach Gehegename! SELECT gehege.gehegename, count( tierpfleger.tierpflegerid )
FROM gehege, tierpfleger, gehegebetreuung
WHERE tierpfleger.tierpflegerid = gehegebetreuung.mitarbeiterid
AND gehegebetreuung.gehegeid = gehege.gehegeid
GROUP BY (gehege.gehegeid)
ORDER BY gehege.gehegename
5. Richten Sie ein Elefantenhaus ein. INSERT INTO gehege
VALUES(NULL,'Elefantenhaus')
6. Welche Tiere sind im Affenhaus untergebracht (geordnet nach Gattung)? SELECT tier.tierid, tier.name, gattung.gattungsname
FROM tier, gattung, gehege
WHERE tier.gattungsid=gattung.gattungsid
AND tier.gehegeid=gehege.gehegeid
AND gehege.gehegename='Affenhaus'
ORDER BY gattung.gattungsname
7. Welche Tiere im Zoo bekommen um 9 Uhr Bananen (mit TierID, Name und Gattungsname)? SELECT tier.tierid, tier.name, gattung.gattungsname
FROM tier, gattung, futterration, futter
WHERE tier.gattungsid = gattung.gattungsid
AND tier.tierid = futterration.tierid
AND futter.futterid = futterration.futterid
AND futterration.fuetterungszeit = '09:00'
AND futter.futtername = 'Banane'
8. Die Fortpflanzungsversuche im Gehege Streichelzoo waren erfolgreich. Am 28.11.2007 wurde das Eselbaby Eisbein (weiblich) geboren. Aktualisieren Sie die Datenbank entsprechend. INSERT INTO tier
VALUES(NULL, 'Eisbein','w','2007-11-28',
(SELECT gattungsid FROM gattung WHERE gattungsname='Esel'),
(SELECT gehegeid FROM gehege WHERE gehegename='Streichelzoo')
)
9. Ermitteln Sie alle Gehege, für die noch keine Gehegebetreuung festgelegt wurde. SELECT gehege.gehegename
FROM gehege LEFT JOIN gehegebetreuung
ON gehege.gehegeid=gehegebetreuung.gehegeid
WHERE gehegebetreuung.betreuungsid IS NULL
10. Welche Tiere (mit Gattungsangabe) erhalten kein Futter? SELECT tier.tierid, tier.name, gattung.gattungsname
FROM tier LEFT JOIN futterration ON ( tier.tierid =
futterration.tierid ), gattung
WHERE gattung.gattungsid=tier.gattungsid
and futterration.futterrationsid IS NULL
11. Welche Tiergehege sind nicht belegt? SELECT gehege.gehegeid, gehege.gehegename
FROM gehege LEFT JOIN tier ON ( tier.gehegeid = gehege.gehegeid )
WHERE tier.gehegeid IS NULL
12. Welche Tiergehege sind mit mehr als 2 Tieren belegt? SELECT gehege.gehegeid, gehege.gehegename, count( gehege.gehegeid
) AS 'Anzahl Tiere'
FROM gehege, tier
WHERE tier.gehegeid = gehege.gehegeid
GROUP BY ( gehege.gehegeid )
HAVING ( count( gehege.gehegeid ) >2 )
Quellennachweis Dieses Übungsblatt wurde erstellt nach einer Vorlage von Prof. Dr. Stephan Karczewski von der Hochschule Darmstadt. 
Herunterladen