簡単です-
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を参照してください。