• 検索結果がありません。

eラーニング資料 e ラーニングの制作目標 データベース編 41 ページデータベースの基本となる概要を以下に示す この内容のコースで eラーニングコンテンツを作成予定 データベース管理 コンピュータで行われる基本的なデータに対する処理は 次の 4 種類です 新しいデータを追加する 既存のデータを探索

N/A
N/A
Protected

Academic year: 2021

シェア "eラーニング資料 e ラーニングの制作目標 データベース編 41 ページデータベースの基本となる概要を以下に示す この内容のコースで eラーニングコンテンツを作成予定 データベース管理 コンピュータで行われる基本的なデータに対する処理は 次の 4 種類です 新しいデータを追加する 既存のデータを探索"

Copied!
6
0
0

読み込み中.... (全文を見る)

全文

(1)

データベースの基本となる概要を以下に示す。この内容のコースで、eラーニングコンテンツを作成予定 【データベース管理】 コンピュータで行われる基本的なデータに対する処理は、次の 4 種類です。新しいデータを追加する。 既存のデータを探索する。違うデータに変更する。要らなくなったデータを削除する。 各システムごとに障害対策も含めて、正確にこのようなデータ処理のプログラムを作ることは大変なこと です。そこでこのデータ処理のプログラムを毎回作らなくても、呼び出して各処理を実行することが可能 なシステムが作られました。それがデータベース管理システムへと発展してきました。 【データベースモデル】 追加、変更、探索、削除などの汎用的な命令が使えて、障害対策も含む機能であるデータベース管理 システムは、階層モデル、ネットワークモデル、関係(リレーショナル)モデルに大別できます。 そして現在最も数多く利用されているのが関係(リレーショナル)モデルです。

このモデルのデータベース管理システムとしては、oracle, sql server, db2, postgresql, mysql などが有 名です。そしてこれに使われる操作用の言語が SQL です。 【リレーショナルデータベースのイメージ】 リレーショナルデータベースで使う 2 次元の表形式は、例えば次のようなイメージです。 破線の部分が行で、表は行の集合で構成されます。そして 1 行の情報は、データの特徴を表現する各 データ型の列の集合で成り立ちます。なおリレーショナル用語では列の各情報を「属性」、行を「タプル」 と呼びます。一般に1行が現実世界における一つのまとまったデータになるように表を作り、複数の表の 関連を定義して管理します。具体的には表の名前とそれを構成する列の名前で、SQL によって 操作します。なお、行をレコードと呼ぶことがあります。 【データベース操作 の SELECT で 選択した列と行を得る】 次の表が「memberTbl」の名前で存在する場合、「memberID」、「lastName」、「firstName」・・が列の名 前です。

この表から、memberID が s102035 である行の lastName と firstName を取得する SQL は次の表現です。 SELECT firstName , lastName FROM memberTbl WHRER memberID = ’s102035’ この操作の実行で得られるのは次の情報です。

ここで memberID ように、表の中から『ある 1 行』を特定することができる列を主キーと呼びます。 また、「次郎」や「山田」のように、行と列が交差した値が格納される個々の部分をフィールドと呼びます。 なお上記表のイメージだけでは判断できませんが、列の中で、ほかの表との関連付けのために使用さ れる列は外部キーと呼びます。

(2)

【SQL とは】

計算表はシートで全体が見える状態で扱いますが、データベースは扱うデータ量が膨大で 全体が見えない状態でも操作できるようになっています。

RDBMS(Relational Database Management System:リレーショナルデータベース管理システム)は一般 的に複数のデータベースを管理できます。そして1つのデータベースの中に複数の表があ って、その表が関連し合って動作します。

RDBMS を経由してデータベースの操作を行うための言語が SQL(Structured Query Language:構造化 問い合わせ言語)です。SQL の命令は、データ定義機能(DDL:Data Definition Language)、データ操 作機能(DML:Data Manipulation Language)、データ制御機能(DCL:Data Control Language)の三つ の機能に分類されます。

【操作の分類】

RDBMS(Relational Database Management System)で使う SQL(Structured Query Language:構造化問 い合わせ言語)の操作は次のように3つに分類されます。

