BetaRelease - Die Datenbank

Eine Softwarefirma benoetigt eine Datenbank.

Beschreibung der Datenbank

Personen haben eine Sozialversicherungsnummer (SVNR), einen Nachnamen (NNAME), und eine Personalnummer (PNR). Außerdem soll der Raum (RAUM) gespeichert werden, in welchem die Person derzeit arbeitet. Sowohl die Personalnummer, als auch die Sozialversicherungsnummer reichen aus um eine Person eindeutig zu identifizieren. Es gibt zwei Arten von Personen, Software Entwickler und Qualitätsmanager. Jede Software ist eindeutig durch eine id (ID) identifiziert. Weiters wird ein Titel (TITEL) festgehalten, und um was für eine Art von Software es sich handelt (TYP). Eine Softwareversion ist eindeutig identifiziert durch die entsprechende Software sowie eine Versionsnummer (VNR). Es muss zu jeder Software jeweils mindestens eine Version existieren. Zu jeder Softwareversion können darüber hinaus eine beliebige Anzahl an Builds existieren. Diese können eindeutig identifiziert werden durch die Softwareversion und eine Buildnummer (BNR). Jede Softwareversion beinhaltet ein oder mehrere Pakete. Zu jedem Paket wird sein Name (NAME), seine Version (VERSION), und die Quelle (QUELLE) woher es stammt gespeichert, wobei der Name und die Version gemeinsam ein Paket eindeutig identifizieren. Darüber hinaus werden die Abhängigkeiten zwischen Paketen vermerkt, also welches Paket welche anderen Pakete als Voraussetzungen benötigt. Ein Paket enthält ein oder mehrere Files, wobei ein File eindeutig identifiziert ist durch das Paket in dem es sich befindet, und seinen Namen (FNAME). Zusätzlich sollen sein Inhalt (INHALT) und der Dateityp (FTYPE) gespeichert werden. Zu manchen Files (jedoch nicht allen) muss außerdem ein Copyright-Vermerk (VERMERK) gespeichert werden. Für Source-Files wird außerdem ihre Länge (LOC) gespeichert, und es ist vermerkt, in welcher Programmiersprache sie verfasst sind. Eine Programmiersprache wird eindeutig identifiziert durch ihren Namen (NAMEN). Es soll außerdem für jeden Software Entwickler gespeichert werden, welche Programmiersprache diese Person beherrscht, und wie gut (LEVEL). Dabei muss jeder Software Entwickler mindestens eine Programmiersprache beherrschen. Zu einem Bugreport soll seine Beschreibung (BESCHREIBUNG) gespeichert werden sowie die Information, wann der Report gemeldet wurde (EINGANG). Jeder Bugreport besitzt außerdem eine eindeutige Tracking Nummer (TRNR), und ist genau einem Build zugeordnet. Bevor ein Bug bearbeitet wird, muss er von einem Qualitätsmanager bestätigt werden. Es soll nicht nur vermerkt werden, wer einen Bug bestätigt hat, sondern auch wann das passiert ist (DATUM). Für behobene Bugreports wird zusätzlich ein Kommentar (KOMMENTAR) vermerkt, sowie von welchem Softwareentwickler der Fehler behoben wurde, und wann (DATUM). Dabei wird jeder Bug von genau einem Entwickler behoben. Zusätzlich kann ein behobener Bug durch maximal einen Qualitätsmanager geprüft werden. Zu jeder Prüfung soll eine (BEWERTUNG) und das Datum (DATUM) der Prüfung gespeichert werden.


1)

Geben Sie eine Lister aller Files (Name und Version des Pakets, Name und Typ des Files) aus, deren Filename mit der Zeichenkette 'index' beginnen. Sortieren Sie die Liste zuerst aufsteigend nach dem Paketnamen, innerhalb des selben Paketnamens absteigend nach der Paketversion, und innerhalb eines Paketes wieder aufsteigend nach den Namen des Files.

		
			SELECT name, version, fname, ftype
			FROM File
			WHERE fname LIKE 'index%'
			ORDER BY name ASC, version DESC, fname ASC;	
	
		


2)

