DB-Anweisungen unsicher

Status
Für weitere Antworten geschlossen.

skillwilde

Cadet 3rd Year
Registriert
Apr. 2012
Beiträge
59
Hey Leute,

ich bin mir recht unsicher was meine SQL-Anweisungen für meine Datenbank betrifft, ich hoffe ihr könnt mir da etwas helfen.

1) Welcher Anwender hat seine Email-Adresse nicht eingetragen?
2) Welche Termine finden am 24.3.2014 statt?
3) Wie viele Termine finden im März 2014 statt?
4) Wie viele Termine finden pro Monat statt?
5) Für welchen Monat wurden die meisten Termine eingetragen?
6) Welche Gruppe hat die meisten Mitglieder?
7) Zu jedem Anwender sind alle seine Termine aufzulisten. Wenn ein Anwender keinem
Termin zuzuordnen ist, dann soll er dennoch aufgelistet werden.
8) Zu welchem Termin ist noch kein Anwender eingeladen worden?
9) Welche Gruppe hat keine Mitglieder?
10) Welche Gruppe wurde noch zu keinem Termin eingeladen?
11) Geben Sie pro Gruppe die Anzahl der Termine pro Monat an. Wenn eine Gruppe keine
Termine hat, soll deren Anzahl mit Null angezeigt werden.
12) Welcher Anwender ist selbst direkt (und nicht über eine Gruppe) noch zu keinem Termin
eingeladen worden?
13) Geben Sie für jeden Anwender die Anzahl seiner Termine an, zu denen er direkt
eingeladen wurde. Ist ein Anwender noch zu keinem Termin eingeladen worden, so soll
dort eine Null (zero, 0) aufgelistet werden.
14) Welcher Anwender ist Mitglied in mehr als einer Gruppe?
15) Alle Termine eines Anwenders sind aufzulisten, egal ob er direkt zu diesem Termin
eingeladen wurde oder einer seiner Gruppen dazu eingeladen wurde. Dabei sollen
doppelte Terminauflistungen vermieden werden

1) SELECT a.anwender_name
FROM tbl_anwender AS a
WHERE a.email = ""
LIMIT 0 , 30

2) SELECT t.bezeichnung
FROM tbl_termin AS t
WHERE t.tag = '2014-03-24'
LIMIT 0 , 30

3) SELECT COUNT( t.bezeichnung )
FROM tbl_termin AS t
WHERE t.tag LIKE '2014-03-%'

4) SELECT COUNT( t.id_termin ) , MONTH( t.tag )
FROM tbl_termin AS t
GROUP BY MONTH( t.tag )
ORDER BY COUNT( t.tag ) DESC
LIMIT 0 , 30

5) SELECT COUNT( t.id_termin ) , MONTH( t.tag )
FROM tbl_termin AS t
GROUP BY MONTH( t.tag )
ORDER BY COUNT( t.tag ) DESC
LIMIT 1

6) SELECT COUNT( g.bezeichnung ) , g.bezeichnung
FROM tbl_gruppe AS g
ORDER BY COUNT( g.bezeichnung ) DESC
LIMIT 1

7) SELECT g.bezeichnung, COUNT( ag.anwender_id )
FROM tbl_anwender AS a, tbl_anwender_gruppe AS ag, tbl_gruppe AS g
WHERE a.id_anwender = ag.anwender_id
AND ag.gruppe_id = g.id_gruppe
GROUP BY ag.gruppe_id
ORDER BY COUNT( ag.anwender_Id ) DESC
LIMIT 1

8) SELECT id_anwender, anwender_id, anwender_name, termin_id, id_termin
FROM tbl_anwender
LEFT OUTER JOIN tbl_anwender_termin ON id_anwender = anwender_id
LEFT OUTER JOIN tbl_termin ON termin_id = id_termin
LIMIT 0 , 30

9) SELECT id_anwender, anwender_id, anwender_name, termin_id, id_termin
FROM tbl_anwender
LEFT OUTER JOIN tbl_anwender_termin ON id_anwender = anwender_id
LEFT OUTER JOIN tbl_termin ON termin_id = id_termin
WHERE termin_id IS NULL
LIMIT 0 , 30

10) SELECT *
FROM tbl_gruppe
LEFT OUTER JOIN tbl_anwender_gruppe ON id_gruppe = gruppe_id
LEFT OUTER JOIN tbl_anwender ON anwender_id = id_anwender
WHERE anwender_id IS NULL
LIMIT 0 , 30

