TOP
を使用する場合 SQL Serverのクエリの句では、2つ以上の結果が最後の場所に結びつく場合があります。 TOP
のデフォルトの動作のため、これがいつ発生するかさえわからないでしょう。 指定した行数以下を返すことです。
TOP
句はWITH TIES
を受け入れます 最後の場所に関連するすべての結果を含めるかどうかを指定できる引数。 ORDER BY
により、行は最後の場所に結びつく可能性があります 同じ値を含む列。したがって、この引数を使用すると、実際に指定したよりも多くの行が返される可能性があります。
例1-データ
まず、次の例で使用するデータを次に示します。
SELECT AlbumId, AlbumName, ArtistId FROM Albums;
結果:
+-----------+--------------------------+------------+ | AlbumId | AlbumName | ArtistId | |-----------+--------------------------+------------| | 1 | Powerslave | 1 | | 2 | Powerage | 2 | | 3 | Singing Down the Lane | 6 | | 4 | Ziltoid the Omniscient | 5 | | 5 | Casualties of Cool | 5 | | 6 | Epicloud | 5 | | 7 | Somewhere in Time | 1 | | 8 | Piece of Mind | 1 | | 9 | Killers | 1 | | 10 | No Prayer for the Dying | 1 | | 11 | No Sound Without Silence | 9 | | 12 | Big Swing Face | 4 | | 13 | Blue Night | 12 | | 14 | Eternity | 12 | | 15 | Scandinavia | 12 | | 16 | Long Lost Suitcase | 7 | | 17 | Praise and Blame | 7 | | 18 | Along Came Jones | 7 | | 19 | All Night Wrong | 3 | | 20 | The Sixteen Men of Tain | 3 | | 21 | Yo Wassup | 9 | | 22 | Busted | 9 | +-----------+--------------------------+------------+
例2–タイなしでTOPを使用する
TOP
を使用するとどうなりますか なし WITH TIES
を指定する 。これは、ほとんどの人がこの句を使用する方法です。
この場合、結果をArtistId
で並べ替えます。 。
SELECT TOP(3) AlbumId, AlbumName, ArtistId FROM Albums ORDER BY ArtistId ASC;
結果:
+-----------+-------------------+------------+ | AlbumId | AlbumName | ArtistId | |-----------+-------------------+------------| | 1 | Powerslave | 1 | | 7 | Somewhere in Time | 1 | | 8 | Piece of Mind | 1 | +-----------+-------------------+------------+
予想どおり、3つの行があります。これらは、TOP
で指定された上位3つです。 条項。
例3–ネクタイでTOPを使用する
今、関係のために。 WITH TIES
を追加するとどうなりますか 。
SELECT TOP(3) WITH TIES AlbumId, AlbumName, ArtistId FROM Albums ORDER BY ArtistId ASC;
結果:
+-----------+-------------------------+------------+ | AlbumId | AlbumName | ArtistId | |-----------+-------------------------+------------| | 1 | Powerslave | 1 | | 7 | Somewhere in Time | 1 | | 8 | Piece of Mind | 1 | | 9 | Killers | 1 | | 10 | No Prayer for the Dying | 1 | +-----------+-------------------------+------------+
これで、3行ではなく5行になります。これは、同じArtistId
を共有する行がさらに2つあるためです。 3行目として。言い換えれば、3列が最後の場所に結びついていました。
SQL Serverでは、返される行を結ぶ順序は任意であることに注意してください。
例4–関係を排除するための変更されたORDERBY句
AlbumId
を追加すると ORDER BY
への列 条項、これは完全に結びつきを排除します。
SELECT TOP(3) WITH TIES AlbumId, AlbumName, ArtistId FROM Albums ORDER BY ArtistId ASC, AlbumId ASC;
結果:
+-----------+-------------------+------------+ | AlbumId | AlbumName | ArtistId | |-----------+-------------------+------------| | 1 | Powerslave | 1 | | 7 | Somewhere in Time | 1 | | 8 | Piece of Mind | 1 | +-----------+-------------------+------------+
したがって、WITH TIES
を指定した場合でも 、この場合は存在しません。
例5–WHERE句の使用
これが最後の例です。ここでは、WHERE
を使用しています。 テーブルの中央から一連の行を抽出する句。最初の例はネクタイなし、2番目の例はネクタイありです。
結びつきなし:
SELECT TOP(4) AlbumId, AlbumName, ArtistId FROM Albums WHERE AlbumId > 10 ORDER BY ArtistId ASC;
結果:
+-----------+-------------------------+------------+ | AlbumId | AlbumName | ArtistId | |-----------+-------------------------+------------| | 19 | All Night Wrong | 3 | | 20 | The Sixteen Men of Tain | 3 | | 12 | Big Swing Face | 4 | | 16 | Long Lost Suitcase | 7 | +-----------+-------------------------+------------+
ネクタイあり:
SELECT TOP(4) WITH TIES AlbumId, AlbumName, ArtistId FROM Albums WHERE AlbumId > 10 ORDER BY ArtistId ASC;
結果:
+-----------+-------------------------+------------+ | AlbumId | AlbumName | ArtistId | |-----------+-------------------------+------------| | 19 | All Night Wrong | 3 | | 20 | The Sixteen Men of Tain | 3 | | 12 | Big Swing Face | 4 | | 16 | Long Lost Suitcase | 7 | | 17 | Praise and Blame | 7 | | 18 | Along Came Jones | 7 | +-----------+-------------------------+------------+