
データベーススペシャリスト試験攻略のツボ(9)
「SQL文を選択する」問題
西沢直木
2009/1/26
本連載では、テクニカルエンジニア(データベース)試験に対応できる知識を確認していきます。多岐にわたる知識が問われる試験ですので、受験する方はもちろん、日常業務ではあまり使うことのない技術知識の確認にも役立ててください。
|
問9-1 問題文の条件を満たすSQL文を選択
A社では、社員教育の一環として全社員を対象に英会話研修を行っていたが、本年度(2005年度)からは、4月時点で入社3年を経過しているにもかかわらず初級システムアドミニストレータ(初級シスアド)試験に合格していない技術職種の社員に対して、英会話の代わりに初級シスアド研修を受講させることにした。本年度の英会話研修を受講させる社員の一覧を出力するためのSQL文はどれか。
なお、A社では、社員はすべて4月1日入社であり、事業年度の始まりは4月1日である。また、ここで使用するデータベースには、2005年4月1日時点でのデータが格納されているものとする。
ア
SELECT 社員 FROM 社員テーブル WHERE (入社年度 <= (2005 - 3) AND 職種 = '技術') AND 初級シスアド合格 = 'No'
イ
SELECT 社員 FROM 社員テーブル WHERE (入社年度 <= (2005 - 3) AND 職種 = '技術') OR 初級シスアド合格 = 'Yes'
ウ
SELECT 社員 FROM 社員テーブル WHERE NOT (入社年度 <= (2005 - 3) AND 職種 = '技術') AND 初級シスアド合格 = 'No'
エ
SELECT 社員 FROM 社員テーブル WHERE NOT (入社年度 <= (2005 - 3) AND 職種 = '技術') OR 初級シスアド合格 = 'Yes'
答え
解説
条件を満たす社員を抽出するSQL文が問われています。選択肢をざっと見ると、社員テーブルに対して簡単なWHERE句を適用するだけの単純なSQL文に見えますが、ミスを誘発するポイントがいくつか含まれているので注意が必要です。
問題文では、条件を満たす社員に対して「初級シスアド研修を実施する」と設定されている一方、問われているのは「英会話研修」を受講させる社員の一覧という点が1つのポイントです。設定条件の先入観から、「初級シスアド研修を実施する社員」を求めるという勘違いをして選択肢「ア」などを選ばないことです。
「初級シスアド研修を受講する社員以外が英会話研修を受講する」と気付くことが正解を導き出すための第一歩です。この「以外」をどのようにSQL文に反映すればいいのでしょうか。「初級シスアド研修を受講する社員」の条件を反転(否定)すれば「英会話研修を受講する社員」が抽出できることが分かれば、短時間で正解に近づくでしょう。そのような条件を満たす選択肢を「ア」から順番に吟味してもいいのですが、ここではほかの問題でも応用できるように、もう少しスッキリした解法を考えてみます。
問題文をまとめると、「入社3年を経過した技術職種の社員で初級シスアドに合格していない」(つまり選択肢「ア」)社員が初級シスアド研修を受講することになるので、この条件を否定するSQL文を作成します。ここで、ANDで結ばれた2つの条件AとB、つまり、「A AND B」を否定するので、「NOT A OR NOT B」と同じことだと気付けば正解に近づきます。
この変換にピンとこない方は、「ド・モルガンの法則」というキーワードで調べてみてください。情報処理の研修などで一度は目にしたであろう、2つの条件が重なる領域と、それ以外の部分の関係について「論理積の否定は否定の論理和」などという説明が見つかるはずです。
この例では、「(入社年度 <= (2005 - 3) AND 職種 = '技術')」と「初級シスアド合格 = 'No'」について、それぞれの否定の和を求めます。まず、前者は「NOT (入社年度 <= (2005 - 3) AND 職種 = '技術')」と置き換えられます。後者は「NOT (初級シスアド合格 = 'No')」ですが、選択肢「エ」のように「初級シスアド合格 = 'Yes'」と表現することもできます。従って、この2つの条件をORで結合した選択肢「エ」が正解であることが分かります。
この問題は、午前問題にしては問題文が少し長かったこともあり、ミスにつながるポイントがいくつか含まれています。出題者としてはもう一度出題したくなるように思えるので、今後も注意が必要な問題です。
1/3 | ![]() |
「SQL文を選択する」問題
![]() |
データベーススペシャリスト試験攻略のツボ |
- Oracleライセンス「SE2」検証 CPUスレッド数制限はどんな仕組みで制御されるのか (2017/7/26)
データベース管理システムの運用でトラブルが発生したらどうするか。DBサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は、Oracle SE2の「CPUスレッド数制限」がどんな仕組みで行われるのかを検証します - ドメイン参加後、SQL Serverが起動しなくなった (2017/7/24)
本連載では、「SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「ドメイン参加後にSQL Serverが起動しなくなった場合の対処方法」を解説します - さらに高度なSQL実行計画の取得」のために理解しておくべきこと (2017/7/21)
日本オラクルのデータベーススペシャリストが「DBAがすぐ実践できる即効テクニック」を紹介する本連載。今回は「より高度なSQL実行計画を取得するために、理解しておいてほしいこと」を解説します - データベースセキュリティが「各種ガイドライン」に記載され始めている事実 (2017/7/20)
本連載では、「データベースセキュリティに必要な対策」を学び、DBMSでの「具体的な実装方法」や「Tips」などを紹介していきます。今回は、「各種ガイドラインが示すコンプライアンス要件に、データベースのセキュリティはどのように記載されているのか」を解説します
![]() |
|
|
|
![]() |