यह आसान है-
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
. में सबक्वायरी का उपयोग करते हैं क्लॉज, ओरेकल अनिवार्य रूप से इसे लेफ्ट जॉइन के रूप में मानता है (आप इसे अपनी क्वेरी के लिए व्याख्या योजना में देख सकते हैं), पंक्तियों की कार्डिनैलिटी बाईं ओर हर पंक्ति के लिए दाईं ओर सिर्फ एक है।
बाएं शामिल होने का स्पष्टीकरण
लेफ्ट जॉइन बहुत आसान है, खासकर जब आप select
. को बदलना चाहते हैं इसके प्रतिबंधों के कारण सबक्वायरी। LEFT JOIN
के दोनों ओर तालिकाओं की पंक्तियों की संख्या पर यहां कोई प्रतिबंध नहीं है कीवर्ड।
अधिक जानकारी के लिए ओरेकल डॉक्स को सबक्वायरी पर पढ़ें और लेफ्ट जॉइन या लेफ्ट आउटर जॉइन करें।