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
© Copyright 2024 ExpyDoc