本記事は、「基本情報技術者試験の過去問解説」をしながら「SQLの練習」を同時にやってみよう!という趣旨の内容です。
SQL文は実際に動かしてみないと、どんな操作をしているのかイメージしづらいと思います。
そこで、実際のデータベースをお見せしながら解説していきます。
少しでもSQL・データベースをイメージできるようになっていただければ嬉しいです!
一緒にSQLを実行してみたい人は、コードの右上のコピーボタンから簡単にSQL文をコピペできます。ぜひご利用ください。
はじめに
開発環境について(よくわからない人は飛ばしてね)
今回使用するのは、オープンソースの関係データベース(RDB)であるMySQLです。
次の要領で環境構築しました。
- Windows搭載のPCにMySQLをインストール
- コマンドラインを使ってデータベースを作成
- 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;
作成したテーブルに行を挿入
「学生」「学部」テーブルはまだ空っぽなので、中身を追加していきましょう。
/*学生テーブルに行を挿入*/
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
-
”氏名”の列だけ表示してね
実行結果はこちら
氏名の列に、”応用花子”さんと”情報太郎”さんが表示されました。
問題の正答選択肢と一致しています。
ちなみに、「and gakubu.jyusho = ‘新宿’」の部分を削除した以下のSQLを実行すると…
/*「新宿」の条件を削除した場合*/
select shimei from gakusei, gakubu
where shozoku = gakubumei;
学生全員の名前が表示されます。
おわりに
今回は基本情報技術者試験の過去問解説と、SQLの練習を同時にやってみました。
ただ問題を見て解くだけの場合よりも、データベースのイメージを掴んでもらえたら嬉しいです!
他の問題についても、SQLを動かして記事にしてみたいと思います。
次回からは、開発環境の紹介とデータベースの作成の内容は省略します。
お読みいただきありがとうございました!
コメント