初級システムアドミニストレータという国家資格の試験に頻出の内容のまとめ&解説と、 過去問題の出題例を記事にしています。取得を目指すみなさんの試験勉強に役立ててください。
  スポンサーサイト  --.--.--.-- / --:-- 
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
No. / スポンサー広告 /  コメント(-) /  トラックバック(-) /  PAGE TOP△
  SQL1  2007.06.02.Sat / 11:40 
SQLの練習問題1

次のようなスキーマで設計された会議室予約データベースがある。希望内容をもとに予約の入っていない会議室について、収容人員の少ない順に並べた会議室の一覧を出力したい。会議室予約表ですでに予約の入っている会議室を求めてから、それ以外の会議室として、収容人員が予約人数を満たすものを一覧出力する。
SQLの【   】に入れる適切な字句を解答群の中から選べ。
なお、希望内容の項目は、希望使用日、希望開始時刻、希望終了時刻、使用者数である。

<会議室予約データベースのスキーマ
[会議室]会議室ID,会議室名,収容人員数,時間使用料
[テナント]テナントID,テナント名,担当者氏名,担当者連絡先
[貸出し機器]機器ID,機器名,使用料
[会議室予約]予約ID,受付日,テナントID,会議室ID,使用日,開始時刻,終了時刻
[機器予約]予約ID,機器ID

<SQL>
 
 SELECT 会議室ID,会議室名,収容人員数
 FROM 会議室
 WHERE 収容人員数>=使用者数
 AND 【 a 】【 b 】【 c 】
 ( SELECT 【 a 】
 FROM 会議室予約
 WHERE 使用日=希望使用日
 【 d 】希望開始時刻【 e 】【 f 】
 【 d 】 【 g 】【 e 】希望終了時刻
 )
 【 h 】【 i 】収容人員数

a,f,g に関する解答群
 ア,会議室ID    イ,開始時刻   ウ,機器ID
 エ,希望開始時刻  オ,希望終了時刻 カ,終了時刻
 キ,テナントID   ク,予約ID    

b~d,h,iに関する解答群
 ア,AND       イ,BY      ウ,EXISTS
 エ,GROUP      オ,HAVING    カ,IN
 キ,NOT       ク,OR      ケ,ORDER
 コ,SORT
    
e に関する解答群
 ア,<    イ,>    ウ,<=   エ,>=

↓この記事が参考になったと思われた方は、応援クリックお願いします♪ m(_ _)m



解答 
 
 a,ア b,キ c,カ d,ア e,ウ f,カ g,イ h,ケ i,イ

-----------------------------------------------------------------

 「収容人員の少ない順に並べた会議室」とあるので、
 収容人員の昇順に並べ替えしますから、

 【 h 】【 i 】収容人員数
 ここは、ORDER BYですね。

 【 a 】は、[会議室]と[会議室予約]に共通する項目ですから
「会議室ID」となります。

 この段階でSQLは下のようになります。

 SELECT 会議室ID,会議室名,収容人員数
 FROM 会議室
 WHERE 収容人員数>=使用者数
 AND 会議室ID【 b 】【 c 】
  SELECT 会議室ID
 FROM 会議室予約
 WHERE 使用日=希望使用日
 【 d 】希望開始時刻【 e 】【 f 】
 【 d 】 【 g 】【 e 】希望終了時刻
 
 ORDER BY 収容人員数


 ()の副問合せの前には
 会議室IDという[項目名]がありますからIN か NOT IN だけしかありません。
 2語入れるので、ここはNOT INとなります。

 この段階でSQLは下のようになります。

 SELECT 会議室ID,会議室名,収容人員数
 FROM 会議室
 WHERE 収容人員数>=使用者数
 AND 会議室ID NOT IN
  SELECT 会議室ID
 FROM 会議室予約
 WHERE 使用日=希望使用日
 【 d 】希望開始時刻【 e 】【 f 】
 【 d 】 【 g 】【 e 】希望終了時刻
 
 ORDER BY 収容人員数
 
 「予約が入っていない会議室」である条件は、
 WHERE 使用日=希望使用日
 かつ、
希望開始時刻>終了時刻 
 または、開始時刻>希望終了時刻

 です。
 ところが
 「会議室予約表ですでに予約の入っている会議室を求めてから、
  それ以外の会議室として、←これでもNOT INとわかりますね。  
  収容人員が予約人数を満たすものを一覧出力する。」
 とあって、わざわざNOT INにしてくれています。
 それで、

 希望開始時刻>終了時刻 
 または、開始時刻>希望終了時刻


 という条件をにしないといけないわけです。

 つまり、「すでに予約の入っている会議室」である条件は、

 WHERE 使用日=希望使用日
 かつ、
 (希望開始時刻<=終了時刻 かつ、開始時刻<=希望終了時刻)
 
 となります。
 
 なお、この場合の()は省略できます。

ポイント!
ORDER BYは必ず、SQL文の最後にきます。
つまりラストORDER!と覚えましょう♪

副問合せ(サブクエリ)の書き方
WHERE EXISTS 
あるいはWHERE NOT EXISTS
WHERE [項目名] IN
WHERE [項目名] NOT IN となる。

スポンサーサイト
テーマ:資格 - ジャンル:学校・教育
No.51 / データベース /  コメント(-) /  トラックバック(-) /  PAGE TOP△

FC2カウンター

Since 29 January '06

ぽちっとお願いします♪

人気blogランキング
人気blogランキング

JRANKブログランキング
JRANKブログランキング

ナレコム学びのブログランキング
ナレコム 学びのブログランキング

ブログ内検索

BlogPeopleのリンクリスト

おすすめの参考書

CopyRight 2006 yozoのシスアドへの道 All rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。