Geben Sie eine Liste aller Softwareentwickler (Raum und Name) aus die in mindestens 3 Programmiersprachen ein höheres Level als Level 4 haben. Sortieren Sie die Liste zuerst aufsteigend nach dem Raum, und dann absteigend nach dem Namen. Achten Sie darauf, dass für jede Person welche die Eigenschaften erfüllt genau ein Eintrag ausgegeben wird.

		
			SELECT raum, nname
			FROM SWEntwickler NATURAL JOIN Person NATURAL JOIN beherrscht
			WHERE LEVEL > 4
			GROUP BY svnr, raum, nname
			HAVING count(name) >= 3
			ORDER BY raum ASC, nname DESC;	
	
		

		
			SELECT raum, nname
			FROM SWEntwickler NATURAL JOIN Person p
			WHERE svnr IN (
			        SELECT b.svnr
			        FROM beherrscht b
			        WHERE p.svnr = b.svnr and b.level > 4
			        GROUP BY b.svnr
			        HAVING count(*) >= 3 )
			ORDER BY raum ASC, nname DESC;	
	
		

		
			SELECT raum, nname
			FROM SWEntwickler NATURAL JOIN Person p
			WHERE 3 <= (
			        SELECT count(*)
			        FROM beherrscht b
			        WHERE p.svnr = b.svnr and b.level > 4)
			ORDER BY raum ASC, nname DESC;	
	
		


3)

Geben Sie die Titel all jener Software aus, zu der es keine Versionsnummer 3 oder höher gibt, jedoch mindestens drei Versionen mit einer Nummer kleiner als 3. Geben Sie zu jeder Software in der Liste außerdem aus, wie viele Versionen es mit einer Versionsnummer kleiner als 3 gibt.

		
			SELECT titel, count(vnr)
			FROM Version NATURAL JOIN Software
			GROUP BY id, titel
			HAVING max(vnr) < 3 AND
			count(vnr) >= 3;	
	
		

		
			SELECT titel, count(vnr)
			FROM Software NATURAL JOIN Version
			WHERE id NOT IN (SELECT id FROM Version WHERE vnr >= 3)
			      AND vnr < 3
			GROUP BY id, titel
			HAVING COUNT(vnr) >= 3;	
	
		

		
			SELECT DISTINCT titel, (SELECT count(vnr) 
			                        FROM version v2
			                        WHERE v2.id=v1.id)
			FROM Software NATURAL JOIN Version v1
			WHERE NOT EXISTS (SELECT *
			                  FROM version v2
			                  WHERE VNR >= 3 AND v2.ID = v1.ID)
			                        AND 3 <= (
			                                SELECT count(vnr)
			                                FROM version v2
			                                WHERE v2.id=v1.id);	
	
		


4.1)

Geben Sie eine Lister aller bestätigten aber noch nicht behobenen Bugs (TRNR, Beschreibung, Eingang) aus.

		
			SELECT trnr, beschreibung, eingang
			FROM BugReport NATURAL JOIN
			     (SELECT trnr FROM Bug
			      EXCEPT
			      SELECT trnr FROM BehobenerBug) as openBugs;	
	
		

		
			SELECT trnr, beschreibung, eingang
			FROM BugReport NATURAL JOIN Bug
			EXCEPT
			(SELECT trnr, beschreibung, eingang
			FROM BehobenerBug NATURAL JOIN BugReport);	
	
		


4.2)

