Sederhana saja-
SELECT empname,
empid,
(SELECT COUNT (profileid)
FROM profile
WHERE profile.empid = employee.empid)
AS number_of_profiles
FROM employee;
Lebih mudah lagi jika Anda menggunakan table join seperti ini:
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;
Penjelasan untuk subkueri:
Pada dasarnya, subquery dalam select
mendapat nilai skalar dan meneruskannya ke kueri utama. Sebuah subquery di select
tidak diperbolehkan melewati lebih dari satu baris dan lebih dari satu kolom, yang merupakan batasan. Di sini, kami melewati count
ke kueri utama, yang, seperti yang kita ketahui, akan selalu hanya berupa angka- nilai skalar. Jika nilai tidak ditemukan, subquery mengembalikan null
ke pertanyaan utama. Selain itu, subquery dapat mengakses kolom dari from
klausa kueri utama, seperti yang ditunjukkan dalam kueri saya di mana employee.empid
diteruskan dari kueri luar ke kueri dalam.
Sunting :
Saat Anda menggunakan subquery dalam select
klausa, Oracle pada dasarnya memperlakukannya sebagai gabungan kiri (Anda dapat melihat ini dalam rencana penjelasan untuk kueri Anda), dengan kardinalitas baris menjadi hanya satu di kanan untuk setiap baris di kiri.
Penjelasan untuk gabungan kiri
Gabung kiri sangat berguna, terutama ketika Anda ingin mengganti select
subquery karena pembatasannya. Tidak ada batasan di sini pada jumlah baris tabel di kedua sisi LEFT JOIN
kata kunci.
Untuk informasi lebih lanjut, baca Oracle Docs tentang subquery dan left join atau left outer join.