Normálně jsou všechny výběry ve tvaru SELECT [columns, scalar computations on columns, grouped computations on columns, or scalar computations] FROM [table or joins of tables, etc]
Protože to umožňuje jednoduché skalární výpočty, můžeme udělat něco jako SELECT 1 + 1 FROM SomeTable
a vrátí sadu záznamů s hodnotou 2 pro každý řádek v tabulce SomeTable
.
Nyní, pokud bychom se nestarali o žádnou tabulku, ale jen chtěli provést naše skalární výpočty, mohli bychom chtít udělat něco jako SELECT 1 + 1
. Standard to nepovoluje, ale je to užitečné a většina databází to umožňuje (Oracle ne, pokud se to nedávno nezměnilo, alespoň tomu tak nebylo).
Proto se s takovými holými SELECTy zachází, jako by měly klauzuli from, která specifikovala tabulku s jedním řádkem a bez sloupce (samozřejmě nemožné, ale dělá to trik). Proto SELECT 1 + 1
se změní na SELECT 1 + 1 FROM ImaginaryTableWithOneRow
který vrátí jeden řádek s jedním sloupcem s hodnotou 2
.
Většinou o tom nepřemýšlíme, jen si zvykneme na to, že holé SELECTy dávají výsledky a ani nás nenapadne, že musí být vybrána nějaká jednořádková věc, která vrátí jeden řádek.
Přitom SELECT COUNT(*)
udělali jste ekvivalent SELECT COUNT(*) FROM ImaginaryTableWithOneRow
což samozřejmě vrátí 1.