Previous: 集約関数
Up: 集約関数
Previous Page: 集約関数

count

今まで、selectの出力をそのまま表示してきたが、例えば、「データベースという言葉 を含む書名の本はいくつあるか?」という問にはどう答えたらいいであろうか? こうした時、SQLでは、次の例41のように、関数count()を使用することが出来る。

例 41: 「データベース」という言葉を含む本の数

select count(書名)
	from   書籍台帳
	where  書名 like '%データベース%'

----------- 21

ここで関数count()は、count()無しの検索

select 書名
	from   書籍台帳
	where  書名 like '%データベース%'

が検索した行の数(すなわち、書名の数)を返すことになる。

次の例では、count()の形で、テーブルの全行数がカウントされている。

例 42: テーブル「書籍台帳」の行数を数える

select count(*)
	from   書籍台帳

この例では、count( distinct 項目名 ) という形で、項目の相互にあい異なる値の数が 数えられる。selectの結果に同じ値の出力が含まれていても、distinct が項目名につ いていれば、重複した出力は省かれるのと同じである。

例 43: UNIXという言葉を含む本を出版している出版社の数

select count( distinct 出版社 )
	from   書籍台帳,出版社一覧
	where  書名 like '%UNIX%' 
	       and 書籍台帳.出版社コード = 出版社一覧.出版社コード

----------- 12

もう少し複雑な例も見ておこう。次の例は、「講談社」で複数の著者によって書かれた 本を検索するものである。where句の中に二つの条件が and で結ばれているが、いずれ の条件も、内部にselect文を含んでいる。前半の条件は、単に「講談社」の出版社の出 版社コードを調べているだけであるが、後の方の条件に注目して欲しい。ここでは、 select count(...) ... の出力が、( select ... ) > 1 という形で、1と比較されて いる。この部分が、「複数の著者によって書かれた本」のチェックをしている。

例 44: 「講談社」で複数の著者によって書かれた図書

select 書名
	from   書籍台帳
	where  出版社コード = ( select 出版社コード
	                        from   出版社一覧
	                        where  出版社 = '講談社' )
	       and  ( select count( マークナンバー ) 
	              from   書籍著者対応表
	              where  マークナンバー = 書籍台帳.マークナンバー ) > 1

書名 ------------------------------------------------------------ キリスト教史 キリスト教史 キャラメル色のドラゴン ふしぎなガラス玉 講談社パックス英和辞典 講談社パックス英和・和英辞典 講談社パックス和英辞典 キリスト教史 アンジェリク プロが明かす英語上達のコツ キリスト教史 名演!Jazz trumpet ジンジンジン キリスト教史 キス未満おことわり 世界のヒバクシャ クレオール物語 キリスト教史 ぼくのきょうりゅう キリスト教史 砂漠の聖戦 北朝鮮その衝撃の実像 キリスト教史 環境創造の経営 日本列島百名水 キリスト教史 アンジェリク 橋のなんでも小事典 シュワルツコフ「勝つための指揮」 うまい断わり方うまい頼み方 講談社のおはなし童話館 賢い脳の作り方 アンジェリク アンジェリク アンジェリク アンジェリク アンジェリク 風は思い出をささやいた 世界の名作図書館 戦うケネディ われら動物家族 ヒューマンライフエンサイクロペディア ヒューマンライフエンサイクロペディア ヒューマンライフエンサイクロペディア ヒューマンライフエンサイクロペディア ヒューマンライフエンサイクロペディア ヒューマンライフエンサイクロペディア ヒューマンライフエンサイクロペディア ヒューマンライフエンサイクロペディア ヒューマンライフエンサイクロペディア ヒューマンライフエンサイクロペディア ヒューマンライフエンサイクロペディア

(52 rows affected)

次の例は、「新潮社」で出版された図書のジャンルの数を調べるものである。サブ・ クェリー版と、ジャンル名を出力するジョイン版の両方を示す。

例 45: 「新潮社」で出版された図書のジャンル(分類名)の数1

select count( distinct 分類名 )
	from   分類コード一覧
	where  分類コード in
	               ( select 分類コード
	                 from   分類一覧
	                 where  マークナンバー in 
	                         ( select マークナンバー
	                           from   書籍台帳
	                           where  出版社コード = ( select 出版社コード
	                                                   from   出版社一覧
	                                                   where  出版社 = '新潮社' )
	                         )
	                )

----------- 53

(1 row affected)

例 46: 「新潮社」で出版された図書のジャンル(分類名)の数2

select count( distinct 分類名 )
	from   分類コード一覧 , 分類一覧 , 書籍台帳 , 出版社一覧
	where       分類コード一覧.分類コード = 分類一覧.分類コード
	       and  分類一覧.マークナンバー = 書籍台帳.マークナンバー
	       and  書籍台帳.出版社コード    = 出版社一覧.出版社コード
	       and  出版社一覧.出版社 = '新潮社'

分類名 ---------------------------------------- 教育 経済 芸術 言語 工芸 社会 宗教 政治 彫刻 伝記 農業 仏教 文学 法律 歴史 建築学 心理学 図書館 日本語 日本史 倫理学 英米文学 社会科学 製造工業 西洋哲学 哲学各論 東洋思想 日本文学 医学.薬学 演劇.映画 音楽.舞踏 絵画.書道 写真.印刷 キリスト教 ドイツ文学 ロシア文学 図書.書誌学 スペイン文学 フランス文学 スポーツ.体育 畜産業.獣医学 その他の諸文学 地理.地史.紀行 アジア史.東洋史 一般論文.講演集 家政学.生活科学 風俗習慣.民族学 金属工学.鉱山工学 中国文学.東洋文学 電気工学.電子工学 ヨーロッパ史.西洋史 機械工学.原子力工学 学会.団体.研究調査機関

(53 rows affected)

maruyama@wakhok.ac.jp
1995年02月10日 (金) 00時49分16秒 JST