ALL、DISTINCT、DISTINCTROW、TOP 述語

ALL、DISTINCT、DISTINCTROW、TOP 述語

SQL クエリで選ばれたレコードを指定します。

構文

選択 [すべて |重複しない値 |DISTINCTROW |[上位nダイアログ ボックスの [パーセント]]
テーブルから

これらの述語を含む SELECT ステートメントは、次のような項目で構成されています。

項目

説明

ALL

かどうかは指定しないと、述語の 1 つと見なされます。Microsoft Access データベース エンジンでは、すべての SQL ステートメントの条件を満たすレコードが選択されます。次の 2 つの例と同じ [従業員] テーブルからすべてのレコードを返します。

SELECT ALL *
FROM Employees
ORDER BY EmployeeID;
SELECT *
FROM Employees
ORDER BY EmployeeID;

DISTINCT

選んだフィールドで重複データがあるレコードを除外します。 レコードをクエリの結果に含めるには、SELECT ステートメントで指定する各フィールドの値が一意でなければなりません。 たとえば、従業員テーブルに登録された複数の従業員が同じ姓であるとします。 2 つのレコードの "姓" フィールドに "内田" が含まれている場合、次の SQL ステートメントでは、"内田" を含むレコードが 1 つしか返されません。

SELECT DISTINCT LastName
FROM Employees;

DISTINCT を省略すると、このクエリでは両方の "内田" のレコードが返されます。

SELECT 句に複数のフィールドが含まれる場合、特定のレコードを結果に含めるには、すべてのフィールドの値の組み合わせが一意である必要があります。

DISTINCT を指定したクエリの出力は更新できず、後で他のユーザーが行った変更は反映されません。

DISTINCTROW

重複するフィールドだけでなく、重複するレコード全体に基づいてデータを除外します。 たとえば、"得意先 ID" フィールドに "得意先" テーブルと "受注" テーブルを結合するクエリを作成したとします。 "得意先" テーブルには重複する "得意先 ID" フィールドはありませんが、それぞれの得意先からはたくさんの受注があるため、"受注" テーブルには重複があります。 次の SQL ステートメントでは、DISTINCTROW を使って、1 件以上の受注がある会社の一覧を、受注の詳細を含めることなく生成します。

SELECT DISTINCTROW CompanyName
FROM Customers INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
ORDER BY CompanyName;

このクエリで、DISTINCTROW を省略すると、複数の受注がある会社には複数の行が返されます。

DISTINCTROW が効果を発揮するのは、クエリで使われるすべてのテーブルではなく、一部のテーブルからフィールドを選ぶ場合に限られます。 クエリに 1 つのテーブルのみを指定した場合やすべてのテーブルからフィールドを出力する場合、DISTINCTROW は無視されます。

TOP n [PERCENT]

ORDER BY 句で指定した範囲の上限または下限から一定数のレコードを返します。 1994 年のクラスで、上位 25 人の学生の名前を返す場合を考えてみましょう。

SELECT TOP 25
FirstName, LastName
FROM Students
WHERE GraduationYear = 2003
ORDER BY GradePointAverage DESC;

ORDER BY 句を指定しないと、たまたま WHERE 句の条件に合った 25 レコードが "学生" テーブルから返されます。

TOP 述語では、同じ値から 1 つを選ぶことはできません。 上記の例で、25 位と 26 位の成績評価点平均が同じであった場合、クエリでは 26 レコードが返されます。

また PERCENT 予約語を使って、ORDER BY 句で指定した範囲の上限または下限から一定の割合のレコードを返すことができます。 上位 25 人の学生ではなく、クラスの下位 10 パーセントの学生を返す場合を考えてみましょう。

SELECT TOP 10 PERCENT
FirstName, LastName
FROM Students
WHERE GraduationYear = 2003
ORDER BY GradePointAverage ASC;

ASC 述語では、下位の値の戻り値を指定します。一番上で行われる値は符号なし整数である必要があります。

クエリが更新できるかどうかは、TOP の影響を受けません。

table

レコードを取得するテーブルの名前。



注記: 

  • 機械翻訳についての免責事項: この記事の翻訳はコンピューター システムによって行われており、人間の手は加えられていません。マイクロソフトでは、英語を話さないユーザーがマイクロソフトの製品、サービス、テクノロジに関するコンテンツを理解するのに役立てるため、こうした機械翻訳を提供しています。記事は機械翻訳されているため、用語、構文、文法などに誤りがある場合があります。

  • この記事の英語版を参照するには、ここ をクリックしてください。Microsoft コミュニティの他のメンバーと一緒に、Community Translation Framework (CTF) を使ったこの記事の改善にご協力ください。記事内の文章にマウス ポインターを合わせて、CTF ウィジェットの [翻訳を改善します] をクリックしてください。CTF の詳細については、ここ をクリックしてください。CTF を使用すると弊社の サービス利用規約 に同意したことになります。

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

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

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

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

×