Du bist nicht angemeldet.


Lieber Besucher, herzlich willkommen bei: Schwarzes Halle. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

1

Donnerstag, 12. Mai 2011, 13:01

SQL Abfragen -.-

so, sitz nun schon seit ner ganzen Weile über den den Aufgaben und komme einfach nicht voran

Vielleicht kennt sich jemand mit SQL aus und kann mir helfen

KOMPONIST (KNR, NAME, VORNAME , GEBOREN , GESTORBEN )
STUECK (SNR, KNR ! KOMPONIST , TITEL, TONART , OPUS )
CD (CDNR, NAME, HERSTELLER , ANZ CDS , GESAMTSPIELZEIT )
AUFNAHME (CDNR ! CD, SNR ! STUECK, ORCHESTER , LEITUNG )
SOLIST ((CDNR, SNR)! AUFNAHME, NAME, INSTRUMENT)

Die Bezeichnung  bedeutet, dass Bezeichnung NULL sein kann.

1. Welche CDs (Nummer, Name) enthalten Stucke von mindestens zwei verschiedenen Komponisten?
2. Wer ist der historisch fruheste Komponist in der Datenbank, d.h. der Komponist mit dem minimalen
Geburtsjahr? Geben Sie Vorname, Name und Geburtsjahr aus.
3. Kommt es vor, dass fur eine Aufnahme ein Orchester eingetragen ist, aber kein Dirigent? Geben Sie alle
diese Orchester aus.
4. In der Datenbank sind 4 Komponisten enthalten, von denen kein Stuck in der Datenbank gespeichert
ist. Schreiben Sie eine Anfrage, die alle Komponisten ausgibt, von denen kein Stuck existiert.
Zusatzaufgabe:
Welche CDs enthalten nur ein einziges Stuck? Geben Sie die Namen dieser CDs aus.
______________________________

Das Papier vor mir, weiß und leer und drängt es mich noch so sehr. Ich schreib nur leere Worte nieder, nichts gibt mein Empfinden wieder *allesdoof*

2

Donnerstag, 12. Mai 2011, 19:38

Also an mein Datenbanksemester mit Oracle möchte ich mich nur ungern erinnern.

In was für einen Dialekt sollen die Statements sein?
Gibt es auch noch die Datentypen?

Edith sieht, dass die Beziehungen durch das Ausrufezeichen markiert wird.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Malkavian« (12. Mai 2011, 19:48)


3

Freitag, 13. Mai 2011, 07:47

In PHP würd ich es ungefähr so machen. Kann je nach Dialekt variieren.
Ungetestet und schnell zusammengeschrieben. Mit einer angehängten Beispieldatenbank könnte man es testen

1. select CDNR, NAME, (select count(SNR) from STUECK left join AUFNAHME (USING SNR) group by KOMPONIST) as ANZAHL from CD where ANZAHL >1 (sollte auch mit UNION funktionieren)

2. select NAME, VORNAME, GEBOREN from KOMPONIST order by GEBOREN asc

3. select Orchester from AUFNAHME where LEITUNG is null

4. select NAME, VORNAME from KOMPONIST k left join STUECK s (using KNR) where ISNULL(s.KNR)

Zusatz: select count(SNR) as ANZAHL from AUFNAHME where ANZAHL = 1 group by CDNR
______________________________

I know that I will never be politically correct.
And I don't give a damn about my lack of ettiquette.

4

Freitag, 13. Mai 2011, 13:49

Achso, vergessen zu sagen ist für Oracle.... da funzen Token wie 'Anzahl' nicht -.-
______________________________

Das Papier vor mir, weiß und leer und drängt es mich noch so sehr. Ich schreib nur leere Worte nieder, nichts gibt mein Empfinden wieder *allesdoof*

5

Freitag, 13. Mai 2011, 14:14

Naja, der "Lerneffekt" ist ja gleich Null, wenn Du nur das Ergebnis hast. Fehlt es an der Herangehensweise?

6

Freitag, 13. Mai 2011, 14:34

Lösung 2-4 hab ich ja... ging gestern noch. nur bei ersten passt es irgendwie nicht. find da nicht die Lösung

