基本情報技術者試験におけるSQL問題は、問題文を正確に理解し、適切なSQL文を選択することが求められます。特に、サブクエリを使ったデータの抽出方法や、集計関数(COUNT)を使用した条件設定に関しては、多くの受験者が悩むポイントです。この記事では、職務がプログラマである社員が5人未満の部署コードを抽出するSQL文の選び方を解説します。
1. 問題の概要
問題文では、「社員」表から「職務がプログラマである社員が5人未満の部署の部署コードを探す」という条件が与えられています。この問題を解くためには、サブクエリを利用して、各部署の「プログラマ」職務の社員数を数える必要があります。選択肢から正しいSQL文を選ぶためには、構文の理解が重要です。
2. サブクエリの使い方とCOUNT関数
サブクエリとは、SQL文の中で他のSQL文を使う方法です。この問題では、サブクエリを使用して、部署ごとのプログラマの社員番号をカウントし、その数が5人未満の部署コードを取得します。具体的には、サブクエリのCOUNT関数を用いて「社員番号」を数え、職務が「プログラマ」である条件を設定します。
COUNT関数は、指定した列に含まれる非NULLの値を数える集計関数です。ここでは、社員番号(S2.社員番号)を数えることで、各部署におけるプログラマの数を求めています。
3. SQL文の選択肢を理解する
問題文に与えられたSQL文の選択肢を見てみましょう。
- ア SELECT DISTINCT 部署コード FROM 社員 S1 WHERE 5 > (SELECT COUNT(S2.社員番号) FROM 社員 S2 WHERE S1.部署コード = S2.部署コード AND S2.職務 = ‘プログラマ’)
- イ SELECT DISTINCT 部署コード FROM 社員 S1 WHERE 5 > (SELECT COUNT(S2.社員番号) FROM 社員 S2 WHERE S1.部署コード = S2.部署コード AND S2.職務 <> ‘プログラマ’)
- ウ SELECT DISTINCT 部署コード FROM 社員 S1 WHERE EXISTS (SELECT * FROM 社員 S2 WHERE S1.部署コード = S2.部署コード AND S2.職務 = ‘プログラマ’) GROUP BY S1.部署コード HAVING COUNT(*) < 5
- エ SELECT DISTINCT 部署コード FROM 社員 S1 WHERE S1.部署コード IN (SELECT S2.部署コード FROM 社員 S2 WHERE S1.部署コード = S2.部署コード AND S2.職務 = ‘プログラマ’ GROUP BY S1.部署コード HAVING COUNT(*) < 5)
4. 正しいSQL文(ア)の選び方
選択肢「ア」を選ぶ理由は、サブクエリで「社員番号」をカウントし、職務が「プログラマ」である条件を指定している点です。これにより、各部署におけるプログラマの人数を正確に数え、その数が5未満の部署コードを抽出することができます。
「イ」は職務が「プログラマ」でない社員をカウントしており、問題の条件と一致しません。また、「ウ」と「エ」はGROUP BY句を使用しているため、集計結果に対する制約が異なり、意図する結果が得られません。
5. サブクエリの構造とデータベース設計
サブクエリを使用する際は、データベースの設計を理解しておくことが重要です。例えば、「社員」表における「職務」や「部署コード」は、部署ごとの社員の職務を正確に把握するための重要な情報です。サブクエリによって、これらの情報を適切に絞り込むことができます。
このように、SQLの選択肢を解く際は、問題文の意図を正確に理解し、どのようなデータを抽出するのかを考えることが大切です。
6. まとめ
基本情報技術者試験のSQL問題では、サブクエリを使った集計や条件指定の方法がよく出題されます。問題文をよく読み、条件を正確に理解したうえで、適切なSQL文を選択することが求められます。今回の問題では、選択肢「ア」が正解であり、その理由はプログラマ職務の社員数を正確にカウントしている点にあります。
SQLの問題を解くには、実際に問題を解いてみて、さまざまなパターンを経験することが効果的です。しっかりと理解を深め、実践的な問題解決能力を高めていきましょう。
コメント