sql >> Databáze >  >> RDS >> Sqlserver

VYBRAT POCET(*);

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.



  1. jak zobrazit/skriptovat definice systémových pohledů?

  2. Jak změnit národní prostředí při formátování čísel v PostgreSQL

  3. Nelze spustit plánovač web2py pomocí postgresql databáze

  4. PŘÍPAD Oracle SQL WHEN ORA-00932:nekonzistentní datové typy:očekáván CHAR má ČÍSLO 00932. 00000 - nekonzistentní datové typy:očekáván %s má %s