機能分類 操作 対応する命令

DDL:Data Definition Language

表や視点を定義し

て作成 CREATE TABLE、CREATE VIEW 表や視点を削除 DROP TABLE、DROP VIEW 列名変更 ALTER TABLE ~ RENME ~TO~ さまざまな変更 ALTER TABLE ~

DML:Data Manipulation Language

照会,問い合わせ SELECT ~ FROM

挿入 INSERT INTO ~ WHERE ~ 変更、更新 UPDATE ~ SET ~=~ WHERE ~ 削除 DELETE FROM ~ WHERE ~ DCL:Data Control Language 権限を与える GRANT PRIVILEGES ON~ FROM

権限を取り上げる REVOKE PRIVILEGES ON~ FROM

【データベースを作って操作するユーザを指定し、操作の接続をする】

RDBMS(Relational Database Management System:リレーショナルデータベース管理システム)では、一 つのデータベースで、複数の表を関連付けて作成します。一つの RDBMS で複数のデータベース名を 管理できます。まずデータベースに名前を付けて作成し、それを扱えるユーザを作ります。

システムにより操作方法に違いがありますが、例えば elearnの名前のデータベース作成する場合 であれば、次のようなコマンド操作です。

CREATE DATABASE elearn;

そして次にユーザを作成して、このデータベースをアクセスできる権限を与えます。

例えば、elearn のデータベースに、192.168.~の IP アドレスのホストから接続して、無制限に 操作可能な権限を'e_admin'のユーザに与える場合の SQL の DCL は次のような表現です。 GRANT ALL PRIVILEGES ON elearn.* TO 'e_admin'@'192.168.%.%';

一般にデータベースシステムはコンソール用のアクセスツールが用意されています。

oracle であれば sqlplus コマンドです。Mysql であれば『92.168.0.77』のサーバにある『elearn』のデータ ベースへ『e_admin』のユーザが接続し SQL で操作するためのコマンドは次のように実行します。 mysql --user=e_admin --host=ホスト IP アドレスなど --password=○○○ elearn

(3)

【表を作ってレコードを追加する】

一般にコンソール用のアクセスツールで、表の作成などが可能です。

上記のような表を作る場合、まず、次のような SQL の DDL で表の構造を作ります。 CREATE TABLE memberTbl(

memberID CHAR(8) NOT NULL, -- (8 文字型) lastName CHAR(10), -- (10 文字型) firstName CHAR(10), city CHAR(10), address CHAR(20), tel CHAR(15), mail CHAR(20),

PRIMARY KEY (memberID) );

ここで、CAHR は文字のデータ型を意味してカッコの中が文字数です。

また、NOT NULL の制約で、データをセットしなければ使えない指定をしています。 なお、PRIMARY KEY (memberID)により主キーを memberID に設定しています。 そして次のような SQL の DML でデータを挿入します。

INSERT INTO memberTbl (memberID,lastName,firstName,city,address,tel,mail,passwd)

VALUES ('s102031','山田','太郎','tokyo','新宿区西新宿 2-8-1','03-5321-1111','tarou@mail2.com');

【表にレコードを追加する。またレコードの削除紹介】

上記のような「memberTbl」の名前の表に行を追加して次の表のようにしたい。

この追加で使うDMLのSQL表現は次のようになります。 INSERT INTO memberTbl VALUES

('s102933','斉藤','太郎','名古県','佐賀市城内 1 丁目 1-59','0952-24-2111','tarou2@mail.com'), ('s102934','高橋','花子','岩手県','盛岡市内丸 10 番 1 号','019-651-3111','hanako@mail2.com'); なお、memberID が’s102031’の行を削除するDMLのSQL表現は次のようになります。

DELETE FROM memberTbl WHERE memberID = ’s102031’; 【表の一部を変更する。 列の追加や削除】

上記のような「memberTbl」の名前の表に、passwd の列を追加して次の表のようにしたい。

この列の追加で使う DDL のSQL表現は次のようになります。(属性は 255 文字までの可変長) ALTER TABLE memberTbl ADD (passwd VARCHAR(255));

