トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

12-4 結合して件数を取得

SQLパズル

社員テーブル        部門テーブル
社員番号   所属     部門名  フロア
--------  ----     ------  ------
11001     総務      企画     1
11002     経理      総務     1
11003     営業      情報     2
11004     営業      営業     3
11005     情報      経理     2
11006     営業      法務     2
11008     企画      購買     2
12001     営業
12002     情報

所属する部門のフロアが2の社員数を出力する。

出力結果
社員数
------
     3


データ作成スクリプト

create table 社員(
社員番号 char(5),
所属     char(4));

insert into 社員 values('11001','総務');
insert into 社員 values('11002','経理');
insert into 社員 values('11003','営業');
insert into 社員 values('11004','営業');
insert into 社員 values('11005','情報');
insert into 社員 values('11006','営業');
insert into 社員 values('11008','企画');
insert into 社員 values('12001','営業');
insert into 社員 values('12002','情報');

create table 部門(
部門名 char(4),
フロア number(1));

insert into 部門 values('企画',1);
insert into 部門 values('総務',1);
insert into 部門 values('情報',2);
insert into 部門 values('営業',3);
insert into 部門 values('経理',2);
insert into 部門 values('法務',2);
insert into 部門 values('購買',2);
commit;


SQL

--■■■結合させる方法■■■
select count(*) as 社員数
  from 社員 a,部門 b
 where a.所属=b.部門名
   and b.フロア=2;

--■■■スカラーサブクエリを使う方法■■■
select count(*)
  from 社員 a
 where 2 = (select b.フロア
              from 部門 b
             where b.部門名 = a.所属);


解説

結合させて、
フロアが2のレコード数を求めてます。