まず、結合(join)とは何かを説明したいのですが、それを理解する前に、今まで見てきた多くのコマンドを使うことになります。仮に、以下の二テーブルがあるとする。
Store_Information テーブル
| store_name |
Sales |
Date |
| Los Angeles |
$1500 |
Jan-05-1999 |
| San Diego |
$250 |
Jan-07-1999 |
| Los Angeles |
$300 |
Jan-08-1999 |
| Boston |
$700 |
Jan-08-1999 |
Geography テーブル
| region_name |
store_name |
| East |
Boston |
| East |
New York |
| West |
Los Angeles |
| West |
San Diego |
そして、地域 (region_name) ごとの売上 (sales)を調べることにします。 Geography テーブルに各地域の店、 Store_Information テーブルに各店の売上が示されます。もし、地域ごとの売上を調べる場合、その二テーブルのデータを結合します。詳しく見たところ、フィールドstore_nameの一つで、この二テーブルを結合できることが分かります。まず、SQL の句を示して、各句の意味を見ましょう。
SELECT A1.region_name REGION, SUM(A2.Sales) SALES
FROM Geography A1, Store_Information A2
WHERE A1.store_name = A2.store_name
GROUP BY A1.region_name
の結果ができます。
| REGION |
|
SALES |
| East |
|
$700 |
| West |
|
$2050 |
一行目のところで、SQL を使って、二フィールドを選びます。一つ目は Geography テーブルのregion_name フィールド (別名REGION); 二つ目は Store_Information テーブルのsales フィールド (別名 SALES)。ここで、使われるテーブル別名: Geography テーブルの別名はA1、 Store_Information テーブルの別名はA2であることを注意してください。テーブル別名を使わない場合、一行目は次のようになります。
SELECT Geography.region_name REGION, SUM(Store_Information.Sales) SALES
それは明らかに複雑になります。ここで見たテーブル別名の用途: SQL文が分かりやすくなることがあり、特に幾つかのテーブルを含むSQL文の場合。
続いて、三行目、即ち WHERE 句を見ましょう。ここが結合の条件づけを述べるところ。ここで、 Geography テーブルにおけるstore_name フィールドの值及び Store_Information テーブルにおけるstore_name フィールドの值が同じであることを確かめます。 WHERE 句は、その二テーブルの結合を確かめる役割に使われるもので、即ちその結合の役割を果すポイント。 WHERE 句が間違った場合、直績結合 (Cartesian join)を得る可能性が高い。そして、直績結合により、二テーブルの二行ごとのあらゆる組み合わせを得ることになります。そういった場合、直績結合により、4 x 4 = 16 行の結果が出ます。