リレーショナルデータベース演習(全15回)
大学で使用した自作の資料等を,手直しの上公開している. クリエイティブ・コモンズ BY NC SA.
テーブル定義、SQL問い合わせ、データベース設計、さらには集計、結合、正規化など、データベースシステムに関連する実践的なスキルを身に着けます.
【サイト内の関連ページ】
目次
- de-1. Microsoft Access の起動と終了,画面の説明,基本操作 [PDF], [パワーポイント], [HTML]
- de-2. Microsoft Access のデータベース操作(1) [PDF], [パワーポイント], [HTML]
- de-3. Microsoft Access のデータベース操作(2) [PDF], [パワーポイント], [HTML]
- de-4. Microsoft Access のデータベース操作(3) [PDF], [パワーポイント], [HTML]
- de-5. SQL 問い合わせの基本: SELECT、FROM、WHERE、DISTINCT、IN、BETWEEN、SQL 問い合わせの基本構造、SQL による集計(AVG, SUM, COUNTなど) [PDF], [パワーポイント], [HTML]
- de-6. テーブルの結合:JOIN、結合と SQL 問い合わせ [PDF], [パワーポイント], [HTML]
- de-7. グループ化と集約:GROUP BY、SQL によるグループ化と集約、データの分析 [PDF], [パワーポイント], [HTML]
- de-8. 種々の問い合わせ:IN、副問い合わせ、論理演算、AND、OR [PDF], [パワーポイント], [HTML]
- de-9. データベース設計の実践:正規化の目的と手順、種々の正規形、SQLを用いた正規化 [PDF], [パワーポイント], [HTML]
- de-10. データベース設計ベストプラクティス:主キーと外部キー、設計手法 [PDF], [パワーポイント], [HTML]
- de-11. データベース操作:INSERT、UPDATE、DELETE [PDF], [パワーポイント], [HTML]
- de-12. 中間まとめ [PDF], [パワーポイント], [HTML]
- de-14. Access のデータベースツール [PDF], [パワーポイント], [HTML]
- de-15. リレーショナルデータベース活用演習 [PDF], [パワーポイント], [HTML]
- de-16. 並べ替え(ソート) [PDF], [パワーポイント], [HTML]
- 行の挿入,SQL 問い合わせのまとめ [PDF], [パワーポイント], [HTML]
詳細
1. Microsoft Access の起動と終了,画面の説明,基本操作
【資料】
【概要】
Accessはデータベースシステムのソフトウェアです。Accessの基本操作には、Accessの起動、データベースの新規作成、終了があります。データはテーブルと呼ばれる表形式のデータ構造に格納され、各テーブルには名前があり、情報は属性(列)で表現されます。これらの基本的な概念と操作はデータベース管理の基礎であり、Accessを使ったデータベース作成と操作に不可欠です。データベースを効果的に利用するために、これらを理解することが重要です。
【演習】
- 演習1.Access の利用開始
- 演習2.テーブルの新規作成
- 演習3.データの挿入と保存
2. Microsoft Access のデータベース操作(1)
【資料】
【概要】
Microsoft Accessは、リレーショナルデータベースを容易に作成し、管理するためのソフトウェアです。リレーショナルデータベースは、データを関連付けられたテーブルに保存し、それらのテーブル間で情報を結びつける仕組みです。テーブル定義は、リレーショナルデータベース内のテーブルの構造を定義するプロセスです。テーブルは列で構成され、これらの列は「属性」とも呼ばれます。属性には、データ型(たとえば「数値」や「短いテキスト」など)が指定されます。これにより、問い合わせ(または「クエリ」とも呼ばれる)は、データベースからデータを取得する手段です。Accessでは、ビジュアルなデザインビューを使用した方法と、SQLコマンドを記述するSQLビューの2つの方法で問い合わせを作成できます。SQLビューでは、SQLコマンドを直接記述してデータベースに対して高度な操作を行うことができます。具体的には、SQLを利用して、テーブル定義や問い合わせを実行できる。その他、データベースの多くの操作を実行できます。
【演習】
- 演習1.Access の SQL ビューを用いたテーブル定義
create table 商品 ( ID autoincrement, 商品名 text, 単価 integer );
- 演習2.Access のデータシートビューを用いたデータの追加
Accessのデータシートビューを使用
- 演習3.Access の SQL ビューを用いた問い合わせ
select * from 商品;
select 商品名, 単価 from 商品;
select 商品名, 単価 from 商品 where 単価 > 80;
- 自習
create table 購入 ( 購入者 text, 商品番号 integer );
select * from 購入 where 商品番号 = 1;
3. Microsoft Access のデータベース操作(2)
【資料】
【概要】
Microsoft Accessにおけるデータベース操作の基本的な手順と概念について、復習と発展を行います。特に、SQLを用いた問い合わせ(クエリ)の重要性と実際の使い方に重点を置いています。内容としては、リレーショナルデータベースの仕組み、テーブル定義の方法、データ追加の方法を復習し、発展的内容として、SQLによる重複行の除去とテーブル分割を取り上げています。重複行除去にはDISTINCTを使い、同じ値の行を1行だけに絞り込む方法を説明します。テーブル分割は、データの冗長性を排除するために行うものです。テーブル分割の結果、新しくできる2つのテーブルを保存することになりますが、そのとき、Access独自の機能「INTO」を使って新しいテーブルに結果を保存しています。
【演習】
- 演習1.Access の SQL ビューを用いたテーブル定義
create table 朝食と値段 ( 名前 text, 朝食 text, 値段 integer );
- 演習2.Access のデータシートビューを用いたデータの追加
Accessのデータシートビューを使用
- 演習3.Access の SQL ビューを用いた重複行除去
SELECT DISTINCT 朝食 FROM 朝食と値段;
- 演習4.Access の SQL ビューを用いたテーブル分割
SELECT DISTINCT 名前, 朝食 INTO 各自の朝食 FROM 朝食と値段;
SELECT DISTINCT 朝食, 値段 INTO 朝食メニュー FROM 朝食と値段;
4. Microsoft Access のデータベース操作(3)
【資料】
【概要】
Accessを用いた継続的な演習を通じて、SQLでのテーブル定義(CREATE TABLE)、Accessのデータシートビューを活用したデータ追加、SQL問い合わせ(SELECT FROM WHERE)のスキル向上を行います。さらに、SQLのLIKEを用いた高度なパターンマッチング手法を知り、SQLに上達します。これに加えて、SELECT DISTINCTを使用した重複の除去なども含め、特定の条件に合致するデータをSQLを用いて効率的に抽出する演習も行います。SQLは多くのデータベースシステムで採用されているため、一度マスターすれば、多種多様な環境でそのスキルを活かすことが可能です。また、データの抽出スキルはビジネスにおいても価値のあるものとなります。
【演習】
- 演習1.Access の SQL ビューを用いたテーブル定義
create table メニュー ( 名前 text, 値段 integer );
- 演習2.Access のデータシートビューを用いたデータの追加
Accessのデータシートビューを使用
- 演習3.パターンマッチ
select * from メニュー where 名前 like '*うどん*';
select * from メニュー where 名前 like '*カレー*';
select * from メニュー where 名前 like '*定食*';
- 演習4.実データを用いたデータ検索の演習
Access データベースファイル: db4-4.accdb
SELECT DISTINCT 教育 FROM 米国成人調査データ;
SELECT DISTINCT 職業 FROM 米国成人調査データ WHERE 年収5万ドル以上か = '>50K';
SELECT DISTINCT 教育 FROM 米国成人調査データ WHERE 教育 LIKE '*大学*';
5. SQL 問い合わせの基本: SELECT、FROM、WHERE、DISTINCT、IN、BETWEEN、SQL 問い合わせの基本構造、SQL による集計(AVG, SUM, COUNTなど)
【資料】
- PDFファイル: sqintroenshu.pdf
- パワーポイントファイル(PDFファイルと同じ内容): sqintroenshu.pptx
【概要】
SQLの基本的なキーワード、SELECT、FROM、WHEREを理解することで、リレーショナルデータベースのテーブルでのデータ管理について理解が深まり、条件指定による柔軟なデータアクセスのスキルを習得できます。例えば、SELECT * FROM T;はテーブルTの全てのデータを取得し、SELECT a, b FROM T WHERE b > 80;は特定の条件を満たすデータだけを選択します。また、SELECT DISTINCT a FROM T;やSELECT * FROM T WHERE c LIKE '%階';のように、重複行の排除や特定のパターンに一致するデータの取得、AVG(平均)、MAX(最大)、MIN(最小)、SUM(合計)、COUNT(行数のカウント)による集計など、多彩な方法でデータを取得、分析できます。これらの基本操作は、データベースの日常的な操作や更に複雑な問い合わせの基盤となり、効果的なデータ取得や分析が可能となります。
【演習】
Access データベースファイル: Database31.accdb
- 演習1.Access の SQL ビューを用いたテーブル定義
CREATE TABLE 記録 ( 名前 TEXT, 得点 INTEGER, 居室 TEXT);
- 演習2.Access のデータシートビューを用いたデータの追加
Accessのデータシートビューを使用
- 演習3.SQL による問い合わせ(クエリ)
Access の SQL ビューを使用。1つずつ実行。
1
SELECT * FROM 記録;
2
SELECT 名前 FROM 記録;
3
SELECT 得点 FROM 記録;
4
SELECT 居室 FROM 記録;
5
SELECT DISTINCT 居室 FROM 記録;
6
SELECT 名前, 得点 FROM 記録 WHERE 得点 > 80;
7
SELECT 名前, 得点 FROM 記録 WHERE 得点 BETWEEN 80 AND 85;
8
SELECT AVG(得点) FROM 記録;
9
SELECT * FROM 記録 WHERE 居室 LIKE '*階';
10
SELECT * FROM 記録 WHERE 居室 IN ('1階', '2階');
6. テーブルの結合:JOIN、結合と SQL 問い合わせ
【資料】
【概要】結合は、リレーショナルデータベースにおいて異なるテーブルを結びつけ、新たなテーブルを生成する操作です。通常、結合条件は2つのテーブルの特定の属性同士の値が等しいという条件を指定しますが、複雑な条件も指定できます。結合はSQL言語を用いて行われ、複数のテーブルを効果的に組み合わせてデータを取得でき、データベースの柔軟性と効率性を向上させます。結合を習得することで、データベースのクエリや分析を効果的に行い、意思決定や問題解決能力が向上します。結合を行う際、SQLでは通常、以下のような構文を使用します。JOINキーワードを使用して2つのテーブルを結合し、ON句で結合条件を指定します。ここでは、結合条件として、2つのテーブルの特定の属性同士の値が等しいという条件を指定していますが、他の条件も指定できます。このSQL文を実行することで、2つのテーブルが結合され、新しい結合されたテーブルが生成されます。
ただし、Access は機能制限があり、SQLの世界標準の機能がすべては動きません。 次のような書き方になります。
Access での書き方
SELECT * FROM 商品 INNER JOIN 購入 ON 商品.ID = 購入.商品番号 WHERE 購入.購入者 = 'X';
SQLの世界標準
SELECT * FROM 商品 JOIN 購入 ON 商品.ID = 購入.商品番号 AND 購入.購入者 = 'X';
【演習】
- 演習1.AccessのSQLビューを用いたテーブル定義、データの追加
Access の SQL ビューを使用.SQL を1つずつ実行.リスト
1
CREATE TABLE 商品 ( ID INTEGER, 商品名 TEXT, 単価 INTEGER);
2
INSERT INTO 商品 VALUES(1, 'みかん', 50);
3
INSERT INTO 商品 VALUES(2, 'りんご', 100);
4
INSERT INTO 商品 VALUES(3, 'メロン', 500);
5
CREATE TABLE 購入 ( 購入者 TEXT, 商品番号 INTEGER);
6
INSERT INTO 購入 VALUES('X', 1);
7
INSERT INTO 購入 VALUES('X', 3);
8
INSERT INTO 購入 VALUES('Y', 2);
演習1が終わったら、Accessを閉じずに、演習2に進んでください。
演習1をうまく行えなかった人は、次のデータベースファイルを参考にしてください。うまく終えた人には必要のないものです。
- 演習2.SQLによる結合
Access の SQL ビューを使用.SQL を1つずつ実行.
1. 単純な表示
select * FROM 商品;
2. 結合
SELECT * FROM 商品 INNER JOIN 購入 ON 商品.ID = 購入.商品番号;
3. 複数の条件の指定
SELECT * FROM 商品 INNER JOIN 購入 ON 商品.ID = 購入.商品番号 WHERE 購入.購入者 = 'X';
4. 表示される属性を絞り込む
SELECT 商品名, 購入者, 単価 FROM 商品 INNER JOIN 購入 ON 商品.ID = 購入.商品番号 WHERE 購入.購入者 = 'X';
5. 今度は、購入者 Y に関するデータ取得
SELECT 商品名, 購入者, 単価 FROM 商品 INNER JOIN 購入 ON 商品.ID = 購入.商品番号 WHERE 購入.購入者 = 'Y';
- 演習3.米国成人調査データ
使用するデータベースファイル
SELECT * FROM 米国成人調査データ INNER JOIN 対象国 ON 米国成人調査データ.母国 = 対象国.名前;
7. グループ化と集約:GROUP BY、SQL によるグループ化と集約、データの分析
【資料】
【概要】
SQLのGROUP BYと集約は、データをまとめ、大量のデータからの分析を行うための強力なツールです。たとえば、成績テーブルにおいて科目や受講者ごとにデータをグループ化することで、科目別の平均点や受講者ごとの得点合計を算出できます。このようにグループ化することでデータが見やすくなり、GROUP BY に集約(SUM、AVG、COUNTなど)を組み合わせることで、それぞれのグループに対する行数、平均、最大値、最小値を計算し、データの傾向やパターンを明らかにすることが可能になります。これらの分析結果は、ビジネスの意思決定を支援するために利用できます。GROUP BYの能力を理解しておくことは、SQL以外のツールを使うときにも役に立つ考え方であり、ビジネスや研究の課題にアプローチする上で不可欠です。
【演習】
- 演習1
Accessを使用。SQLビューで1つずつ実行してください。複数の一括実行はできません。
CREATE TABLE 成績 ( 科目 TEXT, 受講者 TEXT, 得点 INTEGER);
INSERT INTO 成績 VALUES('国語', 'A', 85);
INSERT INTO 成績 VALUES('国語', 'B', 90);
INSERT INTO 成績 VALUES('算数', 'A', 90);
INSERT INTO 成績 VALUES('算数', 'B', 96);
INSERT INTO 成績 VALUES('理科', 'A', 95);
- 演習1が終わったら、Accessを閉じずに、演習2に進んでください。
演習1をうまく行えなかった人は、次のデータベースファイルを参考にしてください。うまく終えた人には必要のないものです。
- 【演習2】
Accessを使用。SQLビューで1つずつ実行してください。複数の一括実行はできません。
単純な表示
SELECT * FROM 成績;
得点の平均
SELECT AVG(得点) FROM 成績;
国語の得点の平均
SELECT AVG(得点) FROM 成績 WHERE 科目 = '国語';
それぞれの科目の受講者数
SELECT 科目, COUNT(*) FROM 成績 GROUP BY 科目;
それぞれの科目の平均得点
SELECT 科目, AVG(得点) FROM 成績 GROUP BY 科目;
それぞれの科目について、得点が90点以上である受講者数
SELECT 科目, COUNT(*) FROM 成績 WHERE 得点 >= 90 GROUP BY 科目;
それぞれの受講者が受講している科目数
SELECT 受講者, COUNT(*) FROM 成績 GROUP BY 受講者;
それぞれの受講者の得点合計
SELECT 受講者, SUM(得点) FROM 成績 GROUP BY 受講者;
それぞれの受講者の得点平均
SELECT 受講者, AVG(得点) FROM 成績 GROUP BY 受講者;
- 【実データを用いた演習】
Accessを使用。SQLビューで1つずつ実行してください。複数の一括実行はできません。
次のAccessデータベースファイルを使用
SELECT 年齢, count(*) FROM 米国成人調査データ GROUP BY 年齢;
SELECT 教育, count(*) FROM 米国成人調査データ GROUP BY 教育;
SELECT 週当たり労働時間, count(*) FROM 米国成人調査データ GROUP BY 週当たり労働時間;
SELECT 年収5万ドル以上か, count(*) FROM 米国成人調査データ GROUP BY 年収5万ドル以上か;
SELECT 教育, 年収5万ドル以上か, count(*) FROM 米国成人調査データ GROUP BY 教育, 年収5万ドル以上か;
8. 種々の問い合わせ:IN、副問い合わせ、論理演算、AND、OR
【資料】
【概要】
SQLのIN、副問い合わせ、論理演算子ANDとORは、データベースクエリの柔軟性と効率を高める重要な要素です。INは複数の値の中から一致するものを選択します。副問い合わせは、他の問い合わせ内に埋め込まれた問い合わせで、複雑なデータ抽出や最新のデータに基づいた条件設定を可能にします。例えば、最高得点を取った受講者の特定や平均点以上の得点を持つ行の選択などが可能です。ANDとORは、複数の条件を組み合わせる際に使用され、ANDは両方の条件が成立する場合、ORはいずれか一方、または両方が成立する場合に適用されます。これらの機能を理解し適切に使用することで、データベースの操作がより効率的かつ効果的になります。
【演習】
- 演習1
Accessを使用。SQLビューで1つずつ実行してください。複数の一括実行はできません。
CREATE TABLE 成績 ( 科目 TEXT, 受講者 TEXT, 得点 INTEGER);
INSERT INTO 成績 VALUES('国語', 'A', 85);
INSERT INTO 成績 VALUES('国語', 'B', 90);
INSERT INTO 成績 VALUES('算数', 'A', 90);
INSERT INTO 成績 VALUES('算数', 'B', 96);
INSERT INTO 成績 VALUES('理科', 'A', 95);
演習1が終わったら、Accessを閉じずに、演習2に進んでください。
演習1をうまく行えなかった人は、次のデータベースファイルを参考にしてください。うまく終えた人には必要のないものです。
- 【演習2】
Accessを使用。SQLビューで1つずつ実行してください。複数の一括実行はできません。
1.単純な表示
SELECT * FROM 成績;
2.ANDによる範囲指定
SELECT * FROM 成績 WHERE 得点 >= 85 AND 得点 <= 90;
3.ANDとBETWEENによる範囲指定
SELECT * FROM 成績 WHERE 得点 BETWEEN 85 AND 90;
4.範囲指定と別の条件の組み合わせ
SELECT * FROM 成績 WHERE 科目 = '国語' AND 得点 BETWEEN 90 AND 100;
5.SQL の IN
SELECT * FROM 成績 WHERE 科目 IN ('国語', '算数');
6.最高得点の受講者
SELECT 受講者 FROM 成績 WHERE 得点 = (SELECT MAX(得点) FROM 成績);
7.平均得点よりも高いことを条件とする検索
SELECT * FROM 成績 WHERE 得点 > (SELECT AVG(得点) FROM 成績);
- 【実データを用いた演習】
Accessを使用。SQLビューで1つずつ実行してください。複数の一括実行はできません。
次のAccessデータベースファイルを使用
SELECT * FROM 米国成人調査データ WHERE 教育 IN ('10th', '11th');
SELECT * FROM 米国成人調査データ WHERE 母国 IN ('インド', 'メキシコ');
SELECT MAX(年齢) FROM 米国成人調査データ;
SELECT * FROM 米国成人調査データ WHERE 年齢 = (SELECT MAX (年齢) FROM 米国成人調査データ);
- 自習
特定の職業に従事しているすべての人のリストを取得する:
SELECT * FROM 米国成人調査データ WHERE 職業 = '専門職';
特定の年齢範囲内の人々の数をカウントする:
SELECT COUNT(*) FROM 米国成人調査データ WHERE 年齢 BETWEEN 20 AND 30;
母国ごとの平均週当たり労働時間を計算する:
SELECT 母国, AVG(週当たり労働時間) FROM 米国成人調査データ GROUP BY 母国;
特定の職業の最大教育年数を持つ人々を選択
SELECT * FROM 米国成人調査データ WHERE 教育年数 = (SELECT MAX(教育年数) FROM 米国成人調査データ);
9. データベース設計の実践:正規化の目的と手順、種々の正規形、SQLを用いた正規化
【資料】
【概要】
データベース設計では、テーブル名、属性、データ型、制約、索引などを定め、データベース全体の構造を決定します。正規化の目的は、データベース構造を最適化し、効果的な管理を実現することです。正規化により、データの冗長性を減少させ、異状の防止、効率の向上、信頼性の確保、管理の容易化など多くの利点が得られます。既存のデータベースに対する正規化は、情報無損失原則に基づき、データの冗長性を減少させるようにテーブルを分割することで行います。このプロセスは、「SELECT」や「CREATE TABLE ... AS」などのSQLコマンドを使用して実行できます。以上のことは、正規化を理解し、実際に適用するうえで役立ちます。今回の内容は、より効率的で信頼性の高いデータベースの構築と運用に寄与します。
【演習】 演習1 Accessを使用。SQLビューで1つずつ実行してください。複数の一括実行はできません。 CREATE TABLE T ( 名前 TEXT, 昼食 TEXT, 料金 INTEGER); INSERT INTO T VALUES('A', 'そば', 250); INSERT INTO T VALUES('B', 'カレーライス', 400); INSERT INTO T VALUES('C', 'カレーライス', 400); INSERT INTO T VALUES('D', 'うどん', 250); 演習1が終わったら、Accessを閉じずに、演習2に進んでください。 演習1をうまく行えなかった人は、次のデータベースファイルを参考にしてください。うまく終えた人には必要のないものです。 File e14-1.accdb 演習2 Accessを使用。SQLビューで1つずつ実行してください。複数の一括実行はできません。 単純な表示 SELECT * FROM T; 昼食の列のみ SELECT 昼食 FROM T; 重複行の除去 DISTINCT SELECT DISTINCT 昼食 FROM T; 演習3 Accessを使用。SQLビューで1つずつ実行してください。複数の一括実行はできません。 テーブル X の生成 SELECT DISTINCT 名前, 昼食 INTO X FROM T; テーブル Y の生成 SELECT DISTINCT 昼食, 料金 INTO Y FROM T; テーブル X の確認 SELECT * FROM X; テーブル Y の確認 SELECT * FROM Y; テーブルの結合により元に戻ることを確認 SELECT X.名前, X.昼食, Y.料金 FROM X INNER JOIN Y ON X.昼食 = Y.昼食; 自習1 Accessを使用。SQLビューで1つずつ実行してください。複数の一括実行はできません。 CREATE TABLE S ( StudentID INTEGER, StudentName TEXT, Course TEXT ); INSERT INTO S VALUES (1, 'Alice', 'Math'); INSERT INTO S VALUES (1, 'Alice', 'Science'); INSERT INTO S VALUES (2, 'Bob', 'History'); INSERT INTO S VALUES (3, 'Charlie', 'Math'); INSERT INTO S VALUES (3, 'Charlie', 'History'); INSERT INTO S VALUES (3, 'Charlie', 'Science'); SELECT DISTINCT StudentID, StudentName INTO U FROM S; SELECT DISTINCT StudentID, Course INTO V FROM S; SELECT * FROM S; SELECT * FROM U; SELECT * FROM V; SELECT U.StudentID, U.StudentName, V.Course FROM U INNER JOIN V ON U.StudentID = V.StudentID;
10. データベース設計ベストプラクティス:主キーと外部キー、設計手法
【資料】
【概要】
データベース設計は、テーブルの構造を定義し、データの整合性と効率的な管理を実現するプロセスです。主キーはテーブル内の各行を一意に識別するために使用され、重複することはありません。これにより、データの一意性が保証され、特定のデータへのアクセスが容易になります。一方、外部キーは他のテーブルの主キーを参照し、参照整合性制約を通じて異なるテーブル間のデータの一貫性を保ちます。データベース設計のプロセスには、テーブル名の決定、属性の設定、データ型の選択、制約の設定、索引の作成、テーブル間の関係性の定義が含まれます。例えば、大学の学生、講義、成績管理システムでは、学生テーブル、講義テーブル、成績テーブルが設計され、それぞれに主キーと外部キーが設定されます。このような設計は、データベースシステムとアプリケーションの連携を強化し、データの一元管理、効率的なアクセス、拡張性、柔軟性、セキュリティの向上をもたらします。
【演習】
11. データベース操作:INSERT、UPDATE、DELETE
【資料】
- PDFファイル: e13new.pdf
- パワーポイントファイル(PDFファイルと同じ内容): e13new.pptx
12. 中間まとめ
【資料】
- PDFファイル: e15new.pdf
- パワーポイントファイル(PDFファイルと同じ内容): e15new.pptx
14. Access のデータベースツール
【資料】
15. リレーショナルデータベース活用演習
【資料】
16. 並べ替え(ソート)
【資料】