[SQL] moeilijke opdracht

Pagina: 1
Acties:
  • 139 views sinds 30-01-2008
  • Reageer

  • Noedelsupke
  • Registratie: Maart 2001
  • Laatst online: 18-07-2023
ik weet niet of ik voldoende info kan geven om ze op te lossen maar ik hoop dat t lukt:

de vraag is: geef voor en achternaam van de acteurs die een rol hebben gespeeld in ALLE films van Oliver Stone....

met de nadruk op ALLE dus hij moet alleen die namen laten zien die in al de films van Stone spelen die zijn opgenomen in de database.......nu heb ik dit zelf al gemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
select vnaam, anaam
from acteur
where anr IN
(select anr 
from rol
where fnr IN
(select fnr 
from film
where rnr IN
(select rnr 
from regisseur
where vnaam='Oliver' AND anaam='Stone')));

dit is dus de oplossing voor als er geen nadruk op alle zou liggen............

hoe krijg ik het zo dat ie echt alleen maar dat pakt wat in ALLE films meedoet????

PIII 800@804 Mhz


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Huiswerkopdrachten zijn niet gewenst.

Who is John Galt?


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 17:10

Klippy

Still Game

Op maandag 17 december 2001 21:53 schreef justmental het volgende:
Huiswerkopdrachten zijn niet gewenst.
Boeie!
:P

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


Verwijderd

Er zijn wel meer dingen ongewenst, dus of niet reageren of oplossen, meneer de leraar!!

  • Noedelsupke
  • Registratie: Maart 2001
  • Laatst online: 18-07-2023
Op maandag 17 december 2001 21:53 schreef justmental het volgende:
Huiswerkopdrachten zijn niet gewenst.
wie zegt dat dit huiswerk is???

dit is een database van mijn films thuis waar ik een search aan wil koppelen...........nu moet ik dit probleem ff oplossen omdat ik wat van SQL wil leren :P

PIII 800@804 Mhz


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Met een Outer Join.
Ik weet niet welk RDBMS je gebruikt, maar je moet eens de documentatie van uw DBMS erop naslaan en zoeken hoe je een outer join moet schrijven. Dat is nl. verschillend per DBMS. In Oracle doe je dat bv met een (+); in Informix door het keyword OUTER te gebruiken enz...

https://fgheysels.github.io/


Verwijderd

Op maandag 17 december 2001 21:51 schreef
code:
1
2
3
4
5
6
7
8
9
10
11
12
select vnaam, anaam
from acteur
where anr IN
(select anr 
from rol
where fnr IN
(select fnr 
from film
where rnr IN
(select rnr 
from regisseur
where vnaam='Oliver' AND anaam='Stone')));
SELECT * FROM Acteur, rol, regiseur
WHERE acteur.anr = rol.anr AND acteur.fnr = regiseur.fnr
AND vnaam="Oliver" and anaam="Stone"

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Op maandag 17 december 2001 21:53 schreef justmental het volgende:
Huiswerkopdrachten zijn niet gewenst.
lees de faq :Z
http://gathering.tweakers.net/forum/list_message/8#8

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op maandag 17 december 2001 21:55 schreef kroot het volgende:
Er zijn wel meer dingen ongewenst, dus of niet reageren of oplossen, meneer de leraar!!
Bijdehante tante :P

Okee, komt ie:
Je moet de conditie omdraaien:
Noem de acteurs waarbij geen film bestaat van Oliver Stone waar de betreffende acteur niet in meedoet.

Who is John Galt?


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Op maandag 17 december 2001 21:58 schreef justmental het volgende:

[..]

Bijdehante tante :P

Okee, komt ie:
Je moet de conditie omdraaien:
Noem de acteurs waarbij geen film bestaat van Oliver Stone waar de betreffende acteur niet in meedoet.
Dat garandeert nog niet dat je query de juiste resultaten oplevert. En het zou dan nog eens veel te traag gaan ook.
Gewoon een outer join gebruiken.

https://fgheysels.github.io/


  • Noedelsupke
  • Registratie: Maart 2001
  • Laatst online: 18-07-2023
