クエリが十分に機能しない場合は、いくつかの基本的な SQL ステートメントを追加することで、結果に焦点を絞ることができます。 いくつかの種類の SQL ステートメントと、必要な結果を得るために編集する可能性のある節または部分を見てみましょう。
この記事の内容
Select ステートメントを作成する
SQL select ステートメントには、2 から 3 つの句があります。 SELECT 句は、データを検索する場所をデータベースに指示し、特定の結果を返すようにデータベースに指示します。
注
SELECT ステートメントは、常にセミコロン (;) で終わり、最後の句の末尾か、SQL ステートメントの末尾の単独の行で終わります。
次の select ステートメントは、電子メール アドレス列と会社列、および連絡先テーブルから情報を取得するように Access に要求します。特に、"市区町村" 列の "港区" が見つかった場所から情報を取得するよう要求します。
上記のクエリには、SELECT、FROM、WHERE の 3 つの句があります。
1. SELECT 句には、使用するデータが含まれ、演算子 (SELECT) の後に 2 つの識別子 (電子メール アドレスと会社) が続く列が一覧表示されます。 識別子にスペースまたは特殊文字 ("電子メール アドレス" など) が含まれている場合は、角かっこで囲みます。
2. FROM 句では、ソース テーブルを識別します。 この例では、演算子 (FROM) の後に識別子 (Contacts) が続きます。
3. WHERE 句は省略可能な句です。 この例では、演算子 (WHERE) の後に式 (City="Seattle") が続きます。
select クエリの詳細については、「単純な選択クエリを作成する」を参照してください。
一般的な SQL 句の一覧を次に示します。
| SQL 句 | 目的 | 必須 ? |
|---|---|---|
| SELECT | 目的のデータが含まれているフィールドを列挙します。 | はい |
| FROM | SELECT 句で列挙したフィールドが含まれているテーブルを列挙します。 | はい |
| WHERE | 各レコードが結果に含めるために満たす必要があるフィールド条件を指定します。 | いいえ |
| ORDER BY | 結果の並べ替え方法を指定します。 | いいえ |
| GROUP BY | 集計関数が含まれている SQL ステートメントで、SELECT 句でグループ化されないフィールドを列挙します。 | 該当するフィールドがある場合のみ |
| HAVING | 集計関数が含まれている SQL ステートメントで、SELECT ステートメントでグループ化されるフィールドに適用する条件を指定します。 | いいえ |
各 SQL 句は term で構成されます。 一般的な SQL 用語の一覧を次に示します。
| SQL 条件 | 定義 | 使用例 |
|---|---|---|
| identifier | データベース オブジェクトを識別するために使用する名前 (列名など)。 | [メールアドレス] と会社 |
| 演算子 | アクションを表す、またはアクションを変更するキーワード。 | AS |
| 定数 | 数値や NULL など、変更されない値。 | 42 |
| 式 | 識別子、演算子、定数、および関数の組み合わせで、1 つの値に評価されるもの。 | >= 製品。[単価] |
SELECT 句のカスタマイズ
| カスタマイズ | 使用例 |
|---|---|
| 重複しない値のみを表示する。 SELECT 句で DISTINCT キーワード (keyword)を使用します。 |
たとえば、顧客が複数の異なる支社にいて、一部の顧客が同じ電話番号を使用していて、電話番号を 1 回だけ表示したい場合、SELECT 句は次のようになります。SELECT DISTINCT [txtCustomerPhone] |
| データシート ビューでの識別子の表示方法を変更して、読みやすさを向上させる場合。 SELECT 句でフィールド エイリアスを含む AS 演算子 (アクションを表す、またはアクションを変更するキーワード (keyword)) を使用します。 フィールド エイリアスは、結果を読みやすくするためにフィールドに割り当てる名前です。 |
SELECT [txtCustPhone] AS [Customer Phone] |
FROM 句のカスタマイズ
| カスタマイズ | 使用例 |
|---|---|
| select ステートメントでテーブルに割り当てるテーブル エイリアスまたは別の名前を使用できます。 テーブル エイリアスは、テーブル名の名前が長い場合、特に異なるテーブルの同じ名前を持つ複数のフィールドがある場合に便利です。 | 2 つのフィールド (両方とも ID という名前) からデータを選択するには、1 つはテーブル tblCustomer から、もう 1 つはテーブル tblOrder から取得します。 SELECT [tblCustomer].[ID], [tblOrder].[ID] AS 演算子を使用して、FROM 句でテーブルのエイリアスを定義します。 FROM [tblCustomer] AS [C], [tblOrder]AS [O] その後、次のように、SELECT 句でこれらのテーブル エイリアスを使用できます。SELECT [C]。[ID], [O].[ID] |
| 結合は、2 つのデータ ソースからのレコードのペアを 1 つの結果に結合する場合や、関連するテーブルに対応するレコードがない場合にいずれかのテーブルのレコードを含めるかどうかを指定するのに使います。 テーブルを結合して、テーブルのアイテムを結合し、他のテーブルに対応するレコードが他方のテーブルにない場合にアイテムを除外します |
FROM 句は次のようになります。FROM [tblCustomer] INNER JOIN [tblOrder] ON [tblCustomer].[CustomerID]=[tblOrder].[CustomerID] |
結合の使用について
結合には、内部結合と外部結合の 2 種類があります。 内部結合は、クエリでより一般的です。 内部結合を使用してクエリを実行すると、結果には、両方の結合テーブルに共通の値が存在するアイテムのみが表示されます。
外部結合は、共通値が存在しないデータを含めるかどうかを指定します。 外部結合は方向性があります。つまり、結合で指定された最初のテーブルのすべてのレコードを含める (左結合と呼ばれる) か、2 番目のテーブルのすべてのレコードを結合に含める (右結合と呼ばれる) かを指定できます。 外部結合の SQL 構文は次のとおりです。
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1 = table2.field2
クエリでの結合の使用の詳細については、「 テーブルとクエリの結合」を参照してください。
WHERE 句のカスタマイズ
WHERE 句には、クエリで返されるアイテムの数を制限するのに役立つ条件が含まれています。 クエリ条件の例とその動作を参照してください。
基本的な WHERE 句をカスタマイズする方法の例は、クエリの結果を制限することです。顧客の電話番号を検索したいが、その顧客の姓をベーグルとしてしか覚えていないとします。 この例では、姓は "姓" フィールドに格納されるため、SQL 構文は次のようになります。
WHERE [LastName]='Bagel'
WHERE 句は、一致するデータを持っているがデータ型が異なる列のデータ ソースを組み合わせる場合にも使用します。 これは、異なるデータ型を持つフィールド間で結合を作成できないので便利です。 LIKE キーワード (keyword)を使用して、一方のフィールドをもう一方のフィールドの抽出条件として使用します。 たとえば、資産テーブルと従業員テーブルのデータを使用する場合、資産テーブルの資産の種類フィールドの資産の種類が、従業員テーブルの数量フィールドの数値 3 である場合にのみ、WHERE 句は次のようになります。
WHERE field1 LIKE field2
重要
WHERE 句で集計関数で使用されるフィールドの抽出条件を指定することはできません。 代わりに、HAVING 句を使用して、集計されたフィールドに対して抽出条件を指定します。
ユニオン演算子を使用したカスタマイズ
複数の類似する選択クエリの結果を統合ビューで表示する場合は、UNION 演算子を使用します。 たとえば、データベースに Products テーブルと Services テーブルがあり、両方に 3 つのフィールド (Exclusive Offer or Product or Service、Price、Warranty or Guarantee) があるとします。 "製品" テーブルには保証情報が格納され、[サービス] テーブルには保証情報が格納されますが、基本的な情報は同じです。 ユニオン クエリを使用すると、2 つのテーブルの 3 つのフィールドを次のように組み合わせることができます。
SELECT name, price, warranty, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee, exclusive_offer
FROM Services;
クエリを実行すると、対応するフィールドの各セットのデータは 1 つの出力フィールドに結合されます。 重複する行を結果に含めるには、ALL 演算子を使います。
注
Select ステートメントは、同じ数の出力フィールドを、同じ順序で、同じまたは互換性のあるデータ型を持つ必要があります。 ユニオン クエリでは、数値型とテキスト型は互換性があります。
ユニオン クエリの詳細については、「 ユニオン クエリを使用して複数のクエリの統合結果を表示する」を参照してください。