リレーショナルデータベースとMicrosoft Accessの基礎:SQLによるデータ管理と分析の実践(授業資料)
カリキュラム構成
本授業は以下の4つの部で構成される。
- 第1部:導入とSQL基礎(de-1〜de-5)
Microsoft Accessの基本操作を学んだ後、データシートビュー・デザインビュー・SQLビューの3種類のビューを活用してSQLの文法とSELECT文によるデータ検索の基礎を習得する。
- 第2部:SQL応用(de-6〜de-9)
INNER JOINによるテーブル結合、GROUP BYによる集約処理、副問い合わせ、ORDER BYによる並べ替えを学び、複雑なデータ抽出と分析の手法を習得する。
- 第3部:データベース設計と理論(de-10〜de-14)
主キーと外部キーによるテーブル間の関連付け、INSERT・UPDATE・DELETEによるデータ操作、正規化理論を学習し、オンライントランザクション処理とデータウェアハウスの違いを理解する。
- 第4部:実践と活用(de-15〜de-16)
Microsoft Accessのビジュアルツール(テーブルツール、クエリデザイン、フォームウィザード、レポートウィザード)を活用したデータベース操作を実践し、総合的な活用能力を養成する。
学習内容一覧
| 回 | タイトル | 主要な学習内容 |
|---|---|---|
| de-1 | Microsoft Accessの起動と終了、画面の説明、基本操作 | データベースの概念、リレーショナルデータベースの特徴、Accessの基本操作 |
| de-2 | Microsoft Accessを用いたデータベース操作入門 | データシートビュー、デザインビュー、SQLビュー、CREATE TABLE、SELECT/FROM/WHERE |
| de-3 | Microsoft Accessを用いたデータベース操作入門(2) | テーブル定義、データ追加、正規化、整合性、トランザクション、セキュリティ |
| de-4 | リレーショナルデータベースとMicrosoft Accessの基礎 | SELECT/FROM/WHERE、LIKEによるパターンマッチング |
| de-5 | SQL基礎:テーブル定義と問い合わせ(クエリ) | CREATE TABLE、DISTINCT、LIKE、IN、BETWEEN、AVG関数 |
| de-6 | テーブル結合とSQLによるデータ統合 | INNER JOIN、ON句、Accessの制約とWHERE句による代替 |
| de-7 | SQLによるデータ分析:GROUP BYを用いたグループ化と集約 | AVG、COUNT、SUM、MAX、MIN、GROUP BY句 |
| de-8 | SQLにおける副問い合わせと論理演算子の基礎 | AND、OR、IN演算子、BETWEEN演算子、副問合せ |
| de-9 | 並べ替え(ソート) | ORDER BY句、昇順・降順、多段階ソート |
| de-10 | データベース設計の基礎:主キー・外部キーを用いたテーブル間の関連付け | PRIMARY KEY、FOREIGN KEY、REFERENCES、参照整合性制約 |
| de-11 | データベース操作:INSERT、UPDATE、DELETE | データの整合性、データ操作、トランザクション機能 |
| de-12 | 中間まとめ | テーブル構造、SQL、INNER JOINの復習 |
| de-13 | データ管理の基礎:オンライントランザクションとデータウェアハウス | オンライントランザクション、データウェアハウス、履歴データ |
| de-14 | データベース設計演習、正規化 | 正規化理論、冗長性削減、情報無損失の原則 |
| de-15 | Microsoft Accessのビジュアルなツール | テーブルツール、クエリデザイン、フォームウィザード、レポートウィザード |
| de-16 | リレーショナルデータベース活用演習 | Excelインポート、フォーム作成、SQLビューでの実行 |
到達目標
本授業を修了した受講者は、SQLを用いたデータ操作と分析ができるようになる。また、正規化理論に基づくデータベース設計を理解し、Microsoft Accessを活用した実践的なデータベース管理ができるようになる。
授業の特徴
本授業は、Microsoft Accessの3種類のビュー(データシートビュー、デザインビュー、SQLビュー)を活用し、ビジュアルな操作とSQL記述の両面からデータベース技術を習得できる構成となっている。理論学習と演習を各回で組み合わせることで、リレーショナルデータベースの基礎から応用までを段階的に習得できる。
de-1. Microsoft Access の起動と終了,画面の説明,基本操作
【資料(スライド)】
【概要】
データベースは,特定のテーマや目的に従って収集された大量のデータである.データベースシステムは,データベースを管理するシステムである.その中で,リレーショナルデータベースは,データをテーブルと呼ばれる表形式で保存し,テーブル間を関連で結ぶことで,複雑な構造を持ったデータを管理することを特徴とする.列は「属性」とも呼ばれる.各属性は「数値」「短いテキスト」などの特定のデータ型を持つ.Microsoft Accessは,このリレーショナルデータベースを作成・管理するためのソフトウェアであり,ビジュアルで親しみやすいインターフェースを提供している.リレーショナル・データベースを習得することは,データの管理や活用能力の向上につながる.
演習パート(クリックして展開)
演習
de-2. Microsoft Accessを用いたデータベース操作入門:SQLとビジュアルインターフェースの活用
【資料(スライド)】
【概要】
リレーショナルデータベース管理システム Microsoft Access の特徴としてビジュアルなインターフェースがある.テーブル定義,データの追加,問い合わせ(クエリ)などの基本操作を,データシートビュー,デザインビュー,SQLビューの3つの「ビュー」によって行うことができる.そして,SQLのCREATE TABLEを用いたテーブル定義や,SELECT,FROM,WHEREを使用した問い合わせ(クエリ)を行うこともできる.これらの操作を通じて,リレーショナルデータベースの仕組みや,データ管理の方法についても理解を深めることができる.データベース入門者を想定して,段階的な学習によってスキルの強化とデータベース理解の深化を目指す.
Accessのデータシートビューを使用
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
演習パート(クリックして展開)
演習
create table 商品 (
ID autoincrement,
商品名 text,
単価 integer
);
select *
from 商品;
select 商品名, 単価
from 商品;
select 商品名, 単価
from 商品
where 単価 > 80;
create table 購入 (
購入者 text,
商品番号 integer
);
select * from 購入 where 商品番号 = 1;
de-3. Microsoft Accessを用いたデータベース操作入門(2):SQLの基礎から実践まで
【資料(スライド)】
【概要】
リレーショナルデータベースは,データをテーブルと呼ばれる表形式で保存し,テーブル間を関連で結ぶことで,複雑な構造を持ったデータを管理することを特徴とする.主要な操作にはテーブル定義,テーブルへのデータ追加,問い合わせ(クエリ),テーブルの結合や分解がある.リレーショナルデータベースの重要な概念として,正規化(冗長なデータの排除),データの整合性,トランザクション,セキュリティがある.これらは,データの一貫性維持,効率的な情報抽出,安全なデータ管理に重要である.SQLは,データベースの問い合わせ(クエリ)やその他の操作を行う言語で,主要なコマンドにはCREATE TABLE,SELECT,FROM,WHERE,DISTINCTがある.Accessでは,SQLビューとデータシートビューを使い分けて,SQLの実行と確認を行う.以上を学ぶことで,データベース操作の実務能力と情報分析スキルの向上を図る.
Accessのデータシートビューを使用
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
演習パート(クリックして展開)
演習
create table 朝食と値段 (
名前 text,
朝食 text,
値段 integer
);
SELECT DISTINCT 朝食
FROM 朝食と値段;
SELECT DISTINCT 名前, 朝食
INTO 各自の朝食
FROM 朝食と値段;
SELECT DISTINCT 朝食, 値段
INTO 朝食メニュー
FROM 朝食と値段;
de-4. リレーショナルデータベースとMicrosoft Accessの基礎: データの効率的な管理と検索
【資料(スライド)】
【概要】
リレーショナルデータベースのSQLでは,SELECT,FROM,WHEREなどの基本的なキーワードを組み合わせることで,必要なデータを検索・抽出することができる.また,LIKEを用いたパターンマッチングにより,特定の文字列を含むデータの検索も可能である.Microsoft Accessでは,SQLビューとデータシートビューという2つの画面を使い分け,SQLの実行と結果の確認を行うことができる.SQLビューではSQL文の作成・編集を行い,データシートビューでは実際のデータの表示や編集を行う.これにより,データ検索・操作が可能となり,意思決定をサポートする重要なツールとなっている.
Accessのデータシートビューを使用
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
Access データベースファイル:
db4-4.accdb
演習パート(クリックして展開)
演習
create table メニュー (
名前 text,
値段 integer
);
select *
from メニュー
where 名前 like '*うどん*';
select *
from メニュー
where 名前 like '*カレー*';
select *
from メニュー
where 名前 like '*定食*';
SELECT DISTINCT 教育
FROM 米国成人調査データ;
SELECT DISTINCT 職業
FROM 米国成人調査データ
WHERE 年収5万ドル以上か = '>50K';
SELECT DISTINCT 教育
FROM 米国成人調査データ
WHERE 教育 LIKE '*大学*';
de-5. SQL基礎:テーブル定義と問い合わせ(クエリ)(AccessによるSELECT文の実践的理解)
【資料(スライド)】
- PDFファイル: sqintroenshu.pdf
- パワーポイントファイル(PDFファイルと同じ内容): sqintroenshu.pptx
【概要】
リレーショナルデータベースにおけるSQL操作の基本として,まず,CREATE TABLE文を使用したテーブル定義がある.そして,SQLによる問い合わせ(クエリ)の基本として,SELECT文,FROM句,WHERE句がある.SELECT文では,テーブルからのデータ取得,DISTINCTによる重複行の除去,条件指定による絞り込みが可能である.また,LIKE演算子によるパターンマッチング,IN演算子による値のリスト指定,BETWEEN演算子による範囲指定,AVG関数による平均値計算など,様々な機能がある.なお,Accessの特徴として,パターンマッチングにはワイルドカード(*)を使用する(SQL標準(%)と異なるので注意されたい).これらの基本的なSQL操作を理解することで,効率的なデータ管理と必要な情報の抽出が可能となる.
テーブル定義済み、データ追加済みのデータベースファイル
(利用は必須ではありませんが、必要な人は活用してください)
Access データベースファイル:
Database31.accdb
Accessのデータシートビューを使用
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
「記録」テーブルのすべての属性とすべての行(レコード)を取得します。テーブル内のデータを全て表示したい時の書き方です。 「記録」テーブルから「名前」属性のみを取得します。 「記録」テーブルから「得点」属性のみを取得します。 「記録」テーブルから「居室」属性のみを取得します。重複を含む全ての居室の情報を表示します。 「記録」テーブルから「居室」属性の重複を除いた一意の値だけを取得します。どのような居室があるかを把握する時に便利です。 「記録」テーブルから得点が80より大きい記録の「名前」と「得点」のみを取得します。 「記録」テーブルから得点が80以上85以下の範囲にある記録の「名前」と「得点」を取得します。BETWEENにより、特定の得点範囲のデータを抽出されます。 「記録」テーブルの「得点」属性の平均値を計算します。集計関数AVGを使用して平均値を得ます。 「記録」テーブルから「居室」属性が「階」で終わる全ての行(レコード)を取得します。パターンマッチングにより、特定のパターンを持つものを選択します。 「記録」テーブルから「居室」が'1階'または'2階'に一致するすべての行(レコード)を取得します。演習パート(クリックして展開)
演習
CREATE TABLE 記録 (
名前 TEXT,
得点 INTEGER,
居室 TEXT);
SELECT * FROM 記録;
SELECT 名前 FROM 記録;
SELECT 得点 FROM 記録;
SELECT 居室 FROM 記録;
SELECT DISTINCT 居室 FROM 記録;
SELECT 名前, 得点 FROM 記録 WHERE 得点 > 80;
SELECT 名前, 得点 FROM 記録 WHERE 得点 BETWEEN 80 AND 85;
SELECT AVG(得点) FROM 記録;
SELECT * FROM 記録 WHERE 居室 LIKE '*階';
SELECT * FROM 記録 WHERE 居室 IN ('1階', '2階');
de-6. テーブル結合とSQLによるデータ統合
【資料(スライド)】
【概要】 リレーショナルデータベースの重要な機能の一つがテーブルの結合である.結合は,複数のテーブルを特定の条件に基づいて一つにまとめる操作である.テーブルの結合は,SQLのINNER JOINとON句を使用して実行される.具体的には,商品テーブルと購入テーブルの結合では,商品テーブルの商品IDと購入テーブルの商品IDが等しいなどの条件でテーブルを結合し,誰がどの商品を購入したかというような情報を取得できる.Accessの操作では,SQLビューでSQL文を作成し,実行ボタンでコマンドを実行する.実行結果はデータシートビューで確認できる.なお,Microsoft Accessでは,ON句の後でAND,ORが使用できないなどの制約があり,ANDの代替としてWHERE句を使用する.
なお,Accessには機能制限があり,標準SQLの全機能は利用できない.以下のような構文となる:
SELECT * FROM 商品
INNER JOIN 購入
ON 商品.ID = 購入.商品番号 WHERE 購入.購入者 = 'X';
標準SQLでの記述:
SELECT * FROM 商品
JOIN 購入
ON 商品.ID = 購入.商品番号 AND 購入.購入者 = 'X';
演習パート(クリックして展開)
演習
- 「テーブルの表示」という画面が開いた場合: 「閉じる」をクリックして続けてください.
- 「テーブルの表示」という画面が開かない場合: 問題ありません.そのまま続けてください.
- 演習1.AccessのSQLビューを用いたテーブル定義,データの追加
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
-
CREATE TABLE 商品 ( ID INTEGER, 商品名 TEXT, 単価 INTEGER);「商品」というテーブルを定義しています。ここでは,ID(整数型),商品名(テキスト型),単価(整数型)の3つの属性を定義しています。
-
INSERT INTO 商品 VALUES(1, 'みかん', 50);「商品」テーブルに新しい行(レコード)を挿入しています。ID=1,商品名=みかん,単価=50円のデータです。
-
INSERT INTO 商品 VALUES(2, 'りんご', 100);「商品」テーブルに新しい行(レコード)を挿入しています。ID=2,商品名=りんご,単価=100円のデータです。
-
INSERT INTO 商品 VALUES(3, 'メロン', 500);「商品」テーブルに新しい行(レコード)を挿入しています。ID=3,商品名=メロン,単価=500円のデータです。
-
CREATE TABLE 購入 ( 購入者 TEXT, 商品番号 INTEGER);「購入」というテーブルを定義しています。ここでは,購入者(テキスト型)と商品番号(整数型)の2つの属性を定義しています。
-
INSERT INTO 購入 VALUES('X', 1);「購入」テーブルに新しい行(レコード)を挿入しています。購入者=X,商品番号=1(みかん)のデータです。
-
INSERT INTO 購入 VALUES('X', 3);「購入」テーブルに新しい行(レコード)を挿入しています。購入者=X,商品番号=3(メロン)のデータです。
-
INSERT INTO 購入 VALUES('Y', 2);「購入」テーブルに新しい行(レコード)を挿入しています。購入者=Y,商品番号=2(りんご)のデータです。
演習1が終わったら,Accessを閉じずに,演習2に進んでください.
演習1をうまく行えなかった人は,次のデータベースファイルを参考にしてください.うまく終えた人には必要のないものです. -
- 演習2.SQLによる結合
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
- 単純な表示:「商品」テーブルの全データを取得する問い合わせ(クエリ)です。
select * FROM 商品; - 結合:「商品」と「購入」テーブルを商品IDで結合し,関連するすべての行を表示します。
SELECT * FROM 商品 INNER JOIN 購入 ON 商品.ID = 購入.商品番号; - 複数の条件の指定:購入者Xが購入した商品の全情報を表示します。
SELECT * FROM 商品 INNER JOIN 購入 ON 商品.ID = 購入.商品番号 WHERE 購入.購入者 = 'X'; - 表示される属性を絞り込む:購入者Xについて,商品名,購入者,単価のみを表示します。
SELECT 商品名, 購入者, 単価 FROM 商品 INNER JOIN 購入 ON 商品.ID = 購入.商品番号 WHERE 購入.購入者 = 'X'; - 今度は,購入者 Y に関するデータ取得:購入者Yの商品名,購入者,単価情報を取得します。
SELECT 商品名, 購入者, 単価 FROM 商品 INNER JOIN 購入 ON 商品.ID = 購入.商品番号 WHERE 購入.購入者 = 'Y';
- 単純な表示:「商品」テーブルの全データを取得する問い合わせ(クエリ)です。
- 演習3.米国成人調査データ
使用するデータベースファイル
SELECT * FROM 米国成人調査データ INNER JOIN 対象国 ON 米国成人調査データ.母国 = 対象国.名前;
de-7. SQLによるデータ分析:GROUP BYを用いたグループ化と集約
【資料(スライド)】
【概要】
SQLを用いたデータ分析においては,AVG,COUNT,SUM,MAX,MINなどの集約関数を適用することで,統計値(AVG:平均,COUNT:行数,SUM:合計,MAX:最大,MIN:最小)を算出できる.GROUP BY句を用いると,同じ属性値を持つデータをグループ化し,そのグループごとに集約処理を行うことが可能となる.これにより,科目別の平均点や受講者数といった分析を実施できる.さらに,WHERE句と組み合わせることで,特定の条件を満たすデータに対してのみグループ化と集約を行い,より詳細な分析が可能となる.このような分析手法は,トレンド分析やセグメント分析などの高度なデータ分析にも応用できるものである.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
演習1をうまく行えなかった人は,次のデータベースファイルを参考にしてください.うまく終えた人には必要のないものです.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
単純な表示
得点の平均
国語の得点の平均
それぞれの科目の受講者数
それぞれの科目の平均得点
それぞれの科目について,得点が90点以上である受講者数
それぞれの受講者が受講している科目数
それぞれの受講者の得点合計
それぞれの受講者の得点平均
次のAccessデータベースファイルを使用
演習パート(クリックして展開)
演習
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);
SELECT * FROM 成績;
SELECT AVG(得点) FROM 成績;
SELECT AVG(得点) FROM 成績 WHERE 科目 = '国語';
SELECT 科目, COUNT(*) FROM 成績 GROUP BY 科目;
SELECT 科目, AVG(得点) FROM 成績 GROUP BY 科目;
SELECT 科目, COUNT(*) FROM 成績 WHERE 得点 >= 90 GROUP BY 科目;
SELECT 受講者, COUNT(*) FROM 成績 GROUP BY 受講者;
SELECT 受講者, SUM(得点) FROM 成績 GROUP BY 受講者;
SELECT 受講者, AVG(得点) FROM 成績 GROUP BY 受講者;
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万ドル以上か;
de-8. SQLにおける副問い合わせと論理演算子(AND, OR)の基礎
【資料(スライド)】
【概要】
SQLにおける検索条件の指定では,複数の条件を組み合わせることができる.ANDは両方の条件が成立する場合を,ORはいずれかの条件が成立する場合を示すためのものである.また,複数の値のいずれかに一致するかをテストするIN演算子や,範囲指定のBETWEEN演算子もある.より高度な検索を実現する機能として副問合せがある.副問合せは別のSQL問合せ(クエリ)内に埋め込まれたSQL問合せであり,たとえば最高得点の受講者を検索する場合など,複数のSQLを組み合わせることで複雑な条件での検索が可能となる.これらは高度な検索を実現する上でも重要な役割を果たしている.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
演習1が終わったら,Accessを閉じずに,演習2に進んでください.
演習1をうまく行えなかった人は,次のデータベースファイルを参考にしてください.うまく終えた人には必要のないものです.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
次のAccessデータベースファイルを使用
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
演習パート(クリックして展開)
演習
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);
SELECT * FROM 成績;
SELECT * FROM 成績 WHERE 得点 >= 85 AND 得点 <= 90;
SELECT * FROM 成績 WHERE 得点 BETWEEN 85 AND 90;
SELECT * FROM 成績 WHERE 科目 = '国語' AND 得点 BETWEEN 90 AND 100;
SELECT * FROM 成績 WHERE 科目 IN ('国語', '算数');
SELECT 受講者 FROM 成績 WHERE 得点 =
(SELECT MAX(得点) FROM 成績);
SELECT * FROM 成績 WHERE 得点 >
(SELECT AVG(得点) FROM 成績);
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 米国成人調査データ);
de-9. 並べ替え(ソート)
【資料(スライド)】
【概要】 SQLにおける並べ替え(ソート)では,ORDER BY句を用いることで,指定した列の値に基づいて昇順または降順にデータを整列させることができる.複数の列を指定した場合,第一優先・第二優先と順に適用される多段階の並べ替えが実現する.GROUP BY句とORDER BY句を組み合わせることで,グループ化された集計結果を並べ替えることもできる.
de-10. データベース設計の基礎:主キー・外部キーを用いたテーブル間の関連付けとSQL実践
【資料(スライド)】
【概要】
リレーショナルデータベースのテーブルでは,主キーを用いて行を一意に識別し,外部キーを用いて他のテーブルと関連付けを行う.テーブルの定義にはCREATE TABLE文を使用し,主キー制約(PRIMARY KEY)や参照整合性制約(FOREIGN KEY ... REFERENCES)を指定する.例として,学生テーブル,講義テーブル,成績テーブルから構成され,学生と講義の間の多対多の関連を成績テーブルで扱う場合では,学生テーブルと講義テーブルに主キーがあり,成績テーブルには他の2つのテーブルへの外部キーがある.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
演習1が終わったら,Accessを閉じずに,演習2に進んでください.
演習1をうまく行えなかった人は、次のデータベースファイルを参考にしてください。うまく終えた人には必要のないものです。
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
演習3が終わったら、Accessを閉じずに、演習4に進んでください。
演習3をうまく行えなかった人は、次のデータベースファイルを参考にしてください。うまく終えた人には必要のないものです。
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
演習パート(クリックして展開)
演習
CREATE TABLE 商品 (
ID INTEGER PRIMARY KEY,
商品名 TEXT,
単価 INTEGER);
CREATE TABLE 購入 (
ID INTEGER PRIMARY KEY,
購入者 TEXT,
商品ID INTEGER,
数量 INTEGER,
FOREIGN KEY (商品ID) REFERENCES 商品(ID));
INSERT INTO 商品 VALUES(1, 'みかん', 50);
INSERT INTO 商品 VALUES(2, 'りんご', 100);
INSERT INTO 商品 VALUES(3, 'メロン', 500);
INSERT INTO 購入 VALUES(1, 'X', 1, 10);
INSERT INTO 購入 VALUES(2, 'Y', 2, 5);
SELECT * FROM 商品;
SELECT * FROM 購入;
SELECT 購入.購入者, 商品.商品名, 商品.単価 * 購入.数量
FROM 購入
INNER JOIN 商品 ON 購入.商品ID = 商品.ID;
SELECT 購入.購入者, 商品.商品名, 数量, 単価
FROM 購入
INNER JOIN 商品 ON 購入.商品ID = 商品.ID;
CREATE TABLE 学生 (
学生ID INTEGER PRIMARY KEY,
名前 TEXT,
専攻 TEXT
);
CREATE TABLE 講義 (
講義ID INTEGER PRIMARY KEY,
講義名 TEXT,
担当教員 TEXT
);
CREATE TABLE 成績 (
学生ID INTEGER,
講義ID INTEGER,
成績 INTEGER,
PRIMARY KEY (学生ID, 講義ID),
FOREIGN KEY (学生ID) REFERENCES 学生(学生ID),
FOREIGN KEY (講義ID) REFERENCES 講義(講義ID)
);
INSERT INTO 学生 VALUES (1, '山田太郎', '情報科学');
INSERT INTO 学生 VALUES (2, '鈴木花子', '物理学');
INSERT INTO 学生 VALUES (3, '佐藤一郎', '化学');
INSERT INTO 講義 VALUES (101, 'プログラミング基礎', '田中健');
INSERT INTO 講義 VALUES (102, '物理学入門', '伊藤博');
INSERT INTO 講義 VALUES (103, '有機化学', '中村悟');
INSERT INTO 成績 VALUES (1, 101, 85);
INSERT INTO 成績 VALUES (1, 102, 90);
INSERT INTO 成績 VALUES (2, 101, 75);
INSERT INTO 成績 VALUES (2, 103, 80);
INSERT INTO 成績 VALUES (3, 103, 95);
select * from 学生;
select * from 講義;
select * from 成績;
select 学生.名前, 学生.専攻, 成績.講義ID, 成績.成績
from 学生 inner join 成績 on 学生.学生ID = 成績.学生ID;
select 成績.学生ID, 講義.講義名, 講義.担当教員, 成績.成績
from 講義 inner join 成績 on 講義.講義ID = 成績.講義ID;
SELECT 学生.名前, 学生.専攻, 講義.講義名, 講義.担当教員, 成績.成績
FROM (講義 INNER JOIN 成績 ON 講義.講義ID = 成績.講義ID)
INNER JOIN 学生 ON 成績.学生ID = 学生.学生ID;
de-11. データベース操作:INSERT、UPDATE、DELETE
【資料(スライド)】
- PDFファイル: e13new.pdf
- パワーポイントファイル(PDFファイルと同じ内容): e13new.pptx
【概要】
リレーショナルデータベースシステムの特徴として,データの整合性(データが論理的に矛盾なく正確であること)を保つための機能があり,誤ったデータや矛盾したデータの保存を防止する.データ操作にはSQLを使用し,データの追加・検索・更新・削除などを行う.また,トランザクション機能により,複数の処理を一単位として実行する.データの一貫性と信頼性を確保することができる.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
演習1が終わったら、Accessを閉じずに、演習2に進んでください。
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
単純な表示
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
新しい行をTテーブルに追加し、名前は「E」、昼食は「そば」、料金は500円
名前が'B'の行を削除
「カレーライス」の料金を450円に変更
名前が'C'の人の昼食を「ラーメン」に変更
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
演習パート(クリックして展開)
演習
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);
SELECT * FROM T;
INSERT INTO T VALUES ('E', 'そば', 500);
DELETE FROM T WHERE 名前 = 'B';
UPDATE T SET 料金 = 450 WHERE 昼食 = 'カレーライス';
UPDATE T SET 昼食 = 'ラーメン' WHERE 名前 = 'C';
CREATE TABLE products (
ID INTEGER PRIMARY KEY,
name TEXT,
color TEXT,
price INTEGER
);
insert into products values(1, 'apple', 'red', 100);
insert into products values(2, 'apple', 'yellow', 200);
insert into products values(3, 'orange', 'orange', 300);
select * from products;
UPDATE products SET price = 150 WHERE name = 'apple' AND color = 'red';
DELETE FROM products WHERE price >= 300;
de-12. 中間まとめ
【資料(スライド)】
- PDFファイル: e15new.pdf
- パワーポイントファイル(PDFファイルと同じ内容): e15new.pptx
【概要】
リレーショナルデータベースは,データをテーブル形式で保存し,テーブル間の関連付けにより複雑なデータを扱うシステムである.各テーブルは列(属性)と行(レコード)で構成され,列(属性)はデータ型を持つ.データ操作にはSQLと呼ばれるリレーショナル・データベースの標準的な言語が使用され,問い合わせ(クエリ),データ操作が可能である.さらに,INNER JOINを使用することで複数のテーブルを結合し,関連するデータを取得できる.これにより,柔軟な検索が実現されている.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
ここまでが終わったら、Accessを閉じずに、下に進んでください。
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
ここまでが終わったら、Accessを閉じずに、下に進んでください。
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
それぞれの実行後に、商品テーブルの変化を確認してください
演習パート(クリックして展開)
演習
CREATE TABLE メニュー (
ID INTEGER PRIMARY KEY,
商品名 TEXT,
単価 INTEGER);
INSERT INTO メニュー VALUES(1, 'かき氷', 400);
INSERT INTO メニュー VALUES(2, 'カレーライス', NULL);
INSERT INTO メニュー VALUES(3, 'サイダー', 200);
SELECT * FROM メニュー;
SELECT * FROM メニュー WHERE 単価 IS NULL;
SELECT * FROM メニュー WHERE 単価 >= 0;
CREATE TABLE 商品 (
id AUTOINCREMENT PRIMARY KEY,
商品名 TEXT,
単価 INTEGER
);
CREATE TABLE 申し込み (
id AUTOINCREMENT PRIMARY KEY,
日時 DATETIME,
氏名 TEXT,
商品番号 INTEGER,
個数 INTEGER,
FOREIGN KEY (商品番号) REFERENCES 商品(id)
);
INSERT INTO 商品(商品名, 単価) VALUES ('商品A', 100);
INSERT INTO 商品(商品名, 単価) VALUES ('商品B', 200);
INSERT INTO 商品(商品名, 単価) VALUES ('商品C', 150);
INSERT INTO 申し込み(日時, 氏名, 商品番号, 個数) VALUES (Now(), 'X', 1, 1);
INSERT INTO 申し込み(日時, 氏名, 商品番号, 個数) VALUES (Now(), 'X', 2, 10);
INSERT INTO 申し込み(日時, 氏名, 商品番号, 個数) VALUES (Now(), 'Y', 2, 5);
INSERT INTO 申し込み(日時, 氏名, 商品番号, 個数) VALUES (Now(), 'X', 1, 1);
SELECT * FROM 商品;
SELECT * FROM 申し込み;
SELECT * FROM 申し込み
INNER JOIN 商品 ON 申し込み.商品番号 = 商品.id;
SELECT 申し込み.日時,申し込み.氏名,申し込み.個数 * 商品.単価
FROM 申し込み
INNER JOIN 商品 ON 申し込み.商品番号 = 商品.id;
SELECT 氏名, SUM(個数 * 商品.単価)
FROM 申し込み
INNER JOIN 商品 ON 申し込み.商品番号 = 商品.id
GROUP BY 氏名;
SELECT *
FROM 商品
WHERE 単価 > (SELECT AVG(単価) FROM 商品);
SELECT MAX(単価)
FROM 商品;
SELECT *
FROM 申し込み
WHERE 氏名 = 'X';
SELECT DISTINCT(申し込み.氏名)
FROM 申し込み
INNER JOIN 商品 ON 申し込み.商品番号 = 商品.id
WHERE 商品.商品名 = '商品A';
SELECT 氏名, COUNT(*) AS 申し込み数
FROM 申し込み
GROUP BY 氏名;
SELECT SUM(申し込み.個数)
FROM 申し込み
INNER JOIN 商品 ON 申し込み.商品番号 = 商品.id
WHERE 商品.商品名 = '商品B';
UPDATE 商品
SET 単価 = 120
WHERE 商品名 = '商品A';
DELETE FROM 商品
WHERE 商品名 = '商品C';
UPDATE 商品
SET 単価 = 1000
WHERE 商品名 = '商品B';
de-13. データ管理の基礎:オンライントランザクションとデータウェアハウスの特徴と活用
【資料(スライド)】
- PDFファイル: e8new.pdf
- パワーポイントファイル(PDFファイルと同じ内容): e8new.pptx
【概要】
データ管理には,オンライントランザクションとデータウェアハウスという2つの異なるアプローチがある.オンライントランザクションは,銀行取引やオンライン予約などのリアルタイム処理に適しており,最新のデータのみを保持する.一方,データウェアハウスは過去のデータを蓄積・分析するためのシステムで,履歴データを重視する.ここでの履歴データとは,時間の経過に伴うデータの変化を記録し,日時情報を付加して管理するものである.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
ここまでが終わったら、Accessを閉じずに、下に進んでください。
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
演習3を始める前に、一度Accessを終了してください。そして、もう一度Access を起動し、次を始めてください。
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
ここまでが終わったら、Accessを閉じずに、下に進んでください。
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
演習パート(クリックして展開)
演習
select now();
CREATE TABLE 商品 (
ID INTEGER PRIMARY KEY,
商品名 TEXT,
単価 INTEGER);
CREATE TABLE 購入 (
ID INTEGER PRIMARY KEY,
購入者 TEXT,
商品ID INTEGER,
数量 INTEGER,
購入日時 DATETIME,
FOREIGN KEY (商品ID) REFERENCES 商品(ID));
INSERT INTO 商品 VALUES(1, 'みかん', 50);
INSERT INTO 商品 VALUES(2, 'りんご', 100);
INSERT INTO 商品 VALUES(3, 'メロン', 500);
INSERT INTO 購入 VALUES(1, 'X', 1, 10, '2023-01-04 09:00:00');
INSERT INTO 購入 VALUES(2, 'Y', 2, 5, '2023-01-04 10:00:00');
select * FROM 商品;
select * FROM 購入;
CREATE TABLE 商品 (
ID INTEGER PRIMARY KEY,
商品名 TEXT,
単価 INTEGER,
改訂日時 DATETIME);
CREATE TABLE 購入 (
ID INTEGER PRIMARY KEY,
購入者 TEXT,
商品ID INTEGER,
数量 INTEGER,
購入日時 DATETIME,
FOREIGN KEY (商品ID) REFERENCES 商品(ID));
INSERT INTO 商品 VALUES(1, 'みかん', 50, '2023-12-01 09:00:00');
INSERT INTO 商品 VALUES(2, 'りんご', 100, '2023-12-01 09:00:00');
INSERT INTO 商品 VALUES(3, 'メロン', 500, '2023-12-01 09:00:00');
INSERT INTO 商品 VALUES(4, 'りんご', 150, '2024-01-01 09:00:00');
INSERT INTO 商品 VALUES(5, 'メロン', 400, '2024-01-01 09:00:00');
INSERT INTO 購入 VALUES(1, 'X', 1, 10, '2023-12-10 10:00:00');
INSERT INTO 購入 VALUES(2, 'Y', 2, 5, '2023-12-20 12:00:00');
INSERT INTO 購入 VALUES(3, 'Y', 4, 20, '2024-01-05 09:00:00');
INSERT INTO 購入 VALUES(4, 'Z', 5, 3, '2024-01-05 11:00:00');
select * FROM 商品;
select * FROM 購入;
SELECT * FROM 商品
INNER JOIN 購入 ON 商品.ID = 購入.商品ID;
SELECT 購入.購入日時, 購入.購入者, 購入.数量 * 商品.単価
FROM 商品
INNER JOIN 購入 ON 商品.ID = 購入.商品ID;
SELECT 購入.購入者, SUM(購入.数量 * 商品.単価)
FROM 商品
INNER JOIN 購入 ON 商品.ID = 購入.商品ID
GROUP BY 購入.購入者;
SELECT 商品名, MAX(改訂日時)
FROM 商品
GROUP BY 商品名;
SELECT *
FROM 購入
WHERE 購入者 = 'Y';
SELECT DISTINCT(購入.購入者)
FROM 購入
INNER JOIN 商品 ON 購入.商品ID = 商品.ID
WHERE 商品.商品名 = 'りんご';
SELECT 購入者, COUNT(*)
FROM 購入
GROUP BY 購入者;
de-14. データベース設計演習,正規化
【資料(スライド)】
【概要】
リレーショナルデータベースは,データをテーブル形式で保存し,テーブル間の関連付けにより複雑なデータを扱うシステムである.リレーショナルデータベースシステムにおいて重要な役割を果たすのが正規化である.正規化は,データの冗長性を減らすための手法であり,正規化の結果としてデータの整合性が向上する.データの整合性とは,データベース内のデータが矛盾なく一貫した状態を保持することを意味し,これにより更新,削除,挿入時の異状を減少させることができる.この正規化プロセスにおいて重要なのが情報無損失の原則であり,これは正規化を施した後のテーブル群から,正規化する前のテーブルを正確に復元できることを保証するものである.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
演習1が終わったら,Accessを閉じずに,演習2に進んでください.
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
単純な表示
昼食の列のみ
重複行の除去 DISTINCT
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
テーブル X の生成
テーブル Y の生成
テーブル X の確認
テーブル Y の確認
テーブルの結合により元に戻ることを確認
Accessを使用するときは,SQLビューで1つずつ実行してください.Access では,複数の一括実行はできません.
演習パート(クリックして展開)
演習
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);
SELECT * FROM T;
SELECT 昼食 FROM T;
SELECT DISTINCT 昼食 FROM T;
SELECT DISTINCT 名前, 昼食 INTO X FROM T;
SELECT DISTINCT 昼食, 料金 INTO Y FROM T;
SELECT * FROM X;
SELECT * FROM Y;
SELECT X.名前, X.昼食, Y.料金 FROM X INNER JOIN Y ON X.昼食 = Y.昼食;
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;
de-15. Microsoft Access のビジュアルなツール
【資料(スライド)】
【概要】 Microsoft Accessは,GUI(グラフィカルユーザーインターフェース)ベースの様々なツールを備える.これらのツールを用いて,さまざまな処理が可能である.テーブルツールは,テーブル定義を視覚的に実行でき,SQLでのテーブル定義を直接記述する必要がない.クエリデザインにより複雑なデータ抽出や更新操作であっても,視覚的に実行できる.さらに,フォームウィザードとレポートウィザードにより,データ入力画面や印刷用帳票を対話的に作成できる.
de-16. リレーショナルデータベース活用演習
【資料(スライド)】
【概要】 Microsoft Accessの主な機能としては,テーブル定義,Excelファイルからのインポート,フォーム作成,データ検索,SQLの実行(例:集計集約)などがある.Microsoft AccessのSQL実行では,SQLビューで文を1つずつ実行し,テーブル定義やデータ操作を行う.