Access SQL: 基本的な概念、用語、および構文
Applies ToAccess for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

データベースからデータを取得するとき、SQL (構造化照会言語) を利用してデータを照会します。 SQL は英語に近いですが、データベースのプログラムが理解できるコンピューター言語です。 実行するあらゆるクエリの裏で SQL が使用されています。

SQL のしくみを理解すると、より良いクエリを作成できるようになります。また、必要な結果を返さないクエリの修正方法がわかります。

これは Access SQL に関する一連の記事の 1 つです。 この記事では、SQL でデータを選択する基本を説明し、例を利用して SQL 構文を説明します。

この記事の内容

SQL とは何か?

SQL は、ファクト セットとそのリレーションシップを操作するためのコンピューター言語です。 Microsoft Office Access のようなリレーショナル データベースで SQL を利用し、データを操作します。 多くのコンピューター言語とは異なりは、SQL の場合、読んで理解することは初心者であっても難しくありません。 多くのコンピューター言語と同様に、SQL は ISOANSI のような標準化団体で認められている国際的な標準です。

SQL を使用し、必要な結果が得られるようにデータ セットを表します。 SQL を使用するとき、正しい構文を使用する必要があります。 構文はルール セットであり、このルールにより、言語の要素が正しく結合されます。 SQL 構文は英語の構文に基づいており、Visual Basic for Applications (VBA) の構文と同じ要素が多く利用されています。

たとえば、名が「Mary」の連絡先を対象に姓の一覧を取得する単純な SQL ステートメントは次のようになります。

SELECT Last_NameFROM ContactsWHERE First_Name = 'Mary';

注: SQL はデータの操作だけでなく、テーブルなど、データベース オブジェクトの作成や変更にも利用されます。 データベース オブジェクトの作成や変更に利用される SQL 要素は、DDL (データ定義言語) と呼ばれています。 DDL については、このトピックでは説明しません。 詳細については、「Create or modify tables or indexes by using a data-definition query」 (データ定義クエリでテーブルやインデックスを作成または変更する) という記事をご覧ください。

SELECT ステートメント

SQL を利用してデータ セットを表すには、SELECT ステートメントを記述します。 SELECT ステートメントには、データベースから取得するデータ セットの完全な説明が含まれます。 これには次のものが含まれます。

  • データが含まれているテーブル。

  • ソースの異なるデータの関連性。

  • データを生成するフィールドまたは計算。

  • データに一致が求められる基準。

  • 結果の並べ替えの必要性と並べ替え方法。

SQL 句

文章と同様に、SQL ステートメントは句があります。 それぞれの句で SQL ステートメントの関数を実行します。 一部の句は SELECT ステートメントで必須となります。 次の表は、最も一般的な SQL 句をまとめたものです。

SQL 句

機能

必須

SELECT

目的のデータが含まれているフィールドを列挙します。

はい

FROM

SELECT 句で列挙したフィールドが含まれているテーブルを列挙します。

はい

WHERE

各レコードが結果に含めるために満たす必要があるフィールド条件を指定します。

いいえ

ORDER BY

結果の並べ替え方法を指定します。

いいえ

GROUP BY

集計関数が含まれている SQL ステートメントで、SELECT 句でグループ化されないフィールドを列挙します。

該当するフィールドがある場合のみ

HAVING

集計関数が含まれている SQL ステートメントで、SELECT ステートメントでグループ化されるフィールドに適用する条件を指定します。

いいえ

SQL 条件

各 SQL 句は、音声の部分と同等の用語で構成されます。 次の表に、SQL 用語の種類を示します。

SQL 条件

相当する品詞

定義

識別子

名詞

フィールドの名前など、データベース オブジェクトを識別するための名前。

顧客.[電話番号]

演算子

動詞または副詞

アクションを表す、またはアクションを変更するキーワード。

AS

定数

名詞

数値や NULL など、変更されない値。

42

形容詞