11) SELECT *
FROM tbl_gruppe left outer join tbl_gruppe_termin
ON id_gruppe = gruppe_id
left outer join tbl_termin
ON termin_id = id_termin
WHERE termin_id is NULL

12) SELECT id_gruppe, month(tag)
FROM tbl_gruppe left outer join tbl_gruppe_termin
ON id_gruppe = gruppe_id
left outer join tbl_termin
ON termin_id = id_termin
GROUP BY id_gruppe

13) SELECT termin_id, anwender_name
FROM tbl_anwender left outer join tbl_anwender_termin
ON id_anwender = anwender_id
left outer join tbl_termin
ON termin_id = id_termin
WHERE termin_id is null

14) SELECT count(id_termin), id_anwender
FROM tbl_anwender left outer join tbl_anwender_termin
ON id_anwender = anwender_id
left outer join tbl_termin
ON termin_id = id_termin
GROUP BY id_anwender

15) SELECT anwender_name, COUNT( gruppe_id )
FROM tbl_anwender AS a, tbl_anwender_gruppe AS ag, tbl_gruppe AS g
WHERE id_anwender = anwender_id
AND gruppe_id = id_gruppe
GROUP BY id_anwender
having COUNT( gruppe_id ) >1
LIMIT 0 , 30

15) SELECT a.id_anwender, t.id_termin, anwender_name
FROM tbl_anwender as a, tbl_anwender_termin as at, tbl_termin as t, tbl_anwender_gruppe as ag, tbl_gruppe as g, tbl_gruppe_termin as gt
WHERE a.id_anwender = at.anwender_id
AND at.termin_id = t.id_termin
AND a.id_anwender = ag.anwender_id
AND ag.gruppe_id = g.id_gruppe
AND g.id_gruppe = gt.gruppe_id
AND gt.termin_id = t.id_termin
GROUP BY a.id_anwender
 
Ich bin mir ziemlich sicher dass kaum jemand Lust hat das FÜR DICH durchzuackern, wenn dann müsstest du deine Frage konkretisieren.

Mein Tipp: Bau dir einen Testvektor. Dazu einfach eine Datenbank anlegen mit einer überschaubaren Anzahl an Testdatensätzen. Für jedes Szenario erarbeitest du im Kopf schonmal die Lösung anhand deiner Testdatensätze und probierst dann deine SQL Anweisungen aus. Sind die Ergebnisse identisch passt doch alles.

Einfach zu machen mit SQLite
 
DaZpoon schrieb:
Ich bin mir ziemlich sicher dass kaum jemand Lust hat das FÜR DICH durchzuackern, wenn dann müsstest du deine Frage konkretisieren.

Mein Tipp: Bau dir einen Testvektor. Dazu einfach eine Datenbank anlegen mit einer überschaubaren Anzahl an Testdatensätzen. Für jedes Szenario erarbeitest du im Kopf schonmal die Lösung anhand deiner Testdatensätze und probierst dann deine SQL Anweisungen aus. Sind die Ergebnisse identisch passt doch alles.

Einfach zu machen mit SQLite


@skillwilde Ich muss DaZpoon eindeutig recht geben, das ist echt übertrieben.
 
Allein wenn man sich Fragen 11, 13 und 15 anschaut, wird wohl recht schnell deutlich, dass es sich um Hausaufgaben handelt ;)

11) Geben Sie pro Gruppe die Anzahl der Termine pro Monat an. Wenn eine Gruppe keine
Termine hat, soll deren Anzahl mit Null angezeigt werden.
...
13) Geben Sie für jeden Anwender die Anzahl seiner Termine an, zu denen er direkt
eingeladen wurde. Ist ein Anwender noch zu keinem Termin eingeladen worden, so soll
dort eine Null (zero, 0) aufgelistet werden.
...
15) Alle Termine eines Anwenders sind aufzulisten, egal ob er direkt zu diesem Termin
eingeladen wurde oder einer seiner Gruppen dazu eingeladen wurde. Dabei sollen
doppelte Terminauflistungen vermieden werden

Absehen davon: Du hast 'ne Datenbank und die Querys? Dann probier sie doch einfach aus ;-) Wenn der Datensatz zu groß ist, um ihn mal eben zu überblicken, leg dir 'nen neuen mit 10 Einträgen an.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben