ALL、DISTINCT、DISTINCTROW、TOP 述語

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

構文

SELECT [ALL |DISTINCT |DISTINCTROW |[TOP n [PERCENT]]]FROM テーブル

これらの述語を含む SELECT ステートメントには、次の部分があります。

引数

説明

ALL

述語の 1 つを含まない場合に想定されます。 Microsoft Access データベース エンジンは、SQL ステートメントの条件を満たすすべてのレコードを選択します。 次の 2 つの例は同等であり、Employees テーブルからすべてのレコードを返します。

SELECT ALL *FROM EmployeesORDER BY EmployeeID;
SELECT *FROM EmployeesORDER BY EmployeeID;

DISTINCT

選択したフィールドに重複データを含むレコードを省略します。 クエリの結果に含めるには、SELECT ステートメントに一覧表示される各フィールドの値が一意である必要があります。 たとえば、Employees テーブルに一覧表示されている複数の従業員の姓が同じである場合があります。 LastName フィールドに 2 つのレコードに Smith が含まれている場合、次の SQL ステートメントは Smith を含むレコードを 1 つだけ返します。

SELECT DISTINCT LastNameFROM Employees;

DISTINCT を省略すると、このクエリは両方の Smith レコードを返します。

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

DISTINCT を使用するクエリの出力は更新可能ではなく、他のユーザーによる後続の変更は反映されません。

DISTINCTROW

重複フィールドだけでなく、重複レコード全体に基づいてデータを省略します。 たとえば、CustomerID フィールドの Customers テーブルと Orders テーブルを結合するクエリを作成できます。 Customers テーブルには重複する CustomerID フィールドが含まれていませんが、各顧客が多数の注文を持つ可能性があるため、Orders テーブルにはが含まれます。 次の SQL ステートメントは、DISTINCTROW を使用して、少なくとも 1 つの注文があるが、それらの注文に関する詳細がない企業の一覧を生成する方法を示しています。

SELECT DISTINCTROW CompanyNameFROM Customers INNER JOIN OrdersON Customers.CustomerID = Orders.CustomerIDORDER BY CompanyName;

DISTINCTROW を省略した場合、このクエリでは、複数の注文を持つ会社ごとに複数の行が生成されます。

DISTINCTROW は、クエリで使用されるテーブルの一部 (すべてではない) からフィールドを選択した場合にのみ有効です。 DISTINCTROW は、クエリに含まれるテーブルが 1 つだけの場合、またはすべてのテーブルからフィールドを出力する場合は無視されます。

TOP n [PERCENT]

ORDER BY 句で指定された範囲の一番上または一番下にある特定の数のレコードを返します。 1994 年のクラスの上位 25 人の学生の名前が必要だとします。

SELECT TOP 25FirstName, LastNameFROM StudentsWHERE GraduationYear = 2003ORDER BY GradePointAverage DESC;

ORDER BY 句を含まない場合、クエリは WHERE 句を満たす Students テーブルから任意の 25 レコードセットを返します。

TOP 述語では、等しい値は選択されません。 前の例では、25 番目と 26 番目の最高グレードのポイント平均が同じ場合、クエリは 26 レコードを返します。

また、PERCENT 予約語を使用して、ORDER BY 句で指定された範囲の上部または下部にある特定の割合のレコードを返すこともできます。 上位 25 人の学生ではなく、クラスの下位 10% が必要であるとします。

SELECT TOP 10 PERCENTFirstName, LastNameFROM StudentsWHERE GraduationYear = 2003ORDER BY GradePointAverage ASC;

ASC 述語は、下位値の戻り値を指定します。 TOP に続く値は符号なし整数である必要があります。

TOP は、クエリが更新可能かどうかに影響しません。

table

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

ヘルプを表示

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

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

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