Toon posts:

[SQL] gecorreleerde queries *

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

Verwijderd

Topicstarter
Peoplez,

Ik stoei voor mijn studie met gecorreleerde queries. Kan iemand mij duidelijk uitleggen hoe precies deze gebruikt worden?

voorbeeldje;

select possible.ename, possible.dept, possible.salary
from employee as possible
where salary >
(select avg(salary)
from employee as average
where possible.dept = average.dept) ;

eigenlijk wat ik hiervan begrijp, is dat je via een gecorreleerde query als het ware een soort
vergoting van de rijen van de subquery (misschien onduidelijk uitgelegd) Ik dacht dit probleem op te lossen door een group by functie in de subquery, maar dat mag niet volgens de leraar.

Hoe is de werking van een gecorreleerde query in het algmeen het best uit te leggen ( stap voor stap)? Wanneer kiest men voor een gecorreerde query? Het vorige staat niet echt beschreven in mijn 600blz dikke Solid SQL boek. Google en Tweakers bieden ook niet echt uitkomst.

[ zou de topic title ff aangepast kunnen worden in gecorreleerde queries]

[ Voor 7% gewijzigd door Verwijderd op 24-12-2004 14:28 . Reden: fout in title ]


Verwijderd

volgens mij vrij simpel.

Wanneer je query afhankelijk is van waarden van verschillende entiteiten, is het geheel gecorreleerd.

In jouw voorbeeld heb je een eis in ene tabel zitten en een in de ander, en dus zijn ze onderling van elkaar afhankelijk (gecorreleerd).

succes!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Een gecorreleerde query is een aparte query die een onderdeeel van een andere query is. Je moet dus in de subquery een relatie leggen naar de hoofdquery. Het is dus een subquery die uitgevoerd wordt voor iedere rij van de hoofdquery, de query is afhankelijk van de hoofdquery.

Wanneer je hem moet gebruiken is een beetje lastig, het is het beste hem alleen te gebruiken als je geen andere mogelijkheid hebt. Een gecorrelleerde subquery wordt zoals gezegd uitgevoerd voor elke rij in de resultset van de hoofdquery. Dat kan dus best intensief zijn voor de database.,

Overigens zijn er voor zo ver ik weet geen eisen aan een gecorreleerde subquery, je mag dus ook best een GROUP BY gebruiken bijvoorbeeld.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
P_de_B,

Bedankt. Je krijgt toch echter het kip en het ei effect?!
Ik bedoel; bij een select-query, waarvan de main en de subquery van elkaar afhankelijk zijn, moet elke kolom in de where functie in de subquery rij voor rij worden vergeleken in de hoofd-query met de subquery, of deze voldoet.(moeilijke zin :P :9 )

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Verwijderd schreef op vrijdag 24 december 2004 @ 14:26:
P_de_B,

Bedankt. Je krijgt toch echter het kip en het ei effect?!
Ik bedoel; bij een select-query, waarvan de main en de subquery van elkaar afhankelijk zijn, moet elke kolom in de where functie in de subquery rij voor rij worden vergeleken in de hoofd-query met de subquery, of deze voldoet.(moeilijke zin :P :9 )
ehm Ja, dat klopt. Soms kun je het echter niet met een gewoon statement, of bijvoorbeeld een group by doen. Je zult dan wel een correlated query moete n gebruiken.

Overigens hoeft het niet alleen in het where statement. Je kunt het ook in de SELECT regel gebruiken. Onderstaande is ook een voorbeeld van correlated subqueries.

SELECT Id, veld1, (SELECT EenVeld FROM .... WHERE Id = HoofdTabel.Id) as CorrelatedVeldje
FROM HoofdTabel

[ Voor 1% gewijzigd door P_de_B op 24-12-2004 14:59 . Reden: bugje ]

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
P_de_B schreef op vrijdag 24 december 2004 @ 14:32:
[...]


ehm Ja, dat klopt. Soms kun je het echter niet met een gewoon statement, of bijvoorbeeld een group by doen. Je zult dan wel een correlated query moete n gebruiken.

Overigens hoeft het niet alleen in het where statement. Je kunt het ook in de SELECT regel gebruiken. Onderstaande is ook een voorbeeld van correlated subqueries.

SELECT Id, veld1, (SELECT * FROM .... WHERE Id = HoofdTabel.Id) as CorrelatedVeldje
FROM HoofdTabel
De query hierboven zou je toch als een inner-join kunnen schrijven, of wil je puur de syntax aangeven voor een gecorreleerde query in de select-statement.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Verwijderd schreef op vrijdag 24 december 2004 @ 14:56:
[...]


De query hierboven zou je toch als een inner-join kunnen schrijven, of wil je puur de syntax aangeven voor een gecorreleerde query in de select-statement.
Ja :)

Overigens zit er wel een foutje in, want je mag niet SELECT * doen in een correlated subquery, je mag maar 1 veld gebruiken.

[ Voor 18% gewijzigd door P_de_B op 24-12-2004 14:58 ]

Oops! Google Chrome could not find www.rijks%20museum.nl

Pagina: 1