SQL- Hilfe

Wirtschaftsinformatiker

Bekanntes Mitglied
Habe ich die Aufgabe richtig gelöst?

Drop TABLE Hält;
Drop TABLE Prof;
Drop TABLE Student;
Drop TABLE FACH;

CREATE TABLE FACH(
ID int primary KEY,
Name varchar(50));

CREATE TABLE Student(
ID1 int primary KEY,
ID int ,
Note int);


CREATE TABLE Prof(
ID2 int primary KEY,
Name1 varchar(50));

CREATE TABLE Hält(
ID2 int NOT NULL,
ID int NOT NULL,
Primary key (ID2,ID));

INSERT INTO Fach
VALUES (1,'Logistik');
INSERT INTO Fach
VALUES (2,'DatenBank');
INSERT INTO Fach
VALUES (4,'PM2');
INSERT INTO Fach
VALUES (3,'QM');

Select * FROM fach;

INSERT INTO Student
VALUES (1,1,2);
INSERT INTO Student
VALUES (3,1,1);
INSERT INTO Student
VALUES (2,2,3);
INSERT INTO Student
VALUES (4,2);
INSERT INTO Student
VALUES (5,2,1);
INSERT INTO Student
VALUES (6,3,2);
INSERT INTO Student
VALUES (7,2,2);
INSERT INTO Student
VALUES (8,2,4);
INSERT INTO Student
VALUES (9,2,5);


Select * FROM Student;

Select * FROM Student ORDER BY Note DESC;

Select ID1 FROM Student WHERE ID=2;

Select count(ID1) FROM Student WHERE ID=2;

Select AVG (note) FROM Student GROUP BY ID1;

Select AVG (note) AS Durchschnitt_Alle_Noten FROM Student WHERE ID=2;

INSERT INTO Prof
VALUES (1,'SCHMIDT');
INSERT INTO Prof
VALUES (2,'Makki');
Select * From Student,Fach,Prof,HÄLT WHERE Fach.ID=Student.ID AND Hält.ID2=Prof.ID2 AND Fach.ID=Hält.ID and ID2=SCHMIDT;////Wieder kommen

Select Name From Fach,Student WHERE Fach.ID=Student.ID GROUP BY Name HAVING count(note)>3 ;


Screenshot_20220529-145536_Adobe Acrobat.jpg
 

KonradN

Super-Moderator
Mitarbeiter
Also generell solltest Du immer sauber arbeiten:
Eine Tabelle kann ein Feld ID haben und das sollte dann immer die ID von dem Element in dieser Tabelle sein. Aber das ist dann ID und nicht ID2 oder so!
Wenn eine ID nicht die ID des Elements in der Tabelle ist, dann sollte der Name sagen, wessen ID es ist. Also sowas wie Fach_ID, Professor_ID und so.

Dann sieht man auch direkt an Abfragen, ob etwas Sinn macht oder nicht. Das macht so keinen Sinn:
Fach.ID=Student.ID

Warum sollte es eine Rolle spielen, dass hier die ID vom Fach gleich der ID vom Studenten ist?

Das hier sieht falsch aus - ist aber richtig: Hält.ID2=Prof.ID2 AND Fach.ID=Hält.ID
Das ist halt richtig, weil es falsch aussieht, weil Du eben keine sauberen Namen hast. Das wäre eigentlich ein:
Hält.Prof_ID=Prof.ID AND Fach.ID=Hält.Fach_ID
==> Hier erkennt man: Ja, es macht sinn, dass die ID vom Fach der einen Tabelle gleich der ID vom Fach der anderen Tabelle ist.
 

Wirtschaftsinformatiker

Bekanntes Mitglied
Also generell solltest Du immer sauber arbeiten:
Eine Tabelle kann ein Feld ID haben und das sollte dann immer die ID von dem Element in dieser Tabelle sein. Aber das ist dann ID und nicht ID2 oder so!
Wenn eine ID nicht die ID des Elements in der Tabelle ist, dann sollte der Name sagen, wessen ID es ist. Also sowas wie Fach_ID, Professor_ID und so.

Dann sieht man auch direkt an Abfragen, ob etwas Sinn macht oder nicht. Das macht so keinen Sinn:
Fach.ID=Student.ID

Warum sollte es eine Rolle spielen, dass hier die ID vom Fach gleich der ID vom Studenten ist?

Das hier sieht falsch aus - ist aber richtig: Hält.ID2=Prof.ID2 AND Fach.ID=Hält.ID
Das ist halt richtig, weil es falsch aussieht, weil Du eben keine sauberen Namen hast. Das wäre eigentlich ein:
Hält.Prof_ID=Prof.ID AND Fach.ID=Hält.Fach_ID
==> Hier erkennt man: Ja, es macht sinn, dass die ID vom Fach der einen Tabelle gleich der ID vom Fach der anderen Tabelle ist.
Danke, ich werde sie nochmal bearbeiten. Sind der Rest richtig?
 

LimDul

Top Contributor
Danke, ich werde sie nochmal bearbeiten. Sind der Rest richtig?
Nein.

Tipp: Lies mal die Aufgabe Satz für Satz. Und dann hinterfrage, warum du Create Table Statements geschrieben hast.

