# SQL- Hilfe



## Wirtschaftsinformatiker (29. Mai 2022)

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 ;


----------



## KonradN (29. Mai 2022)

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 (29. Mai 2022)

KonradN hat gesagt.:


> 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.
> 
> ...


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


----------



## LimDul (29. Mai 2022)

Wirtschaftsinformatiker hat gesagt.:


> 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 (29. Mai 2022)

LimDul hat gesagt.:


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






LimDul hat gesagt.:


> 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 (29. Mai 2022)

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 (29. Mai 2022)

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 (29. Mai 2022)

LimDul hat gesagt.:


> 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


----------



## Apple’s Jünger (13. Jun 2022)

Hast du eine DB für uns?



Wirtschaftsinformatiker hat gesagt.:


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


Macht nichts  Du musst es aber lernen. Die Frage ist, ob du da Lust zu hast. Wenn ja, dann würde ich hier deinen Ansatz posten und dann können wir gemeinsam diesen lösen.


----------

