条件 - sql 種類 カウント




COUNT(*)がFROM句なしで1に等しい理由は何ですか? (2)

この質問には既に回答があります:

クイックチェックのために私はクエリを使用しました

select COUNT(*) LargeTable

見て驚いた

LargeTable
-----------
1

秒後に私は間違いを認識し、それを作った

select COUNT(*) from LargeTable

期待される結果を得た

(No column name)
-----------
1.000.000+

今はなぜCOUNT(*)1返したのか分かりません

私がselect COUNT(*)か、 declare @x int = COUNT(*); select @x declare @x int = COUNT(*); select @x

別のケース

declare @EmptyTable table ( Value int )
select COUNT(*) from @EmptyTable

返品

(No column name)
-----------
0

私はSQL標準で説明を見つけませんでした( http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt 、オンラインソースはhttps://stackoverflow.com/a/8949764/で提供されています) 1506454 )

なぜCOUNT(*)が1を返すのですか?


SQL Serverでは、 FROM句のないSELECT 、単一の行テーブルに対して動作するかのように動作します。

これは標準SQLではありません。 他のRDBMSは、単一行のユーティリティDUALテーブルを提供します。

したがって、これは次のように効果的に扱われます。

SELECT COUNT(*) AS LargeTable
FROM   DUAL 

関連するConnect Itemについて議論する

SELECT 'test'
WHERE  EXISTS (SELECT *) 

https://connect.microsoft.com/SQLServer/feedback/details/671475/select-test-where-exists-selectです


FROM節がなければ、DBMSは[LargeTable]を知ることができないため、テーブルです。 COLUMN NAMEエイリアスだと推測して、それを騙した

あなたはそれを試して見ることができます

select count(*) 'eklmnjdklfgm'
select count(*) eklmnjdklfgm
select count(*) [eklmnjdklfgm]
select count(*)

最初の3つの例は、列名としてeklmnjdklfgmを返します





sql-server-2012