Domeinmodellering-Opdracht/2 Activiteiten/Uitwerkingen/SQL-toets-blok-b Vorig jaar

Uit Werkplaats
Ga naar: navigatie, zoeken

Domeinmodellering-Opdracht


 © comments



Uitwerkingen SQL-toets blok B

Beste medestudenten, zoals jullie weten is op BlackBoard een proef-toets te vinden voor de toets van aanstaande donderdag (1 Oktober 2009) Het leek me een goed idee om hieronder de antwoorden te zetten zodat je altijd even kunt controleren of je 't goed hebt of niet. Mocht je commentaar hebben op een antwoord geef dan dit net zoals je doet bij reflecties.

Dit zijn dus mijn (Tim Cooijmans) antwoorden, wat dus geen garantie geeft op het juiste antwoord!!! (Sterker nog ik verwacht niet dat alles goed is)

Vraag 1

<source lang='sql'> SELECT a.state_born, COUNT(*)*4 FROM president AS a, administration as B WHERE a.pres_name = b.pres_name GROUP BY a.state_born HAVING COUNT(*) >= ALL (

                       SELECT COUNT(*)
                       FROM president, administration
                       WHERE president.pres_name = administration.pres_name
                       GROUP BY president.state_born
                      )

</source>


Ik heb deze query samengesteld met de aanname dat elke administration 4 jaar heeft geduurd. Ik heb geen idee of ik deze aanname mag doen of dat er iets anders wordt verwacht...
Tim Cooijmans.jpg
Tim CooijmansDomeinmodellering-Opdracht Remove this comment when resolved!



Volgens mij klopt deze niet Tim. De vraag is volgens mij eigenlijk om te geven welke staat het meeste aantal jaren een president in het witte huis heeft gehad. In de tabel president staat een kolom YRS_SERV. Dit geeft dus al het aantal jaren. Met groeperen op state is het dus mogelijk om per state te kijken hoeveel jaar de president uit die state kwam. Vervolgens enkel het maximum selecteren. Ik heb hem als volgt gemaakt...
Koen Derks.jpg
Koen DerksDomeinmodellering-Opdracht Remove this comment when resolved!

<source lang='sql'> SELECT state_born, SUM(yrs_serv) FROM president GROUP BY state_born HAVING SUM(yrs_serv) >= ALL (

                       SELECT SUM(yrs_serv)
                       FROM president
                       GROUP BY state_born
                      )

</source>


Ik hoor graag van jou of andere of mijn opvatting van de vraag en de query klopt...
Koen Derks.jpg
Koen DerksDomeinmodellering-Opdracht Remove this comment when resolved!


Volgens mij klopt deze ja, al zou je er nog rekening mee kunnen houden dat het witte huis pas in 1800 af was, en de eerste president al in 1789 in dienst trad, maar ik denk niet dat dat echt de bedoeling is.
Stan Philipsen.jpg
Stan PhilipsenDomeinmodellering-Opdracht Remove this comment when resolved!


Je hebt gelijk Koen, dat ziet er beter uit. Ik had al zo'n vermoeden dat mijn query niet klopte...
Tim Cooijmans.jpg
Tim CooijmansDomeinmodellering-Opdracht Remove this comment when resolved!


{{{3}}}
Sjors Gielen.jpg
Sjors GielenDomeinmodellering-Opdracht Remove this comment when resolved!


Vraag 2

<source lang='sql'> SELECT a.state_name, MAX(a.year_entered) FROM state AS a, president AS b WHERE b.state_born = a.state_name GROUP BY a.state_name HAVING max(a.year_entered) = (

                             SELECT max(year_entered)
                             FROM state
                             WHERE state_name = ANY (
                                                     SELECT state_born
                                                     FROM president
                                                    )
                            )

</source>


Deze klopt volgens mij wel..ik had wel een andere manier, dus voor de geïnteresseerden...
Koen Derks.jpg
Koen DerksDomeinmodellering-Opdracht Remove this comment when resolved!


<source lang='sql'> SELECT state_name, year_entered FROM state WHERE state_name IN (

                        SELECT state_born 
                        FROM president)
                        GROUP BY state_name, year_entered
                        HAVING year_entered >= ALL (
                                                              SELECT year_entered 
                                                              FROM state 
                                                              WHERE state_name IN (
                                                                                                SELECT state_born 
                                                                                                FROM president)
                                                                     )

</source>


Nog een extra subquery, maar het werkt wel (volgens mij althans)...
Koen Derks.jpg
Koen DerksDomeinmodellering-Opdracht Remove this comment when resolved!