Geben Sie jene Builds (Titel der Software, Versionsnummer, Buildnummer) aus, zu denen es seit dem 02.05.2014 (inklusive) die meisten Bug-Reports gibt. (Hinweis: Verwenden Sie die Funktion TO_DATE() mit dem Datumsformat 'DD-MM-YYYY'.)

		
			SELECT titel, vnr, bnr 
			FROM Build NATURAL JOIN Software NATURAL JOIN BugReport
			WHERE eingang >= TO_DATE('02-05-2014','DD-MM-YYYY')
			GROUP BY id, titel, vnr, bnr
			HAVING count(trnr) >= all (SELECT count(trnr)
			                                                   FROM Build NATURAL JOIN BugReport
			                                                    WHERE eingang >= TO_DATE('02-05-2014','DD-MM-YYYY')
			                                                   GROUP BY id, vnr, bnr);	
	
		

		
			SELECT titel, vnr, bnr 
			                        FROM Build NATURAL JOIN Software NATURAL JOIN BugReport
			                        WHERE eingang >= TO_DATE('02-05-2014','DD-MM-YYYY')
			                        GROUP BY id, titel, vnr, bnr
			                        HAVING count(trnr) = (SELECT max(anz)
			                                                                  FROM (SELECT count(trnr) as anz
			                                                                           FROM Build NATURAL JOIN BugReport
			                                                                            WHERE eingang > TO_DATE('02-05-2014','DD-MM-YYYY')
			                                                                           GROUP BY id, vnr, bnr) as tmp);	
	
		

		
			SELECT titel, vnr, bnr 
			FROM Software NATURAL JOIN BugReport
			WHERE eingang >= TO_DATE('02-05-2014','DD-MM-YYYY')
			GROUP BY id, titel, vnr, bnr
			HAVING count(trnr) >= all (SELECT count(trnr)
			                                                   FROM BugReport
			                                                    WHERE eingang >= TO_DATE('02-05-2014','DD-MM-YYYY')
			                                                   GROUP BY id, vnr, bnr);	
	
		

		
			SELECT titel, vnr, bnr 
			FROM Software NATURAL JOIN Build b
			WHERE (SELECT count(*)
			       FROM BugReport br
			       WHERE eingang >= TO_DATE('02-05-2014','DD-MM-YYYY')
			       AND br.id=b.id AND br.vnr=b.vnr AND br.bnr=b.bnr) =
			       (SELECT max(anz)
			        FROM (SELECT count(trnr) as anz
			              FROM BugReport
			              WHERE eingang > TO_DATE('02-05-2014','DD-MM-YYYY')
			              GROUP BY id, vnr, bnr) as tmp);	
	
		

		
			SELECT titel, vnr, bnr 
			FROM Software NATURAL JOIN Build b
			WHERE (SELECT count(*)
			       FROM BugReport br
			       WHERE eingang >= TO_DATE('02-05-2014','DD-MM-YYYY')
			       AND br.id=b.id AND br.vnr=b.vnr AND br.bnr=b.bnr) >= all
			       (SELECT count(trnr) as anz
			        FROM BugReport
			        WHERE eingang > TO_DATE('02-05-2014','DD-MM-YYYY')
			        GROUP BY id, vnr, bnr);	
	
		

		
			SELECT titel, b.vnr, b.bnr 
			FROM (Build NATURAL JOIN Software) b LEFT OUTER JOIN BugReport br
			      ON (b.id=br.id AND b.vnr=br.vnr AND b.bnr=br.bnr AND eingang >= TO_DATE('02-05-2014','DD-MM-YYYY'))
			GROUP BY b.id, titel, b.vnr, b.bnr
			HAVING count(trnr) >= all (SELECT count(trnr)
			                           FROM Build NATURAL JOIN BugReport
			                           WHERE eingang >= TO_DATE('02-05-2014','DD-MM-YYYY')
			                           GROUP BY id, vnr, bnr);	
	
		

		
			SELECT titel, b.vnr, b.bnr 
			FROM (Build NATURAL JOIN Software) b LEFT OUTER JOIN BugReport br 
			      ON (b.id=br.id AND b.vnr=br.vnr AND b.bnr=br.bnr)
			WHERE eingang >= TO_DATE('02-05-2014','DD-MM-YYYY')
			GROUP BY b.id, titel, b.vnr, b.bnr
			HAVING count(trnr) = (SELECT max(anz)
			                      FROM (SELECT count(trnr) as anz
			                            FROM Build NATURAL JOIN BugReport
			                            WHERE eingang > TO_DATE('02-05-2014','DD-MM-YYYY')
			                            GROUP BY id, vnr, bnr) as tmp);	
	
		


4.3)

