Normalt är alla val av formen SELECT [columns, scalar computations on columns, grouped computations on columns, or scalar computations] FROM [table or joins of tables, etc]
Eftersom detta tillåter enkla skalära beräkningar kan vi göra något som SELECT 1 + 1 FROM SomeTable
och den returnerar en postuppsättning med värdet 2 för varje rad i tabellen SomeTable
.
Om vi nu inte brydde oss om någon tabell, utan bara ville göra vår skalära beräkning, kanske vi skulle vilja göra något som SELECT 1 + 1
. Detta är inte tillåtet av standarden, men det är användbart och de flesta databaser tillåter det (Oracle gör det inte om det inte har ändrats nyligen, åtminstone brukade det inte göra det).
Därför behandlas sådana blotta SELECT:er som om de hade en from-sats som specificerade en tabell med en rad och ingen kolumn (omöjligt förstås, men det gör susen). Därav SELECT 1 + 1
blir SELECT 1 + 1 FROM ImaginaryTableWithOneRow
som returnerar en enda rad med en enda kolumn med värdet 2
.
För det mesta tänker vi inte på det här, vi vänjer oss bara vid det faktum att bara SELECT ger resultat och tänker inte ens på det faktum att det måste vara någon enradssak vald för att returnera en rad.
Genom att göra SELECT COUNT(*)
du gjorde motsvarande SELECT COUNT(*) FROM ImaginaryTableWithOneRow
vilket givetvis ger 1.