56

最近インタビューでこんな質問をされました。これをmySQLで試したところ、同じ結果(最終結果)が得られました。すべてがその特定のテーブルの行数を示しました。誰でもそれらの主な違いを説明できますか?

4

9 に答える 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 に答える