Geben Sie jene Versionen (ID der Software und Versionssnummer) aus, von denen mindestens ein Drittel aller Bug-Reports bereits behoben ist. (Beachten Sie, dass dies auch alle Versionen beinhaltet, zu denen es keine Bug-Reports gibt.)

		
			SELECT id, vnr
			FROM Version
			WHERE (id,vnr) NOT IN (SELECT id,vnr FROM BugReport)
			UNION
			SELECT id, vnr
			FROM Build b NATURAL JOIN BugReport
			GROUP BY id, vnr
			HAVING count(trnr)/3.0 <= (SELECT count(trnr) FROM
			        BugReport b1 NATURAL JOIN BehobenerBug
			        where b.id = b1.id AND b.vnr=b1.vnr);	
	
		

		
			SELECT id, vnr
			FROM Version
			WHERE (id,vnr) NOT IN (SELECT id,vnr FROM BugReport)
			UNION
			SELECT id, vnr
			FROM Version v NATURAL JOIN BugReport
			GROUP BY id, vnr
			HAVING count(trnr)/3.0 <= (SELECT count(trnr) FROM
			        BugReport b1 NATURAL JOIN BehobenerBug
			        WHERE v.id = b1.id AND v.vnr=b1.vnr);	
	
		

		
			SELECT id, vnr
			                        FROM Version
			                        WHERE (id,vnr) NOT IN (SELECT id,vnr FROM BugReport)
			                        UNION
			                        SELECT id, vnr
			                        FROM Build b NATURAL JOIN BugReport
			                        GROUP BY id, vnr
			                        HAVING count(trnr)*(1.0/3.0) <= (SELECT count(trnr) FROM
			                                BugReport b1 NATURAL JOIN BehobenerBug
			                                where b.id = b1.id AND b.vnr=b1.vnr);	
	
		

		
			SELECT DISTINCT v.id, v.vnr
			                        FROM Version v LEFT OUTER JOIN (Build NATURAL JOIN BugReport) bbr ON v.id=bbr.id AND v.vnr=bbr.vnr
			                        WHERE bbr.bnr IS NULL OR
			                        (SELECT count(*) FROM BehobenerBug NATURAL JOIN BugReport NATURAL JOIN Build b WHERE b.id=v.id AND b.vnr=v.vnr) >=
			                        (SELECT count(*) FROM BugReport NATURAL JOIN Build b WHERE b.id=v.id AND b.vnr=v.vnr)/3.0;	
	
		

		
			SELECT DISTINCT v.id, v.vnr
			                        FROM Version v LEFT OUTER JOIN (Build NATURAL JOIN BugReport) bbr ON v.id=bbr.id AND v.vnr=bbr.vnr
			                        WHERE bbr.bnr IS NULL OR
			                        (SELECT count(*) FROM BehobenerBug NATURAL JOIN BugReport NATURAL JOIN Build b WHERE b.id=v.id AND b.vnr=v.vnr) >=
			                        (SELECT count(*) FROM BugReport NATURAL JOIN Build b WHERE b.id=v.id AND b.vnr=v.vnr)*(1.0/3.0);	
	
		

		
			SELECT DISTINCT v.id, v.vnr
			FROM Version v LEFT OUTER JOIN BugReport bbr ON v.id=bbr.id AND v.vnr=bbr.vnr
			WHERE bbr.bnr IS NULL OR
			                        (SELECT count(*) FROM BehobenerBug NATURAL JOIN BugReport NATURAL JOIN Version b WHERE b.id=v.id AND b.vnr=v.vnr) >=
			                        (SELECT count(*) FROM BugReport NATURAL JOIN Version b WHERE b.id=v.id AND b.vnr=v.vnr)*(1.0/3.0);	
	
		

		
			SELECT DISTINCT v.id, v.vnr
			FROM Version v LEFT OUTER JOIN BugReport bbr ON v.id=bbr.id AND v.vnr=bbr.vnr
			WHERE bbr.bnr IS NULL OR
			                        (SELECT count(*) FROM BehobenerBug NATURAL JOIN BugReport NATURAL JOIN Version b WHERE b.id=v.id AND b.vnr=v.vnr) >=
			                        (SELECT count(*) FROM BugReport NATURAL JOIN Version b WHERE b.id=v.id AND b.vnr=v.vnr)/3.0;	
	
		

		
			SELECT DISTINCT v.id, v.vnr
			FROM Version v LEFT OUTER JOIN BugReport bbr ON v.id=bbr.id AND v.vnr=bbr.vnr
			WHERE bbr.bnr IS NULL OR
			(SELECT count(*) FROM BehobenerBug NATURAL JOIN BugReport b WHERE b.id=v.id AND b.vnr=v.vnr) >=
			(SELECT count(*) FROM BugReport b WHERE b.id=v.id AND b.vnr=v.vnr)/3.0;	
	
		


5.1)

