データベース - signalysis.co.jp · シナリオ1...

39
データベース データベース 9回(20101112日) 演習「DBの基本操作」

Upload: others

Post on 06-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

データベースデータベース

第9回(2010年11月12日)

演習「DBの基本操作」

Page 2: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

第9回第9回のテーマのテーマ

�シラバスより

【第11回】⇒【第9回】

データを読み込む、テーブルを定義すデータを読み込む、テーブルを定義す

る、データを編集するなど、基本操作

に関するSQLコマンドを学ぶ。

Page 3: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

今日学ぶべきことがら今日学ぶべきことがら

�コマンドプロンプトからの起動

�テーブルの作成

�テーブルの結合

ノートの左側:「問い」の部分に記載する

(書き込むのは、後にしよう。)

Page 4: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

今日試すこと今日試すこと

�データベースを、コマンドプロンプト

から使えるようにする。

◦ アクセス権限を設定する。

�「社員」テーブルや、「取引先」テー�「社員」テーブルや、「取引先」テー

ブルを作成し、「自然結合」で売上

テーブルから別の表を作成する。

Page 5: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

MySQLMySQLコマンドプロンプトコマンドプロンプト

� 最初に、MySQLコマンドプロンプトを起動する。

� メニューから「すべてのプログラム」を選

び、MySQLから「Command Line Client」を選ぶ選ぶ

Page 6: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

「データベース」を作る。「データベース」を作る。

� 先週の復習です。

� create database データベース名;

◦ create database reidaiDB;◦ create database reidaiDB;

� 複数のテーブルを格納するデータベース

を作成する。

� SQLのコマンド行は、;(セミコロン)で終わる。

� (先週作ったので、今週は実行しない)

Page 7: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

データベースの一覧を見る。データベースの一覧を見る。

� show databases;

�複数形であることに注意する。

Page 8: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

データベースを削除する。データベースを削除する。

�先週の復習です。

� drop database データベース名;

◦ drop database reidaiDB;◦ drop database reidaiDB;

�そのデータベースの中にある表(テー

ブル)も、その中身のデータもすべて

消えてしまう。

�間違ってデータベースを消さないよう

に注意する!(今日は試さない!)

Page 9: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

データベースの使用宣言をするデータベースの使用宣言をする

� connect データベース名;

◦ または

� use データベース名;

◦ connect reidaiDB;:◦ connect reidaiDB;:

◦ または

◦ use reiadiDB;

Page 10: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

アクセスを許可するアクセスを許可する

� rootに対しても、アクセスの許可を最初に設定する。

grant all privileges on reidaiDB.* to root@localhost identified by ‘root';root@localhost identified by ‘root';

�最初にこれを入力しておいてから、コ

マンドプロンプトでmySQLを使う。

Page 11: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

漢字コードを指定しておく漢字コードを指定しておく

�シフトJISコードを使う!と宣言する。

set CHARACTER SET sjis;

Page 12: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

コマンドプロンプトの切り替えコマンドプロンプトの切り替え

� MySQL Command Line Clientを終了する。

◦ exit

◦ と入力して抜ける。◦ と入力して抜ける。

�アクセサリから、コマ

ンドプロンプトを起動

する。

Page 13: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

なぜ、コマンドプロンプト?なぜ、コマンドプロンプト?

� MySQLのコマンドラインの設定の場合、

作業パスの変更が容易ではないが、コ

マンドプロンプトから起動すると、

「作業ディレクトリ」を容易に移るこ「作業ディレクトリ」を容易に移るこ

とができるので。

Page 14: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

コマンドプロンプトからの起動コマンドプロンプトからの起動

�コマンドプロンプトで

◦ mysql –u root -p

�と入力して、MySQLが起動することを確認する。確認する。

Page 15: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

起動できなかった人は・・・起動できなかった人は・・・

� Configを実行する際に、WindowsのPATHの設定を指定し忘れた人

� コンピュータを右クリックし、「プロパ

ティ」から「システムの詳細設定」

⇒「詳細設定」⇒「環境変数」⇒PATH⇒⇒「詳細設定」⇒「環境変数」⇒PATH⇒

「編集」と選択していき、最後に

