Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

WÄHLEN SIE ZÄHLUNG(*);

Normalerweise haben alle Auswahlen die Form SELECT [columns, scalar computations on columns, grouped computations on columns, or scalar computations] FROM [table or joins of tables, etc]

Da dies einfache skalare Berechnungen ermöglicht, können wir so etwas wie SELECT 1 + 1 FROM SomeTable machen und es wird ein Recordset mit dem Wert 2 für jede Zeile in der Tabelle SomeTable zurückgegeben .

Wenn wir uns jetzt nicht um eine Tabelle kümmern, sondern nur unsere Skalarberechnung durchführen möchten, möchten wir vielleicht etwas wie SELECT 1 + 1 tun . Dies ist vom Standard nicht erlaubt, aber es ist nützlich und die meisten Datenbanken erlauben es (Oracle tut es nicht, es sei denn, es wurde kürzlich geändert, zumindest war es früher nicht so).

Daher werden solche bloßen SELECTs so behandelt, als hätten sie eine from-Klausel, die eine Tabelle mit einer Zeile und keiner Spalte angibt (natürlich unmöglich, aber es funktioniert). Daher SELECT 1 + 1 wird zu SELECT 1 + 1 FROM ImaginaryTableWithOneRow was eine einzelne Zeile mit einer einzelnen Spalte mit dem Wert 2 zurückgibt .

Meistens denken wir nicht darüber nach, wir gewöhnen uns einfach an die Tatsache, dass bloße SELECTs Ergebnisse liefern, und denken nicht einmal daran, dass ein einzeiliges Ding ausgewählt sein muss, um eine Zeile zurückzugeben.

Dabei SELECT COUNT(*) Sie haben das Äquivalent von SELECT COUNT(*) FROM ImaginaryTableWithOneRow ausgeführt was natürlich 1 zurückgibt.