Normalt er alle valg af formen SELECT [columns, scalar computations on columns, grouped computations on columns, or scalar computations] FROM [table or joins of tables, etc]
Fordi dette tillader almindelige skalære beregninger, kan vi gøre noget som SELECT 1 + 1 FROM SomeTable
og det vil returnere et postsæt med værdien 2 for hver række i tabellen SomeTable
.
Hvis vi nu var ligeglade med nogen tabel, men bare ville lave vores skalarberegning, ville vi måske gøre noget som SELECT 1 + 1
. Dette er ikke tilladt af standarden, men det er nyttigt, og de fleste databaser tillader det (Oracle gør det ikke, medmindre det er ændret for nylig, i det mindste plejede det ikke at gøre det).
Derfor behandles sådanne bare SELECT'er, som om de havde en fra-klausul, der specificerede en tabel med en række og ingen kolonne (umuligt selvfølgelig, men det gør tricket). Derfor SELECT 1 + 1
bliver SELECT 1 + 1 FROM ImaginaryTableWithOneRow
som returnerer en enkelt række med en enkelt kolonne med værdien 2
.
For det meste tænker vi ikke over dette, vi vænner os bare til, at bare SELECT giver resultater og tænker ikke engang på, at der skal være valgt en række ting for at returnere en række.
Ved at gøre SELECT COUNT(*)
du gjorde det, der svarer til SELECT COUNT(*) FROM ImaginaryTableWithOneRow
hvilket naturligvis returnerer 1.