Op maandag 17 december 2001 21:57 schreef whoami het volgende:
Met een Outer Join.
Ik weet niet welk RDBMS je gebruikt, maar je moet eens de documentatie van uw DBMS erop naslaan en zoeken hoe je een outer join moet schrijven. Dat is nl. verschillend per DBMS. In Oracle doe je dat bv met een (+); in Informix door het keyword OUTER te gebruiken enz...
ik gebruik Oracle 7

PIII 800@804 Mhz


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Op maandag 17 december 2001 22:01 schreef ViperGTS het volgende:

[..]

ik gebruik Oracle 7
Ik heb je vraag nog eens herlezen, en een outer join zal je probleem toch niet oplossen. Had de vraag eerst verkeerd begrepen

Als je de acteurs wilt die in alle films van Stone hebben meegespeeld (dat is hetgeen ik er nu van maak ? ), zal je dat denk ik niet in 1 query kunnen oplossen.

https://fgheysels.github.io/


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op maandag 17 december 2001 22:09 schreef whoami het volgende:
Ik heb je vraag nog eens herlezen, en een outer join zal je probleem toch niet oplossen. Had de vraag eerst verkeerd begrepen

Als je de acteurs wilt die in alle films van Stone hebben meegespeeld (dat is hetgeen ik er nu van maak ? ), zal je dat denk ik niet in 1 query kunnen oplossen.
Leer van de meester:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
select a.vnaam, a.anaam
from acteur a
where not exists (select f.fnr
            from film f
            where f.rnr = (select r.rnr 
                       from regisseur r
                       where r.vnaam='Oliver' 
                       AND r.anaam='Stone')
            minus
            select r.fnr
            from rol r
            where r.anr = a.anr
             );

Who is John Galt?


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Op maandag 17 december 2001 22:10 schreef justmental het volgende:

[..]

Leer van de meester:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
select a.vnaam, a.anaam
from acteur a
where not exists (select f.fnr
            from film f
            where f.rnr = (select r.rnr 
                       from regisseur r
                       where r.vnaam='Oliver' 
                       AND r.anaam='Stone')
            minus
            select r.fnr
            from rol r
            where r.anr = a.anr
             );
Volgens mij krijg je hier niet alle acteurs die in alle films van Stone hebben meegespeeld.

https://fgheysels.github.io/


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op maandag 17 december 2001 22:13 schreef whoami het volgende:

[..]

Volgens mij krijg je hier niet alle acteurs die in alle films van Stone hebben meegespeeld.
Let op de laatste where.
Het is een gecorreleerde subquery.

O yee of little faith :+

Who is John Galt?


  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 19-08 23:13
tel alle films van olliver stone
tel alle films van een acteur waarin hij speelt in een film van olliver stone
doe dat voor alle acteurs ..

  • Badger
  • Registratie: November 2000
  • Laatst online: 01-09-2025
select a.vnaam, a.anaam
from acteur a, rol rl, film f, regisseur r
where a.anr=rl.anr and rl.fnr=f.fnr and f.rnr=r.rnr
and r.vnaam="Oliver" and r.anaam="Stone";

...dacht ik maar das eigenlijk hetzelfde als die met de subselects.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op maandag 17 december 2001 22:44 schreef Sir_Floppy het volgende:
select a.vnaam, a.anaam
from acteur a, rol rl, film f, regisseur r
where a.anr=rl.anr and rl.fnr=f.fnr and f.rnr=r.rnr
and r.vnaam="Oliver" and r.anaam="Stone";

...dacht ik maar das eigenlijk hetzelfde als die met de subselects.
Foei, natuurlijk niet :P

Deze geeft alle acteurs die in minimaal 1 film van Oliver Stone gespeeld hebben.
En dan ook nog eens dubbel of meer als ze in meerdere films van O.S. gespeeld hebben.

3 strafopdrachten SQL voor jou :P

Who is John Galt?


  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
