平成21年度データベーススペシャリスト試験の合格を目指して

のんびりして受験しないうちに試験制度が変更になり、 テクニカルエンジニアデータベースはデータベーススペシャリスト試験に変わりました。 今度こそはデータベーススペシャリスト試験の合格を目指してがんばりますよ。

試験区分
試験区分
ITパスポート試験
基本情報技術者試験
応用情報技術者試験




ITストラテジスト試験
システムアーキテクト試験
プロジェクトマネージャ試験
ネットワークスペシャリスト試験
データベーススペシャリスト試験
エンベデットシステムスペシャリスト試験
情報セキュリティスペシャリスト試験
ITサービスマネージャ試験
システム監査技術者試験

MySQLを使ったSQL実習方法

 平成19年度春期のテクニカルエンジニア(データベース)試験の問35と

平成19年度春期の基本情報技術者試験の問61を
もとに

   SQL問題を例に実習の方法を説明します。

SQL実習サンプル1

平成19年度 春期 テクニカルエンジニア(データベース) 午前

問35 "社員"表から、男女それぞれの最年長社員を除くすべての社員を取り出すSQL文とするために、aに入る副問合せはどれか。ここで、"社員"表は次の構造とし、下線部は主キーを表す。

社員(社員番号,社員名,性別,生年月日)

select 社員番号,社員名 from 社員 as s1 where 生年月日 > ( a );

ア select min(生年月日) from 社員 as s2 group by s2.性別

イ select min(生年月日) from 社員 as s2 where s1.生年月日>s2.生年月日 or s1.性別=s2.性別

ウ select min(生年月日) from 社員 as s2 where s1.性別=s2.性別

エ select min(生年月日) from 社員 group by s2.性別



解答はウです。

架空のデータを作成し、MySQLでクエリーを実行してみます。

1.データベースの作成
create database data1211;

次の命令でデータベースを作成します。 create database データベース名;

2.データベースの選択
use data1211
MySQLでは、データベースを選択してテーブル作成などの作業をすすめます。
3.テーブルの作成
create table 社員(
社員番号 char(5) NOT NULL PRIMARY KEY,
社員名 varchar(20),
性別 char(1),
生年月日 date);

4.データの格納
insert into 社員 values ('S8010','山田太郎','1','1950-10-1');
insert into 社員 values ('S8011','山田次郎','1','1960-10-10');
insert into 社員 values ('S8112','山田三郎','1','1982-5-1');
insert into 社員 values ('S8013','山田四郎','1','1985-9-23');
insert into 社員 values ('S8114','函館花子','0','1965-1-1');
insert into 社員 values ('S8015','函館春子','0','1978-4-1');
insert into 社員 values ('S8017','函館夏子','0','1982-8-1');
insert into 社員 values ('S8110','函館秋子','0','1984-9-10');

5.クエリーを実行し結果の確認
ア.
select 社員番号,社員名 from 社員 as s1 where 生年月日 > (select min(生年月日) from 社員 as s2 group by s2.性別);
ERROR 1242 (21000): Subquery returns more than 1 row

イ.
select 社員番号,社員名 from 社員 as s1 where 生年月日 > (select min(生年月日) from 社員 as s2 where s1.生年月日>s2.生年月日 or s1.性別=s2.性別);
社員番号社員名
S8011山田次郎
S8013山田四郎
S8015函館春子
S8017函館夏子
S8110函館秋子
S8112山田三郎
S8114函館花子
7 rows in set (0.00 sec)

ウ.
select 社員番号,社員名 from 社員 as s1 where 生年月日 > (select min(生年月日) from 社員 as s2 where s1.性別=s2.性別);
社員番号社員名
S8011山田次郎
S8013山田四郎
S8015函館春子
S8017函館夏子
S8110函館秋子
S8112山田三郎
6 rows in set (0.06 sec)

エ.
select 社員番号,社員名 from 社員 as s1 where 生年月日 > (select min(生年月日) from 社員 group by s2.性別);
ERROR 1054 (42S22): Unknown column 's2.社員' in 'group statement'

SQL実習サンプル2

平成19年度 春期 基本情報技術者試験 午前

