Alle Beiträge und Antworten
Marek Opielka - 10.05.2005, 20:28
Firma
Hallo Leute,
leider war ich in der letzten Volesung nicht da und weiß nicht so genau was wir gemacht hatten. Falls es sich dabei um die Aufgaben mit der Firma handelt, hier ist ein Skript für die Aufgaben 1 bis 3:
Code:
CREATE TABLE Firma(
fid INT NOT NULL,
name VARCHAR(50),
adresse VARCHAR(50),
PRIMARY KEY(fid)
);
CREATE TABLE Abteilung(
aid INT NOT NULL,
name VARCHAR(50),
gebaede CHAR(1),
fid INT,
PRIMARY KEY(aid),
FOREIGN KEY(fid) REFERENCES Firma(fid)
);
CREATE TABLE Mitarbeiter(
mid INT NOT NULL,
name VARCHAR(50),
telefon VARCHAR(15),
aid INT,
PRIMARY KEY(mid),
FOREIGN KEY(aid) REFERENCES Abteilung(aid)
);
INSERT INTO Firma VALUES(1,'TechLog GmbH','Pirmasens');
INSERT INTO Abteilung VALUES(1,'Buchhaltung','G',1);
INSERT INTO Abteilung VALUES(2,'Fertigung','A',1);
INSERT INTO Abteilung VALUES(3,'Marketing','A',1);
INSERT INTO Mitarbeiter VALUES(1,'Maier','123',1);
INSERT INTO Mitarbeiter VALUES(2,'Schmidt','213',3);
INSERT INTO Mitarbeiter VALUES(3,'Maier','332',3);
INSERT INTO Mitarbeiter VALUES(4,'Kohl','123',1);
INSERT INTO Mitarbeiter VALUES(5,'Merkel','216',1);
INSERT INTO Mitarbeiter VALUES(6,'Jung','226',1);
INSERT INTO Mitarbeiter VALUES(7,'Sauer','345',3);
INSERT INTO Mitarbeiter VALUES(8,'Huber','426',2);
Marek Opielka - 11.05.2005, 08:18
Aufgabe 4
Formulieren Sie SQL-Statements für folgende Anfragen:
1. Welche Mitarbeiter arbeiten in der Buchhaltung? Geben Sie eine Liste mit den Namen und Telefonnummern aus.
Code:
SELECT Name,Telefon FROM Mitarbeiter WHERE aid=1
Marek Opielka - 11.05.2005, 08:23
Aufgabe 4
Formulieren Sie SQL-Statements für folgende Anfragen:
2. Zu welcher Abteilung gehört die Telefonnummer 332? Geben Sie den Namen der
Abteilung aus.
Code:
SELECT Abteilung.Name FROM Abteilung,Mitarbeiter WHERE Mitarbeiter.Telefon='332' AND Abteilung.aid = Mitarbeiter.aid
Marek Opielka - 11.05.2005, 08:42
Aufgabe 4
Formulieren Sie SQL-Statements für folgende Anfragen:
3. Welche Telefonnummern sind doppelt vergeben? Geben Sie eine entsprechende Liste aus.
Code:
SELECT DISTINCT m1.Telefon
FROM Mitarbeiter m1, Mitarbeiter m2
WHERE m1.telefon = m2.telefon
AND m1.mid <> m2.mid
Marek Opielka - 11.05.2005, 08:43
Aufgabe 4
Formulieren Sie SQL-Statements für folgende Anfragen:
4. Erzeugen Sie eine geordnete Liste, in die Abteilungen und die zugehörigen Mitarbeiter
aufgelistet sind.
Code:
SELECT abt.aid, abt.Name, mta.Name
FROM Abteilung abt, Mitarbeiter mta
WHERE abt.aid = mta.aid
Marek Opielka - 11.05.2005, 10:25
Aufgabe 5
Erweitern Sie nun Ihr ER- bzw. relationales Modell um folgenden Sachverhalt:
1. Jede Abteilung hat genau einen Abteilungsleiter, der natürlich auch ein Mitarbeiter ist.
Code:
CREATE TABLE Firma(
fid INT NOT NULL,
name VARCHAR(50),
adresse VARCHAR(50),
PRIMARY KEY(fid)
);
CREATE TABLE Abteilung(
aid INT NOT NULL,
name VARCHAR(50),
gebaede CHAR(1),
fid INT,
mid INT,
PRIMARY KEY(aid),
FOREIGN KEY(fid) REFERENCES Firma(fid)
);
CREATE TABLE Mitarbeiter(
mid INT NOT NULL,
name VARCHAR(50),
telefon VARCHAR(15),
aid INT,
PRIMARY KEY(mid),
FOREIGN KEY(aid) REFERENCES Abteilung(aid)
);
ALTER TABLE Abteilung ADD FOREIGN KEY(mid) REFERENCES Mitarbeiter(mid);
INSERT INTO Firma VALUES(1,'TechLog GmbH','Pirmasens');
INSERT INTO Abteilung VALUES(1,'Buchhaltung','G',1);
INSERT INTO Abteilung VALUES(2,'Fertigung','A',1);
INSERT INTO Abteilung VALUES(3,'Marketing','A',1);
INSERT INTO Mitarbeiter VALUES(1,'Maier','123',1);
INSERT INTO Mitarbeiter VALUES(2,'Schmidt','213',3);
INSERT INTO Mitarbeiter VALUES(3,'Maier','332',3);
INSERT INTO Mitarbeiter VALUES(4,'Kohl','123',1);
INSERT INTO Mitarbeiter VALUES(5,'Merkel','216',1);
INSERT INTO Mitarbeiter VALUES(6,'Jung','226',1);
INSERT INTO Mitarbeiter VALUES(7,'Sauer','345',3);
INSERT INTO Mitarbeiter VALUES(8,'Huber','426',2);
UPDATE Abteilung SET mid=1 WHERE aid=1;
UPDATE Abteilung SET mid=8 WHERE aid=2;
UPDATE Abteilung SET mid=2 WHERE aid=3;
Marek Opielka - 18.05.2005, 08:44
Aufgabe 6
Formulieren auf dem geänderten Modell SQL-Statements für folgende Anfragen:
1. Welche Mitarbeiter arbeiten in der Buchhaltung und im Marketing? Erzeugen Sie eine
Liste mit den Mitarbeiternamen.
Tabellenerzeugung
Das ist der Code aus der Aufgabe 5.2:
Aufgabe 5
Erweitern Sie nun Ihr ER- bzw. relationales Modell um folgenden Sachverhalt:
2. Ein Mitarbeiter kann auch zu mehreren Abteilungen gehören.
Code:
CREATE TABLE Firma(
fid INT NOT NULL,
name VARCHAR(50),
adresse VARCHAR(50),
PRIMARY KEY(fid)
);
CREATE TABLE Abteilung(
aid INT NOT NULL,
name VARCHAR(50),
gebaede CHAR(1),
fid INT,
mid INT,
PRIMARY KEY(aid),
FOREIGN KEY(fid) REFERENCES Firma(fid)
);
CREATE TABLE Mitarbeiter(
mid INT NOT NULL,
name VARCHAR(50),
telefon VARCHAR(15),
PRIMARY KEY(mid)
);
CREATE TABLE MitarbeiterAbteilung(
mid INT NOT NULL,
aid INT NOT NULL,
PRIMARY KEY(mid,aid),
FOREIGN KEY(aid) REFERENCES Abteilung(aid),
FOREIGN KEY(mid) REFERENCES Mitarbeiter(mid)
);
ALTER TABLE Abteilung ADD FOREIGN KEY(mid) REFERENCES Mitarbeiter(mid);
INSERT INTO Firma VALUES(1,'TechLog GmbH','Pirmasens');
INSERT INTO Abteilung VALUES(1,'Buchhaltung','G',1);
INSERT INTO Abteilung VALUES(2,'Fertigung','A',1);
INSERT INTO Abteilung VALUES(3,'Marketing','A',1);
INSERT INTO Mitarbeiter VALUES(1,'Maier','123');
INSERT INTO Mitarbeiter VALUES(2,'Schmidt','213');
INSERT INTO Mitarbeiter VALUES(3,'Maier','332');
INSERT INTO Mitarbeiter VALUES(4,'Kohl','123');
INSERT INTO Mitarbeiter VALUES(5,'Merkel','216');
INSERT INTO Mitarbeiter VALUES(6,'Jung','226');
INSERT INTO Mitarbeiter VALUES(7,'Sauer','345');
INSERT INTO Mitarbeiter VALUES(8,'Huber','426');
INSERT INTO MitarbeiterAbteilung VALUES(1,1);
INSERT INTO MitarbeiterAbteilung VALUES(1,3);
INSERT INTO MitarbeiterAbteilung VALUES(2,3);
INSERT INTO MitarbeiterAbteilung VALUES(3,3);
INSERT INTO MitarbeiterAbteilung VALUES(4,1);
INSERT INTO MitarbeiterAbteilung VALUES(5,1);
INSERT INTO MitarbeiterAbteilung VALUES(6,1);
INSERT INTO MitarbeiterAbteilung VALUES(6,3);
INSERT INTO MitarbeiterAbteilung VALUES(7,3);
INSERT INTO MitarbeiterAbteilung VALUES(8,2);
UPDATE Abteilung SET mid=1 WHERE aid=1;
UPDATE Abteilung SET mid=8 WHERE aid=2;
UPDATE Abteilung SET mid=2 WHERE aid=3;
----
Es handelt sich dabei um etwas kompliziertes Statement.
Man sollte sicher stellen, dass man ein paar Mitarbeiter in unterschiedlichen Abteilungen stehen hat, sonst bekommt man eine leere Tabelle als Ergebnis!
----
Code:
SELECT m.name
FROM Mitarbeiterabteilung ma1, Mitarbeiterabteilung ma2, Mitarbeiter m, Abteilung a1, Abteilung a2
WHERE ma1.mid=m.mid AND ma1.aid=a1.aid AND ma2.mid= m.mid AND ma2.aid=a2.aid
AND a1.name = 'Buchhaltung' AND a2.name = 'Marketing'
Marek Opielka - 18.05.2005, 09:20
Aufgabe 6
Formulieren auf dem geänderten Modell SQL-Statements für folgende Anfragen:
2. Geben Sie eine Liste aus, in der zu jeder Abteilung der Abteilungsleiter angegeben ist.
Also eine Tabelle mit zwei Spalten: Abteilungsname und Name des Abteilungsleiters.
Code:
SELECT a.name, m.name
FROM Abteilung a, Mitarbeiter m
WHERE m.mid=a.mid
Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken