東京都で開催する「初心者向けデータベース設計入門」講座です。

6.1 テーブル結合の基本

テーブル結合の基本

6.1 テーブル結合の基本

 まずは基本的なテーブル結合の考え方と使用方法を説明します。

6.1.1 内部結合

 前章ではリレーショナルデータベースと外部キー制約の概念を解説しましたが、テーブルを分割しただけで実際にデータとして連携して使用できなければ意味がありません。
 このような場合、SQLを使ってテーブル同士を結合し、擬似的にひとつの表のようにして取り出すことができます。
 これを表(テーブル)の結合(またはジョイン)といいます。

 「bookinfo」と「orderinfo」を例に説明します。前章では表の正規化に触れましたが、テーブルの結合はこの逆をイメージすると分かりやすいでしょう。
 現在「bookinfo」と「orderinfo」はそれぞれのisbn列で関連付けることができます。
 つまり「bookinfo」のisbn列と「orderinfo」のisbn列で、同じデータを持つもの同士を結合することができるわけです。 そして結合されたテーブルを、あたかもひとつのテーブルのように扱えるのです。

 テーブルの結合にはSELECT文を使います。
 書式は下記のようになります。

   SELECT テーブル名1もしくは2.列名,・・・ FROM テーブル名1 INNER JOIN テーブル名2
   ON テーブル名1.列名1 = テーブル名2.列名2;

 「FROM」句で連携させたいテーブル名1とテーブル名2の名前を「INNER JOIN」で結びます。
 その後「ON」に続けて、テーブル1のどの列とテーブル2のどの列を基準に結合するかを指定します。
 「SELECT」句では、表示させたいテーブルの列名を、「テーブル名.列名」という記述で表現します。
 「bookinfo」と「orderinfo」を結合して表示してみましょう。

 まず、両方のテーブルをisbn列を基準に結合し、全列を表示してみます。

    SELECT * FROM bookinfo INNER JOIN orderinfo ON bookinfo.isbn=orderinfo.isbn;

 両方のテーブルのデータが結合され、「bookinfo」テーブルのデータが左側に、「orderinfo」テーブルのデータが右側に表示されます。
 このように、「SELECT」句に列を指定しない場合、左側に「INNER JOIN」で指定したはじめのテーブルの内容が表示され、右側に2番目に指定したテーブルの内容が表示されます。

 では、下の表のようなイメージ(列の並び順を変更)で、データを取得してみましょう。

orderno user isbn title price quantity date
1 kanda 00001 SQL入門テキスト 1050 1 2010-07-01
5 kanda 00002 SQL基礎テキスト 2300 1 2010-08-22

 これには、「SELECT」句で列の並びを指定する必要があります。

    SELECT orderinfo.orderno,orderinfo.user,bookinfo.isbn,bookinfo.title,
   bookinfo.price,orderinfo.quantity,orderinfo.date
   FROM bookinfo INNER JOIN orderinfo ON bookinfo.isbn=orderinfo.isbn;

 表記のように「テーブル名.列名」のように表記します。
 isbn列は「orderinfo」にも「bookinfo」にもありますが、今回の場合はどちらの列を使っても同じデータが取得
 できるので、どちらを指定しても同じです。例では「bookinfo」のisbn列を使用しています。

 この形が基本形ですが、テーブル名に別名をつけることで、SQL文をもう少し短くすることもできます。

   SELECT B.orderno,B.user,A.isbn,A.title,A.price,B.quantity,B.date
   FROM bookinfo A INNER JOIN orderinfo B ON A.isbn=B.isbn;

 この例では、「bookinfo」に「A」、「orderinfo」に「B」という別名を付けています。

 今回は「bookinfo」のisbn列と「orderinfo」のisbn列で、データが一致するものだけを結合しました。 このように、結合対象のテーブル同士の結合のキーとなる列で、データが同じものだけを結合することを特に「内部結合(もしくはINNER JOIN)」と呼びます。

 TIPS
 テーブルを結合する場合の「SELECT」句では、「テーブル名.列名」という指定がルールになっていますが、片方のテーブルにしか存在しない列はテーブル名を省略することができます。
 例えば「bookinfo」のtitle列とprice列、「orderinfo」のorderno列・user列・quantity列・date列は片方の列にしか存在しませんので、DML文は下記のように書き換えることができます。。

   SELECT orderno,user,A.isbn,title,price,quantity,date
   FROM bookinfo A INNER JOIN orderinfo B ON A.isbn=B.isbn;

NEXT>> 6.2 表結合の発展

セミナー一覧

法人向けプログラミング研修

Java、PHPの社員研修|新人研修
セミナー講師紹介

主席インストラクター
早稲田大学大学院 理工学部卒業
SanJose 州立大学、コンピューター工学部卒業
アメリカのシリコンバレーでは、プログラマー・SEとして活躍
講師の詳細はこちら

PAGETOP
Copyright © 2016 FusionOne Co.,Ltd. All rights reserved.