「地域」「避難場所」「場所設備」「設備」の4つのテーブルがある。それぞれの関係スキーマ及び設備表は次のとおりである。ここで、下線部を主キーとする。
            地  域 (地域ID, 地域名)
            避難場所 (避難場所ID, 地域ID, 場所名, 収容人教)
            場所設備 (避難場所ID, 設備ID)
            設  備 (設備ID, 設備名)
       
      
      設 備 表
 ┌────┬───────┐
 │設備ID│  設備名  │
 ├────┼───────┤
 │  1  │防災備蓄倉庫 │
 ├────┼───────┤
 │  2  │飲料水貯水槽 │
 ├────┼───────┤
 │  3  │応急救護所  │
 └────┴───────┘
          地域防災計画のため、飲料水貯水槽のある避難所の収容人数について地域ごとの集計表を作成するSQL文を作成した。 ア  、  イ  に入る組合せとして最も適切なものを@〜Dの中から選べ。
      
           SELECT A.地域名, SUM(P.収容人数) FROM 
            地域 AS A, 避難場所 AS P
             WHERE A.地域ID = P.地域ID
             AND     ア    
              (SELECT L.避難場所ID FROM 場所設備 AS L, 設備 AS S
               WHERE L.設備ID = S.設備ID AND 
                   S.設備名 = '飲料水貯水槽')
                 イ    
          
          
               ア        イ
@ P.避難場所ID IN GROUP BY A.地域名
A P.避難場所ID IN HAVING A.地域名
B P.避難場所ID = ORDER BY A.地域名
C P.避難場所ID = GROUP BY A.地域名
D P.避難場所ID = HAVING A.地域名
@
(SELECT L.避難場所ID FROM 場所設備 AS L, 設備 AS S
           WHERE L.設備ID = S.設備ID AND S.設備名 = '飲料水貯水槽') の意味は、「場所設備テーブルはL, 設備テーブルはSと短く表示して、設備テーブルの設備名が、'飲料水貯水槽' で、かつ場所設備テーブルの設備IDと設備テーブルの設備IDが一致する中から場所設備テーブルの避難場所IDを取り出す」という意味である。
           P.避難場所ID IN ( ) は、括弧内の要素と、避難場所テーブルの避難場所IDが一致するという意味であり、=は使用せず、INを利用する。
          
          HAVING は、 GROUP BY でグループ化されたデータに対して 条件で絞り込む時に使用する。
| W−25 | 目次 | W−27 |