【SQL入門・基本情報対策】データベースの過去問をSQL文を実行しながら解説①

【基本情報技術者試験】データベースの問題 SQLを実行しながら解説

本記事は、「基本情報技術者試験の過去問解説」をしながら「SQLの練習」を同時にやってみよう!という趣旨の内容です。

SQL文は実際に動かしてみないと、どんな操作をしているのかイメージしづらいと思います。

そこで、実際のデータベースをお見せしながら解説していきます。

こむぎ

少しでもSQL・データベースをイメージできるようになっていただければ嬉しいです!

一緒にSQLを実行してみたい人は、コードの右上のコピーボタンから簡単にSQL文をコピペできます。ぜひご利用ください。

目次

はじめに

開発環境について(よくわからない人は飛ばしてね)

今回使用するのは、オープンソースの関係データベース(RDB)であるMySQLです。

次の要領で環境構築しました。

  1. Windows搭載のPCにMySQLをインストール
  2. コマンドラインを使ってデータベースを作成
  3. EclipseからMySQLのデータベースに接続

ということで、Eclipse上でSQLを書いて実行していきます。

データベースの作成

まず、基本情報技術者試験の過去問を解説するためのデータベースを作成します。

データベースの名前は「FE(基本情報技術者)」とします。

create database FE;

この「FEデータベース」の中に、問題ごとにテーブルを作成していきます。

データベースの選択

これからFEデータベースを使うよ~」というSQL文を実行。

use FE;

「use FE;」を実行したあとに、テーブル作成やデータ操作を行っていきます。


【ちなみに】データベースの削除は下のSQL文でできます

drop database FE;

今回の問題:平成31年春期 午前試験 問29

“学生”表と”学部”表に対して次のSQL文を実行した結果として,正しいものはどれか。

〔SQL文〕

SELECT 氏名 FROM 学生, 学部

  WHERE 所属 = 学部名 AND 学部.住所 = ‘新宿’

基本情報技術者試験ドットコム(https://www.fe-siken.com/fekakomon.php)

問題文中に登場する『表』は、このあと作成していきます。

テーブル作成・構造の確認

まず、この問題で使用する2つの表(テーブル)”学生”と”学部”を作ります。

設定する列名は、過去問の問題文で出てきた表の列名をローマ字にしたものです。

(例) “氏名”を”shimei”とする

/*学生テーブルを作成*/
 create table gakusei(
   shimei varchar(20) not null primary key,
   shozoku varchar(10),
   jyusho varchar(10)
 );

/*学部テーブルを作成*/
 create table gakubu(
   gakubumei varchar(10) not null primary key,
   jyusho varchar(10)
 );

「describe テーブル名;」で、作成したテーブルの構造を確認してみましょう。

/*作成したテーブルの構造を確認*/
 describe gakusei;
 describe gakubu;
「describe_gakusei;」実行結果
「describe gakusei;」の実行結果
「describe gakubu;」の実行結果

作成したテーブルに行を挿入

「学生」「学部」テーブルはまだ空っぽなので、中身を追加していきましょう。

/*学生テーブルに行を挿入*/
insert into gakusei values
  ('応用花子','理','新宿'),
  ('高度次郎','人文','渋谷'),
  ('午前桜子','経済','新宿'),
  ('情報太郎','工','渋谷');

/*学部テーブルに行を挿入*/
insert into gakubu values
  ('工','新宿'),
  ('経済','渋谷'),
  ('人文','渋谷'),
  ('理','新宿');

間違いなくデータを追加できたかどうか確認してみます。

SELECT * FROM テーブル名;」で、指定したテーブルからすべての列を取り出し、中身を確認します。

/*表の問合せ(すべての列を取り出す)*/
select * from gakusei;
select * from gakubu;
“学生”表
“学部”表

問題のSQL文を実行

/*問題のSQL文*/
select shimei from gakusei, gakubu
	where shozoku = gakubumei and gakubu.jyusho = '新宿';

『select』『from』などは、小文字でも大文字でも同じ意味として実行できます。

これを話し言葉にするとこんな感じ(意訳)。

from gakusei, gakubu

“学生”表と”学部”表を使うよ

shozoku = gakubumei

“学生”表と”学部”表を、”所属”列と”学部名”列でくっつけてね(表の結合)

gakubu.jyusho = ‘新宿’

”学部”の”住所”が「新宿」になっている行を選択してね

select shimei

”氏名”の列だけ表示してね


実行結果はこちら

問題のSQL文を実行した結果

氏名の列に、”応用花子”さんと”情報太郎”さんが表示されました。

問題の正答選択肢と一致しています。

ちなみに、「and gakubu.jyusho = ‘新宿’」の部分を削除した以下のSQLを実行すると…

/*「新宿」の条件を削除した場合*/
select shimei from gakusei, gakubu
	where shozoku = gakubumei;

学生全員の名前が表示されます。

問題のSQL実行結果2
「and gakubu.jyusho = ‘新宿’」を削除して実行した結果

おわりに

今回は基本情報技術者試験の過去問解説と、SQLの練習を同時にやってみました。

ただ問題を見て解くだけの場合よりも、データベースのイメージを掴んでもらえたら嬉しいです!

他の問題についても、SQLを動かして記事にしてみたいと思います。

次回からは、開発環境の紹介とデータベースの作成の内容は省略します。

こむぎ

お読みいただきありがとうございました!

【基本情報技術者試験】データベースの問題 SQLを実行しながら解説

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次