2003年度 データベース論

SQL
ソフトウェア特論
第2回
この講義のWebページ
http://www.wakhok.ac.jp/~tomoharu/tokuron2003/
きょうの内容

SQLの概要を知る。
リレーショナルデータベースの仕組み



「データベース」は、「テーブル」から構成される
「テーブル」は、「行」から構成される
「行」は、「項目」から構成される
no
title
author
42377 伽藍とバザール
山形浩生訳
42872 Java言語で学ぶデ 結城浩 著
ザインパターン入門
publisher
光芒社
ソフトパンク
SQL


リレーショナルデータベースを操作するための言
語。
標準化されているので、あるデータベースで利用し
たSQLを、他のデータベースでも(だいたい)使え
る。
テーブルの作成 (1)
create table テーブル名 (
項目名 データ型,
項目名 データ型,
.....
.....
);
テーブルの作成 (2)
create table books (
ndc
varchar(10),
tyosya_hyouji
varchar(2),
id
int,
title
varchar(50),
author
varchar(50),
publisher
varchar(30),
constraint pk_books primary key(id)
);
データ型

データにはSQL標準の型がある。
–
–
–
–
–
–

char(n)
varchar(n)
int
float(p)
date
time
固定長の文字列 (長さ n)
可変長の文字列 (長さ n)
符号付き整数
浮動小数点 (p は精度)
日付
時刻
他にも、データベースごとに独自のデータ型がある。
制約 (1)
制約とは何か


テーブルの項目に入る値の条件
制約には2通りある。
–
–
列制約  ひとつの列に制約を加える
テーブル制約  複数の列に同時に制約を加える
制約 (2)
主キー制約  主キーを指定する
列制約
create table books (
ndc
varchar(10),
tyosya_hyouji
varchar(2),
id
int primary key,
title
varchar(50),
author
varchar(50),
publisher varchar(30)
);

テーブル制約
create table books (
ndc
varchar(10),
tyosya_hyouji varchar(2),
id
int,
title
varchar(50),
author
varchar(50),
publisher varchar(30),
primary key (id)
);

制約 (3)
not null 制約  列に null を許さない

null  項目にデータが入らない状態のこと
create table books (
.....
title varchar(50) not null,
.....
);
制約 (4)
unique 制約 データの重複を許さない
create table students (
.....
email varchar(50) unique,
.....
);
制約 (5) check 制約 
指定した論理式をチェック
create table books (
.....
id int check (0 <= id and id < 100000),
.....
);
制約 (6)
制約名 (列制約)
create table books (
ndc
varchar(10),
tyosya_hyouji varchar(2),
id
int constraint pk_books primary key,
title
varchar(50),
author
varchar(50),
publisher varchar(30)
);
制約 (7)
制約名 (テーブル制約)
create table books (
ndc
varchar(10),
tyosya_hyouji varchar(2),
id
int,
title
varchar(50),
author
varchar(50),
publisher varchar(30),
constraint pk_books primary key (id),
constraint check_id check (0 <= id and id < 100000)
);
制約 (8)
外部キーの設定 (1)
create table テーブル名 (
項目名 データ型
.....
constraint 制約名 foreign key(項目名)
references 参照テーブル名(項目名)
);
制約 (9)
外部キーの設定 (2)
create table books (
id
int constraint pk_books primary key,
.....
);
create table keywords (
id
int,
keyword varchar(30),
constraint fk_id foreign key(id) references books(id)
);
テーブルの削除
drop table テーブル名
例)
drop table books;
データの検索 (1)
基本パターン
select 項目のリスト
from テーブルのリスト
where 検索条件
データの検索 (2)
検索条件が無い場合

select title from books;
–

select id, title from books;
–

テーブル books 中のすべてのデータから、title という
項目を取り出す
テーブル books 中のすべてのデータから、id と title と
いう2つの項目を取り出す
select * from books;
–
テーブル books 中のすべてのデータから、すべての項
目を取り出す
データの検索 (3)
単純な検索条件

select id, title from books where id < 30000;
–

Id が 30000 未満の行を検索
select title, publisher from books
where publisher = ‘八千代出版’;
–
出版社が「八千代出版」のものを検索
データの検索 (4)
論理演算 (and)

select id, title from books
where 42000 <= id and id < 43000;
–

Id が 42000 以上かつ 43000 未満のものを検索
select id, title from books
where between 42000 and 43000;
–
こう書くこともできる
データの検索 (5)
論理演算 (or)

select title, author, publisher from books
where publisher = ‘群像社’ or
publisher = '八千代出版';
–
出版社が「群像社」か「八千代出版」のものを検索
データの検索 (6)
like とワイルドカード

select title from books
where title like 'Java%';
–

「Java」からはじまるタイトルの本を検索
select title from books
where title like '%Java%';
–
タイトルに「Java」を含む本を検索
データの検索 (7)
like とワイルドカード

select title from books
where title like '%Java%' or title like '%Perl%';
–
タイトルに「Java」か「Perl」を含む本を検索
データの検索 (8)
テーブルの結合 (1)
no
タイトル
著者
42872 Java言語で学ぶデ 結城浩 著
ザインパターン入門
no
keyword
42872 Java
出版社
ソフトパンク

あるタイトルの本の
キーワードを知りたい。

テーブルは正規化に
よって分割されている。
42872 デザインパターン
データの検索 (9)
テーブルの結合 (2)

複数のテーブルを使う場合、項目名の指定は次の
形になる。
–
テーブル名.項目名
検索条件として、それぞれのテーブルの id が一
致している必要がある。
select books.title, keywords.keyword
from books, keywords
where books.id = keywords.id

データの登録
insert into テーブル名 values (値1, 値2, ...)
例)
insert into books values (
'361', 'M', '41439', '情報メディア論',
'丸山不二夫 編著', '八千代出版'
);
create table での項目の順番通りに指定する
データの更新
update テーブル名
set 項目名 = 式
where 更新条件
例)
update books
set author = '丸山不二夫 編著 / 植田龍男 ほか著'
where id = '41439';
データの削除
delete from テーブル名 where 削除条件
例)
delete from books where id = '41439';