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