Previous: ジョイン
Up: ジョイン
Next: 項目名の修飾
Previous Page: ジョイン
これまでの検索は、少数の例外を除いて、基本的には一つのテーブルを検索するもの
だった。しかし、二つ以上のテーブルを組み合わせなければ、検索が出来ないことは
決して珍しくない。例えば、ある本の出版社を知りたいとしよう。ところが、テーブ
ル「書籍台帳」には、出版社のコードは載っているが、出版社の名前自体は載っていな
い。出版社の名前を調べるためには、テーブル「出版社一覧」を用いて、出版社コード
から出版社名を調べなければならない。要するに、ある本の出版社名を調べるために
は、「書籍台帳」と「出版社一覧」という二つのテーブルが必要であり、二つのテーブ
ルを見比べて、双方の「出版社コード」のカラムが等しい行を選び出して、その中から
適当な項目を選んで新しいテーブルを作成するという操作が必要となる。こうした操作
を、SQLでは、「テーブルのジョイン」と呼ぶ。「ジョイン」は、テーブルからテーブル
を作り出す、テーブルについて閉じた演算だが、その元になっているのは、複数のテー
ブルの積をつくり(これは、from句に複数のテーブルを置くことによって可能となる)、その大きなテーブルから、条件にあう行のみをselectする(もちろんselectの条件は
where句に置かれる)という操作である。SQLでジョインを実現する為には、こうした
操作を忠実に定式化すればいいのである。
まず、SQLでのジョインの実例を見てみよう。次の例は、UNIXという言葉を含む書籍を 出版している出版社を検索するものである。
select substring(出版社一覧.出版社,1,20),substring(書籍台帳.書名,1,50) from 書籍台帳,出版社一覧 where 書名 like '%UNIX%' and 書籍台帳.出版社コード = 出版社一覧.出版社コード-------------------- ------------------------------------------------ 技術評論社 DOSユーザのUNIX入門 HBJ出版局 UNIXコミュニケーションズ スターリング MS‐DOS to UNIX UNIXシステムラボ UNIX system V/386リリース4ユー UNIXシステムラボ UNIX system /386リリース4プロ 日本ソフトバンク UNIX日記 UNIXシステムラボ UNIX system V/386リリース4シス 丸善 UNIX4.3BSDの設計と実装 サイエンス社 ザ・UNIX HBJ出版局 一般教養としてのUNIX アスキー UNIXシステムチューニング アスキー UNIX Cプログラミング 秀和システムトレーデ エンドユーザのためのUNIX 日本ソフトバンク バークレーUNIX スペック Mac+UNIXネットワーク入門 サイエンス社 UNIXシステムプログラミング 日本ソフトバンク エンジニアーズUNIX サイエンス社 演習UNIX UNIXシステムラボ UNIX System リリース4国際化機能 HBJ出版局 UNIXネットワーキング 日刊工業新聞社 UNIXワークステーションがわかる本 日経BP社 UNIX system 上級プログラマ・ガイド 日経BP社 スーパーユーザーのためのUNIX
(23 rows affected)
substringというのは、部分文字列を返す関数で、selectの項目名のリストの部分に 置くことが出来る。この関数の三つの引き数は、一番目がもとの文字列で、二番目、 三番目の引き数が、それぞれ部分文字列が開始、終了される位置を表している。 次の例を見れば、この関数の働きは明かであろう。
substring('abcdefghij',1,6) ===> 'abcdef' substring('abcdefghij',1,5) ===> 'abcde' substring('abcdefghij',1,4) ===> 'abcd' substring('abcdefghij',2,6) ===> 'bcdef' substring('abcdefghij',3,6) ===> 'cdef' substring('abcdefghij',4,6) ===> 'def'
出版社名や本の名前の一部が切り捨てられているのは、この関数のせいである。この例 でのsubstringの使用は、単に出力を一行に収めようとする為のもので、ジョインの操 作とは何の関わりもない。これ以降の例では、プログラムの見やすさの為に、select文 の中でのsubstringなどの関数を省略して示している場合がある。
maruyama@wakhok.ac.jp