Op maandag 17 december 2001 22:44 schreef Sir_Floppy het volgende:
select a.vnaam, a.anaam
from acteur a, rol rl, film f, regisseur r
where a.anr=rl.anr and rl.fnr=f.fnr and f.rnr=r.rnr
and r.vnaam="Oliver" and r.anaam="Stone";

...dacht ik maar das eigenlijk hetzelfde als die met de subselects.
Nee, dat is echt niet hetzelfde (nog niet eens bijna ;) )

De topicstarter vraagt naar een zogenaamde "FOR ALL"-constructie en dat is ongeveer het moeilijkste wat je in SQL kunt doen. Normaal gesproken los je dat op met een query met een dubbele NOT EXSISTS erin en dat is ongeveer hetzelfde als wat justmental poste.

He who knows only his own side of the case knows little of that.


  • Badger
  • Registratie: November 2000
  • Laatst online: 01-09-2025
in ALLE films
damn iets vergeten te lezen :) Ik las alle acteurs etc

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Je moet het denk ik als volgt formuleren, dan is het direct naar een query te vertalen:

Geef mij alle acteurs die een rol in een OS-film hebben gespeeld, waarvoor geldt dat er niet een OS-film is waar ze niet in hebben gespeeld.

Een bewijs dat programmeren meer is code kloppen. Kennis van logica is best handig.
Het is een zogenaamd bewijs uit het ongerijmde.

Dan wordt de query:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
select a.voornaam
    ,a.achternaam
from   acteur a
where  anr in
    (select r.anr
     from   rol r
         ,film f
         ,regiseur g
     where  r.fnr = f.fnr
     and    f.rnr = g.rnr
     and    g.vnaam='Oliver' AND g.anaam='Stone'
    )
and    not exists
    (select 1
     from   film f
         ,regiseur g
     where  f.rnr = g.rnr
     and    g.vnaam='Oliver' AND g.anaam='Stone'
     and    not exists
         (select 1
          from   rol r
          where  f.anr = a.anr
    )   )

There can only be one SQL-master.
De query van justmental geeft ook de acteurs zonder een film.

  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
Op dinsdag 18 december 2001 09:08 schreef Goodielover het volgende:
Je moet het denk ik als volgt formuleren, dan is het direct naar een query te vertalen:

Geef mij alle acteurs die een rol in een OS-film hebben gespeeld, waarvoor geldt dat er niet een OS-film is waar ze niet in hebben gespeeld.

Een bewijs dat programmeren meer is code kloppen. Kennis van logica is best handig.
Het is een zogenaamd bewijs uit het ongerijmde.

Dan wordt de query:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
select a.voornaam
    ,a.achternaam
from   acteur a
where  anr in
    (select r.anr
     from   rol r
         ,film f
         ,regiseur g
     where  r.fnr = f.fnr
     and    f.rnr = g.rnr
     and    g.vnaam='Oliver' AND g.anaam='Stone'
    )
and    not exists
    (select 1
     from   film f
         ,regiseur g
     where  f.rnr = g.rnr
     and    g.vnaam='Oliver' AND g.anaam='Stone'
     and    not exists
         (select 1
          from   rol r
          where  f.anr = a.anr
    )   )

There can only be one SQL-master.
De query van justmental geeft ook de acteurs zonder een film.
Indeed, een dubbele NOT EXISTS :) Dat die van justmental niet helemaal ok was had ik eerlijk gezegd zelf ook niet gezien.

He who knows only his own side of the case knows little of that.


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op dinsdag 18 december 2001 09:08 schreef Goodielover het volgende:
There can only be one SQL-master.
De query van justmental geeft ook de acteurs zonder een film.
Uche uche, heidenen ;)

Mijn query geeft alleen alle acteurs als er geen films van oliver stone zijn.
Of je dat wilt is een kwestie van smaak :P

Who is John Galt?


  • RickN
  • Registratie: December 2001
  • Laatst online: 14-06-2025
Op dinsdag 18 december 2001 09:51 schreef justmental het volgende:

[..]

Uche uche, heidenen ;)