<source lang='sql'> SELECT state_name, year_entered FROM STATE WHERE year_entered = (

                   SELECT max(year_entered)
                   FROM STATE, PRESIDENT
                   WHERE STATE.STATE_NAME = PRESIDENT.STATE_BORN
                   )   

</source>


Iets korter, en maar één subquery
Stan Philipsen.jpg
Stan PhilipsenDomeinmodellering-Opdracht Remove this comment when resolved!


Ik had 'm nog eens iets anders. Ik zou graag horen waar die van mij met de anderen verschilt. Ik heb in ieder geval geen join gebruikt, wel drie subqueries:
Sjors Gielen.jpg
Sjors GielenDomeinmodellering-Opdracht Remove this comment when resolved!

<source lang='sql'> SELECT state_name, year_entered FROM state WHERE state_name IN (SELECT DISTINCT state_born FROM president) AND year_entered >= ALL(

 SELECT year_entered
 FROM state
 WHERE state_name IN (SELECT DISTINCT state_born FROM president)

) </source>


{{{3}}}
Sjors Gielen.jpg
Sjors GielenDomeinmodellering-Opdracht Remove this comment when resolved!



{{{3}}}
Jodocus Deunk.jpg
Jodocus DeunkDomeinmodellering-Opdracht Remove this comment when resolved!


Alleen heeft LIMIT 1 hetzelfde probleem als die ik boven bij 1 al noemde bij mijn alternatieve oplossing... Je hebt altijd maar 1 resultaat, ook al kloppen er meer met de vraagstelling. Er staat niet voor niets "is (of zijn...)" ;)
Sjors Gielen.jpg
Sjors GielenJodocus Deunk Remove this comment when resolved!


Vraag 3

<source lang='sql'> SELECT a.candidate, b.party FROM election AS a, president AS b WHERE a.candidate = b.pres_name AND a.winner_loser_indic = 'W' AND EXISTS (

           SELECT *
           FROM election AS c
           WHERE a.election_year = c.election_year
           AND c.votes > a.votes
          )

</source>


{{{3}}}
Patrick Schileffski.jpg
Patrick SchileffskiDomeinmodellering-Opdracht Remove this comment when resolved!


{{{3}}}
Jodocus Deunk.jpg
Jodocus DeunkDomeinmodellering-Opdracht Remove this comment when resolved!


Vraag 4

<source lang='sql'> SELECT a.pres_name FROM pres_hobby AS a WHERE a.hobby = 'Riding' AND 2 = (

        SELECT COUNT(*)
        FROM pres_hobby AS b
        WHERE b.pres_name = a.pres_name
       )

</source>


{{{3}}}
Erik Boss.jpg
Erik BossDomeinmodellering-Opdracht Remove this comment when resolved!


Vraag 5

<source lang='sql'> SELECT a.pres_name, a.state_born, COUNT(*) FROM president AS a, pres_marriage AS b WHERE a.pres_name = b.pres_name AND a.pres_name NOT IN (

                       SELECT pres_name
                       FROM pres_hobby
                      )

GROUP BY a.pres_name, a.state_born UNION SELECT a.pres_name, a.state_born, 0 FROM president AS a WHERE a.pres_name NOT IN (

                         SELECT pres_name
                         FROM pres_hobby
                        )

AND a.pres_name NOT IN (

                       SELECT pres_name
                       FROM pres_marriage
                      )

</source>


Volgens mij klopt deze query en ik kan ook geen betere query bedenken
Patrick Schileffski.jpg
Patrick SchileffskiTim Cooijmans Remove this comment when resolved!


Voor de tweede keer zorgen dat de pres_name niet in pres_hobby voorkomt is overbodig, dat heb je in het bovenste deel ook al gedaan. Voor de rest kan ik ook geen beter antwoord bedenken.
Erik Boss.jpg
Erik BossDomeinmodellering-Opdracht Remove this comment when resolved!


Het in de tweede deel van de union kijken dat pres_name niet in pres_hobby voorkomt heeft wel degelijk nut, als je dat niet doet geef je namelijk presidenten weer die wél een hobby hebben maar niet getrouwt zijn. Geen idee of die er met de huidige data zijn maar dat is wel degelijk wat anders dan gevraagd word.
Tim Cooijmans.jpg
Tim CooijmansDomeinmodellering-Opdracht Remove this comment when resolved!


Patrick Schileffski.jpg
Patrick SchileffskiDomeinmodellering-Opdracht Remove this comment when resolved!
Tim Cooijmans


In algemene zin hebben jullie inderdaad gelijk, mijn fout. Nou blijkt inderdaad wel dat het voor dit specifieke geval niet uitmaakt, ze geven dezelfde results.
Erik Boss.jpg
Erik BossDomeinmodellering-Opdracht Remove this comment when resolved!