SQL データベースアクセスのための文法 担当 岡村耕二 月曜日 2限 平成20年度 情報科学III (理系コア科目・2年生)

Slides:



Advertisements
Similar presentations
1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 22 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授、菅沼明 准教授等による以前の講義資料をもとにしています。
Advertisements

Accessによるデータベース(1) Ver.1 /11.
DB(データベース)のおはなし 作成者:小野正広 DBと言っても、  ドラゴンボール ではないですぞ! 3/1/2017.
SQLite3
インターネット技術特論 H:SQLite3 山口 実靖
情報理工学部 情報システム工学科 ラシキアゼミ 3年 H 井奈波 和也
知能機械工学科 担当:長谷川晶一 TA:新・後藤・ナンバ
リレーショナル・データベース データベース論 第10回.
PostGIS - 1 (入門編).
SQL データベースアクセスのための文法と MySQL
SQLエディタによる データベースプログラミング
.NET テクノロジー を利用した SAP ソリューションの拡張 (3階層化) (評価環境構築ガイド)
知的システム構築工房   Linux設定セミナーシリーズ 第6回 MySQL設定 2011年3月17日(木) 株式会社 アセンディア 1.
3-1 MySQLについて 発表者:藤村元彦 自然言語処理研究室.
MySQLに接続するデータベースプログラム
Excel による データベース入門 Ver /9.
PHP プログラムの実行(まとめ) SQL 概要
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
SQL J2EE I 第3回 /
第4回 個人の動画配信補足のためのWeb構築
RDBMSについて 2年7組  小鹿 慎太郎.
3-2.データを取り出す 2004年 5月20日(木) 01T6074X 茂木啓悟.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
09 06/23 PHP と SQL (MySQL) の連携 その2
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
この資料は、テキストをもとに、講義のために作成したものです.学習用に活用してください.
14.テーブル定義,一対多の関係,多対多の関係, 外部キー,索引(インデックス),データベース操作
マイクロソフト Access を使ってみよう 第1回
データベース設計 第9回 Webインタフェースの作成(1)
マイクロソフト Access での SQL 演習 第1回 SQL問い合わせ(クエリ)
データベースとJavaをつなげよう! ~JDBC~
2004/05/13 3-4 データ型(カラムタイプ) について 発表者:藤村元彦 自然言語処理研究室.
SQL 概要 担当 岡村耕二 月曜日 2限 平成21年度 情報科学III (理系コア科目・2年生)
SQL データベースアクセスのための文法 担当 岡村耕二 月曜日 2限 平成21年度 情報科学III (理系コア科目・2年生)
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
3-10. MySQLシステムの管理  2004年6月10日  大北高広                01T6010F.
第1回.リレーショナルデータベースを使ってみよう
第1回.リレーショナルデータベースを使ってみよう
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
第3回.テーブルの結合 結合条件 SQL を用いた結合問い合わせ.
第3回.テーブルの結合 結合条件 SQL を用いた結合問い合わせ.
PHP と SQL (MySQL) の連携 複数のテーブルを扱う
09 06/23 PHP と SQL (MySQL) の連携 その1
3-6.インデックスについて 3-7.関数と併用されることの 多いMySQLコマンド
3-3.テーブルを更新する 2004年 4月22日(木) 01T6074X 茂木啓悟.
「Webデータベースの構築技術」正誤表 ページ 項目 誤記 訂正 18 表1.4 アクセス 権限の削除 ・・・テーブル名 TO ユーザ名
09 06/23 PHP と SQL (MySQL) の連携 その2
データベース設計 第8回 クライアント=サーバーモデル(2)
PHP と SQL (MySQL) の連携 大量のデータを扱う
PHP 概要 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
情報処理Ⅱ 第2回:2003年10月14日(火).
マイクロソフト Access での SQL 演習 第2回 集計,集約
3-8・関数を使ってデータを取り出す   2004年6月3日(木) 01T6010F               大北高広.
3.リレーショナルデータベース,主キー, SQL
再帰CTE を使って遊ぼう 大阪#9 2012/04/14.
関係データベースとSQL MZ Platform講習会(上級).
リレーショナル・データベース J2EE I (データベース論) 第2回 /
CO-Client Opeartion 1.1 利用履歴データベースの設計 (スキーマ バージョン 対応)
09 06/23 PHP と SQL (MySQL) の連携 その3
データベース第3回目 意味ごとにテーブルを分ける
PHP と SQL (MySQL) の連携 日本語のデータを扱う
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
第1回.リレーショナルデータベースを使ってみよう
情報処理Ⅱ 2005年11月25日(金).
SQL J2EE I (データベース論) 第3回 /
printf・scanf・変数・四則演算
第3章 関係データベースの基礎 3.1 関係とは 3.2 関係代数.
クリエイティブ リサーチ 2019/05/20 日本工学院八王子専門学校 M.Katsube.
SQL データベース論 第11回.
Presentation transcript:

