Zoeken…


Logische volgorde van queryverwerking in SQL

/*(8)*/  SELECT /*9*/ DISTINCT /*11*/ TOP  
/*(1)*/  FROM 
/*(3)*/        JOIN 
/*(2)*/       ON 
/*(4)*/  WHERE 
/*(5)*/  GROUP BY 
/*(6)*/  WITH {CUBE | ROLLUP}
/*(7)*/  HAVING 
/*(10)*/ ORDER BY 
/*(11)*/ LIMIT 

De volgorde waarin een query wordt verwerkt en een beschrijving van elke sectie.

VT staat voor 'Virtual Table' en laat zien hoe verschillende gegevens worden geproduceerd terwijl de query wordt verwerkt

  1. FROM: Een Cartesiaans product (cross join) wordt uitgevoerd tussen de eerste twee tabellen in de FROM-clausule en als resultaat wordt virtuele tabel VT1 gegenereerd.

  2. AAN: het AAN-filter wordt toegepast op VT1. Alleen rijen waarvoor WAAR is, worden ingevoegd in VT2.

  3. OUTER (join): als een OUTER JOIN is opgegeven (in tegenstelling tot een CROSS JOIN of een INNER JOIN), worden rijen uit de bewaarde tabel of tabellen waarvoor geen match is gevonden, toegevoegd aan de rijen van VT2 als buitenste rijen. VT3. Als er meer dan twee tabellen worden weergegeven in de clausule FROM, worden stappen 1 tot en met 3 herhaaldelijk toegepast tussen het resultaat van de laatste join en de volgende tabel in de clausule FROM totdat alle tabellen zijn verwerkt.

  4. WAAR: het WHERE-filter wordt toegepast op VT3. Alleen rijen waarvoor WAAR is, worden ingevoegd in VT4.

  5. GROUP BY: De rijen van VT4 zijn gerangschikt in groepen op basis van de kolomlijst die is opgegeven in de GROUP BY-clausule. VT5 wordt gegenereerd.

  6. CUBE | ROLLUP: Supergroepen (groepen groepen) worden toegevoegd aan de rijen van VT5, waardoor VT6 wordt gegenereerd.

  7. HAVING: het HAVING-filter wordt toegepast op VT6. Alleen groepen waarvoor WAAR is, worden ingevoegd in VT7.

  8. SELECT: de SELECT-lijst wordt verwerkt en genereert VT8.

  9. DISTINCT: dubbele rijen worden verwijderd uit VT8. VT9 wordt gegenereerd.

  10. ORDER BY: De rijen van VT9 worden gesorteerd volgens de kolommenlijst die is opgegeven in de clausule ORDER BY. Er wordt een cursor gegenereerd (VC10).

  11. BOVEN: het opgegeven aantal of percentage rijen wordt vanaf het begin van VC10 geselecteerd. Tabel VT11 wordt gegenereerd en teruggestuurd naar de beller. LIMIT heeft dezelfde functionaliteit als TOP in sommige SQL-dialecten zoals Postgres en Netezza.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow