テーブルの結合

1 つの SELECT ステートメントを使用して、データベース内の複数のテーブルからデータを取り出すことができます。このステートメントは、テーブルを結合し、各テーブルから選択されたデータを含む 1 つのレコードセットを返します。

たとえば、会社データベースに、従業員に関する個人データから成るテーブルと、会社の部門に関するデータから成るテーブルが含まれているとします。従業員の名前、電話番号、および部門を表示する従業員ディレクトリを構築する場合、2 つのテーブルから同時に情報を取り出す必要があります。

そのためには、含めるすべてのテーブルと、テーブルの相互の関連付け方法を指定する結合を作成します。次に、その例を示します。

SELECT FIRSTNAME, LASTNAME, PHONE, DEPTNAME
FROM EMPLOYEES, DEPARTMENTS
WHERE EMPLOYEES.DEPT_ID = DEPARTMENTS.DEPT_ID

1 行目で、検索する列を指定します。最初の 3 つの列 (FIRSTNAME、LASTNAME、PHONE) は EMPLOYEES テーブルに含まれ、4 番目の列 (DEPTNAME) は DEPARTMENTS テーブルのみに含まれています。

2 行目で、データの検索元の 2 つのテーブル EMPLOYEES および DEPARTMENTS を指定します。

最後の行で、結合して 2 つのテーブルから取り出すレコードを指定します。各テーブルには、DEPT_ID という列があります。DEPARTMENTS テーブルではこの列がプライマリキーです(詳細については、テーブル間の関係の定義 を参照してください)。WHERE 句は、一方のテーブル内の DEPT_ID の値を他方のテーブル内の DEPT_ID の値と比較します。一致が見つかると、EMPLOYEES テーブル内のレコードのすべてのフィールドが、DEPARTMENTS テーブル内のレコードのすべてのフィールドと結合されます。次に、結合されたデータがフィルタ処理され、FIRSTNAME、LASTNAME、PHONE、および DEPTNAME 列から成る新規レコードが作成されます。最後に、その新規レコードがレコードセットに追加されます。

データベースシステムによっては、わずかに異なる結合シンタックスを使用した方が適切な場合があります。たとえば、以下の SQL ステートメントでは SQL キーワードとして INNER JOIN...ON を使用して、前述の例と同じ結果を得ることができます。

SELECT FIRSTNAME, LASTNAME, PHONE, DEPTNAME
FROM EMPLOYEES INNER JOIN DEPARTMENTS
ON EMPLOYEES.DEPT_ID = DEPARTMENTS.DEPT_ID

どの結合シンタックスを使用するかについては、ご使用のデータベースシステムのマニュアルを参照してください。


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/dreamweaver/8_jp/using/47_sql6.htm