SQL データベースアクセスのための文法 担当 岡村耕二 月曜日 2限 平成20年度 情報科学III (理系コア科目・2年生) 2007/5/30 平成20年度 情報科学III (理系コア科目・2年生) SQL データベースアクセスのための文法 担当 岡村耕二 月曜日 2限 http://okaweb.ec.kyushu-u.ac.jp/lectures/jk3/ 本資料の一部は、堀良彰准教授、天野浩文准教授等による 以前の講義資料をもとにしています。 情報科学III(8)

課題Aのポイント 1)の情報を受け渡す 1)品物、単価情報 アップロード 2)品物、単価表の作成 品物個数入力 3)品物、単価表 入力された品物個数 から、総額計算 while(strlen($lines[$ngoods])>0){ sscanf($lines[$ngoods],"%s %d",$g,$v); $goods[$ngoods]= array("name"=>$g, "value"=>$v);  $ngoods++; } 連想配列を使用

課題Bのポイント 1)の情報を受け渡す 1)2つの情報を アップロード 2)2つの表を作成 ユーザ入力 3)2つの表、入力された情報  アップロード 2)2つの表を作成  ユーザ入力 3)2つの表、入力された情報  から結果を出力

おさらい(1) データベースとは 「複数の応用目的での共有を意図して組織的かつ永続的に格納されたデータ群」(北川博之著『データベース』,昭晃堂,1996年) なぜ複数のプログラムがファイルでデータを共有してはだめなのか? いずれのプログラムも,ファイルの中のデータ形式を強く意識して記述しなければならない. 複数のプログラムが同じファイルに同時にアクセスすると,データを破壊してしまう可能性も高い. 同じデータがバラバラのファイルに重複して記録される可能性も高い.

おさらい(2) データベース管理システムの利用 基本的に,すべて「お願い」 プログラム1 プログラム2 プログラム n 例えば: データベース管理システムは,競合するアクセスの間の「交通整理」を行える可能性が出てくる. 例えば: 新たな項目が追加されたくらいなら,プログラムの修正は不要. データの格納される順序が変わっても,プログラムの修正は不要. データ ベース

おさらい(3) リレーショナルデータベース(RDB) データベースは,テーブル(表)の集まり テーブル(table) テーブルは,行に相当するレコード(record)の集まり 列には,おのおの,カラム(column)またはフィールド(field)と呼ばれる名前がついている. NULL 値 不明または非存在を表す特殊な値 テーブルのキー(key) テーブルに格納されたレコードを一意に識別できるカラム(の集まり) キーに同じ値を持つレコード,NULL を含むレコードがあってはならない.

キーに関する補足 ひとつのテーブルには,複数のキーが存在してもよい. (キーが複数のカラムからなる,という意味ではなく,キーとなりうるカラム集合が複数ある,ということ) その場合,キーのうちのひとつを主キー(primary key)と呼ぶ. 一部のカラムの値を決めただけではレコードが一意に決まらない場合でも,そのテーブルのすべてのカラムをまとめたものは,必ずキーとなる. 実世界では,「氏名」や「会社名」などは,必ずしもキーとはならない. 同姓同名の人,同名の会社などはたくさん存在する. そのような場合,個人番号,会社番号といった,必ず一意になるカラムを別に定めることが多い.

前回のおさらい(4) データベース設計の「指針」 テーブル内に同じ情報が重複して記録されるようなら,そのテーブルをうまく分割できないか考える. 同時に使うことの多いカラムが別々のテーブルに分かれて記録されるようなら,それらのテーブルをうまくまとめることができないか考える.

前回のおさらい(5) データベースから情報を取り出す操作 選択(selection) テーブルから,条件を満たすレコードだけを取り出す. 射影(projection) テーブルから,必要なカラムだけを切り出す. 結合(join) 共通のカラムをてがかりに,複数のテーブルを横につなぎ合わせる. 内部結合・自然結合と,外部結合がある. その他 集約演算,グループ化,並べ替え

