助け合いフォーラム

OSS-DB

OSS-DB Silver(Ver3.0)
問題ID : 35419
問題を開く
「club」テーブルは次のように構成されている。 以下のSQL文を実行した場合、取得される結果として正しいものはどれか。 INSERT INTO club VALUES(6, 'バレー部'), (7, '卓球部'); UPDATE club SET name = NULL WHERE id = 2; DELETE FROM club WHERE id = 4 OR i...

この問題はプレミアムコンテンツです。

上に戻る

NULLを含むデータのcount(*)の結果について

投稿日 2024/11/24

解説に

SELECT count(*) FROM club WHERE name NOT IN ('野球部', 'サッカー部');
NOT IN演算子は「副問い合わせの結果全てと一致しないかどうか」を判定します。
「club」テーブルで「name」カラムの値が「野球部」「サッカー部」と一致しないのは、「弓道部」「卓球部」「NULL」ですが、NULLは無視されます。

したがって正解は
・2
です。

とありますが、count(*)はnullも含めた件数をカウントする認識のため3が正解だと思います。
実機で試しても3になります。解説の誤りでしょうか?

test=> select * from club;
 id |    name
----+------------
  1 | 野球部
  2 |
  3 | 弓道部
  5 | サッカー部
  7 | 卓球部
(5 行)

test=> SELECT count(*) FROM club WHERE name NOT IN ('野球部', 'サッカー部');
 count
-------
     3
(1 行)
2024/11/25 14:12

念のための確認なのですが、お手元の環境で以下のSQLを実行したらどうなりますか?

select id from club where name IS NULL;
select id from club where name IS NOT NULL;

ここで 2, 1, 3, 5, 7 が返ってくるので間違い無いですよね?


コメント

m muraki06

2024/11/25 14:32

arashi1977さん、返信ありがとうございます。 確認してみたところis nullのSQLの結果が0行となり、NULLではなく 空白になっていました。 内容を修正したら2行になりましたので解説の内容が正しいことが確認できました。 ありがとうございました。

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?