Previous: ジョイン
Up: ジョイン
Next: 項目名の修飾
Previous Page: ジョイン

テーブルの結合

これまでの検索は、少数の例外を除いて、基本的には一つのテーブルを検索するもの だった。しかし、二つ以上のテーブルを組み合わせなければ、検索が出来ないことは 決して珍しくない。例えば、ある本の出版社を知りたいとしよう。ところが、テーブ ル「書籍台帳」には、出版社のコードは載っているが、出版社の名前自体は載っていな い。出版社の名前を調べるためには、テーブル「出版社一覧」を用いて、出版社コード から出版社名を調べなければならない。要するに、ある本の出版社名を調べるために は、「書籍台帳」と「出版社一覧」という二つのテーブルが必要であり、二つのテーブ ルを見比べて、双方の「出版社コード」のカラムが等しい行を選び出して、その中から 適当な項目を選んで新しいテーブルを作成するという操作が必要となる。こうした操作 を、SQLでは、「テーブルのジョイン」と呼ぶ。「ジョイン」は、テーブルからテーブル を作り出す、テーブルについて閉じた演算だが、その元になっているのは、複数のテー ブルの積をつくり(これは、from句に複数のテーブルを置くことによって可能となる)、その大きなテーブルから、条件にあう行のみをselectする(もちろんselectの条件は where句に置かれる)という操作である。SQLでジョインを実現する為には、こうした 操作を忠実に定式化すればいいのである。

まず、SQLでのジョインの実例を見てみよう。次の例は、UNIXという言葉を含む書籍を 出版している出版社を検索するものである。

例 31: 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
1995年02月10日 (金) 00時49分16秒 JST