Mijn query geeft alleen alle acteurs als er geen films van oliver stone zijn.
Of je dat wilt is een kwestie van smaak :P
Tja, eigenlijk heb je ook wel gelijk, Tom Cruise heeft in al mijn films gespeeld, namelijk in alle 0 films. Als je het met quantoren gaat opschrijven komt er hetzelfde uit:

Een acteur a voldoet als:

(FOR ALL f: f in Films van OS: a in f.acteurs)

Als er geen films van OS zijn is de range van deze expressie empty en dus is de bewering PER DEFINITIE waar.

He who knows only his own side of the case knows little of that.


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Joepie nog meer mensen die logica kennen!

De query van justmental doet ook precies wat íe moet doen.
Ik vroeg me wel af waarom je in de sub-query niet gewoon film en regiseur gejoind hebt? De query-optimiser was waarschijnlijk toch wel begonnen met de regiseur tabel en dan pas de film tabel.

Mijn query had de impliciete wens dat er wel een film van Oliver Stone moest zijn, in de extra (1e) exists zitten. Deze wens was niet formeel door ViperGTS genoemd, klopt.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op dinsdag 18 december 2001 11:38 schreef Goodielover het volgende:
De query van justmental doet ook precies wat íe moet doen.
Ik vroeg me wel af waarom je in de sub-query niet gewoon film en regiseur gejoind hebt? De query-optimiser was waarschijnlijk toch wel begonnen met de regiseur tabel en dan pas de film tabel.
Had gekund, ik heb 'em ook maar in 2 minuten uit m'n hoofd ingetypt ;)

Volgende keer niet meer zo afvallig doen hoor :P

Who is John Galt?


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Je hebt mijn SQL-respect wel verdiend hoor!
Zijn weinig mensen in dit forum die er iets goeds van weten te bakken. Begint al bij het ontwerp :'(

  • Noedelsupke
  • Registratie: Maart 2001
  • Laatst online: 18-07-2023
hardstikke bedankt allemaal en vooral justmental natuurlijk, de SQL Professional :P

hier kan ik wel iets mee :)

PIII 800@804 Mhz


  • Noedelsupke
  • Registratie: Maart 2001
  • Laatst online: 18-07-2023
goed, de laatste keer dat ik jullie lastigval, ik heb nog 1 probleempje:

de vraag is deze keer:
Geef van de acteurs die een rol hebben gespeeld in meer dan 1 film die na 1985 zijn geproduceerd, de voor-en achternaam en de totale duur van die films
ik heb tot nu toe dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
select vnaam, anaam
from acteur, film
where acteur.anr in(
    select anr
    from rol
    where fnr in
                (select fnr
                 from film
                 where jaar>1985)
    group by anr 
    having count (fnr)>1)    
GROUP BY Acteur.VNAAM,Acteur.ANAAM;

uit dit stukje code worden de voor-en achternaam van de acteurs die in meer dan 1 film na 1985 hebben gespeeld geselecteerd....het enige wat ik nu nog mis is de totale duur van deze films.......

PIII 800@804 Mhz


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Je bent al goed op weg :)
Tip: where (a.anr, f.fnr) in (select a2.anr, f2.fnr ... group by ... having ...)

Who is John Galt?


  • Noedelsupke
  • Registratie: Maart 2001
  • Laatst online: 18-07-2023
bedankt voor de tip he... maarre ik kom er nog niet echt uit. Heb wel al het volgende in elkaar gebraggeld voor de totale duur te bepalen voor elke anr, maar ik weet niet hoe ik dit in de rest van de code moet implementeren.
code:
1
2
3
4
select anr, sum(duur)
from rol, film
where rol.fnr = film.fnr
group by anr

PIII 800@804 Mhz


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op woensdag 19 december 2001 15:54 schreef ViperGTS het volgende:
code:
1
2
3
4
select anr, sum(duur)
from rol, film
where rol.fnr = film.fnr
group by anr
code:
1
2
3
4
5
6
7
8
9
and (film.fnr, rol.anr) 
     in ( select rol.fnr, rol.anr
        from rol
        where rol.fnr in
                (select fnr
                 from film
                 where jaar>1985)
        group by rol.anr 
        having count (rol.fnr)>1)