Geben Sie zu jenen Qualitätsmanagern (pnr, nname, raum) die am meisten Bug-Reports bestätigt haben die Beschreibung der von ihnen bestätigten Bug-Reports aus.

		
			SELECT pnr, nname, raum, beschreibung
			FROM Person NATURAL JOIN Bug NATURAL JOIN BugReport
			WHERE svnr in (
			        SELECT svnr
			        FROM Bug
			        GROUP BY svnr
			        HAVING count(trnr) >= all (SELECT count(trnr)
			                                                           FROM Bug
			                                                           GROUP BY svnr)
			        );	
	
		

		
			SELECT pnr, nname, raum, beschreibung
			                        FROM Person NATURAL JOIN Bug NATURAL JOIN BugReport
			                        WHERE svnr in (
			                                SELECT svnr
			                                FROM Bug
			                                GROUP BY svnr
			                                HAVING count(trnr) = (SELECT max(anz)
			                                                                          FROM (SELECT count(trnr) as anz
			                                                                                    FROM Bug
			                                                                                    GROUP BY svnr) AS tmp)
			                                );	
	
		


5.2)

Geben Sie für alle Bug-Reports (TRNR) ihre Beschreibung aus, sowie den Namen des Qualitätsmanagers der den Bug bestätigt hat. Falls ein Bug-Report noch nicht bestätigt wurde soll statt dem Qualitätsmanager die Zeichenkette "noch nicht bestaetigt" ausgegeben werden. Bei behobenen Bugs soll zusätzlich noch der Kommentar und, falls sie auch schon geprüft wurden, die Bewertung angezeigt werden.Wurde ein Bug-Report noch nicht geprüft soll "noch nicht geprueft" angezeigt werden. Bei noch nicht behobenen Bugs soll an Stelle des Kommentars "offen" ausgegeben werden (und "noch nicht geprueft" an Stelle der Bewertung).

		
			SELECT br.trnr, br.beschreibung, 
			 coalesce(qm.nname,'noch nicht bestaetigt') as Manager,
			 coalesce(bbr.kommentar,'offen') as Kommentar,
			 coalesce(g.bewertung,'noch nicht geprueft') as Bewertung
			FROM BugReport br LEFT OUTER JOIN Bug b ON
			        (br.trnr=b.trnr)
			 LEFT OUTER JOIN Person AS qm ON (b.svnr=qm.svnr)
			LEFT OUTER JOIN BehobenerBug bbr ON (br.trnr=bbr.trnr)
			LEFT OUTER JOIN geprueft g ON (br.trnr=g.trnr);	
	
		


5.3)

Geben Sie eine Liste ALLER Builds aus (Titel der Software, Versionsnummer, Buildnummer) aus mit der Beschreibung der Bug-Reports die seit dem 1.5.2015 eingegangen sind. Falls es für einen Build keinen Bug-Report in dieser Zeitspanne gibt soll "kein aktueller Bug-Report" ausgegeben werden.

		
			SELECT s.titel, b.vnr, b.bnr, 
			        COALESCE(br.beschreibung,'kein aktueller Bug-Report')
			FROM Software s NATURAL JOIN Build b LEFT OUTER JOIN BugReport br
			        ON (b.id = br.id AND b.vnr=br.vnr AND b.bnr=br.bnr AND br.eingang>TO_DATE('01-05-2015','DD-MM-YYYY'));	
	
		


6.1)

Geben Sie zu all jenen Software-Entwicklern die alle (gespeicherten) Programmiersprachen beherrschen den Nachnamen, den aktuellen Raum sowie für jede Programmiersprache den Level des Entwicklers aus.

		
			SELECT nname, raum, name, level
			FROM Person p NATURAL JOIN beherrscht
			WHERE (SELECT count(b.name)
			       FROM beherrscht b
			       WHERE b.svnr=p.svnr)=(SELECT count(name) FROM Programmiersprache);	
	
		

		
			SELECT nname, raum, name, level
			                        FROM (SELECT svnr, nname, raum
			                              FROM Person NATURAL JOIN beherrscht b
			                              GROUP BY svnr, nname, raum
			                              HAVING count(DISTINCT b.name) = (SELECT count(name) FROM Programmiersprache)) as tmp NATURAL JOIN beherrscht;	
	
		

		
			SELECT p.nname, p.raum, name, level
			                        FROM Person p NATURAL JOIN beherrscht
			                        WHERE NOT EXISTS (
			                                SELECT name FROM Programmiersprache pr
			                                WHERE pr.name NOT IN (SELECT name FROM beherrscht b WHERE p.svnr=b.svnr)
			                        );	
	
		


6.2)

