簡単です-
SELECT empname,
empid,
(SELECT COUNT (profileid)
FROM profile
WHERE profile.empid = employee.empid)
AS number_of_profiles
FROM employee;
次のようなテーブル結合を使用すると、さらに簡単になります。
SELECT e.empname, e.empid, COUNT (p.profileid) AS number_of_profiles
FROM employee e LEFT JOIN profile p ON e.empid = p.empid
GROUP BY e.empname, e.empid;
サブクエリの説明:
基本的に、select
のサブクエリ スカラー値を取得し、それをメインクエリに渡します。 select
のサブクエリ 複数の行と複数の列を渡すことは許可されていません。これは制限事項です。ここでは、count
を渡します メインのクエリに対して、これは、私たちが知っているように、常に数値、つまりスカラー値にすぎません。値が見つからない場合、サブクエリはnull
を返します メインクエリに。さらに、サブクエリはfrom
の列にアクセスできます employee.empid
のクエリに示されているように、メインクエリの句 外側のクエリから内側のクエリに渡されます。
編集 :
select
でサブクエリを使用する場合 節では、Oracleは基本的にそれを左結合として扱い(これはクエリのExplain Planで確認できます)、行のカーディナリティは左側のすべての行に対して右側に1つだけです。
左結合の説明
左結合は、特にselect
を置き換える場合に非常に便利です。 その制限のためにサブクエリ。 LEFT JOIN
の両側のテーブルの行数に制限はありません。 キーワード。
詳細については、サブクエリと左結合または左外部結合に関するOracleDocsを参照してください。