Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle इंटरसेक्ट ऑपरेटर समझाया गया

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 में से किसी से मेल खाते हैं मूल्य। लेकिन अगर उन्होंने किया, तो हम मैच देखेंगे।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सबक्वेरी परिणाम पर MAX () का उपयोग कैसे करें?

  2. ऑरैकल 10 जी में सभी असफल एसक्यूएल स्टेटमेंट लॉग करने का कोई तरीका है?

  3. डेटाबेस खोज में NULL मान प्रदर्शन को कैसे प्रभावित करते हैं?

  4. बैच फ़ाइल से SQL निष्पादित करें

  5. ORA-00054:संसाधन व्यस्त है और NOWAIT निर्दिष्ट या समय समाप्त होने के साथ प्राप्त करें