Query - Verwerking door de database

Door Elwin - Fratsloos, 24 jaar geleden, 7.768x bekeken

In deze tutorial leer ik je hoe een database je query behandeld.

Gesponsorde koppelingen

Inhoudsopgave

  1. Inleiding
  2. De query
  3. FROM-component
  4. WHERE-component
  5. GROUP BY-component
  6. HAVING-component
  7. SELECT-component
  8. ORDER BY-component

 

Er zijn 6 reacties op 'Query verwerking door de database'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Mitch X
Mitch X
24 jaar geleden
 
0 +1 -0 -1
Goede tut Elwin :)

Denk dat dit het wel duidelijk maakt voor iedereen!
Vincent elschot
vincent elschot
24 jaar geleden
 
0 +1 -0 -1
GROUP BY doet nog iets meer dan alleen de resultaten groeperen in het "tussenresultaat" het zorgt er ook voor dat je maar 1 resultaat per groep zult krijgen. Daarmee wordt het dus onmogelijk om iets anders te selecteren dan waar je op groepeerde, want zoals vermeldt kunnen er voor alle andere kolommen meerdere waardes in de tabel staan.

HAVING en WHERE lijken hetzelfde te doen, maar WHERE wordt toegepast wanneer de data wordt gelezen en bepaalt onder andere dus ook welke records wel en niet in aanmerking komen om uberhaupt door de query te worden behandelt. HAVING wordt pas toegepast op de resultaten die uit de query komen en bepaalt welke resultaten worden teruggegeven naar degene die de query aanriep.

Dit gaat dus niet:

SELECT COUNT(1) AS aantal FROM tabel WHERE aantal > 10 GROUP BY dit;

omdat 'aantal' pas wordt gemaakt als de query klaar is.
Dit kan wel:

SELECT COUNT(1) AS aantal FROM tabel GROUP BY dit HAVING aantal > 10;


Dit gaat wel maar zal eerst _alle_ records ophalen en pas daarna gaan kijken welke records er moeten worden doorgegeven.

SELECT * FROM tabel HAVING iets > 10;

Dit daarentegen zal eerst kijken welke records uberhaupt in aanmerking komen om terug te geven, en dan pas die records ophalen.

SELECT * FROM tabel WHERE iets > 10;

WHERE is in dit geval dus veel efficienter dan HAVING.


Nog iets om niet te vergeten; in de WHERE clausule wordt bepaalt welke records in aanmerking komen voor de query. De volgorde van de voorwaardes die je in de WHERE zet is van invloed op de snelheid van de query. Zet de meest beperkende voorwaarde vooraan, want dat streept zoveel mogeljk records weg. Elk record dat wordt weggestreept hoeft niet nog eens door de andere voorwaardes heen. Stel je zoekt mannen tussen 20-30 jaar die in de van-der-grubben straat wonen.

Als je het in deze volgorde doet dan krijg je:
mannen: 50% is man
tussen 20-30jaar: 30% van alle mannen is tussen de 20-30 jaar, dus 30%van 50%=15% van alle records blijft over.
Wonen in de vdgrubbenstraat: 1 man tussen de 20-30 woont in die straat.

Nu moet je dus nog 50% van alle records controleren op leeftijd, en nog 15% op adres.
Maar als je de volgorde omdraait:
Wie wonen in de vdgrubben straat: 0.0001% van alle mensen (3 mensen)
Wie zijn daar man: 1 man, blijft over 0.00003%
wie zijn daarvan tussen 20-30: 1

Dus na de 1e voorwaarde bleven er nog maar 3 records over die gecontroleert moesten worden op de andere voorwaardes.
Sebastiaan H
Sebastiaan H
24 jaar geleden
 
0 +1 -0 -1
hoe kan je ORDER BY id , en dan het hoogste id bovenaan??
Jelmer -
Jelmer -
23 jaar geleden
 
0 +1 -0 -1
DESC = toenemend, dus van klein naar groot
ASC = afnemend, dus van groot naar klein, en meestal van nieuw naar oud.
Citroen Anoniem Graag
Citroen Anoniem Graag
19 jaar geleden
 
0 +1 -0 -1
Leuke tut voor achtergrond informatie.
Ik heb ook een klein vraagje:

stel je hebt in een tabel je users. En je vraagt gegevens op per gebruikersnaam/id (liever id natuurlijk!)
Daarvan weet je zeker dat die uniek is.
Voeg je dan een LIMIT 1 toe of zorgt dat voor een extra stap die de database moet maken, die overbodig is omdat er maar 0 of 1 resultaten zijn?
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Lars Hallow
Lars Hallow
14 jaar geleden
 
0 +1 -0 -1
Netjes en leerzaam, bedankt !

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. Inleiding
  2. De query
  3. FROM-component
  4. WHERE-component
  5. GROUP BY-component
  6. HAVING-component
  7. SELECT-component
  8. ORDER BY-component

Labels

  • Geen tags toegevoegd.

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.