TOP (Transact-SQL)
更新 : 2008 年 11 月 17 日
クエリ結果の先頭から指定した行セットだけを返すよう指定します。行セットには、行数またはパーセントのいずれかを指定できます。TOP 式は、SELECT、INSERT、UPDATE、および DELETE ステートメントで使用できます。
構文
[
TOP (expression) [PERCENT]
[ WITH TIES ]
]
引数
expression
返す行数を表す数式を指定します。PERCENT を指定した場合 expression は明示的に float 値に変換されます。それ以外の場合は bigint に変換されます。INSERT、UPDATE、および DELETE の各ステートメントで TOP を使用する場合は、expression を区切るかっこが必要です。旧バージョンとの互換性のため、SELECT ステートメントで TOP を使用する場合は expression をかっこで囲まなくても処理が行われますが、これは推奨されません。
クエリに ORDER BY 句が含まれている場合は、結果の先頭から expression で指定した行数、または expression で指定したパーセントが、ORDER BY 句で並べ替えられてから出力されます。クエリに ORDER BY 句が含まれていない場合は、任意の順序で行が出力されます。
- PERCENT
クエリの結果セットの先頭から、expression で指定したパーセントの行のみを返すよう指定します。
WITH TIES
ORDER BY のキー列の値が TOP n (PERCENT) の最終行と同じ値になっている行を、基本結果セットから追加行として返します。TOP...WITH TIES は SELECT ステートメントでのみ使用でき、ORDER BY 句が指定されている必要があります。メモ : 同順位のレコードが返される順序は任意です。SORT BY はこの規則に影響しません。
解説
パーティション ビューで、UPDATE および DELETE ステートメントと一緒に TOP を使用することはできません。
INSERT、UPDATE、または DELETE と一緒に使用される TOP 式で参照される行は、任意の順序に並べられません。TOP n はランダムな n 行を返します。たとえば、次の INSERT
ステートメントには ORDER BY
句が含まれていますが、この句は INSERT
ステートメントが直接参照する行には影響しません。
INSERT TOP (2) INTO Table2 (ColumnB)
SELECT ColumnA FROM Table1
ORDER BY ColumnA
このクエリの ORDER BY
句では、入れ子にされている SELECT
ステートメントで返される行のみが参照されます。INSERT
ステートメントでは、SELECT
ステートメントで返された任意の 2 行が選択されます。SELECT
サブクエリからの最初の 2 行が挿入されるようにするには、次のようにクエリを書き直します。
INSERT INTO Table2 (ColumnB)
SELECT TOP (2) ColumnA FROM Table1
ORDER BY ColumnA
Microsoft SQL Server 2005 では、TOP 句で作成されたビューを更新できます。TOP 句はビュー定義に含まれているので、結果が TOP 式の要件を満たさなくなると、更新したときに特定の行がビューから削除される場合があります。詳細については、「ビューを使用したデータ変更」を参照してください。
クエリ内の TOP 式は、トリガが起動されたときに実行されるステートメントには影響しません。トリガ内で挿入および更新されたテーブルでは、INSERT、UPDATE、または DELETE ステートメントによって実際に影響を受けた行のみが表示されます。
例
A. TOP を変数と一緒に使用する
次の例では、変数を使って、AdventureWorks
データベースの dbo.Employee
テーブルにある最初の 10
人の従業員を取得します。
USE AdventureWorks ;
GO
DECLARE @p AS int
SET @p='10'
SELECT TOP(@p)*
FROM HumanResources.Employee;
GO
B. TOP を PERCENT および WITH TIES と一緒に使用する
次の例では、給与の高い上位 10
パーセントの全従業員を取得し、結果を基本給の降順で返します。WITH TIES
を指定すると、返された一番低い給与と同じ給与の従業員も返されるので、結果は全従業員の 10
% を超える場合があります。
USE AdventureWorks ;
GO
SELECT TOP(10) PERCENT WITH TIES
c.FirstName, c.LastName, e.Title, e.Gender, r.Rate
FROM Person.Contact c
INNER JOIN HumanResources.Employee e
ON c.ContactID = e.ContactID
INNER JOIN HumanResources.EmployeePayHistory r
ON r.EmployeeID = e.EmployeeID
ORDER BY Rate DESC;
参照
関連項目
SELECT (Transact-SQL)
INSERT (Transact-SQL)
UPDATE (Transact-SQL)
DELETE (Transact-SQL)
ヘルプおよび情報
変更履歴
リリース | 履歴 |
---|---|
2008 年 11 月 17 日 |
|
2005 年 12 月 5 日 |
|