注: 最新のヘルプ コンテンツをできるだけ早く、お客様がお使いの言語で提供したいと考えております。このページは、自動翻訳によって翻訳されているため、文章校正のエラーや不正確な情報が含まれている可能性があります。私たちの目的は、このコンテンツがお客様の役に立つようにすることです。お客様にとって役立つ情報であったかどうかを、このページの下部でお知らせください。簡単に参照できるように、こちらに英語の記事があります。
クエリが思うように動作しない場合は、基本的な SQL ステートメントを少し加えて結果を絞り込むことができます。目的の結果を得るためにユーザーが編集できる SQL ステートメント、句、要素について学習しましょう。
注: この記事は Access Web アプリ (Access で設計してオンラインで公開するデータベースの一種) には適用されません。
この記事の内容
SELECT ステートメントを作成する
SQL の SELECT ステートメントは 2 ~ 3 つの句から成り立ちます。SELECT 句は、データの検索場所をデータベースに指示し、特定の結果を返すように要求します。
注: SELECT ステートメントの末尾、つまり最後の句の末尾、または 1 行だけの場合はその SQL ステートメントの末尾は、常にセミコロン (;) で終わります。
次の SELECT ステートメントは、[市区町村] 列が "調布市" のレコードについて、[電子メール アドレス] 列と [会社] 列、[連絡先] テーブルの情報を取得するように Access に要求します。
上のクエリでは、SELECT、FROM、WHERE の 3 つの句が使われています。
1. SELECT 句では、目的のデータが含まれている列を列挙します。演算子 (SELECT) に続けて 2 つの識別子 (電子メール アドレスと会社) が指定されています。識別子にスペースや特殊文字 ("電子メール アドレス" など) が使われている場合は、識別子を角かっこで囲みます。
2. FROM 句では、ソース テーブルを特定します。この例では、演算子 (FROM) に続けて識別子 (連絡先) が指定されています。
3. WHERE 句は省略可能です。この例では、演算子 (WHERE) に続けて式 (City="調布市") が指定されています。
詳細については、選択クエリでは、「簡単な選択クエリを作成します。
一般的な SQL 句の一覧を次に示します。
SQL 句 | 機能 | 必要な ? |
---|---|---|
SELECT |
目的のデータが含まれているフィールドを列挙します。 |
はい |
FROM |
SELECT 句で列挙したフィールドが含まれているテーブルを列挙します。 |
はい |
WHERE |
各レコードが結果に含めるために満たす必要があるフィールド条件を指定します。 |
いいえ |
ORDER BY |
結果の並べ替え方法を指定します。 |
いいえ |
GROUP BY |
集計関数が含まれている SQL ステートメントで、SELECT 句でグループ化されないフィールドを列挙します。 |
該当するフィールドがある場合のみ |
HAVING |
集計関数が含まれている SQL ステートメントで、SELECT ステートメントでグループ化されるフィールドに適用する条件を指定します。 |
いいえ |
各 SQL 句は複数の SQL 条件から構成されます。一般的な SQL 条件の一覧を次に示します。
SQL 条件 | 定義 | 例 |
---|---|---|
識別子 |
データベース オブジェクトを識別するために使う名前 (列名など)。 |
[電子メール アドレス] と会社 |
演算子 |
アクションを表す、またはアクションを変更するキーワード。 |
AS |
定数 |
数値や NULL など、変更されない値。 |
42 |
式 |
識別子、演算子、定数、および関数の組み合わせで、1 つの値に評価されるもの。 |
>= 商品.[単価] |
SELECT 句をカスタマイズする
[ユーザー設定] | 使用例 |
---|---|
重複していない値だけを表示するには: SELECT 句で DISTINCT キーワードを使います。 |
たとえば、複数の支店に分散している顧客がいますが、一部の電話番号は重複しているとします。電話番号を一度だけ列挙するには、SELECT 句を次のように使います。
|
データシート ビューに識別子を表示する方法を変更してデータを読みやすくするには: AS 演算子 (アクションを表す、またはアクションを変更するキーワード) とフィールドの別名を SELECT 句で使用します。フィールドの別名とは、結果をわかりやすくするためにユーザーがフィールドに割り当てる名前です。 |
|
FROM 句をカスタマイズする
[ユーザー設定] | 使用例 |
---|---|
テーブルの別名 (テーブルに割り当てる別の名前) を SELECT ステートメントで使用できます。テーブル名が長い場合、とりわけ異なるテーブル間で同じ名前を持つフィールドが複数ある場合は、テーブルの別名が役に立ちます。 |
ともに ID という名前の 2 つのフィールド (1 つは tblCustomer テーブルのフィールドで、もう 1 つは tblOrder テーブルのフィールド) からデータを選択するには、次のようにします。
テーブルの別名を定義するには、FROM 句で AS 演算子を次のように使用します。
続いて、これらのテーブルの別名を SELECT 句で次のように使用できます。
|
結合を使って 2 つのデータ ソースのレコード ペアを 1 つの結果に結合します。また、関連テーブルに対応するレコードがない場合に、どちらかのテーブルのレコードを含めるかどうかを指定します。 テーブルを結合し、クエリで両方のテーブルの項目を結合します。一方のテーブルに対応するレコードがない場合は、項目を除外します。 |
FROM 句は次のようになります。
|
結合の使用について
結合には内部結合と外部結合の 2 種類があります。クエリでよく使うのは内部結合です。 内部結合を使用したクエリを実行すると、結合される両方のテーブルで同じ値を持つ項目だけが結果に表示されます。
外部結合は、一致する値がない場合にデータを含めるかどうかを指定します。外部結合には一定の方向性があります。つまり、結合で指定されている最初のテーブルのレコードをすべて含めるかどうか (左結合)、または結合の 2 番目のテーブルのレコードをすべて含めるかどうか (右結合) を指定します。外部結合の SQL 構文は次のとおりです。
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1 = table2.field2
テーブルおよびクエリを結合するクエリで結合の使用に関する詳細情報を参照してください。
WHERE 句をカスタマイズする
WHERE 句では、クエリで返される項目数を絞り込む条件を指定します。「クエリの抽出条件の例」で動作を確認してください。
たとえば、基本的な WHERE 句をカスタマイズしてクエリ結果を絞り込むことができます。得意先の電話番号を検索したい場合に、名字が "Bagel" であることしかわからないとします。この例では、名字は LastName フィールドに格納されているので、SQL 構文は次のようになります。
WHERE [LastName]='Bagel'
データは一致するがデータ型が異なる列についてデータ ソースを結合する場合も、WHERE 句を使います。データ型の異なるフィールド間には結合を作成できないため、これは便利です。一方のフィールドをもう一方のフィールドの抽出条件として使い、LIKE キーワードを指定します。たとえば、Assets テーブルの asset type フィールドの資産の種類が Employees テーブルの Quantity フィールドと同じ数 3 である場合にのみ、Assets テーブルと Employees テーブルのデータを使いたいとすると、WHERE 句は次のようになります。
WHERE field1 LIKE field2
重要: 集約関数で使用されるフィールドの抽出条件を WHERE 句で指定することはできません。集約フィールドの抽出条件は HAVING 句を使って指定します。
UNION 演算子を使ってカスタマイズする
類似した複数の選択クエリの結果をまとめて表示したい場合は、UNION 演算子を使います。たとえば、データベースに Products テーブルと Services テーブルがあり、どちらのテーブルにも exclusive offer or product or service、price、warranty or guarantee の 3 つのフィールドがあるとします。Products テーブルには保証情報が格納され、Services テーブルには保証契約情報が格納されますが、基本情報は同じです 次のようなユニオン クエリを使用すると、2 つのテーブルから 3 つのフィールドを結合できます。
SELECT name, price, warranty, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee, exclusive_offer
FROM Services;
クエリを実行すると、対応するフィールドの各セットが 1 つの出力フィールドにまとめられます。重複する行をすべて結果に含めるには、ALL 演算子を使います。
注: SELECT ステートメントの出力フィールドは、同じ数、同じ順序、同じまたは互換性のあるデータ型である必要があります。ユニオン クエリでは、数値型とテキスト型は互換性があります。
ユニオン クエリの詳細については、「ユニオン クエリを使って複数のクエリの結果を統合して表示する」をご覧ください。