SELECT [ALL | DISTINCT] SELECT項目リスト FROM テーブル名1[, テーブル名2, ...] 前回のおさらい(6) SQLの問い合わせの基本形 SELECT [ALL | DISTINCT] SELECT項目リスト FROM テーブル名1[, テーブル名2, ...] [ JOIN 結合条件 ] [ WHERE 検索条件 ] [ ] 内は省略可能 | は それで区切られた要素のいずれかひとつを選ぶことを示す. 上の SELECT 節の例では,ALLまたはDISTICTのどちらか一方を書くことができるが,まるまる省略してもよい,ということを意味している.

リレーショナルデータベース言語SQLの基礎 (つづき)

SQLの機能の便宜的な分類(再) 問い合わせ機能 SELECT ~ FROM ~ WHERE データ操作機能 SELECT 文という INSERT 文 UPDATE 文 DELETE 文 データ定義機能 CREATE 文 DROP 文 ALTER 文 その他 ユーザ管理 セッション管理 SELECT 文という 今日やること: 文法の座学+MySQL での実習

INSERT 文 機能 テーブルにレコードを挿入(追加)する. 3種類の構文 カラムの値を指定して1行(レコード)だけ挿入 複数行も一度に挿入 SELECT 文の結果を一度に挿入 INSERT [INTO] テーブル名 SET カラム=値[,カラム=値, ... ] INSERT [INTO] テーブル名 VALUES(値[, 値, ... ])[, (値[, 値, ... ]), ...]

UPDATE 文 機能 テーブル内のレコードの値を変更する. 構文・意味に SELECT 文と類似性がある. WHERE 句がない場合は,テーブルのレコードをすべて変更してしまう. UPDATE 文を実行する前に,同じ WHERE 句を持つ SELECT 文を実行して,どのようなレコードが影響を受けることになるのか,確認すべき. UPDATE 文の実行時に「よろしいですか?」なんて聞いてくれない. UPDATE テーブル名 SET カラム=値[,カラム=値, ... ] [WHERE 条件式 ]

DELETE 文 機能 テーブル内のレコードを削除する. 構文・意味に SELECT 文・ UPDATE 文と類似性がある. WHERE 句がない場合は,テーブルのレコードをすべて削除してしまう. DELETE 文を実行する前に,同じ WHERE 句を持つ SELECT 文を実行して,どのようなレコードが影響を受けることになるのか,確認すべき. DELETE 文の実行時にも,「よろしいですか?」なんて聞いてくれない. DELETE [FROM] テーブル名 [WHERE 条件式 ]

CREATE 文 機能 データベースを新規作成する: CREATE DATABASE 「データベース」とは,テーブルの集まり(容れ物). データベースは複数あってもよいが,同時に使えるのは一つだけ. テーブルを新規作成する: CREATE TABLE データベースの作成時 テーブルの作成時 CREATE DATABASE データベース名 CREATE TABLE テーブル名 ( カラム名 データ型 [NULL|NOT NULL] [カラムオプション], ... ) このまとまりを「カラム定義」と呼ぶことにしよう.

CREATE TABLE の詳細(1) [NULL|NOT NULL] NULL NULL 値が入ってもよいことを表す. 省略したときはこちらが設定されているとみなされる. NOT NULL NULL 値が入ってはならないことを表す. NULL が指定されていないカラムは,キーとなりうる. 主キーとしたいカラムが単一の場合には,カラムオプションのところで PRIMARY KEY と指定する. NOT NULL を省略しても,それが指定されたのと同じことになる. 主キーが複数のカラムからなる場合は,カラム定義の終わったあとに,PRIMARY KEY 句を別途設ける.

CREATE TABLE の詳細(2) データ型の例(1) CHAR(n) 長さ n バイトの固定長文字列(n は最大で255).ただし,後ろに空白があってもテーブルから取り出すときには削除される. VARCHAR(n) 最大 n バイトの可変長文字(n は最大で255) . TEXT 最大65,535バイトの可変長文字列. INT 整数 FLOAT 浮動小数点数 これ以降の説明は,DBMSによって,大きな違いがある.ここで取り上げているのは MySQL のもの.