上記の s102031 の passwd を abc123 に変更する DML のSQL表現は次のようになります。 UPDATE memberTbl SET passwd='abc123' WHERE memberID = 's102031'; なお、この追加した列を削除する DDL のSQL表現は次のようになります。

ALTER TABLE memberTbl DROP passwd;

SQLのコマンドは セミコロン『;』で完結します。

(4)

【表の操作例】 memberTbl の名前の表が次のようにあります。

① 重複する行を除いて lastName を表示する SQL は次のようなります。→ SELECT DISTINCT lastName FROM memberTbl;

② lastName が'山田'で、city が'tokyo'の memberID を得る SQL は 次の 2 通りできます。→

SELECT memberID FROM memberTbl WHERE lastName = '山田' AND city = 'tokyo'; SELECT memberID FROM memberTbl WHERE

NOT(lastName <> '山田' OR city <> 'tokyo'); ③ firstName のデータの最後が'子'で終わる名前の memberID と

firstName を得る。 →

SELECT memberID, firstName FROM memberTbl WHERE firstName LIKE '%子'; SELECT memberID, firstName FROM memberTbl WHERE firstName LIKE '__子'; ④ 's102031'から's102035'の範囲内において、

memberID, lastName , firstName を得る。→ SELECT memberID, lastName , firstName FROM memberTbl

WHERE memberID BETWEEN 's102031' AND 's102035'; ⑤ カッコ()内に列挙したデータに一致するもの得るデータを得る。 → SELECT memberID, lastName , firstName FROM memberTbl

WHERE memberID IN ('s102031','s102934','s102035'); ⑥ 上記の表示で、memberID のデータをキーにして昇順で表示する → SELECT memberID, lastName , firstName FROM memberTbl

WHERE memberID IN ('s102031','s102934','s102035') ORDER BY memberID ASC; ⑦ 上記の表示で、memberID のデータをキーにして降順で表示する →

SELECT memberID, lastName , firstName FROM memberTbl

WHERE memberID IN ('s102031','s102934','s102035') ORDER BY memberID DESC; ⑧ レコードの列を数える。なお、実行結果の列名を別名で表示する。 →

SELECT count(*) as 'レコード件数' FROM memberTbl;

⑨ グループごとのカウント (lastName で集計) → SELECT lastName ,count(lastName) as '人数' FROM memberTbl

GROUP BY lastName;

⑩ グループごとの処理結果に対しする条件抽出 (lastName 集計が 2 以上)→ SELECT lastName ,count(lastName) as '人数' FROM memberTbl

(5)

【表を作ってレコードを追加する。 列のデータ型紹介】 一般にコンソール用のアクセスツールで、表の作成などが可能です。

上記のような表を作る場合、まず、次のような SQL の DDL で表の構造を作ります。 CREATE TABLE planTbl (

planID CHAR(5) NOT NULL, -- ID URI CHAR(15), -- URI

pageOrder REAL DEFAULT 1, -- この数が小さい順に利用 prevID CHAR(5), -- 前にクリアすべき planID level INTEGER DEFAULT 0, -- 難易度

title VARCHAR(128), -- タイトル PRIMARY KEY (planID)

);

ここで、PRIMARY KEY (planID)により主キーを planID に設定しています。 DEFAULT の制約で、データセットしない場合の初期値を設定しています。

CHAR、REAL、INTEGER、VARCHAR のデータ型はそれぞれ、文字、小数点可能な数値、整数、 可変長文字列です。そして次のような SQL の DML でデータを挿入します。

INSERT INTO planTbl (planID ,URI ,title)

VALUES ('m1011','m101.html','データベース管理');

【表にレコードを追加して、表示操作】

上記のような「planTbl」の名前の表に、次の行を追加する SQL を実行する。 INSERT INTO planTbl (planID ,URI ,pageOrder, prevID, title) VALUES

('m1012','m101.html',2,'m1011','データベース管理'), ('m1021','m102.html',3,'m1012','データベースモデル'),

('m1031','m103.html',4,'m1021','リレーショナルデータベースのイメージ'); その後で、全てを列、行を表示するDMLのSQL表現は次のようになります。

SELECT * FROM planTbl; これで得られる表示は次のようになります。