;C:¥Program Files¥MySQL¥MySQL Server 5.0¥bin

を追加する。(PATHの窓から文字列をコピーして、貼り付ける。)

Page 16: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

PATHPATHの設定の方法の設定の方法

Page 17: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

ディレクトリを移動するディレクトリを移動する

� ディレクトリ表示の画面で、アドレスバーを表示する。

� コマンドプロンプトで、

� cd (SPACE)

� と入力してから、アドレスをドラッグする。

� または、

� cd C:¥MySQLData� cd C:¥MySQLData

� と直接入力する。

Page 18: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

作業ディレクトリの移動作業ディレクトリの移動

�作業ディレクトリをcdで移動してから、mysqlを起動する。

Page 19: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

コマンドプロンプトの起動コマンドプロンプトの起動

�プログラムから、コマンドプロンプト

を起動する。(XPまでの場合)

Page 20: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

準備完了準備完了

�この準備作業の理由

� SQLを直接入力するのではなく、source文で読み込ませたい。

�そのためには、拡張子がsqlのファイ�そのためには、拡張子がsqlのファイルを、簡便に編集できた方がよい。

Page 21: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

社員テーブルを社員テーブルを作る作る

�サンプルのデータベースに、

◦ 赤井、井上、上木、江田、尾崎・・・と

いう「担当者名」が既に入っている。

◦ 本当なら、「社員ID」をキーにすべきだID

が、今回は、この「姓」を主キーにして

しまう。(同じ名字の人は、1人しかいない、という前提で・・・)

Page 22: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

表表の定義の定義

【書式】

create table 表名表名表名表名 (列名列名列名列名 データ型データ型データ型データ型 [列属性列属性列属性列属性] [列属性列属性列属性列属性]…

[,列名列名列名列名 データ型データ型データ型データ型 [列属性列属性列属性列属性]…]

[,オプション属性オプション属性オプション属性オプション属性 [オプション属性オプション属性オプション属性オプション属性]…]

))

◦ データ型 :char(5),,,,varchar(20),,,,int,,,,date など

◦ 列属性 :primary key,,,,not null など

◦ オプション属性 :primary key (列名, 列名 …)

Page 23: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

表表の定義の定義(社員テーブル)(社員テーブル)

社員の姓、名、電話番号だけの表を定義する。

create table syainT(

clerk varchar(10) primary key,

name varchar(10),

phone varchar(14) );

上記を確認する.

show columns from syainT;

Page 24: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

実行の確認実行の確認

Page 25: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

テーブルの構造を確認するテーブルの構造を確認する

� show columns from テーブル名;

Page 26: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

データ登録は、データ登録は、SQLSQLファイルでファイルで

� syainTに、データを登録するSQLコマンドは、メモ帳で編集する。