識別子、演算子、定数、および関数の組み合わせで、1 つの値に評価されるもの。

>= 商品.[単価]

ページの先頭へ

基本的な SQL 句:SELECT、FROM、WHERE

SQL ステートメントの一般的な形式は次のようになります。

SELECT field_1FROM table_1WHERE criterion_1;

注: 

  • Access では、SQL ステートメントの改行は無視されます。 ただし、SQL ステートメントの読みやすさを向上させるために、句ごとに行を使用することを検討してください。

  • SELECT ステートメントはすべて、セミコロン (;) で終わります。 セミコロンは最後の句の終わりに表示されるか、1 行だけの場合、SQL ステートメントの終わりに表示されます。

Access の例

次の図は、Access における単純な Select クエリの SQL ステートメントの例です。

SELECT ステートメントが表示されている SQL オブジェクト タブ

1.SELECT 句

2.FROM 句

3.WHERE 句

この例の SQL ステートメントは、"「E-mail Address」という名前のフィールドと「Company」という名前のフィールドに保管されているデータを選択する。テーブルの名前は「Contacts」であり、「City」というフィールドの値が「Seattle」になっているレコードを選択する" という意味になります。

句ごとに確認し、SQL 構文のしくみを理解しましょう。

SELECT 句

SELECT [E-mail Address], Company

これは SELECT 句です。 演算子 (SELECT) とそれに続く 2 つの識別子 ([E-mail Address] と Company) から構成されています。

("E-mail Address" のように) 識別子にスペースや特殊文字が含まれる場合、角括弧で囲む必要があります。

SELECT 句では、フィールドを含むテーブルを指定する必要がありません。含めるデータに一致を要求する条件を指定することはできません。

SELECT 句は常に SELECT ステートメントの FROM 句の前に表示されます。

FROM 句

FROM Contacts

これは FROM 句です。 演算子 (FROM) とそれに続く識別子 (Contacts) から構成されています。

FROM 句には、選択するフィールドは一覧表示されません。

WHERE 句

WHERE City="Seattle"

これは WHERE 句です。 演算子 (WHERE) とそれに続く式 (City="Seattle") から構成されています。

注: SELECT 句や FROM 句とは異なり、WHERE 句は SELECT ステートメントの必須要素ではありません。

SELECT、FROM、WHERE 句で SQL で可能な多くの操作を実行できます。 以上の句の使用方法に関する詳細は追加記事でご覧ください。

ページの先頭へ

結果を並べ替える:ORDER BY

Microsoft Excel と同様に、Access を使用すると、データシートでクエリ結果を並べ替えることができます。 また、ORDER BY 句を使用して、クエリの実行時に結果を並べ替える方法をクエリで指定することもできます。 ORDER BY 句を使用する場合は、SQL ステートメントの最後の句になります。

ORDER BY 句には、並べ替えに使用するフィールドの一覧が含まれます。これと同じ順序で並べ替え操作を適用します。

たとえば、最初にフィールド Company の値を降順で並べ替え、会社に同じ値を持つレコードがある場合は、フィールドの [電子メール アドレス] の値で次に昇順で並べ替えたとします。 ORDER BY 句は次のようになります。

ORDER BY Company DESC, [E-mail Address]

注: Access では既定で、値が昇順で並べ替えられます (A → Z、最小→最大)。 DESC キーワードを使用すると、値が代わりに降順で並べ替えられます。

ORDER BY 句の詳細については、「ORDER BY 句」を参照してください。

ページの先頭へ

集計データを操作する:GROUP BY と HAVING

月の売り上げ合計や在庫にある最も高価な品など、集計データを操作することがあります。 その場合、SELECT 句のフィールドに 集計関数 を適用します。 たとえば、電子メール アドレスの数を会社別に一覧表示する場合、SELECT 句は次のようになります。

SELECT COUNT([E-mail Address]), Company

利用できる集計関数は、使用するフィールドまたは式に含まれるデータの種類によって異なります。 利用できる集計関数の詳細については、「SQL 集計関数」を参照してください。