CREATE TABLE の詳細(3) データ型の例(2) DATETIME 1000-01-01 00:00:00 から 9999-12-31 23:59:59 までの日付と時刻 DATE,TIME,YEAR もある. ただし,YEAR の範囲は 1901~2155であるが,不正な値をセットしようとすると 0000 にされる. ENUM('値1', '値2', ...) 列挙された値のいずれか1つ,空文字列,もしくは NULL しかとらないデータ型 NOT NULL 指定した場合は,NULL を除く. SET ('値1', '値2', ...) 列挙された値の中から最大64個までの値を含む集合,空集合,または,NULL しかとらないデータ型

CREATE TABLE の詳細(3) その他のカラムオプション DEFAULT 値 INSERT 文で値が指定されずに挿入される場合にセットされる省略値を指定する.

DROP 文 機能 テーブルを削除する: DROP TABLE データベースを削除する: DROP DATABASE

ALTER 文(1) 機能 テーブルの設定を変更する: ALTER TABLE ALTER DATABASE は省略. カラムの追加 カラムの変更 カラムの削除

ALTER 文(2) カラムの追加 カラムの変更 カラムの削除 ALTER TABLE テーブル名 スライド No.14 参照 ALTER TABLE テーブル名 ADD [COLUMN] カラム定義 [FIRST|AFTER 既存カラム] [ADD ...] カラムの挿入位置.省略時は末尾. ALTER TABLE テーブル名 CHANGE [COLUMN] カラム名 カラム定義 [FIRST|AFTER 既存カラム] [CHANGE ...] カラムのテーブル内での位置を移動させたいときに指定.省略時は元の位置. ALTER TABLE テーブル名 DROP [COLUMN] カラム名 [DROP ...] 「カラム定義」はカラム名から始まるので,名前を変更しないときは,同じ名前が2度繰り返されることになる.

ALTER 文に関する補足説明 まだレコードが登録されていないなら,テーブルを変更するのも,いったん削除してから登録し直すのも,そんなに変わらない. ただし,カラムの型を変更すると,他のカラムまで影響を受けることもある. 例:MySQL では,CHAR 型のカラムが複数あるとき,どれかを VARCHAR 型に変更すると他のカラムもすべてVARCHAR 型に合わされる,など. しかし,レコードが登録されてからの ALTER 文の実行には注意が必要である.

データ定義文の例(1) CREATE DATABASE te999999_greeting_cards; CREATE TABLE address_book( name varchar(32) not null primary key, postal_code char(8), address1 char(40), address2 char(40), phone char(13) ); 主キーが単一のカラムからなる場合は,そのカラムの定義の中で PRIMARY KEY と宣言する. 前のスライドまで,文の後ろにセミコロン(;)はなかった.実は,すべてのSQL 文の末尾にセミコロン(;)を書く必要がある. ただし,これは,SQL の文法と言うよりも,MySQLなど,対象となるDBMSの約束事である.このため,書籍によっては,省略されていることもある.

データ定義文の例(2) CREATE TABLE letters( name varchar(32) not null, l_year year not null, sent enum('○', '×'), primary key (name, l_year) ); 主キーが複数のカラムからなる場合は,個々のカラム定義の中ではなく,すべてのカラム定義が終わった後に PRIMARY KEY 句を続ける. 長い文を入力する際に,セミコロンがくる前に改行した場合にどういう現象が起こるかは,使用するDBMSによって異なるだろう. MySQL の場合にどうなるかの説明は,次の節で.

データ操作文の例(1) INSERT INTO address_book SET name='安部晋三', postal_code='100-8968', address1='東京都千代田区永田町1-6-1', address2='首相官邸', phone='03-xxxx-yyyy'; INSERT INTO address_book VALUES('安部昭恵', '100-8968', '東京都千代田区永田町1-6-1', '総理大臣官邸','03-xxxx-yyyy'), ('麻生太郎', '100-0032', '東京都港区六本木7丁目', '衆議院議員宿舎', '03-aaaa-bbbb');