�(何度も長い記述を入力しなくて済む�(何度も長い記述を入力しなくて済む

から)

Page 27: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

SQLファイルSQLファイル

�予め、よく使うSQL文をファイルで

作成しておく。

source ファイル名;source ファイル名;

�で、そのSQLファイルを実行する。

Page 28: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

データを登録するデータを登録する

メモ帳に、以下の記述を行う。

insert into syainT values (

‘赤井赤井赤井赤井’, ‘秀樹秀樹秀樹秀樹’, ‘090-1234-5678’ );

insert into syainT values (

‘井上井上井上井上’, ‘美香美香美香美香’, ‘080-9876-5432’ );

insert into syainT values (insert into syainT values (

‘上木上木上木上木’, ‘等等等等’, ‘080-2222-3333’ );

insert into syainT values (

‘江田江田江田江田’, ‘紀子紀子紀子紀子’, ‘080-4444-5555’ );

このやり方で、全員分を登録してしまう。(内容は適当で

よい)尾崎、加山、木村、工藤、剣持、小林

Page 29: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

社員データの例社員データの例

insert into syainT values (

'赤井', '秀樹', '090-1234-5678' );

insert into syainT values (

'井上', '美香', '080-9876-5432' );

insert into syainT values (

'上木', '等', '080-2222-3333' );

insert into syainT values (

'江田', '紀子', '080-4444-5555' );

insert into syainT values (insert into syainT values (

'尾崎', '豊', '080-xxxx-xxxx' );

insert into syainT values (

'加山', '雄二', '080-xxxx-xxxx' );

insert into syainT values (

'木村', '真央', '080-xxxx-xxxx' );

insert into syainT values (

'工藤', '静', '080-xxxx-xxxx' );

insert into syainT values (

'剣持', '大介', '080-xxxx-xxxx' );

insert into syainT values (

'小林', '幸子', '080-xxxx-xxxx' );

Page 30: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

名前を名前をつけて保存つけて保存

�編集したファイルに、syain.sqlという名前をつけて保存する。

Page 31: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

個別のデータ変更個別のデータ変更

� update syainT set phone=‘080-5432-1357’ where clerk =‘木村’;

� Updateテーブル名 set 項目名=値� Updateテーブル名 set 項目名=値where 条件

�教科書 P137

Page 32: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

コマンドプロンプトで漢字を使コマンドプロンプトで漢字を使

う時は、う時は、

� [Alt]キーを押しながら、[半角/全角]キーを押す。

Page 33: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

シナリオ1シナリオ1

�赤井さんが売り上げた商品の、日付と

相手先と、金額(商品数×単価)を表

示する。

select sale_date, sold_to, num_item*price

from salesTfrom salesT

where clerk=‘赤井’;

�「文」の最後は;(セミコロン)

� Fromテーブル名の後の、where句に、条件を記述する

Page 34: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

シナリオ2シナリオ2

�赤井さんの売上合計金額を計算する

� Select sum(num_item*price) from salesTwhere clerk=‘赤井’;where clerk=‘赤井’;

Page 35: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

シナリオ3シナリオ3

�日付順の売上表に、売り上げた社員を

フルネームで表示する。

select sale_date, syainT.clerk, syainT.name, select sale_date, syainT.clerk, syainT.name, sold_to, price*num_item

from salesT, syainT

where salesT.clerk=syainT.clerk ;

Page 36: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

4.4 4.4 問合せ問合せ

4.4.1 基本構文

最も基本的な問合せ問合せ問合せ問合せの書式:

Select {****|列名列名列名列名1,,,,列名列名列名列名2,,,,…,,,,列名列名列名列名n}from 表名表名表名表名1[,,,,表名表名表名表名2,,,,…,,,,表名表名表名表名m][where 探索条件探索条件探索条件探索条件]

◦ 実表◦ 実表

◦ 導出表

◦ ドット表現:表名....列名

◦ select句,from句,where句

【Q1】表「DetailT」を全て出力したい.

select **** from DetailT;

+---------+------------------+-------+-----+

| OrderID | Item | Price | Qty |

+---------+------------------+-------+-----+

| 16001 | MOドライブ | 50 | 1 |

| 16001 | テーブルタップ | 2 | 4 |

| 16001 | ディスプレイ | 45 | 2 |

| 16001 | パソコン | 100 | 2 |

| 16002 | CFメモリ | 10 | 2 |

| 16002 | ディジタルカメラ | 30 | 1 |

| 16003 | パソコン | 90 | 3 |

| 16003 | フィルター | 6 | 2 |

| 16004 | キャリアー | 5 | 1 |

| 16004 | ディスプレイ | 40 | 3 |

| 16004 | ノートパソコン | 190 | 1 |

| 16004 | バッテリー | 9 | 1 |

+---------+------------------+-------+-----+

Page 37: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

SelectSelect文と、文と、UpdateUpdate文文

�「検索」と「修正」

�データを選びだすのがSelect

�データを修正するのがUpdate

�この二つの組み合わせで、データベー

スから情報を引き出し、中身を書き換

えていく。

Page 38: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

条件の設定:条件の設定:wherewhere節節

� select文も、update文も、対象の行を選びだすのにwhere節を使う。

� where 条件� where 条件

�このwhereの使い方が、SQL習熟の鍵

Page 39: データベース - signalysis.co.jp · シナリオ1 赤井さんが売り上げた商品の、日付と 相手先と、金額(商品数×単価)を表 示する。 select sale_date,

次回予告次回予告

�次回は、さらに他の比較述語を試しま

す。