関係データベースは、「テーブル」(表)から構成されている。テーブルには「カラム」または「フィールド」と呼ばれる縦の欄(項目)があり、ひとつひとつのデータは横一列の「レコード」(行)として並ぶ。
今回は以下のようなテーブルを作る。「旧番号」「新番号」「都道府県名」などの欄がカラムであり、「060, 0600041, 北海道, 札幌市中央区, 大通東」のようなひとまとまりのデータがレコードである。
旧番号 | 新番号 | 都道府県名 | 市区郡町村名 | 町村字名 |
060 | 0600041 | 北海道 | 札幌市中央区 | 大通東 |
154 | 1540002 | 東京都 | 世田谷区 | 下馬 |
468 | 4680039 | 愛知県 | 名古屋市天白区 | 西入町 |
90718 | 9071801 | 沖縄県 | 八重山郡与那国町 | 与那国 |
テーブルの設計ではカラム(各欄)の型を定義します。「型」というのは、そのカラムに入るデータの形式のことで必ず定義します。今回は以下のようになります。テーブルの設計はデータベース構築の肝です。興味があれば、「正規化」と呼ばれるデータベースの論理設計手法を勉強してみてください。
zipcode | |||
名称 | 内容 | 型 | 属性 |
oldzip | 旧番号 | text | |
newzip | 新番号 | text | 空欄不可 |
pref | 都道府県名 | text | |
city | 市区郡町村名 | text | |
addr | 町字名 | text | 空欄不可 |
「SQLの窓」では、Excelのワークシート名をworksheetとすると、テーブル名は [worksheet$] で参照する。この郵便番号データベースの例だと、zipcodeのかわりに [zipcode$]と書く必要がある。
【基本構文】 create table テーブル名 (カラム名1 カラム型1, カラム名2 カラム型2, ...);
【基本構文】 drop table テーブル名;
【基本構文】 select フィールド名 from テーブル名 ;
select newzip,pref from zipcode; +---------+--------+ | newzip | pref | +---------+--------+ | 0600041 | 北海道 | | 1540002 | 東京都 | | 4680039 | 愛知県 | | 9071801 | 沖縄県 | +---------+--------+
select * from zipcode;
テーブル操作のSQL文を使ってみる。データベースの肝の部分。
テーブルからデータ(レコード)を検索するには 「セレクト(SELECT)文」を使う。WHERE句で条件文をしているすることにより、条件にマッチするデータのみを表示できる。
【基本構文】 select フィールド名 from テーブル名 where 条件式 ;
複数の行に分けて書くこともできる。
select フィールド名 from テーブル名 where 条件式 ;
select * from zipcode where oldzip='113' ;
select newzip,addr from zipcode where city='世田谷区' ;
select count(*) from zipcode where city='国分寺市' ;
select * from zipcode where city='新宿区' limit 50;
以下のSQLを理解し、結果を記録してください。
select * from zipcode where city='渋谷区' or city='新宿区' ;
select * from zipcode where city like '%島%';
select * from zipcode where city='中央区' and addr like '日本橋%' ;
【基本構文】 insert into テーブル名 (カラム名1, カラム名2, ...) values (カラム値1, カラム値2, ...);
insert into zipcode (oldzip,newzip,pref,city,addr) values('060','0600041','北海道','札幌市中央区','大通東');
旧番号 | 新番号 | 都道府県名 | 市区郡町村名 | 町村字名 |
060 | 0600041 | 北海道 | 札幌市中央区 | 大通東 |
468 | 4680039 | 愛知県 | 名古屋市天白区 | 西入町 |
90718 | 9071801 | 沖縄県 | 八重山郡与那国町 | 与那国 |
hi-shiozawa@engs.tamagawa.ac.jp