ALL、DISTINCT、DISTINCTROW、TOP 述語

適用先
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

これらの述語を使用して、SQL クエリで選択されるレコードを指定します。

構文

SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
FROM table

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

引数 説明
ALL 別の述語を指定しない場合、Access は ALL を想定します。 Access データベース エンジンによって、SQL ステートメントの条件を満たすすべてのレコードが選択されます。 これらの例は同等であり、 Employees テーブルのすべてのレコードを返します。 SELECT ALL * FROM Employees ORDER BY EmployeeID; と SELECT * FROM Employees ORDER BY EmployeeID;
DISTINCT 選択したフィールドに重複するデータを含むレコードは除外します。 結果にレコードを含めるには、 SELECT ステートメントの各フィールドの値が一意である必要があります。 たとえば、 Employees テーブル内の複数の従業員が同じ姓を持つ場合があります。 2 つのレコードの [LastName] フィールドにSmithが含まれている場合、SELECT DISTINCT LastName FROM Employees; はSmithを含む 1 つのレコードのみを返します。 DISTINCTを省略すると、クエリは両方のSmithレコードを返します。 SELECT句に複数のフィールドが含まれる場合、レコードが結果に表示されるには、すべてのフィールドの値の組み合わせが一意である必要があります。 DISTINCT を使用するクエリの出力は更新不可能であり、他のユーザーによって行われた後の変更が反映されません。
DISTINCTROW 重複するフィールドだけでなく、重複するレコード全体に基づいてデータを省略します。 たとえば、CustomerID フィールドの Customers テーブルと Orders テーブルを結合するクエリを作成できます。 Customers テーブルには重複する CustomerID フィールドはありませんが、各顧客が多くの注文を持つ可能性があるため、Orders テーブルには重複します。 SELECT DISTINCTROW CompanyName FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID ORDER BY CompanyName; 少なくとも 1 つの注文がある会社の一覧を生成しますが、それらの注文の詳細は含まれません。 DISTINCTROWを省略すると、複数の注文がある会社ごとに複数の行がクエリで生成されます。 DISTINCTROW は、クエリで使用されるテーブルのすべてではなく一部のフィールドからフィールドを選んだ場合にのみ効果があります。 クエリに 1 つのテーブルしか含まれていない場合や、すべてのテーブルからフィールドを出力する場合は、 DISTINCTROW は無視されます。
TOP n [PERCENT] ORDER BY句で指定した範囲の先頭または末尾にあるレコードの数を、特定の数で返します。 2003 年度のクラスの上位 25 人の学生の名前が必要なとします。 SELECT TOP 25 FirstName, LastName FROM Students WHERE GraduationYear = 2003 ORDER BY GradePointAverage DESC;ORDER BY 句を指定しない場合、クエリは、 Students テーブルから WHERE 句を満たす 25 レコードの任意のセットを返します。 TOP述語は、等しい値のどちらかを選択しません。 前の例では、25 番目と 26 番目に高い成績の平均点が同じ場合、クエリは 26 件のレコードを返します。 PERCENT予約語を使用して、ORDER BY句で指定した範囲の先頭または下位にあるレコードの割合を返すこともできます。 たとえば、クラスの下位 10% が必要な場合は、 SELECT TOP 10 PERCENT FirstName, LastName FROM Students WHERE GraduationYear = 2003 ORDER BY GradePointAverage ASC; を使用します。 ASC 述語は下位値を返します。 TOP に続く値は、符号なし整数にする必要があります。 TOP クエリが更新可能かどうかには影響しません。
table Access がレコードを取得するテーブルの名前。