SQL クエリで選択されるレコードを指定します。
SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
FROM table
ALL、DISTINCT、DISTINCTROW、TOP の各述語を使用する SELECT ステートメントには、次の指定項目があります。
指定項目 | 内容 |
---|---|
ALL 述語 | 述語を 1 つも指定しなければ ALL 述語を指定したものとみなします。Microsoft Jet データベース エンジンは、SQL ステートメントの条件を満たすすべてのレコードを選択します。次の 2 つの例は、どちらも [社員] テーブルのすべてのレコードを返します。
|
DISTINCT 述語 | 選択したフィールドの中でデータが重複しているレコードを除外します。SELECT ステートメントに指定した各フィールドの値をクエリの結果に含めるには、それらがすべて固有である必要があります。たとえば、同姓同名の社員が格納されている [社員] テーブルを考えます。このテーブルで、"氏名" フィールドが "山田次郎" であるレコードが 2 つ以上ある場合、次の SQL ステートメントは "氏名" フィールドが "山田次郎" であるレコードを 1 つのみ返します。
DISTINCT 述語を指定しなければ、"氏名" フィールドが "山田次郎" であるすべてのレコードを返します。 SELECT ステートメントに複数のフィールドを指定している場合、クエリ結果にレコードが含まれるようにするためには、それらのフィールド値の組み合わせがすべて一意である必要があります。 DISTINCT 述語を使用したクエリの出力は、更新できません。また、ほかのユーザーがデータを変更しても、結果には反映されません。 |
DISTINCTROW 述語 | フィールドの重複のみでなく、レコード全体で重複しているデータを除外します。たとえば、[得意先] テーブルと [注文] テーブルを "得意先コード" で結合するクエリを作成したとします。[得意先] テーブルでは "得意先コード" の重複はありませんが、それぞれの得意先は多数の注文を出すので、[注文] テーブルでは得意先コードが重複しています。次の例は、少なくとも 1 回は注文を出したことのある会社の一覧表を DISTINCTROW 述語を使用して作成する SQL ステートメントです。ただし、この一覧には個々の注文の詳細は入りません。
DISTINCTROW 述語を指定しないと、2 回以上注文した得意先について、注文の回数のみの行が作成されます。 DISTINCTROW 述語は、クエリで使用するすべてのテーブルからではなく、一部のテーブルからフィールドを選択した場合のみ有効です。このため、クエリの中にテーブルが 1 つのみしかない場合、またはすべてのテーブルからフィールドを出力する場合は、DISTINCTROW 述語は無視されます。 |
TOP n [PERCENT] 述語 | 先頭または末尾から指定の数までの間にあるレコードを、ORDER BY 句によって決められた順番で返します。たとえば、1994 年度の学級で上位 25 番以内の成績を挙げた生徒の名前を表示するには、次のような SQL ステートメントを記述します。
ORDER BY 句を指定しなければ、WHERE 句の条件を満たす [生徒] テーブル内のレコードの中から、任意の 25 個のレコードを返します。 TOP 述語は、同じ値を持つレコードをすべて選択します。たとえば、上の例で 25 番目の生徒と 26 番目の生徒の成績が同じであれば、クエリは 26 個のレコードを返します。 予約語 PERCENT を使用すると、先頭または末尾から指定のパーセンテージまでの間にあるレコードを、ORDER BY 句によって決められる順番で返すこともできます。次の例は、上位 25 番以内の成績を挙げた生徒を選ぶ代わりに、学級内の上位 10 パーセントに該当する生徒を選びます。
TOP 述語の後に指定する値は、符号なし整数型 (Integer) でなければなりません。 TOP 述語を指定したクエリは、更新できます。 |
table | 取得するデータのあるテーブルの名前。 |
FROM 句 (Microsoft Jet SQL) | SELECT ステートメント (Microsoft Jet SQL) |
ALL、DISTINCT、DISTINCTROW、TOP 述語の使用例