最近インタビューでこんな質問をされました。これをmySQLで試したところ、同じ結果(最終結果)が得られました。すべてがその特定のテーブルの行数を示しました。誰でもそれらの主な違いを説明できますか?
質問する
95625 次
9 に答える
66
テーブル内のフィールドを指定するか、定数値または * の代わりに括弧内の式を指定しない限り、実際には何もありません。
詳細な回答をさせてください。Count は、指定されたフィールドの null 以外のレコード番号を提供します。Aという名前のテーブルがあるとします
select 1 from A
select 0 from A
select * from A
すべて同じ数のレコード、つまりテーブル A の行数を返します。それでも、出力は異なります。テーブルに 3 つのレコードがある場合。X と Y をフィールド名として使用
select 1 from A will give you
1
1
1
select 0 from A will give you
0
0
0
select * from A will give you ( assume two columns X and Y is in the table )
X Y
-- --
value1 value1
value2 (null)
value3 (null)
したがって、3 つのクエリはすべて同じ数値を返します。使わない限り
select count(Y) from A
null 以外の値は 1 つしかないため、出力として 1 が得られます。
于 2013-08-17T16:34:53.667 に答える
49
COUNT(*)
は行数をカウントしCOUNT(expression)
ますが、式では null 以外の値をCOUNT(column)
カウントし、列ではすべての null 以外の値をカウントします。
0 と 1 はどちらも null 以外の値であるCOUNT(0)=COUNT(1)
ため、どちらも行数に相当しますCOUNT(*)
。コンセプトは違いますが、結果は同じです。
于 2013-08-17T16:48:14.160 に答える