集計関数で使用されないフィールドを指定する:GROUP BY 句

集計関数を使用するときは通常、GROUP BY 句も作成する必要があります。 GROUP BY 句には、集計関数を適用しないすべてのフィールドを指定します。 クエリのすべてのフィールドに集計関数を適用する場合、GROUP BY 句を作成する必要はありません。

GROUP BY 句は、WHERE 句の直後、または WHERE 句がない場合は FROM 句に従います。 GROUP BY 句は、SELECT 句に表示されるフィールドの一覧を示します。

たとえば、前述の例の SELECT 句で「Company」にではなく、「[E-mail Address]」に集計関数を適用する場合、GROUP BY 句は次のようになります。

GROUP BY Company

GROUP BY 句の詳細については、「GROUP BY 句」を参照してください。

グループ基準を利用して集計値を制限する: HAVING 句

基準を利用して結果を絞り込みたいが、基準を適用するフィールドが集計関数で使用されていない場合、WHERE 句を使用できません。 代わりに HAVING 句を使用します。 HAVING 句は WHERE 句のように動作しますが、集計データに使用されます。

たとえば、SELECT 句の最初のフィールドで AVG 関数 (平均値を計算する) を使用します。

SELECT COUNT([E-mail Address]), Company

この COUNT 関数の値に基づいて照会結果を絞り込む場合、WHERE 句のこのフィールドに基準を使用することはできません。 代わりに HAVING 句に条件を入力します。 たとえば、会社に関連付けられている電子メール アドレスが複数存在する場合にのみ、行を返す場合、HAVING 句は次のようになります。

HAVING COUNT([E-mail Address])>1

注: クエリには WHERE 句と HAVING 句を指定できます。集計関数で使用されないフィールドの基準を WHERE 句に指定し、集計関数で使用されるフィールドの基準を HAVING 句に指定します。

HAVING 句の詳細については、「HAVING 句」を参照してください。

ページの先頭へ

クエリの結果を結合する:UNION

同じような SELECT クエリで返されるすべてのデータをまとめて、結合された 1 つのセットとして表示するには、UNION 演算子を使用します。

UNION 演算子を使用すると、2 つの SELECT ステートメントを 1 つに結合できます。 結合する SELECT ステートメントは、同じ順序で同じ数の出力フィールドを持ち、同じデータ型または互換性のあるデータ型を持つ必要があります。 クエリを実行すると、対応するフィールドの各セットのデータが 1 つの出力フィールドに結合され、クエリ出力のフィールド数が各 select ステートメントと同じになります。

注: ユニオン クエリでは、数値型とテキスト型は互換性があります。

UNION 演算子を使用するとき、重複する行をクエリ結果に含めるかどうかも指定できます。ALL というキーワードを使用します。

2 つの SELECT ステートメントを結合する UNION クエリの基本的な SQL 構文は次のとおりです。

SELECT field_1FROM table_1UNION [ALL]SELECT field_aFROM table_a;

たとえば、Products という名前のテーブルと Services という名前のテーブルがあるとします。 どちらのテーブルにも、製品またはサービスの名前、価格、保証または保証契約の利用可否、製品またはサービスを排他的に提供するかどうかを含むフィールドがあります。 Products テーブルには保証情報が格納され、Services テーブルには保証契約情報が格納されますが、基本情報は同じです (特定の製品やサービスに品質の保証が適用されるかどうか)。 次のような UNION クエリを使用すると、2 つのテーブルから 4 つのフィールドを結合できます。

SELECT name, price, warranty_available, exclusive_offerFROM ProductsUNION ALLSELECT name, price, guarantee_available, exclusive_offerFROM Services;

UNION 演算子で SELECT ステートメントを結合する方法については、「Combine the results of several select queries by using a union query」 (UNION クエリで複数の SELECT クエリの結果を結合する) を参照してください。

ページの先頭へ

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。