Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme Eine Auswahl aus Klausuraufgaben früherer Klausuren Lösungen ( unvollständig) 19.5.2001 Aufgabe 1 Datenbank für Fahrzeugtypen In einer Datenbank für Fahrzeugtypen sind folgende Informationen zu speichern : ?? ?? ?? ?? Jeden PKW gibt es in verschiedenen Lackierungen und Stoffbezügen Jede Lackierung und jeder Stoffbezug ist in der Regel für mehrere PKW - Typen verfügbar. Für einen PKW - Typ sind nur bestimmte Lack - Stoff - Kombinationen erlaubt. Legen Sie die Attribute der PKW - Typen, Lackierungen und Bezüge selbst fest. a) Erstellen Sie ein ER - Diagramm ( in Krähenfußnotation) einschließlich der Attribute, Primärschlüssel und Fremdschlüssel. Geben Sie auch die Kardinalität und Optionalität der Beziehungen an ! b) Erzeugen Sie aus Ihren E - R - Modell ein relationales Datenbankschema ! Datenbankschema in der Form Relation(Attribut1, Attribut2, ...) , Schlüsselattribute unterstreichen ! c) Führen Sie Ihr relationales Datenbankschema in SQL - Befehle zum Einspielen der Tabellen über ! Primärschlüssel und Fremdschlüssel bitte durch CONSTRAINT’s darstellen ! 1 Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme Aufgabe 2 ( relationale Algebra) Gegen sei die relationale Datenbank einer Bankfiliale, die Primärschlüssel sind unterstrichen: Bankfiliale(FilialNr, Name, Ort, Bankleitzahl) Konto(KontoNr, FilialNr, Kontostand) Kunde(Kundennr, Name, Adresse) Gehoert_zu(KontoNr, KundenNr) Ueberweisung(von_Blz, von_KontoNr, nach_BLZ, nach_KontoNr, Betrag) Formulieren Sie die folgenden Fragen, falls möglich, in der relationalen Algebra ! Wenn eine Abfrage nicht in der relationalen Algebra enthalten ist, geben Sie bitte eine Begründung an ! a) Geben Sie eine Liste aller Filialen mit ihren Bankleitzahlen aus ! Sortieren Sie die Liste nach Bankleitzahlen und in zweiter Linie nach Namen ! nein , wegen ORDER by b) Ermitteln Sie die Kontonummern und Namen aller Kunden, die ihr Konto überzogen haben !ja, c) Hat Fritz Müller ein Konto bei einer Bank in Gummersbach ? Falls ja , soll die Bankfiliale und die KontoNr. ausgegeben werden ! ja, d) Geben Sie die Nummern, Namen und Gesamteinlagen( Summe über alle Kontostände) aller Filialen in Gummersbach aus ! nein , wegen GROUP BY 2 P. e) Ermitteln Sie die Nummer und Summe aller Abbuchungen aller Konten, von denen mehr als 10000 DM abgebucht wurden. nein , wegen GROUP BY 2 P. Aufgabe 3 ( Speicherstrukturen) a) Erzeugen Sie einen B-Baum vom Typ 2, indem Sie nacheinander die Zahlen { 20, 19, 18, 17, ... 3,2,1 } in absteigender Reihenfolge einfügen ! b) Löschen Sie aus dem entstandenen Baum die Zahlen 12 und 20 ! Aufgabe 4 (Normalformen) Gegeben sei eine wieder die relationale Datenbank aus Aufgabe 2 mit folgenden Relationen, 2 Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme die Primärschlüssel sind unterstrichen: Bankfiliale(FilialNr, Name, Ort, Bankleitzahl) Konto(KontoNr, FilialNr, Kontostand) Kunde(Kundennr, Name, Adresse) Gehoert_zu(KontoNr, KundenNr) Ueberweisung(von_Blz, von_KontoNr, nach_BLZ, nach_KontoNr, Betrag) a) b) c) d) In welcher Normalform befindet sich die Datenbank ? Welche Nachteile kann eine Überführung in die dritte Normalform haben ? Verändern Sie das Datenbankschema so, dass es nicht mehr (3NF), aber noch (2NF) ist . Verändern Sie das Datenbankschema so, dass es nicht mehr (2NF), aber noch (1NF) ist . Aufgabe 5 (SQL) Betrachten Sie die Tabellen Abteilungen und Mitarbeiter aus der Fahrrad- Datenbank, die durch die folgenden SQL – Anweisungen erzeugt werden: CREATE TABLE Abteilungen (Abt_Nr NUMBER(38) NOT NULL, Leiter NUMBER(38) NOT NULL, Name VARCHAR2(50) NOT NULL, Ort VARCHAR2(50)); CREATE TABLE Angestellte (Ang_Nr NUMBER(38) NOT NULL, Abt_Nr NUMBER(38) NOT NULL, Aufgabenbeschreibung VARCHAR2(50) NOT NULL, Beruf VARCHAR2(50) NOT NULL, Nachname VARCHAR2(50) NOT NULL, Vorname VARCHAR2(50) NOT NULL, Geschlecht CHAR(1) NOT NULL, Eintrittsdatum DATE, Gehalt NUMBER(9,2) Default 0, Abzuege NUMBER(9,2) Default 0, Ort VARCHAR2(50), Strasse VARCHAR2(50), Zeitstempel DATE); Bitte kreuzen Sie ein oder mehrere Antworten an! 1) Welche Abfrage erzeugt einen Fehler, wenn es keinen Angestellten mit Nachnamen ‘FaeskornWoyke‘ gibt ? ? ? SELECT * FROM Angestellte; ? ? SELECT Ang_Nr, Vorname, Nachname FROM Angestellte; ? ? SELECT Nachname; 2) Welches Ergebnis hat die folgende Abfrage SELECT * FROM Angestellte WHERE Nachname != 'Weber'; 3 Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme ?? ?? ?? ?? ?? Alle Zeilen und Spalten der Angestellten - Tabelle Die Anzahl der Angestellten, deren Nachname gleich Weber ist. Die Anzahl der Angestellten, deren Nachname nicht gleich Weber ist. Nachnamen der Angestellten, deren Nachname nicht gleich Weber ist. Alle Zeilen und Spalten der Angestellten Tabelle, außer derjenigen Angestellten, die den Nachname ‘Weber‘ haben. 3) Welches Ergebnis hat die folgende Abfrage SELECT * FROM Angestellte WHERE Nachname LIKE ‘_e%‘; ? ? Die Nachnamen aller Angestellten, die als zweiten Buchstaben ein „e“ haben. ? ? Die Nachnamen aller Angestellten, die als zweiten Buchstaben von hinten ein „e“ haben. ? ? Die Nachnamen aller Angestellten, die höchsten ein „e“ haben. ? ? Die Nachnamen aller Angestellten, die als zweiten Buchstaben kein „e“ haben. ? ? Die Nachnamen aller Angestellten, die als zweiten Buchstaben von hinten kein „e“ haben. 4) Wenn Sie zwei Tabellen mit einem Natural-Join- Operator verknüpfen wollen, müssen Sie ? ? eine WHERE- Klausel benutzen ? ? die WHERE – Klausel weglassen ? ? eine Subquery benutzen ? ? beide Tabellen in der FROM – Klausel aufführen ? ? die FROM – Klausel weglassen ? ? die Tabellen über Gleichsetzung von Spalten in der WHERE – Klausel miteinander verbinden. 5) Welcher Typ des Join- Operators wird mit der folgenden Abfrage in SQL abgebildet ? SELECT Nachname, Ang_Nr, Abt_Nr, Name FROM Angestellte, Abteilungen; ? ? Ein Natural - Join ? ? ein Outer- Join ? ? ein kartesisches Produkt ? ? Diese Abfrage bildet keinen Join- Operator ab. 6) Welcher Typ des Join- Operators wird mit der folgenden Abfrage in SQL abgebildet ? SELECT Nachname, Ang_Nr, Name FROM Angestellte, Abteilungen WHERE Angestellte.Abt_Nr = Abteilungen.Abt_Nr AND Name LIKE ‘G%‘; ? ? Ein Natural – Join ? ? ein Outer- Join ? ? ein kartesisches Produkt ? ? Diese Abfrage bildet keinen Join- Operator ab. 7) Welcher Typ des Join- Operators wird mit der folgenden Abfrage in SQL abgebildet ? SELECT Nachname, Ang_Nr, Name FROM Angestellte, Abteilungen WHERE Angestellte.Abt_Nr = Abteilungen.Abt_Nr (+) AND Name LIKE ‘G%‘; ? ? Ein Natural – Join ? ? ein Outer- Join ? ? ein kartesisches Produkt ? ? Diese Abfrage bildet keinen Join- Operator ab. 8) Welche der folgenden SQL- Zeilen produziert einen Fehler ? ? ? SELECT Nachname , Vorname, Name as Abteilungsname 4 Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme ?? ?? ?? ?? FROM Abteilungen, Angestellte WHERE Ort = ‘Köln‘ AND Abt_Nr = Abt_Nr Diese Abfrage produziert keinen Fehler. 9) In welcher Komponente kann eine Unterabfrage stehen ? ? ? SELECT - Komponente ? ? FROM – Komponente ? ? WHERE – Komponente ? ? ORDER BY- Komponente ? ? GROUP BY- Komponente ? ? HAVING - Komponente 10) Welche der folgenden SQL- Zeilen produziert einen Fehler ? ? ? SELECT Nachname , Vorname, Gehalt ? ? FROM Angestellte ? ? WHERE Ang_Nr = (SELECT Ang_Nr, Nachname ? ? FROM Angestellte ? ? WHERE Ort = ‘Köln‘); ? ? Diese Abfrage produziert keinen Fehler. 11) Welche der folgenden SQL- Zeilen produziert einen Fehler ? ? ? SELECT Nachname , Vorname, SUM(Gehalt) ? ? FROM Abteilungen a, Angestellte b ? ? WHERE a.Abt_Nr = b.Abt_Nr ? ? GROUP BY Nachname ? ? HAVING Sum(Gehalt) > 10000 ? ? ORDER BY Nachname ? ? Diese Abfrage produziert keinen Fehler. 12) Welche der folgenden INSERT – Anweisungen erzeugt eine Zeile in der Abteilungs-Tabelle? ? ? INSERT INTO Abteilungen (Abt_Nr 10, Name ‘EDV‘); ? ? INSERT INTO Abteilungen (Abt_Nr, Name, Leiter) VALUES (10, ‘EDV‘, ‘Schmidt‘); ? ? INSERT INTO VALUES (10, ‘EDV‘, ‘Schmidt‘, ‘Wiehl‘); 13) Wenn in einer UPDATE- Anweisung die WHERE – Bedingung fehlt, werden alle Zeilen verändert ? ? wahr ? ? falsch 14) Welche Anweisung löscht den Angestellten mit der Ang_Nr 17? ? ? DELETE Angestellte ? ? DELETE FROM Angestellte WHERE Ang_Nr = 17 ? ? DELETE Angestellte WHERE Ang_Nr = 17 ? ? DROP FROM Angestellte WHERE Ang_Nr = 17 15) Welche der folgenden Zeilen produziert einen Fehler ? ? ? CREATE TABLE Abteilungen ? ? (Abt_Nr NUMBER(38) NOT NULL, ? ? Leiter NUMBER(38) NOT NULL, 5 Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme ? ? Name VARCHAR2(50) NOT NULL, ? ? VARCHAR2(50)); 16) Welche Anweisung legt eine Kopie der Angestellten – Tabelle an ? ? ? CREATE TABLE temp SELECT * FROM Angestellte; ? ? CREATE temp SELECT * FROM Angestellte; ? ? CREATE TABLE temp AS SELECT * FROM Angestellte; ? ? CREATE TABLE temp IS SELECT * FROM Angestellte; 17) Wie kann man der Abteilungstabelle ein Spalte ‘gegruendet_am‘ hinzufügen ? ? ? ALTER TABLE Abteilungen ADD COLUMN gegruendet_am Date; ? ? ALTER TABLE Abteilungen ADD gegruendet_am Date; ? ? ALTER Abteilungen ADD gegruendet_am Date; ? ? ADD COLUMN gegruendet_am Date to Abteilungen ? ? Eine Tabelle kann überhaupt nicht nachträglich verändert werden. 18) Welche Aussagen sind für einen PL/SQL – Block richtig ? ? ? Die DECLARE – Anweisung ist ein optionaler Bestandteil eines PL/SQL – Blockes, der am Anfang eines Blockes steht. ? ? Zwischen BEGIN und END stehen die eigentlichen Anweisungen. Dieser Bestandteil ist nicht optional. ? ? Mit EXCEPTION wird der letzte Teil eines PL/SQL – Blockes eingeleitet, der den Fehlerbehandlungscode enthält. Dieser Bereich ist optional. ? ? Nach BEGIN muß immer ein END folgen, und zwar vor EXECEPTION, wenn eine Fehlerbehandlung programmiert ist. 19) Welcher Cursor- Bestandteil kann in der DECLARE – Sektion eines PL/SQL- Blockes stehen ? ? ? %FOUND ? ? %NOTFOUND ? ? %ROWTYPE ? ? %TYPE ? ? %ISOPEN 20) Welcher Typ eines PL/SQL -Blockes liefert einen Wert zurück ? ? ? ein Prozedur ? ? ein Datenbanktrigger ? ? ein Package ? ? eine Funktion ? ? keine von allen 21) Welche Metadatentabelle enthält den Source-Code einer Prozedur ? ? ? USER_SOURCE ? ? USER_CODE ? ? USER_PROCEDURES ? ? USER_OBJECTS 22) Welche Anweisung erzeugt den Output ‘Hello Wold‘ am Bildschirm ? ? ? DBMS_OUTPUT.PUTLINE('Hello world.'); ? ? DBMS_PRINT.PUTLINE('Hello world.'); ? ? PRINT('Hello world.'); 6 Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme ? ? DBMS_PRINT.OUTPUT('Hello world.'); ? ? Das geht überhaupt nicht. Aufgabe 6 SQL Betrachten Sie die Beispieldatenbank des Fahrradherstellers Byce und Co. aus der Vorlesung. Welche Ergebnisse liefern die folgenden fünf SELECT - Anweisungen ? Erläutern Sie die Unterschiede ! I. SELECT ang_nr , gehalt FROM angestellte a WHERE gehalt > (SELECT avg(gehalt) FROM angestellte b WHERE a.abt_abTNR = b.abt_abTNR); II. SELECT ang_nr , gehalt FROM angestellte WHERE gehalt > (SELECT avg(gehalt) FROM angestellte b); III. SELECT ang_nr , gehalt FROM angestellte WHERE gehalt > all (SELECT avg(gehalt) FROM angestellte Group by abt_abTNR); IV. SELECT ang_nr , gehalt FROM angestellte WHERE gehalt > any (SELECT avg(gehalt) FROM angestellte Group by abt_abTNR); V. SELECT ang_nr , gehalt FROM angestellte WHERE gehalt > (SELECT avg(avg(gehalt)) FROM angestellte Group by abt_abTNR); 7 Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme Lösungen Welche Ergebnisse liefern die folgenden beiden SELECT - Anweisungen ? Erläutern Sie die Unterschiede ! I. SELECT ang_nr , gehalt, ab.name FROM angestellte a, abteilungen ab WHERE gehalt > (SELECT avg(gehalt) FROM angestellte b WHERE a.abt_nr = b.abt_nr); alle Angestellten, die mehr als der Durchschnitt ihrer eigenen Abteilung verdienen II. SELECT ang_nr , gehalt FROM angestellte WHERE gehalt > (SELECT avg(gehalt) FROM angestellte ); alle Angestellten, die mehr als der Durchschnitt aller Gehälter verdienen III. SELECT ang_nr , gehalt FROM angestellte WHERE gehalt > all (SELECT avg(gehalt) FROM angestellte Group by abt_nr); alle Angestellten, die mehr als das durchschnittliche Gehalt aller Abteilungen verdienen IV. SELECT ang_nr , gehalt FROM angestellte WHERE gehalt > any (SELECT avg(gehalt) FROM angestellte Group by abt_nr); alle Angestellten, die mehr als das durchschnittliche Gehalt irgendeiner Abteilungen verdienen V. SELECT ang_nr , gehalt FROM angestellte WHERE gehalt > (SELECT avg(avg(gehalt)) FROM angestellte Group by abt_nr); alle Angestellten, die mehr als das durchschnittliche Gehalt aller Abteilungen verdienen, VI. wenn man nochmal den Durchschnitt über die durchschnittlichen Gehälter der Einzelabteilungen bildet 8 Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme Aufgabe 7 SQL Betrachten Sie die Beispieldatenbank des Fahrradherstellers Byce und Co. aus der Vorlesung. Beantworten Sie in SQL: a) Welche Teile haben eine Bezeichnung, die mit dem Buchstaben G anfängt? b) Geben Sie eine Liste über alle Artikel aus, mit den Attributen TNr, Bezeichnung und Verkaufspreis, wobei die Preise um 10 % erhöht werden ! Sortieren Sie die Liste absteigend nach den Preisen und bei gleichem Preis noch mal alphabetisch aufsteigend nach der Bezeichnung ! c) Von welchen Teilen sind mehr als 10 Einheiten im Bestand aller Lager? (Tabelle : Lagerbestand). Geben Sie diese Teile mit den Attributen TNR, BEZEICHNUNG und der Summe des Bestandes über alle Lager aus ! d) Welches Teil benötigt in der Stückliste (Struktur-Tabelle) die Silberfarbe mit der TNr = 3 ? Listen Sie diejenigen Teile auf, die dieses Teil ( TNr = 3) direkt oder indirekt in der zweiten Stufe verwenden ! Geben Sie die Attribute TNR und Bezeichnung aus der Teile Tabelle aus und benutzen Sie einen SELECT mit UNION - Statement ! e) Auf welchen Lagern liegt ein Bestand des Rades mit der TNr = 1 ? f) Welche Teile haben, summiert über alle Lager, einen Bestand von mehr als 100 Einheiten ? g) Gibt es Teile, deren Bestand, summiert über alle Lager, den aus der Tabelle Teile unterschreitet ? h) In welchem Lager werden die meisten Artikel ( Typ = 'Artikel') gelagert ? i) Geben Sie den durchschnittlichen Bestand je Lager aus ! j) Geben Sie die Lagernummer und den durchschnittlichen Bestand derjenigen Lager aus, deren Durchschnittsbestand höher als 1500 Einheiten ist ! k) Geben Sie eine Liste aus über alle Teile mit TNr, Bezeichnung und den Lagern, auf denen die Teile gelagert sind ! a) Welche Teile haben eine Bezeichnung, die mit dem Buchstaben G anfängt? SELECT Bezeichnung FROM Teile WHERE BEZEICHNUNG LIKE ‘G%’; b) Geben Sie eine Liste über alle Artikel aus, mit den Attributen TNr, Bezeichnung und Verkaufspreis, wobei die Preise um 10 % erhöht werden ! Sortieren Sie die Liste absteigend nach den Preisen und bei gleichem Preis noch mal alphabetisch aufsteigend nach der Bezeichnung !SELECT TNR, Bezeichnung, Verkaufspreis * 1.1 FROM artikel ORDER BY Verkaufspreis DESC, Bezeichnung ASC; c) Von welchen Teilen sind mehr als 10 Einheiten im Bestand aller Lager? (Tabelle : Lagerbestand). Geben Sie diese Teile mit den Attributen TNR, BEZEICHNUNG und der Summe des Bestandes über alle Lager aus ! SELECT Teile.TNR , BEZEICHNUNG, SUM(Lagerbestand.BESTAND) FROM Teile, lagerbestand WHERE Teile.TNR = Lagerbestand.TNR group by Teile.TNR, Teile.Bezeichnung having sum(Lagerbestand.bestand) >= 10; 9 10 Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme d) Welches Teil benötigt in der Stückliste (Struktur-Tabelle) die Silberfarbe mit der TNr = 3 ? Listen Sie diejenigen Teile auf, die dieses Teil ( TNr = 3) direkt oder indirekt in der zweiten Stufe verwenden ! Geben Sie die Attribute TNR und Bezeichnung aus der Teile - Tabelle aus und benutzen Sie einen SELECT mit UNION - Statement ! SELECT DISTINCT Teile.TNR, BEZEICHNUNG FROM Teile, STRUKTUR WHERE Teile.TNR = struktur.OTEIL AND UTEIL = 3 UNION SELECT DISTINCT s2.Oteil, Bezeichnung FROM Teile, STRUKTUR s1, Struktur s2 WHERE Teile.TNR = s1.OTEIL AND s2. UTEIL = s1.Oteil AND s1.UTeil = 3; e) Auf welchen Lagern liegt ein Bestand des Rades mit der TNr = 1 ? SELECT LANR FROM Lagerbestand WHERE TNR = 1; f) Welche Teile haben, summiert über alle Lager, einen Bestand von mehr als 100 Einheiten ? SELECT TNR FROM lagerbestand group by TNR having sum(Bestand) >= 100; g) Gibt es Teile, deren Bestand, summiert über alle Lager, den aus der Tabelle Teile unterschreitet ? Punkte SELECT Teile.TNR FROM lagerbestand, Teile WHERE Teile.TNR = lagerbestand.TNR group by Teile.TNR, Mindestbestand having sum(Teile.Bestand) <= Mindestbestand; h) In welchem Lager werden die meisten Artikel ( Typ = 'Artikel') gelagert ? SELECT LANR FROM Teile, Lagerbestand WHERE Teile.tNr = lagerbestand.TNR AND Teile.Typ = 'Artikel' group by LANR having sum(Lagerbestand.bestand) >= ALL (SELECT sum(Lagerbestand.Bestand) FROM Teile , lagerbestand WHERE Teile.tNr = lagerbestand.TNR AND Teile.Typ = 'Artikel' group by LANR) ; i) Geben Sie den durchschnittlichen Bestand je Lager aus ! 3 Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme SELECT LANR, avg(bestand) FROM Lagerbestand group by LANR j) Geben Sie die Lagernummer und den durchschnittlichen Bestand derjenigen Lager aus, deren Durchschnittsbestand höher als 1500 Einheiten ist ! SELECT LANR, avg(bestand) FROM Lagerbestand group by LANR having avg(bestand) >= 1500; k) Geben Sie eine Liste aus, über alle Teile mit TNr, Bezeichnung und den Lagern, auf denen die Teile gelagert sind ! SELECT Teile.TNR, Bezeichnung, LANR FROM Teile, Lagerbestand WHERE Teile.Tnr = Lagerbestand.Tnr; l) Geben Sie eine Liste aus, über alle Teile mit TNr, Bezeichnung und den Lagern, auf denen die Teile gelagert sind sowie diejenigen Teile, für die kein Lagerbestand vorliegt mit dem Eintrag „0“ bei der Lagernummer ! SELECT Teile. TNR, Bezeichnung, LANR FROM Teile, Lagerbestand WHERE Teile.Tnr = Lagerbestand.Tnr UNION SELECT TNR, Bezeichnung, 0 FROM Teile WHERE TNR NOT IN (SELECT DISTINCT TNr FROM Lagerbestand); 11