2003年度 データベース論

SQL
J2EE I
第3回 / 2005-04-28
1
きょうの内容

SQLの概要を知る。
2
リレーショナルデータベースの
仕組み



no
42377
42872
「データベース」は、「テーブル」から構成さ
れる
「テーブル」は、「行」から構成される
「行」は、「項目」から構成される
title
author
publisher
伽藍とバザール 山形浩生訳 光芒社
Java言語で学ぶ 結城浩 著 ソフトバンク
デザインパターン
入門
3
SQL



リレーショナルデータベースを操作するた
めの言語。
標準化されているので、あるデータベース
で利用したSQLを、他のデータベースでも
(だいたい)使える。
いくつかのバージョンがある。ここでは 現
在よく使われている SQL92 を中心に解説

ほかには SQL89, SQL92, SQL99
4
テーブルの作成 (1)
create table テーブル名 (
項目名 データ型,
項目名 データ型,
.....
.....
);
5
テーブルの作成 (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)
);
6
データ型

データにはSQL標準の型がある。







char(n) 固定長の文字列 (長さ n)
varchar(n)
可変長の文字列 (長さ n)
int
符号付き整数
float(p) 浮動小数点 (p は精度)
date
日付
time
時刻
他にも、DBMSごとに独自のデータ型がある。
7
制約 (1)
制約とは何か


テーブルの項目に入る値の条件
制約には2通りある。


列制約  ひとつの列に制約を加える
テーブル制約  複数の列に同時に制約を加
える
8
制約 (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)
);

9
制約 (3) not null 制約
 列に null を許さない

null  項目にデータが入らない状態のこ
と
create table books (
.....
title varchar(50) not null,
.....
);
10
制約 (4) unique 制約
 データの重複を許さない
create table students (
.....
email varchar(50) unique,
.....
);
11
制約 (5) check 制約
 指定した論理式をチェック
create table books (
.....
id int check (0 <= id and id < 100000),
.....
);
12
制約 (6)
制約名 (列制約)
create table books
ndc
tyosya_hyouji
id
title
author
publisher
);


(
varchar(10),
varchar(2),
int constraint pk_books primary key,
varchar(50),
varchar(50),
varchar(30)
constraint 制約名 制約
制約にひっかかると制約名でエラーが表示 13
制約 (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)
);
14
制約 (8)
外部キーの設定 (1)
no
タイトル
著者
42872 Java言語で学ぶデ 結城浩 著
ザインパターン入門
no
42872
42872
keyword
Java
デザインパターン
出版社
ソフトバンク
それぞれのテーブルには
「no」という項目がある。こ
の項目を通じて2つのテー
ブルを結合できる。
↑ この「no」が外部キー。元のテーブルを参照できる。
15
制約 (9)
外部キーの設定 (2)
create table テーブル名 (
項目名 データ型
.....
constraint 制約名 foreign key(項目名)
references 参照テーブル名(項目名)
);
16
制約 (10)
外部キーの設定 (3)
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)
);
17
テーブルの削除
drop table テーブル名
例)
drop table books;
18
データの検索 (1)
基本パターン
select
from
where
項目のリスト
テーブルのリスト
検索条件
19
データの検索 (2)
検索条件が無い場合

select title from books;


select id, title from books;


テーブル books 中のすべてのデータから、
title という項目を取り出す
テーブル books 中のすべてのデータから、id
と title という2つの項目を取り出す
select * from books;

テーブル books 中のすべてのデータから、す
べての項目を取り出す
20
データの検索 (3)
単純な検索条件

select id, title from books where id <
30000;


Id が 30000 未満の行を検索
select title, publisher from books
where publisher = ‘八千代出版’;


出版社が「八千代出版」のものを検索
「八千代出版会」はヒットしない。同一でなけれ
ばダメ
21
データの検索 (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;

こう書くこともできる
22
データの検索 (5)
論理演算 (or)

select title, author, publisher from books
where publisher = ‘群像社’ or
publisher = '八千代出版';

出版社が「群像社」か「八千代出版」のものを
検索
23
データの検索 (6)
like とワイルドカード

select title from books
where title like 'Java%';


「Java」からはじまるタイトルの本を検索
select title from books
where title like '%Java%';

タイトルに「Java」を含む本を検索
24
データの検索 (7)
like とワイルドカード

select title from books
where title like '%Java%' or title like
'%Perl%';

タイトルに「Java」か「Perl」を含む本を検索
25
データの検索 (8)
テーブルの結合 (1)
no
タイトル
42872 Java言語で学
ぶデザインパ
ターン入門
no
42872
42872
Keyword
Java
デザインパ
ターン
著者
出版社
結城浩 著 ソフトバン
ク


あるタイトルの本の
キーワードを知りたい。
テーブルは正規化に
よって分割されている。
26
データの検索 (9)
テーブルの結合 (2)

複数のテーブルを使う場合、項目名の指定は次
の形になる。


テーブル名.項目名
検索条件として、それぞれのテーブルの id が一
致している必要がある。
select books.title, keywords.keyword
from books, keywords
where books.id = keywords.id;
27
データの検索 (10)
テーブルの結合 (3)

SQL92 以降では次のように書ける
select books.title, keywords.keyword
from books join keywords
on books.id = keywords.id;
28
データの検索 (11)
テーブルの結合 (4)

books.id = keywords.id のように、id と
いう項目名が共通の場合、次のように
も書ける。(HSQLDBでは動かない)
select books.title, keywords.keyword
from books join keywords
using(id);
29
データの登録
insert into テーブル名 values (値1, 値2, ...)
例)
insert into books values (
'361', 'M', '41439', '情報メディア論',
'丸山不二夫 編著', '八千代出版'
);
create table での項目の順番通りに指定する
30
データの更新
update テーブル名
set 項目名 = 式
where 更新条件
where句がないとすべての行が
更新されてしまう!
例)
update books
set author = '丸山不二夫 編著 / 植田龍男 ほか著'
where id = '41439';
31
データの削除
delete from テーブル名 where 削除条件
例)
where句がないとすべての行が
削除されてしまう!
delete from books where id = '41439';
32
参考文献・URL

UNIXデータベース入門



http://www.wakhok.ac.jp/DB/DB.html
丸山学長によるデータベース入門。SQL89をベースに
していますが、よくまとまっている有益なテキストです。
はじめてでもわかるSQLとデータ設計




西村めぐみ著
ディー・アート
ISBN 4-88648-647-9
きわめてわかりやすく解説されています。
33