関係データベースは、「テーブル」(表)から構成されている。テーブルには「カラム」または「フィールド」と呼ばれる縦の欄(項目)があり、ひとつひとつのデータは横一列の「レコード」(行)として並ぶ。
今回は以下のようなテーブルを作る。「旧番号」「新番号」「都道府県名」などの欄がカラムであり、「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;
select newzip,pref from [zipcode$];とすること。
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 '日本橋%' ;
以下の検索をするSQL文と、検索結果(長い場合は抜粋)を求めなさい。
テーブルにデータ(レコード)を作成するには 「インサート(INSERT)文」を使う。
【基本構文】 insert into テーブル名 (カラム名1, カラム名2, ...) values (カラム値1, カラム値2, ...);
insert into zipcode (oldzip,newzip,pref,city,addr) values('060','0600041','北海道','札幌市中央区','大通東');
テーブルにデータ(レコード)を削除するには 「デリート(DELETE)文」を使う。
【基本構文】 delete from テーブル名 where 条件式;
データ(レコード)を一括更新するには 「アップデート(UPDATE)文」を使う。
【基本構文】 update テーブル名 set フィールド名=値 where 条件式;
insert into [商品$] (商品コード,商品名,単価) values('A5023','シャンプー',500);
データベースを結合するJOIN演算は、where句で複数のテーブルの結合するフィールドを = で並べることでできる。
【基本構文】 select フィールド名 from テーブル名1,テーブル名2,... where テーブル名1.フィールド名=テーブル名2.フィールド名,... ;
select 商品名,販売数量 from [商品$],[販売$] where [商品$].商品コード=[販売$].商品コード
selectのフィールド名の指定が、どのテーブルのものか紛らわしくなるときは(特に「SQLの窓」はバカなので)、「テーブル名.フィールド名」と指定しなければならない。
select [商品$].商品名コード,単価 from [商品$],[販売$] where [商品$].商品コード=[販売$].商品コード
select [商品$].商品コード,商品名,販売数量 from [商品$],[販売$] where [商品$].商品コード=[販売$].商品コード
select [商品$].商品コード,SUM(単価*販売数量) from [商品$],[販売$] where [商品$].商品コード=[販売$].商品コード group by [商品$].商品コード order by SUM(単価*販売数量)
hi-shiozawa(at)engs.tamagawa.ac.jp