これは Access SQL に関する一連の記事の 1 つです。 この記事では、FROM 句を記述する方法について説明し、例を使用して FROM 句を記述するときに使用できるさまざまな手法を示します。
SELECT ステートメントでは、FROM 句でデータ ソースを指定します。 FROM 句には、JOIN 操作を含めることもできます。 JOIN 操作は、2 つのテーブルやテーブルとクエリなど、2 つのデータ ソースのデータを照合および結合するために使用します。
Access SQL の概要については、「Access SQL: 基本的な概念、用語、および構文」の記事を参照してください。
この記事の内容
データ ソースを指定する
SELECT ステートメントでは、SELECT 句で使用するデータが格納されているテーブルまたはクエリを FROM 句で指定します。
たとえば、特定の顧客の電話番号を調べる必要があるとします。 このデータを格納しているフィールドが tblCustomer という名前のテーブルに含まれている場合、FROM 句は次のようになります。
FROM tblCustomer
名前は角かっこを使用して囲むことができます。 名前にスペースや特殊文字 (コンマやピリオドなど) が含まれていない場合は、角かっこを省略できます。 名前にスペースや特殊文字が含まれている場合は、角かっこを使用する必要があります。
ヒント: スペースを含む名前は読みやすく、フォームやレポートをデザインするときに時間の節約につながる可能性がありますが、SQL ステートメントの作成時には入力が増えることがあります。 Access データベースのオブジェクトに名前を付けるときは、この点を考慮してください。
データ ソースの代替名を使用する
FROM 句でテーブルの別名を使用すると、異なる名前を使用して SELECT ステートメントでテーブルを参照できます。 テーブルの別名は、式をデータ ソースとして使用する場合にクエリ内でデータ ソースに割り当てたり、SQL ステートメントの入力や判読を容易にするために割り当てたりする名前です。 別名は、データ ソースの名前が長い場合や入力しにくい場合、または同じ名前を持つ複数のフィールドが別のテーブルに存在している場合に特に役立ちます。
たとえば、ID という名前のフィールドが 2 つあり、一方は tblCustomer テーブルに、もう一方は tblOrder テーブルに含まれている場合、SELECT 句は次のようになります。
SELECT [tblCustomer].[ID], [tblOrder].[ID]
テーブルの別名を FROM 句で使用すると、クエリの入力が簡単になります。 テーブルの別名を使用した FROM 句は次のようになります。
FROM [tblCustomer] AS [C], [tblOrder] AS [O]
続いて、これらのテーブルの別名を SELECT 句で次のように使用できます。
SELECT [C].[ID], [O].[ID]
注: テーブルの別名を使用すると、別名または完全なテーブル名を使用して、SQL ステートメントのテーブルを参照できます。
関連データを結合する
2 つのデータ ソースからのレコードの組を、クエリ結果で単一のレコードに結合する必要がある場合、結合を実行できます。 結合は、2 つのデータ ソースを関連付ける方法を指定し、他のソースに対応するデータがない場合に、一方のソースのデータを含めるかどうかを指定する SQL 操作です。
2 つのデータ ソースの情報を組み合わせるには、共通のフィールドに対して結合操作を実行します。 このフィールドに格納されている値が一致する場合、これらのレコードのデータが結果に組み合わされます。
データを組み合わせることに加え、結合を使用して、関連するテーブルに対応するレコードがない場合にいずれかのテーブルのレコードを含めるかどうかも指定します。
たとえば、クエリで tblCustomer と tblOrder の 2 つのテーブルのデータを使用するとします。 2 つのテーブルの両方に、顧客を識別する CustomerID というフィールドがあります。 tblCustomer テーブルの各レコードは、tblOrder テーブルに 1 つ以上の対応するレコードを持つことが可能で、対応付ける値は CustomerID フィールドの値によって決定することができます。
クエリによってテーブルのレコードが組み合わされるようにテーブルを結合する場合に、一方のテーブルに対応するレコードがないときはいずれのテーブルのレコードも除外するには、FROM 句を次のようにします (この例では、読みやすくするために改行が挿入されています)。
FROM [tblCustomer] INNER JOIN [tblOrder]
ON [tblCustomer].[CustomerID]=[tblOrder].[CustomerID]
Access では、結合は SELECT ステートメントの FROM 句で発生します。 結合には内部結合と外部結合の 2 種類があります。 次のセクションで、この 2 種類の結合について説明します。
内部結合
内部結合は最も一般的な種類の結合です。 内部結合を使用してクエリを実行すると、結合されたテーブルの両方に共通の値が存在するレコードのみがクエリ結果に格納されます。
内部結合の構文は次のとおりです (この例では、読みやすくするために改行が挿入されています)。
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field2
INNER JOIN 操作の各項目について、次の表で説明します。
項目 |
説明 |
table1、table2 |
結合するレコードのあるテーブルの名前。 |
field1、field2 |
結合されるフィールドの名前。 数値でない場合、フィールドは同じ データ型 で、同じ種類のデータが含まれている必要がありますが、同じ名前を持つ必要はありません。 |
compopr |
"="、"<"、">"、"<="、">="、"<>" などのリレーショナル比較演算子。 |
外部結合
外部結合は、2 つのソースの情報の組み合わせ方法をクエリに指示する点は内部結合と似ています。 共通する値が存在しないデータを含めるかどうかについても指定する点が異なります。 外部結合には方向性があり、結合に指定した最初のデータ ソースのすべてのレコードを含めるか (左結合と呼ばれます)、結合の 2 番目のデータ ソースのすべてのレコードを含めるか (右結合と呼ばれます) を指定できます。
外部結合の構文は次のとおりです。
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1compopr table2.field2LEFT JOIN 操作と RIGHT JOIN 操作の各項目について、次の表で説明します。
項目 |
説明 |
table1、table2 |
結合するレコードのあるテーブルの名前。 |
field1、field2 |
結合されるフィールドの名前。 フィールドは同じ データ型 で、同じ種類のデータが含まれている必要がありますが、同じ名前を持つ必要はありません。 |
compopr |
"="、"<"、">"、"<="、">="、"<>" などのリレーショナル比較演算子。 |
結合の詳細については、「テーブルおよびクエリを結合する」の記事を参照してください。