Fragen zu SQL

Revan

Neuer Benutzer
Beiträge
2
Ich habe vor kurzem ein Studium angefangen und habe mir Übungsblätter aus höheren Semester schon besorgt, dazu gehört auch Datenbanksystem (SQL-Übung). Und bei mir sind halt ein paar Fragen aufgetreten und hoffe das sie mir jemand von euch vlt. beantworten könnte.


Aufgaben siehe Anhang/Bild
Code:
1a) SELECT  VName, NName
      FROM     Personal
      WHERE  ProjNr=2
1b) SELECT  VName
       FROM     Persoanl, Abteilung
        WHERE AbtNr=2

Wird Aufgabe 1 etwa so bearbeitet oder bin ich auf den falschen Dampfer? Und wie wird Aufgabe 2 und 3 gemacht? Könnte mir das jemand vlt. an diesen Aufgaben oder vlt. anderen anderen Beispielen erklären bitte? Vielen Dank im Vorraus!!!Datenbank Übung SQL.jpg Datenbank Übung SQL.jpg
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Ich habe vor kurzem ein Studium angefangen und habe mir Übungsblätter aus höheren Semester schon besorgt, dazu gehört auch Datenbanksystem (SQL-Übung).

Bei 1b hast Du etwas, was Du sehr sicher schon mal nicht willst: einen Cross Join.

Tipp: gewöhne Dir expliziete JOIN-Syntax an. Google sagt Dir alles wissenswerte dazu. Zu den anderen Aufgaben zeigst Du uns erst einmal Deine Ansätze.

Und noch ein Tipp: nehme PostgreSQL. Das hat eine saubere Syntax und auch verständlichere Fehlermeldungen als MySQL. Zum lernen und zum produktivem Arbeiten um einiges besser. MySQL verstößt an einigen Stellen gegen die SQL-Norm, realisiert vieles nicht, macht vieles sogar schlicht falsch.
 
Sorry für die späte Rückmeldung mein Internet ist gestern flöten gegangen. Vielen Dank für die schnelle Antwort akretschmer und habe jetzt noch schnell Join hinzugefügt, hoffe richtig. Leider habe ich 3 nicht hinbekommen, mein Kopf wollte nicht mehr und war verwirrt. Hoffe zu mindestens, dass ich die anderen Aufgaben soweit richtig gemacht habe und mich nicht blamiere (auch wenn es meine erste Erfahrung mit SQL ist xD).
Code:
1a) 
SELECT  VName, NName
FROM Personal
WHERE ProjNr=2

b)
SELECT VName
FROM Personal
JOIN Abteilung
WHERE AbtNr=1

c)
SELECT VName
FROM Personal
JOIN Akte
WHERE Position='Chef von Obelix'

d)
SELECT COUNT(Position)
FROM Personal
JOIN Akte
WHERE 'Untergebener von Donald'

e)
SELECT VName
FROM Personal
JOIN Akte
WHERE Position LIKE '%Berater'

2a)
SELECT SUM(Gehalt)
FROM Personal

2b)
SELECT Projnr,COUNT(*) As 'Anzahl'
FROM Personal
GROUP BY Projnr

2c)
SELECT Telefonnr, COUNT(Telefonnr) As 'Anzahl'
FROM Personal
GROUP BY Telefonnr
Having (Count(Telefonnr)>1)
 
Zuletzt bearbeitet von einem Moderator:
- Deine gesamten Joins sind falsch. Auch wenn der Ansatz garnicht verkehrt ist.
Warum sind Sie falsch? Ganz einfach:
Jede Join-Clause benötigt eine Bedingung anhand welcher gejoined werden soll (Jede Regel braucht eine Ausnahme: Der Cross Join bildet ein karthesisches Produkt beider gejointen Tabellen und benötigt daher keine On-Clause). Du musst der Datenbank ja irgendwie mitteilen welcher Datensatz von Tabelle A zu welchem Datensatz in Tabelle B gehört.
Das ganze nennt Sich On-Clause. Hier mal ein kleines Beispiel:
Code:
Aufgabe 1b)
Select Personal.VName
From   Personal

Inner   Join Abteilung
On Abteilung.PersNr = Personal.PersNr

Where Abteilung.AbtNr = 1
Hier teilst du der Datenbank mit das die PersonalNr (Der Primärschlüssel deiner Tabelle "Personal") immer gleich der PersonalNr der Tabelle "Abteilung" ist. Was ein "Inner Join" ist überlasse ich mal deinen Google-Fähigkeiten :)
 
Werbung:
Leider habe ich 3 nicht hinbekommen, mein Kopf wollte nicht mehr und war verwirrt.

Okay, als Hilfe: dazu brauchst Du eine weitere Tabelle, In dieser zählst Du Mitarbeiter und projekt auf.

Um das mal minimalst zu zeigen:

Code:
test=*# create table mitarbeiter(id int primary key);
CREATE TABLE
Time: 201,862 ms
test=*# create table projekt (id int primary key);
CREATE TABLE
Time: 2,509 ms
test=*# create table mitarbeiter_projekt(id_mitarbeiter int references mitarbeiter, id_projekt int references projekt, primary key(id_mitarbeiter, id_projekt));
CREATE TABLE
Time: 50,974 ms

Durch die FK-Constraints kannst Du hier nur Mitarbeiter bzw. Projekte hinterlegen, die auch existieren. Durch den PK sicherst Du, daß es keine doppelten Kombinationen von Mitarbeiter und Projekt gibt. (außerdem sollte jede Tabelle einen PK haben)
 
Zurück
Oben