データ操作文の例(2) INSERT INTO address_book VALUES('安部晋三', '100-8968', 前ページの上の INSERT 文が終了した後に以下の INSERT 文を実行しようとすると,同じキー値を持ったレコードがすでにあるため,エラーになる. INSERT INTO address_book VALUES('安部晋三', '100-8968', '山口県山口市...', '安部晋三事務所','083-xxx-yyyy'); UPDATE 文の例 UPDATE address_book SET address2='総理大臣官邸' WHERE name='安部晋三';

リレーショナルデータベース管理システムMySQL

MySQL MySQL AB 社が公開しているオープンソースのDBMS http://www.mysql.com/ 無償で利用可能 参考になる書籍がたくさん出版されている. 他に,PostgreSQL,Oracle, Microsoft SQL Server など もちろん,SQLの参考書もたくさんあるわけだが,方言が多いので,今回の講義のために入手するのなら,MySQLを対象としたものがよいだろう. 日本語マニュアルも閲覧可能 http://dev.mysql.com/doc/refman/4.1/ja/index.html

MySQL の対話的利用 MySQL の利用法 対話的利用 TTSSH などでサーバにログインしてから,そのサーバ上で,MySQL クライアントと呼ばれるプログラムを起動する. 後は,このクライアントを経由して利用する. 今日の実習ではこちらを. プログラムの中からの利用 PHP プログラム(webサーバ経由でも可)の中から,MySQL にアクセスするための関数を呼び出す. こちらは次回以降に.

MySQL クライアントの起動(MySQL への接続) boosp 上での設定 MySQL のユーザ名 bossp のログイン名と同じ パスワードは,講義中に紙で配布する. これは,将来よそで MySQL を使うときには異なっているかもしれない. bossp の OS からのプロンプト Linux ユーザ名と MySQL ユーザ名が異なるときは mysql –u username -p [te999999@bossp ~]$ mysql -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 150 to server version: 4.1.20 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> MySQL クライアントからのプロンプト

MySQL クライアントの終了(MySQL からの切断) quit コマンドを使用する. SQL 文を入力できるところで使えるわけだが,これはもちろん SQL の文ではない. このようなコマンドを,MySQLコマンドと呼んでSQL文と区別することにしよう. MySQL クライアントからのプロンプト mysql> ... mysql> quit; Bye [te999999@bossp ~]$ bossp の OS からのプロンプト

MySQLにおける対話型作業の典型的な手順 サーバ bossp にログイン MySQLクライアントを起動(MySQLに接続) [te999999@bossp ~] mysql -p (新規データベースの場合のみ)データベース作成 mysql-> CREATE DATABASE dbname; 使用するデータベースの宣言 mysql-> use dbname; (新規テーブルの場合のみ)データ定義 mysql-> CREATE TABLE tablename データ操作 mysql-> SELECT/INSERT/UPDATE/DELETE etc. MySQL クライアントを終了(MySQLから切断) mysql-> quit; サーバ bossp からログアウト これらの手順を忘れると,CREATE TABLE 以下を正しく入力しても無視されてしまう.

その他の MySQL コマンド show コマンド データベースに関するさまざまな情報を表示させる. show databases; show tables; show columns from テーブル名; use コマンド これから利用するデータベースの名前を宣言する. use データベース名; これ以降,このデータベースの中に新しいテーブルを作ったり,既存のテーブルのデータを参照したりできるようになる. use コマンドを実行した後でないと使えない.

MySQL クライアントとの対話(1) 長い SQL 文が画面の1行に入りきれないときは そこでとりあえず改行してもよい. プロンプトの形が “->” に変わって,まだ文が終わっていないことを示してくれる. 終えるときには,セミコロン(;)または \g mysql> CREATE TABLE address_book( -> name varchar(32) not null primary key, -> postal_code char(8), -> address1 char(40), -> address2 char(40), -> phone char(13) -> ); Query OK, 0 rows affected (0.00 sec) mysql>

MySQL クライアントとの対話(2) ただし,シングルクォート (' と ') で囲まれた途中で改行すると… 文法的には間違っていないが,変なところに改行文字(ASCIIコードの LF だが \n と表す)が入ってしまう. mysql> create table letters -> ( -> name varchar(32) not null, -> l_year year not null, -> sent enum('○ '> ', -> '×') -> ); mysql> ここでうっかり改行してしまった. すると, '○\n' と入力したことになる.

実習・課題 スライドのサンプルを元に,自分のデータベースを作ってみよう. 注意:bossp の上の MySQL では: ユーザは,以下のどちらかの形式の名前をしたデータベースしか作成・使用できないように設定されている. 自分のMySQLユーザ名そのもの 例: te999999 それとアンダースコアで始まる名前 例: te999999_greetingcards テーブル名にはそのような制約はない. 課題 作成したデータベースについて文書で報告してください。 このあたりも,将来よそで使うときには,そこの管理者に尋ねること.