上記のような planTbl の名前の表がある場合で、集合関数を使った例を示します。 ① 最大値を得る max 関数を使って pageOrder が最も大きい値を求めます。

SELECT max(pageOrder) FROM planTbl; →

② pageOrder が最も大きい値の行を表示させる。(サブクエリーと呼ばれる手法)

SELECT * FROM planTbl WHERE pageOrder IN (SELECT max(pageOrder) FROM planTbl);

③ PageOrder の平均を求めます。 →

SELECT AVG(pageOrder) FROM planTbl;

④ 上記クエリーをサブクエリーに使って、平均を超える列を求める。

(6)

【既存表を参照する表を作って、レコードを追加する】

上記のような memberTbl と planTbl の表を使って次の logTbl の名前の表を作る例です。 CREATE TABLE logTbl (

memberID CHAR(8) NOT NULL,-- memberID の ID time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, planID CHAR(5) NOT NULL, -- planTbl の ID clerFlag INTEGER,-- 1:クリア, 0 が未クリア

FOREIGN KEY (memberID) REFERENCES memberTbl(memberID), FOREIGN KEY (planID) REFERENCES planTbl(planID),

PRIMARY KEY (memberID, time)

); -- FOREIGN の指定で、既存の表の列を参照させています。 INSERT INTO logTbl (memberID,time,planID,clerFlag) VALUES ('s102031','2013-10-21 10:10:00','m1011',1),

('s102035','2013-10-21 10:30:00','m1011',1), ('s102099','2013-10-23 11:45:00','m1012',1), ('s102031','2013-10-23 11:50:00','m1021',1); 【上記3つの表(memberTbl と planTbl と ogTbl)で、操作する例】 ① logTbl の表と、memberTbl の表を、

logTbl.memberID = memberTbl.memberID の 条件で「内部結合」して表示すると右の表が得られます。

内部結合では表の他方で存在しない列がある行を出しません。このSQLを3通り以下に示す。 SELECT planID, time,logTbl.memberID, firstName FROM

logTbl,memberTbl WHERE logTbl.memberID = memberTbl.memberID; SELECT planID, time,logTbl.memberID, firstName FROM

logTbl INNER JOIN memberTbl ON logTbl.memberID = memberTbl.memberID; SELECT planID, time,logTbl.memberID, firstName FROM

memberTbl INNER JOIN logTbl ON logTbl.memberID = memberTbl.memberID; なお、INNER は省略可能です。

② planTbl の表と、logTbl の表と、 memberTbl の表をの「内部結合」例です

logTbl.memberID = memberTbl.memberID と planTbl.planID = logTbl.planID の結合条件にした例で、上記と下記アンダーラインが同じで、カッコで 上記表を得て、それに planTbl の title を結合するような記述です。下に示すようにカッコを使います。

SELECT planTbl.planID, title, time,logTbl.memberID, firstName FROM planTbl

INNER JOIN( logTbl INNER JOIN memberTbl ON logTbl.memberID = memberTbl.memberID) ON planTbl.planID = logTbl.planID;

③ logTbl の表と、memberTbl の表を、左に外部結合する例です。(OUTER の記述は省略できます) SELECT planID, time,logTbl.memberID, firstName

FROM logTbl LEFT OUTER JOIN memberTbl ON logTbl.memberID = memberTbl.memberID;

参照

関連したドキュメント

の点を 明 らか にす るに は処 理 後の 細菌 内DNA合... に存 在す る

が前スライドの (i)-(iii) を満たすとする.このとき,以下の3つの公理を 満たす整数を に対する degree ( 次数 ) といい, と書く..

事業セグメントごとの資本コスト(WACC)を算定するためには、BS を作成後、まず株

は、これには該当せず、事前調査を行う必要があること。 ウ

目的 これから重機を導入して自伐型林業 を始めていく方を対象に、基本的な 重機操作から作業道を開設して行け

C. 

72 Officeシリーズ Excel 2016 Learning(入門編) Excel の基本操作を覚える  ・Excel 2016 の最新機能を理解する  ・ブックの保存方法を習得する 73

・本計画は都市計画に関する基本的な方 針を定めるもので、各事業の具体的な