Oracle डाटाबेस में, INTERSECT
ऑपरेटर का उपयोग एक कंपाउंड क्वेरी बनाने के लिए किया जाता है जो बाएँ और दाएँ के परिणामों का प्रतिच्छेदन देता है SELECT
बयान। दूसरे शब्दों में, यह दो प्रश्नों को जोड़ता है, लेकिन केवल उन पंक्तियों को लौटाता है जो दोनों प्रश्नों में वापस आती हैं।
उदाहरण
मान लीजिए कि हमारे पास निम्नलिखित टेबल हैं:
SELECT * FROM Employees;
SELECT * FROM Customers;
परिणाम:
कर्मचारी | कर्मचारी नाम |
---|---|
1 | बार्ट |
2 | जनवरी |
3 | अवा |
4 | रोहित |
5 | मोनिश |
6 | मोनिश |
7 | मोनिश |
ग्राहक | <थ>ग्राहक नाम|
---|---|
1 | मिया |
2 | रोहित |
3 | पीटर |
4 | अवा |
5 | मोनिश |
6 | मोनिश |
हम INTERSECT
. का उपयोग कर सकते हैं ऑपरेटर उन कर्मचारियों को लौटाएगा जो ग्राहक भी हैं:
SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerName FROM Customers;
परिणाम:
कर्मचारी नाम |
---|
आवा |
मोनिश |
रोहित |
तो यह केवल वे मान देता है जो Employees
. दोनों में दिखाई देते हैं तालिका और Customers
टेबल।
Oracle डेटाबेस का INTERSECT
. का कार्यान्वयन ऑपरेटर केवल अलग पंक्तियाँ देता है। इसे हम ऊपर के उदाहरण में देख सकते हैं। यह मोनिश के लिए सिर्फ एक पंक्ति देता है, भले ही उस नाम के कई कर्मचारी और कई ग्राहक हों।
कुछ RDBMS हमें एक वैकल्पिक ALL
. स्वीकार करके परिणाम में डुप्लीकेट शामिल करने की अनुमति देते हैं INTERSECT
. के साथ कीवर्ड ऑपरेटर, लेकिन Oracle उनमें से एक नहीं है (कम से कम, लेखन के समय नहीं)। SQLite भी नहीं है।
एक वैकल्पिक क्वेरी
INTERSECT
. का उपयोग किए बिना समान परिणाम प्राप्त करना संभव है ऑपरेटर। उदाहरण के लिए, हम इसके लिए अपना पहला उदाहरण फिर से लिख सकते हैं:
SELECT
DISTINCT EmployeeName
FROM Employees e
WHERE EXISTS (SELECT CustomerName FROM Customers c
WHERE e.EmployeeName = c.CustomerName);
परिणाम:
कर्मचारी नाम |
---|
रोहित |
आवा |
मोनिश |
कुछ बातें याद रखने योग्य हैं
ध्यान दें कि भाव संख्या में मेल खाना चाहिए और एक ही डेटा प्रकार समूह में होना चाहिए। इसलिए, हम निम्न कार्य नहीं कर सकते:
SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerId, CustomerName FROM Customers;
परिणाम:
ORA-01789: query block has incorrect number of result columns
या यह:
SELECT EmployeeName FROM Employees
INTERSECT
SELECT CustomerId FROM Customers;
परिणाम:
ORA-01790: expression must have same datatype as corresponding expression
हालांकि, हम TO_CHAR()
. जैसे कार्यों का उपयोग कर सकते हैं कॉलम को उपयुक्त डेटा प्रकार समूह में बदलने के लिए:
SELECT EmployeeName FROM Employees
INTERSECT
SELECT TO_CHAR(CustomerId) FROM Customers;
परिणाम:
no data found
इस मामले में, कोई डेटा नहीं मिला क्योंकि CustomerId
. में से कोई भी नहीं मान EmployeeName
में से किसी से मेल खाते हैं मूल्य। लेकिन अगर उन्होंने किया, तो हम मैच देखेंगे।