問61 “商品”表に対してデータの更新処理が正しく実行できるUPDATE文はどれか。ここで,“商品”表は次の CREATE 文で定義されている。

CREATE TABLE 商品
(商品番号 CHAR(4),
      商品名 CHAR(20),
      仕入先番号 CHAR(6),
      単価 INT,
      PRIMARY KEY(商品番号));

商品 表
商品番号商品名仕入先番号単価
S001AXX000118,000
S002AYY000220,000
S003BYY000235,000
S004CZZ000340,000
S005CXX000138,000

ア UPDATE 商品 SET 商品番号 = 'S001'
      WHERE 商品番号 = 'S002';

イ UPDATE 商品 SET 商品番号 = 'S006'
      WHERE 商品名 = 'C';

ウ UPDATE 商品 SET 商品番号 = NULL
       WHERE 商品番号 = 'S002';

エ UPDATE 商品 SET 商品名 = 'D'
      WHERE 商品番号 = 'S003';

実習例

問61のデータベースを作成してみよう!
1.サンプルのSQLを実行するデータベースを作成する。
create database mysample;

2.1.で作ったデータベースを使うことをMYSQLに知らせる。
use mysample

3.テーブルを作成する。
CREATE TABLE
商品(商品番号 CHAR(4),商品名 CHAR(20),仕入先番号 CHAR(6),
単価 INT,
PRIMARY KEY(商品番号));

4.作ったテーブルにデータを追加する。
insert into 商品(商品番号,商品名,仕入先番号,単価)
values ('S001','A','XX0001',18000);

insert into 商品(商品番号,商品名,仕入先番号,単価)
values ('S002','A','YY0002',20000);

insert into 商品(商品番号,商品名,仕入先番号,単価)
values ('S003','B','YY0002',35000);

insert into 商品(商品番号,商品名,仕入先番号,単価)
values ('S004','C','ZZ0003',40000);

insert into 商品(商品番号,商品名,仕入先番号,単価)
values ('S005','C','XX0001',38000);

5.作ったテーブルを内容を確認する。
select * from 商品;
	+----------+--------+------------+-------+
| 商品番号 | 商品名 | 仕入先番号  | 単価  |
+----------+--------+------------+-------+
| S001 | A | XX0001 | 18000 |
| S002 | A | YY0002 | 20000 |
| S003 | B | YY0002 | 35000 |
| S004 | C | ZZ0003 | 40000 |
| S005 | C | XX0001 | 38000 |
+----------+--------+------------+-------+

6.問61のSQLを実行する。

1.UPDATE 商品 SET 商品番号 = 'S001' WHERE 商品番号 = 'S002';

実行結果
ERROR 1062 (23000): Duplicate entry 'S001' for key 1

2.UPDATE 商品 SET 商品番号 = 'S006' WHERE 商品名 = 'C';

実行結果
ERROR 1062 (23000): Duplicate entry 'S006' for key 1

3.UPDATE 商品 SET 商品番号 = NULL WHERE 商品番号 = 'S002';

実行結果
ERROR 1263 (22004): Column was set to data type
implicit default; NULL supplied
for NOT NULL column '蝠・刀逡ェ蜿キ' at row 1

4.UPDATE 商品 SET 商品名 = 'D' WHERE 商品番号 = 'S003';

実行結果
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from 商品;
	+----------+--------+------------+-------+
| 商品番号 | 商品名 | 仕入先番号  | 単価  |
+----------+--------+------------+-------+
| S001 | A | XX0001 | 18000 |
| S002 | A | YY0002 | 20000 |
| S003 | D | YY0002 | 35000 |
| S004 | C | ZZ0003 | 40000 |
| S005 | C | XX0001 | 38000 |
+----------+--------+------------+-------+
5 rows in set (0.00 sec)

 今後はこの方法でテクニカルエンジニア(データベース)のSQL問題を解いていきます。

カスタム検索

テクニカルエンジニア(データベース) 午前過去問題

MySQL

リンク集

Markup Validation 検証結果

Valid XHTML 1.0 Transitional

CSS Validator 検証結果

Valid CSS!

inserted by FC2 system