Access SQL: 基本的な概念、用語、および構文

Access SQL: 基本的な概念、用語、および構文

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

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

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

この記事の内容

SQL とは何か?

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

結果を並べ替える:並べ替え

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

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

SQL とは何か?

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

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

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

SELECT Last_Name
FROM Contacts
WHERE 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_1
FROM table_1
WHERE 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」フィールドの値を利用して結果を降順で並べ替えます。「Company」の値が同じレコードがある場合、さらに「E-mail Address」フィールドの値を利用し、結果を昇順で並べ替えます。この 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_1
FROM table_1
UNION [ALL]
SELECT field_a
FROM table_a
;

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

SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services
;

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

ページの先頭へ

スキルを磨く
トレーニングの探索
新機能を最初に入手
Office Insider に参加する

この情報は役に立ちましたか?

ご意見をいただきありがとうございます。

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×