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