私はSQLに一般的な疑問を持っています。"Top 1 1" は実際に何をするのでしょうか? 以下のクエリの意味は何ですか?
select top 1 1 from Worker W where not exists (select 1 from Manager M where M.Id = W.Id)
SQL Server クエリの select "TOP 1 1" と "SELECT 1" の違いは何ですか?
私はSQLに一般的な疑問を持っています。"Top 1 1" は実際に何をするのでしょうか? 以下のクエリの意味は何ですか?
select top 1 1 from Worker W where not exists (select 1 from Manager M where M.Id = W.Id)
SQL Server クエリの select "TOP 1 1" と "SELECT 1" の違いは何ですか?
SELECT TOP 1
結果セットの最初のレコードを選択することを意味します
SELECT 1
結果セットとして 1 を返すことを意味します
SELECT TOP 1 1 FROM [SomeTable] WHERE <SomeCondition>
条件が true で、select から行が返された場合、一番上の1
行のみを返し1
、その行の整数のみを返します (データはなく、整数 1 のみが返されます)。
以下では、「TOP 1」の一部である最初の「1」は、単一の結果に達した後に停止することを意味します。2 番目の「1」は、作成者が結果がどうなるかを本当に気にしていないためです。
SELECT TOP 1 1 FROM WORKER
本質的に同じです
SELECT TOP 1 * FROM WORKER
唯一の問題は、クエリの「EXISTS」部分でより効率的かどうかです。
SELECT 1 FROM Manager...
このリクエストは、マネージャーのいないワーカーが少なくとも 1 人 (トップ 1) 存在するかどうかを検出します。SELECT 1 句は、"return true" として機能します。
マネージャが存在する場合、リクエストselect 1 from Manager M where M.Id = W.Id
は 1 を返します。マネージャが存在しない場合、リクエストは NULL を返します。
SELECT TOP 1 1
正確に 0 または 1 1
秒を選択します。 正確に N 行SELECT 1
を選択します。ここで、N は条件に一致する行の数です。1
あなたの場合、マネージャーを持たない最初の( ) ワーカーを探しています。TOP 1
ただし、 ですので、管理者がいないワーカーの存在SELECT TOP 1 1
を探しているだけです。
true false のように機能します... たとえば、ItemId=4526000 の項目から上位 1 1 を選択すると、条件が一致するため 1 が返されます。一致しない場合、何も返されません。=> ItemId=4526000 のアイテムから上位 10 1 を選択すると、ItemId が 5 回繰り返された場合、5 回で 1 が返されます。