平成31年度 春期 ITパスポート試験 問78 解説 関係データベースの結合
関係データベースの“社員”表と“部署”表がある。“社員”表と“部署”表を結合し、社員の住所と所属する部署の所在地が異なる社員を抽出する。抽出される社員は何人か。
- ア 1
- イ 2 ✓ 正答
- ウ 3
- エ 4
解説
この問題は、両方の表に共通する部署コードをキーにしてデータを結合し、それぞれの行ごとに住所と所在地を突き合わせることで解決できます。以下の手順で確認しましょう。
- 各社員の部署コードに対応する部署の所在地を特定する
- 社員の住所と所在地の都道府県が一致するかどうかを確認する
- 一致しない社員の人数をカウントする
具体的な照合結果は以下の通りです。
- H001: 部署G02、住所は神奈川県、所在地は東京都(不一致)
- H002: 部署G01、住所は神奈川県、所在地は神奈川県(一致)
- H003: 部署G03、住所は三重県、所在地は愛知県(不一致)
- H004: 部署G04、住所は大阪府、所在地は大阪府(一致)
- H005: 部署G03、住所は愛知県、所在地は愛知県(一致)
- H006: 部署G02、住所は神奈川県、所在地は神奈川県(一致)
このうち、住所と所在地が異なるのはH001とH003の2名です。したがって、正解はイとなります。
関係データベースにおける結合操作 この問題で用いた操作は、リレーショナルデータベースにおける結合(JOIN)という機能に基づいています。結合とは、複数の表にある共通の項目(今回は部署コード)を基準にして、それらを横方向に繋ぎ合わせる処理です。データベース管理システム(DBMS)では、複数のテーブルに分かれている情報を関連付け、必要なデータを抽出するために頻繁に使用されます。
実務での活用シーン 実務においては、単一の表ですべての情報を管理しようとすると、同じ情報が何度も登場してデータに矛盾が生じやすくなります(データの重複や更新時トラブルなど)。そのため、実務のデータベース設計では、データを意味のある単位ごとに分け、今回のように必要な時に結合して利用する正規化という手法が一般的です。
SQLを用いた抽出のイメージ もしコンピュータに命令を出してこの結果を得るなら、以下のようなSQL文が考えられます。
SELECT 社員ID FROM 社員 INNER JOIN 部署 ON 社員.部署コード = 部署.部署コード WHERE 社員.住所 <> 部署.所在地;
この文では、2つの表を部署コードで結合し、WHERE句を用いて住所と所在地が等しくない( は「等しくない」という意味の演算子)データだけを抽出するように指示しています。このようなSQLの基本的な構造を理解しておくと、データ活用に関連する問題が非常に解きやすくなります。
- ITパスポート 公式サイト
- SQL入門 - SQLクエリの書き方(Progate)