Geben Sie für all jene Software-Entwickler (PNR, Name) die alle (gespeicherten) Programmiersprachen beherrschen und schon mindestens 3 Bugs behoben habe die Anzahl der behobenen Bugs aus.

		
			SELECT pnr, nname, count(trnr)
			FROM Person NATURAL JOIN BehobenerBug
			WHERE svnr IN (SELECT svnr FROM Person NATURAL JOIN beherrscht
			                           GROUP BY svnr
			                           HAVING count(name) = (SELECT count(name) FROM Programmiersprache))
			GROUP BY pnr, nname
			HAVING count(DISTINCT trnr) >= 3;	
	
		


6.3)

Geben Sie all jene Software-Entwickler (Personalnummer und Name) aus, die alle im Paket 'BasicAI', Version '0.4' verwendeten Programmiersprachen beherrschen (d.h., alle Programmiersprachen zu denen ein entsprechendes Sourcecode File im Paket existiert).

		
			SELECT pnr, nname
			FROM Person p
			WHERE (SELECT count(DISTINCT b.name)
			           FROM beherrscht b JOIN Sourcecode s ON (s.prog_name=b.name)
			           WHERE s.name='BasicAI' and s.version=0.4 AND b.svnr=p.svnr)=
			          (SELECT count(DISTINCT prog_name)
			           FROM Sourcecode
			           WHERE name='BasicAI' AND version=0.4);	
	
		

		
			SELECT pnr, nname
			FROM Person p
			WHERE NOT EXISTS (SELECT *
			                  FROM Sourcecode
			                  WHERE name='BasicAI' AND version=0.4 AND
			                        prog_name NOT IN
			                       (SELECT name
			                        FROM beherrscht b
			                        WHERE b.svnr=p.svnr)
			);	
	
		


7)

Geben Sie eine Liste jener Builds (ID der Software, Versionsnummer, Buildnummer) aus, von denen alle bestätigten und vor dem 30.09.2013 eingegangenen Bug-Reports bereits behoben wurden. (Hinweis: Verwenden Sie die Funktion TO_DATE() und das Datumsformat '30-09-2013')

		
			SELECT id, vnr, bnr
			FROM Build b
			WHERE NOT EXISTS (
			        SELECT *
			        FROM BugReport br NATURAL JOIN Bug
			        WHERE br.id=b.id AND br.vnr=b.vnr AND br.bnr=b.bnr AND
			                eingang<TO_DATE('30-09-2013','DD-MM-YYYY') AND
			                trnr NOT IN (SELECT trnr FROM BehobenerBug)
			);	
	
		

		
			SELECT b.id, b.vnr, b.bnr
			FROM Build b LEFT OUTER JOIN (BugReport NATURAL JOIN Bug) bb ON
			                ( b.id=bb.id AND b.vnr=bb.vnr AND b.bnr=bb.bnr AND eingang<TO_DATE('30-09-2013','DD-MM-YYYY') )
			GROUP BY b.id, b.vnr, b.bnr
			HAVING COUNT(trnr) = (SELECT count(trnr)
			                      FROM BehobenerBug NATURAL JOIN BugReport br
			                      WHERE br.id=b.id AND br.vnr=b.vnr AND br.bnr=b.bnr AND br.eingang<TO_DATE('30-09-2013','DD-MM-YYYY'));	
	
		


8)

Geben Sie für JEDE Software (id, Titel) an, wie viele Versionen es von ihr gibt, und wie viele Paketen eine Version im Durchschnitt enthält.

		
			SELECT id, titel, 
			 (SELECT count(*) FROM Version v WHERE v.id=s.id) AS Versionen,
			 (SELECT count(*) FROM Version v NATURAL JOIN beinhaltet WHERE v.id=s.id)/
			 (SELECT count(*) FROM Version v WHERE v.id=s.id) AS "P/V"
			FROM Software s;	
	
		


9)

