Lösungen zu ausgewählten Aufgaben
CREATE TABLE systeme
(sys_name CHAR(15) NOT NULL,
version INTEGER NOT NULL,
hersteller CHAR(20),
ort CHAR(20));
SELECT *
FROM arbeiten;
SELECT *
FROM mitarbeiter;
SELECT m_nr
FROM arbeiten
SELECT m_nr
FROM arbeiten
WHERE pr_nr = 'p2' AND m_nr <
10000;
SELECT m_nr
FROM arbeiten
WHERE einst_dat NOT BETWEEN
'01-jan-1988' AND '31-dec-1988';
SELECT m_nr
FROM arbeiten
WHERE pr_nr =
'p1'
AND
(aufgabe='Projektleiter'
OR aufgabe='Gruppenleiter');
SELECT einst_dat
FROM arbeiten
WHERE
pr_nr='p2'
AND aufgabe IS NULL;
SELECT m_nr, m_name, m_vorname
FROM
mitarbeiter
WHERE (m_name LIKE 'M%'
OR m_name LIKE 'H%')
AND m_name LIKE '%er';
SELECT m_nr
FROM mitarbeiter
WHERE abt_nr =
(SELECT *
FROM abteilung
WHERE stadt = 'Stuttgart');
SELECT m_name, m_vorname
FROM mitarbeiter
WHERE m_nr =
(SELECT m_nr
FROM
arbeiten
WHERE
einst_dat ='01-apr-1989');
SELECT stadt
FROM
abteilung
GROUP BY stadt;
SELECT max(m_nr)
FROM mitarbeiter;
SELECT aufgabe
FROM arbeiten
GROUP BY
aufgabe
HAVING COUNT(*) > 2;
SELECT DISTINCT m_nr
FROM arbeiten
WHERE aufgabe
= 'Sachbearbeiter'
OR m_nr IN
(SELECT m_nr
FROM
mitarbeiter
WHERE abt_nr IN
(SELECT abt_nr
FROM abteilung
WHERE abt_nr = 'a3'));
Die innere SELECT-Anweisung darf eine einzige
Reihe
als Ergebnis liefern, falls
sie im Zusammenhang mit
einem Vergleichsoperator erscheint (in diesem Fall
"="). Das Gleichheitszeichen
muß durch den
IN-Operator
ersetzt werden.
SELECT *
FROM projekt,
arbeiten
WHERE
projekt.pr_nr=arbeiten.pr_nr;
SELECT
projekt.*,m_nr,aufgabe, einst_dat
FROM projekt,
arbeiten
WHERE
projekt.pr_nr=arbeiten.pr_nr;
SELECT *
FROM
projekt,arbeiten;
SELECT m_nr, aufgabe
FROM arbeiten,
projekt
WHERE
arbeiten.pr_nr = projekt.pr_nr
AND pr_name='Gemini';
SELECT m_name,m_vorname
FROM mitarbeiter,
abteilung
WHERE
mitarbeiter.abt_nr=abteilung.abt_nr
AND (abt_name='Beratung'
OR abt_name='Diagnose');
SELECT einst_dat
FROM arbeiten,
mitarbeiter
WHERE
arbeiten.m_nr=mitarbeiter.m_nr
AND aufgabe =
'Sachbearbeiter'
AND abt_nr = 'a2';
SELECT pr_name
FROM projekt
WHERE pr_nr =
(SELECT pr_nr
FROM arbeiten
WHERE
aufgabe='Sachbearbeiter'
GROUP BY pr_nr
HAVING COUNT(*) > 1);
SELECT m_name, m_vorname
FROM mitarbeiter,arbeiten,projekt
WHERE
mitarbeiter.m_nr=arbeiten.m_nr
AND arbeiten.pr_nr=projekt.pr_nr
AND pr_name = 'Merkur'
AND aufgabe = 'Gruppenleiter';
SELECT a.m_nr
FROM mitarbeiter a, mitarbeiter b
WHERE a.wohnort = b.wohnort
AND a.abt_nr = b.abt_nr
AND a.m_nr <> b.m_nr;
SELECT m_nr
FROM mitarbeiter,abteilung
WHERE
mitarbeiter.abt_nr=abteilung.abt_nr
AND abt_name =
'Freigabe';
SELECT m_nr
FROM mitarbeiter
WHERE abt_nr =
(SELECT abt_nr
FROM abteilung
WHERE
abt_name = 'Freigabe');
CREATE TABLE mit_a1_a2
(m_nr INTEGER NOT NULL,
m_name CHAR(20) NOT NULL,
m_vorname CHAR(20) NOT NULL);
INSERT INTO
mit_a1_a2(m_nr,m_name,m_vorname)
SELECT m_nr,m_name,m_vorname
FROM mitarbeiter
WHERE abt_nr IN ('a1','a2');
CREATE TABLE mit_1989
(m_nr INTEGER NOT NULL,
m_name CHAR(20) NOT
NULL,
m_vorname CHAR(20) NOT NULL);
INSERT INTO mit_1989(m_nr,m_name,m_vorname)
SELECT
mitarbeiter.m_nr,m_name,m_vorname
FROM mitarbeiter, arbeiten
WHERE
mitarbeiter.m_nr=arbeiten.m_nr
AND einst_dat BETWEEN '01-jan-1989'
AND '31-dec-1989';
UPDATE arbeiten
SET aufgabe =
'Sachbearbeiter'
WHERE aufgabe =
'Gruppenleiter'
AND pr_nr = 'p1';
UPDATE projekt
SET mittel =
NULL;
UPDATE arbeiten
SET aufgabe =
'Gruppenleiter'
WHERE m_nr = 28559;
DELETE FROM abteilung
WHERE stadt = 'Muenchen';
DELETE FROM mitarbeiter
WHERE m_nr IN
(SELECT m_nr
FROM arbeiten
WHERE pr_nr = 'p3');
DELETE FROM projekt
WHERE pr_nr = 'p3';
CREATE
VIEW v_mit_1988(nummer,name,vorname,abt)
AS SELECT
mitarbeiter.m_nr,m_name,m_vorname,abt_nr
FROM mitarbeiter, arbeiten
WHERE
mitarbeiter.m_nr=arbeiten.m_nr
AND einst_dat BETWEEN '01-jan-1988'
AND '31-dec-1988';
CREATE VIEW v_mit_a3
AS SELECT m_nr, m_name, m_vorname
FROM mitarbeiter
WHERE abt_nr = 'a3';
CREATE VIEW v_mit_p3
AS SELECT m_name,m_vorname
FROM mitarbeiter
WHERE
m_nr IN
(SELECT m_nr
FROM arbeiten
WHERE pr_nr='p3');
CREATE VIEW v_arb_pr
AS SELECT m_nr, aufgabe
FROM
arbeiten, projekt
WHERE
arbeiten.pr_nr=projekt.pr_nr
AND pr_name =
'Merkur';
CREATE VIEW v_mit_nr
AS SELECT m_nr, m_name, m_vorname
FROM
mitarbeiter
WHERE m_nr < 10000
WITH CHECK OPTION;
INSERT INTO v_mit_nr
VALUES (8888, 'Holl', 'Martina');
DELETE FROM v_mit_nr
WHERE m_nr = 28559;
a)
CREATE INDEX i_mit_mname
ON mitarbeiter(m_name);
b) CREATE INDEX i_mit_nam_vor
ON
mitarbeiter(m_name, m_vorname);
c) CREATE INDEX i_mit_mnr
ON mitarbeiter(m_nr);
CREATE INDEX i_arb_mnr
ON arbeiten(m_nr);
d) CREATE INDEX i_mit_abtnr
ON mitarbeiter(abt_nr);
CREATE INDEX i_abt_abtnr
ON abteilung(abt_nr);
CREATE INDEX i_abt_name
ON abteilung(abt_name);