Du hast Aufgaben a bis j - was von deiner Liste gehört wozu? Wozu hast du Insert Statements geschrieben? Wo sind die in der Aufgabe gefragt.

Löse eine Aufgabe nach der anderen - so dass man erkennt, welches Statement zu welcher Aufgabe gehört.
 

Wirtschaftsinformatiker

Bekanntes Mitglied
Nein.

Tipp: Lies mal die Aufgabe Satz für Satz. Und dann hinterfrage, warum du Create Table Statements geschrieben hast.

Du hast Aufgaben a bis j - was von deiner Liste gehört wozu? Wozu hast du Insert Statements geschrieben? Wo sind die in der Aufgabe gefragt.

Löse eine Aufgabe nach der anderen - so dass man erkennt, welches Statement zu welcher Aufgabe


Select * FROM fach;

Select * FROM Student;

Select * FROM Student ORDER BY Note DESC;

Select ID1 FROM Student WHERE ID=2;

Select count(ID1) FROM Student WHERE ID=2;

Select AVG (note) FROM Student GROUP BY ID1;

Select AVG (note) AS Durchschnitt_Alle_Noten FROM Student WHERE ID=2;

Select * From Student,Fach,Prof,HÄLT WHERE Fach.ID=Student.ID AND Hält.ID2=Prof.ID2 AND Fach.ID=Hält.ID and ID2=SCHMIDT;////Wieder kommen

Select Name From Fach,Student WHERE Fach.ID=Student.ID GROUP BY Name HAVING count(note)>3 ;
 

LimDul

Top Contributor
Was davon gehört zu welcher Aufgabe? z.B. wozu soll das hier gehören
Select * FROM Student;

Das A und O bei solchen Aufgaben ist die sorgfältig zu bearbeiten. Was ich dir ernsthaft empfehlen würde, schreib die Aufgabenstellung pro Aufgabe a bis j ab und das Statement dann darunter. Und dann schau nach ob du alles aus der Aufgabe in deinem Statement wiederfindest.
 

Wirtschaftsinformatiker

Bekanntes Mitglied
a) SELECT * FROM ZUKUNFT.FACH;

b) SELECT Note FROM ZUKUNFT.STUDENT;

c) SELECT DISTINCT Note FROM ZUKUNFT.STUDENT;

d) SELECT DESC Note FROM ZUKUNFT.STUDENT

e) SELECT ID FROM ZUKUNFT.STUDENT WHERE ZUKUNFT.STUDENT. FACH IN (SELECT FACH.ID FROM ZUKUNFT.FACH WHERE (ZUKUNFT.FACH.Bezeichnung = 'SE 1' ))

f) SELECT COUNT(ID) FROM ZUKUNFT.STUDENT WHERE ZUKUNFT.STUDENT. FACH IN (SELECT FACH.IDFROM ZUKUNFT.FACH WHERE (ZUKUNFT.FACH.Bezeichnung = 'SE 1' ));

g) SELECT ID,AVG(Note) FROM ZUKUNFT.STUDENT GROUP BY ID;

h) SELECT AVG(Note) As SE1DurchschnittsNote
FROM ZUKUNFT.STUDENT
WHERE ZUKUNFT.STUDENT. FACH IN (SELECT FACH.ID
FROM ZUKUNFT.FACH WHERE (ZUKUNFT.FACH.Bezeichnung = 'SE 1' ));

i)
j)

Ist jetzt richtig? i und j kann ich leider nicht.
 

Wirtschaftsinformatiker

Bekanntes Mitglied
Was davon gehört zu welcher Aufgabe? z.B. wozu soll das hier gehören


Das A und O bei solchen Aufgaben ist die sorgfältig zu bearbeiten. Was ich dir ernsthaft empfehlen würde, schreib die Aufgabenstellung pro Aufgabe a bis j ab und das Statement dann darunter. Und dann schau nach ob du alles aus der Aufgabe in deinem Statement wiederfindest.
a) SELECT * FROM ZUKUNFT.FACH;

b) SELECT Note FROM ZUKUNFT.STUDENT;

c) SELECT DISTINCT Note FROM ZUKUNFT.STUDENT;

d) SELECT DESC Note FROM ZUKUNFT.STUDENT

e) SELECT ID FROM ZUKUNFT.STUDENT WHERE ZUKUNFT.STUDENT. FACH IN (SELECT FACH.ID FROM ZUKUNFT.FACH WHERE (ZUKUNFT.FACH.Bezeichnung = 'SE 1' ))

f) SELECT COUNT(ID) FROM ZUKUNFT.STUDENT WHERE ZUKUNFT.STUDENT. FACH IN (SELECT FACH.IDFROM ZUKUNFT.FACH WHERE (ZUKUNFT.FACH.Bezeichnung = 'SE 1' ));

g) SELECT ID,AVG(Note) FROM ZUKUNFT.STUDENT GROUP BY ID;

h) SELECT AVG(Note) As SE1DurchschnittsNote
FROM ZUKUNFT.STUDENT
WHERE ZUKUNFT.STUDENT. FACH IN (SELECT FACH.ID
FROM ZUKUNFT.FACH WHERE (ZUKUNFT.FACH.Bezeichnung = 'SE 1' ));

i)
j)

Ist jetzt richtig? i und j kann ich leider nicht
 

Neue Themen


Oben