Geben Sie eine Liste aus die für ALLE Software-Entwickler und Qualitätsmanager (Name, Raum, PNR) die Anzahl der verschiedenen von ihnen seit dem 1.1.2015 bearbeiteten Bugs enthält. D.h. für Software-Entwickler soll die Anzahl der behobenen Bugs ausgegeben werden, während für Qualitätsmanger die Anzahl der Bugs ausgegeben werden soll, die sie bestätigt oder geprüft haben, wobei Bugs die von der selben Person bestätigt und geprüft wurden nur einmal gezählt werden soll (HINWEIS: Benützen Sie die Funktion TO_DATE() und das Datumsformat 'DD-MM-YYYY'). Geben Sie in einer weiteren Spalte an, ob es sich bei jeder Person um einen Software-Entwickler oder einen Qualitätsmanger handelt: Bei Softwareentwicklern soll 'SWE' und bei Qualitätsmangern 'QM' ausgegeben werden. Sie dürfen davon ausgehen, dass keine Person gleichzeitig Softwareentwickler und Qualitätsmanger ist.

		
			SELECT nname, raum, pnr, count(trnr) as Bugs, 'SWE' as Typ
			FROM (Person NATURAL JOIN SWEntwickler) p LEFT OUTER JOIN BehobenerBug b ON
			        (p.svnr=b.svnr AND b.datum>=TO_DATE('01-01-2015','DD-MM-YYYY'))
			GROUP BY p.svnr, nname, raum, pnr
			UNION
			(SELECT nname, raum, pnr, count(DISTINCT trnr) as Bugs, 'QM' as Typ
			FROM (Person NATURAL JOIN Qualitaetsmanager) p LEFT OUTER JOIN
			        (SELECT trnr, datum, svnr FROM Bug WHERE datum>=TO_DATE('01-01-2015','DD-MM-YYYY')
			         UNION
			         SELECT trnr, datum, svnr FROM geprueft WHERE datum>=TO_DATE('01-01-2015','DD-MM-YYYY')) b
			         ON b.svnr=p.svnr
			GROUP BY p.svnr, nname, raum, pnr);	
	
		

		
			SELECT nname, raum, pnr, (SELECT count(*) as Bug
			                          FROM BehobenerBug bb
			                          WHERE bb.svnr=p.svnr AND datum>=TO_DATE('01-01-2015','DD-MM-YYYY')),
			                        'SWE' as Typ
			FROM Person p NATURAL JOIN SWEntwickler
			UNION
			(SELECT nname, raum, pnr, (SELECT count(DISTINCT trnr)
			                           FROM (SELECT trnr FROM Bug b
			                           WHERE b.svnr=p.svnr AND
			                                 datum>=TO_DATE('01-01-2015','DD-MM-YYYY')
			                           UNION
			                           SELECT trnr FROM geprueft g WHERE g.svnr=p.svnr
			                                  AND datum>=TO_DATE('01-01-2015','DD-MM-YYYY')) as tmp) as Bug,
			                       'QM' as Typ
			FROM Person p NATURAL JOIN Qualitaetsmanager);	
	
		


10)

Geben Sie alle Softwareversionen (Titel und Typ der Software, Versionsnummer) aus, welche ein Paket enthalten von dem nicht alle Abhängigkeiten (also vom Paket benötigte Pakete) ebenfalls in der Software enthalten sind. Achten Sie wiederum darauf, dass es für jede betroffene Version genau einen Eintrag gibt.

		
			SELECT titel, typ, vnr
			FROM Version v NATURAL JOIN Software s
			WHERE EXISTS (SELECT * FROM beinhaltet b
			                                WHERE b.id=v.id AND b.vnr=v.vnr AND
			                                EXISTS (SELECT *
			                                                 FROM benoetigt ben
			                                                 WHERE ben.name=b.paketname AND
			                                                           ben.version=b.paketversion AND
			                                                           NOT EXISTS (
			                                                                   SELECT * FROM beinhaltet b2
			                                                                   WHERE b2.id=v.id AND b2.vnr=v.vnr
			                                                                   AND b2.paketname=ben.voraussetzung_name AND
			                                                                   b2.paketversion=ben.voraussetzung_version)))
			GROUP BY id, titel, typ, vnr;	
	
		

		
			SELECT titel, typ, vnr
			                        FROM (SELECT DISTINCT id, titel, typ, vnr
			                        FROM Version v NATURAL JOIN Software s NATURAL JOIN beinhaltet b
			                                                        WHERE
			                                                        EXISTS (SELECT *
			                                                                         FROM benoetigt ben
			                                                                         WHERE ben.name=b.paketname AND
			                                                                                   ben.version=b.paketversion AND
			                                                                                   NOT EXISTS (
			                                                                                           SELECT * FROM beinhaltet b2
			                                                                                           WHERE b2.id=v.id AND b2.vnr=v.vnr
			                                                                                           AND b2.paketname=ben.voraussetzung_name AND
			                                                                                           b2.paketversion=ben.voraussetzung_version))) as tmp;