まず、クエリはnth
最低の給与値を返します。給与の最高値を返すには、 に変更するnth
必要があります。t.sal <= sal
t.sal >= sal
次に、このクエリは、最初に給与値の個別のリストを 1 つの派生テーブルとして検索することによって機能し、次に、このリスト内の各従業員よりも給与が少ない従業員の数を特定します。t.sal <= sal
派生テーブル (ほとんどのデータベースではエイリアスが必要です) を取得し、各値を外部emp
テーブルと比較しています。同数の場合、これは複数の行を返すことに注意してください。
出力を手動でトレースするには、いくつかの入力が必要です。
Alice | 200
Bob | 100
Charlie | 200
Danielle | 150
Select Distinct sal
From emp
私たちに与えます
200
100
150
次に、外側のテーブルの各行を分析します
Alice - There are 3 distinct salary values less than or equal to 200
Bob - 1 rows <= 100
Charlie - 3 rows <= 200
Danielle - 2 row <= 150
したがって、各給与値について、次のカウントを取得します (カウントで並べ替えます)。
Bob 1
Danielle 2
Charlie 3
Alice 3
あなたが見落としていると思う最も重要な側面は、外側のemp
テーブルが内側のカウント計算に相関していることです (これが相関サブクエリと呼ばれる理由です)。つまり、外側のemp
テーブルの各行について、 を介してその行の給与の新しいカウントが計算されt.sal <= sal
ます。繰り返しますが、ほとんどのデータベース システムでは、最も内側のクエリに次のようなエイリアスが必要です (エイリアスに注意してくださいAs Z
)。
Select sal
From emp As t
Where &n = (
Select Count(Z.sal)
From (
Select Distinct sal
From emp
) As Z
Where t.sal <= Z.sal
)