
データベーススペシャリスト試験攻略のツボ(9)
「SQL文を選択する」問題
西沢直木
2009/1/26
本連載では、テクニカルエンジニア(データベース)試験に対応できる知識を確認していきます。多岐にわたる知識が問われる試験ですので、受験する方はもちろん、日常業務ではあまり使うことのない技術知識の確認にも役立ててください。
|
問9-2 サブクエリに当てはまるSQL文を選択
“社員”表から、男女それぞれの最年長社員を除くすべての社員を取り出すSQL文とするために、aに入る副問合せはどれか。ここで、“社員”表は次の構造とし、下線部は主キーを表す。
社員(社員番号, 社員名, 性別, 生年月日) SELECT 社員番号, 社員名 FROM 社員 AS S1 WHERE 生年月日 > ( a )
SELECT MIN(生年月日) FROM 社員 AS S2 GROUP BY S2.性別
SELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.生年月日 > WHERE S2.生年月日 OR S1.性別 = S2.性別
SELECT MIN(生年月日) FROM 社員 AS S2 WHERE S1.性別 = S2.性別
SELECT MIN(生年月日) FROM 社員 GROUP BY S2.性別
答え
解説
「最年長社員を除くすべての社員」を取り出すので、該当する生年月日が1つだけであれば、aには「SELECT MIN(生年月日) FROM 社員」のような単純なSELECT文が当てはまります。ここでは、問題文の「男女それぞれ」という記述から、性別ごとに照合する生年月日が異なる点がポイントです。
SELECT文で取得したデータの値に応じて、照合するサブクエリの値を切り替えられるSQL文に、相関サブクエリがあります。例えば、「男性の場合は1970年1月1日、女性の場合は1975年9月9日と比較」などのように機能させることができます。そのような選択肢があるか調べます。
選択肢「ア」のようにサブクエリの中でグループ化を実行すると、照合する値として複数の行が返されてしまうのでエラーになります。また、選択肢「エ」も選択肢「ア」からエイリアスを取り除いただけなので正解ではありません。
選択肢「イ」と「ウ」はともに、外部クエリ(サブクエリの外側のSQL文)とサブクエリの行を結ぶ条件が設定されており、相関サブクエリとして機能します。しかし、選択肢「イ」は、「S1.性別 = S2.性別」という性別のほかに「S1.生年月日 > WHERE S2.生年月日」という条件も設定されています。この条件により、性別ごとの最年長社員ではなく、単純に全社員のうちの最年長社員の生年月日と比較されてしまうため、正解ではありません。
選択肢「ウ」も相関サブクエリの形式になっています。外部クエリとサブクエリの関連付けは「S1.性別 = S2.性別」と、性別のみを照合する条件になっているので、性別ごとに最年長社員の生年月日を取得できます。従って、選択肢「ウ」が正解です。
![]() |
2/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」などを紹介していきます。今回は、「各種ガイドラインが示すコンプライアンス要件に、データベースのセキュリティはどのように記載されているのか」を解説します
![]() |
|
|
|
![]() |