Sök…
Logisk ordning för frågebehandling i 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
Ordningen i vilken en fråga behandlas och beskrivning av varje avsnitt.
VT står för 'Virtual Table' och visar hur olika data produceras när frågan behandlas
FRÅN: En kartesisk produkt (tvärbindning) utförs mellan de två första tabellerna i FROM-klausulen, och som ett resultat genereras virtuell tabell VT1.
PÅ: PÅ-filtret appliceras på VT1. Endast rader för vilka det är SANT sätts in i VT2.
YTRE (gå med): Om ett YTRE JOIN anges (i motsats till ett CROSS JOIN eller INNER JOIN) läggs rader från det bevarade bordet eller tabellerna för vilka en matchning inte hittades till raderna från VT2 som yttre rader, vilket genererar VT3. Om fler än två tabeller visas i FROM-klausulen tillämpas steg 1 till 3 upprepade gånger mellan resultatet av den senaste kopplingen och nästa tabell i FROM-klausulen tills alla tabeller har bearbetats.
WHERE: WHERE-filtret appliceras på VT3. Endast rader för vilka det är SANT sätts in i VT4.
GROUP BY: Raderna från VT4 är ordnade i grupper baserat på kolumnlistan som anges i GROUP BY-klausulen. VT5 genereras.
KUBE | ROLLUP: Supergrupper (grupper av grupper) läggs till raderna från VT5, genererar VT6.
HAVING: HAVING-filtret appliceras på VT6. Endast grupper för vilka det är SANT införs i VT7.
SELECT: SELECT-listan behandlas, vilket genererar VT8.
DISTINCT: Duplicerade rader tas bort från VT8. VT9 genereras.
ORDER BY: Raderna från VT9 sorteras enligt kolumnlistan som anges i ORDER BY-klausulen. En markör genereras (VC10).
TOPP: Det angivna antalet eller procentandelen rader väljs från början av VC10. Tabell VT11 genereras och returneras till den som ringer. LIMIT har samma funktionalitet som TOP i vissa SQL-dialekter som Postgres och Netezza.