Zoiets moet kunnen.
Waarschijnlijk kan ie nog wat vereenvoudigd worden, maar ik heb ff geen tijd.

Who is John Galt?


  • Noedelsupke
  • Registratie: Maart 2001
  • Laatst online: 18-07-2023
Op woensdag 19 december 2001 16:00 schreef justmental het volgende:

[..]
code:
1
2
3
4
5
6
7
8
9
and (film.fnr, rol.anr) 
     in ( select rol.fnr, rol.anr
        from rol
        where rol.fnr in
                (select fnr
                 from film
                 where jaar>1985)
        group by rol.anr 
        having count (rol.fnr)>1)

Zoiets moet kunnen.
Waarschijnlijk kan ie nog wat vereenvoudigd worden, maar ik heb ff geen tijd.
oke bedankt voor de moeite ik probeer zelf nog wel ff verder....

edit: met die AND wil niet echt lukken :?

gaat ie zeuren van 'not a group expression' enzo...

PIII 800@804 Mhz


  • Noedelsupke
  • Registratie: Maart 2001
  • Laatst online: 18-07-2023
justmental nog steeds geen tijd ;)

anderen mogen het ook zeggen hoor :D

PIII 800@804 Mhz


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op woensdag 19 december 2001 20:36 schreef ViperGTS het volgende:
justmental nog steeds geen tijd ;)

anderen mogen het ook zeggen hoor :D
Laat eens zien wat je nu hebt met een uitlegje betreffende het gedeelte waar je niet uitkomt.

Who is John Galt?


  • Noedelsupke
  • Registratie: Maart 2001
  • Laatst online: 18-07-2023
Op woensdag 19 december 2001 21:19 schreef justmental het volgende:

[..]

Laat eens zien wat je nu hebt met een uitlegje betreffende het gedeelte waar je niet uitkomt.
sorry voor vandaag kan ik echt geen SQL meer zien......morgenvroeg op school eraan verder werken......11 uur ofzo.....

dan zal ik wel ff posten wat ik heb tot nu toe

PIII 800@804 Mhz


  • Wuursj
  • Registratie: Maart 2001
  • Laatst online: 20-08 14:07

Wuursj

want worst is al bezet

Op woensdag 19 december 2001 23:17 schreef ViperGTS het volgende:

[..]

sorry voor vandaag kan ik echt geen SQL meer zien......morgenvroeg op school eraan verder werken......11 uur ofzo.....

dan zal ik wel ff posten wat ik heb tot nu toe
zozo ViperGTS, goed bezig zeg! Eerste keer dat ik je wat serieus zie doen het afgelopen halfjaar!

droogworst - rookworst - leverworst - salamiworst - knakworst - bokworst - boterhammenworst


Verwijderd

zit die ook al op hszuyd?
en hebben ze die sql dingen aangepast tegenwoordig? wij moesten nog gewoon met dat kabinet gedoe.. dat was echt saai
k zal es kieke wat ik kan brouwen.

[too tired... must have sleeep........must...not........]
veel su6 nog en doe Heunen(????) de groeten

  • Noedelsupke
  • Registratie: Maart 2001
  • Laatst online: 18-07-2023
Op woensdag 19 december 2001 23:26 schreef Zoepnek het volgende:
zit die ook al op hszuyd?
en hebben ze die sql dingen aangepast tegenwoordig? wij moesten nog gewoon met dat kabinet gedoe.. dat was echt saai
k zal es kieke wat ik kan brouwen.

[too tired... must have sleeep........must...not........]
veel su6 nog en doe Heunen(????) de groeten
Heunen ken ik niet :?

ik heb de Momus :P
en idd deze SQL is leuker dan die van vorig jaar, maar wel jammer dat me die laatste opgave nu niet lukt :(

maar ja morgen gaat het wel lukken (met of zonder hulp van GoT) :)

enne worst: daar heb je wel gelijk in, verbaast me best wel van mezelf.

PIII 800@804 Mhz

Pagina: 1