hab
SELECT cd.cdnr, cd.name
FROM komponist, cd, stueck, aufnahme
WHERE aufnahme.snr=stueck.snr and
stueck.knr=komponist.knr and
not exists (SELECT *
FROM stueck
WHERE aufnahme.snr=stueck.snr and (stueck.knr is not null))

Also den Verbund über mehrere Zellen, nur bei der 2. Selectklausel happerts
______________________________

Das Papier vor mir, weiß und leer und drängt es mich noch so sehr. Ich schreib nur leere Worte nieder, nichts gibt mein Empfinden wieder *allesdoof*

7

Freitag, 13. Mai 2011, 15:03

War es nicht so, das die 2 SELECTs unabhängig von einander laufen und somit das 2. SELECT den Wert für aufnahme.snr aus dem 1. SELECT gar nicht kennen kann. Dafür musst du die Tabellen mit JOIN verknüpfen.

Wie gesagt - eine Demotabelle würde helfen.
______________________________

I know that I will never be politically correct.
And I don't give a damn about my lack of ettiquette.

8

Freitag, 13. Mai 2011, 15:14

Hm, ich bin mir nicht sicher, aber vielleicht könnte man hier mit GROUP BY und HAVING COUNT() arbeiten.

9

Freitag, 13. Mai 2011, 15:30

geht auch nur so - entspricht ja bis auf's having meinem ersten Vorschlag

wenn die Aufgabe ist eine Anzahl zu finden, muss es ja auch irgendwo gezählt werden.

PS:

abgesehen davon, könntest du, wenn ich mir die Google-Treffer mal so anschaue, auch mal bei höheren Semestern anfragen. Dein Prof scheint diese Aufgabe seit 2006 jedes Semester einzusetzen.

http://www.google.com/search?hl=de&q=KOM…R+AUFNAHME+CDNR
______________________________

I know that I will never be politically correct.
And I don't give a damn about my lack of ettiquette.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »HotShot« (15. Mai 2011, 02:58)


10

Sonntag, 15. Mai 2011, 14:48

Hier bestätigt sich mal wieder das Vorurteil, Informatiker sind faule Menschen.

Übrigens hat der Prof. damals 2002 an der Uni Giessen auch die gleichen Aufgaben verwendet.

11

Sonntag, 15. Mai 2011, 18:59

Hab ich auch gelesen, aber der Prof. Brass ist auch sozusagen mein Mentor im dem Modul. Wir haben die selben Skripte und Aufgaben -.-

Hab die Aufgabe dann mitn Inner Join, GRoup by und ner Having gelöst... gab volle Punkte ^^

Danke nochmal, auf Having wäre ich nie gekommen
______________________________

Das Papier vor mir, weiß und leer und drängt es mich noch so sehr. Ich schreib nur leere Worte nieder, nichts gibt mein Empfinden wieder *allesdoof*

12

Montag, 16. Mai 2011, 19:41

Wir hatten damals gelernt, dass man für den Zugriff auf aggregierte Daten (GROUP BY) mit HAVING arbeiten muss. Nur später in der Praxis hat man dann eher selten Oracle am Start und dann wird "gebastelt".

13

Dienstag, 17. Mai 2011, 21:53

HAVING nimmst du, wenn du die gruppierte Datenmenge filtern willst. WHERE filtert vor der Gruppierung. Ich selber baue ungerne riesige Joins. Die sind langsam und unübersichtlich. Grade bei Oracle kann man das alles per Stored Procedure und Temporary Table schön mit flachen Abfragen machen. Das ist auf jeden Fall flinker und bei großen Datenmengen (so ab achtstelliger Anzahl von Datensätzen lohnt Oracle ja erst) kann man dann auch Materialized Views und son Krempel reinpappen. Mal ganz davon abgesehen, daß man bei Oracle Prozeduren ja aucch noch super debuggen kann.
______________________________

Warum sollte man Zeit mit unnützen Tätigkeiten vergeuden, wenn man sie doch einfach sinnlos verstreichen lassen kann ?

Ähnliche Themen