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

SQL के संदर्भ में संबंधपरक विभाजन (मूल बीजगणित अभिव्यक्ति) का प्रतिनिधित्व कैसे करें

आपके प्रासंगिक संबंधों से संबंधित तालिकाओं के लिए इस डीडीएल को देखते हुए:

create table Boats(
  bid int,
  bname varchar(50),
  color varchar(50)
);

create table Reserves(
  sid int,
  bid int,
  day date
);

आप विभाजन सूत्र (3) को Oracle SQL सिंटैक्स में काफी सरलता से लिप्यंतरित कर सकते हैं, हालांकि यह वर्बोज़ है:

-- All sailors who reserved at least one boat
SELECT DISTINCT sid
FROM Reserves

MINUS 

-- All sailors who reserved at least one boat, but not all of them
SELECT sid
FROM (
  -- all combinations of a sailor who reserved any boat with any boat
  -- available to be reserved:
  SELECT Reserves.sid, Boats.bid
  FROM
    Reserves
    CROSS JOIN
    Boats

  MINUS

  -- all combinations of sailor and boat for actual reservations made
  SELECT sid, bid
  FROM Reserves
) sids

जैसा निर्दिष्ट किया गया है, वह केवल CROSS JOIN . का उपयोग करता है और MINUS संचालन, ताकि सीधे संबंधपरक बीजगणित सूत्र के अनुरूप हो। एक वास्तविक दुनिया डेटाबेस अनुप्रयोग में, हालांकि, एक पूरी तरह से अलग क्वेरी के माध्यम से एक ही परिणाम निश्चित रूप से प्राप्त होगा।

यह भी ध्यान दें कि SQL डेटाबेस औपचारिक संबंधपरक बीजगणित के सिद्धांत का उल्लंघन कर सकते हैं और कर सकते हैं कि संबंधों में डुप्लिकेट टुपल्स नहीं होते हैं। यही कारण है कि SELECT DISTINCT पहली सबक्वेरी में। क्वेरी में कहीं और रणनीतिक रूप से लागू किया गया विशिष्ट चयन इसे और अधिक कुशल बना सकता है, लेकिन परिणाम को नहीं बदलेगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बाइनरी एक्सएमएल के रूप में संग्रहीत होने पर ओरेकल एक्सएमएल टाइप कितना बड़ा है

  2. ओरेकल व्यू पर प्राथमिक कुंजी कैसे जोड़ें?

  3. तत्काल निष्पादन में थोक संग्रह सीमा

  4. पिछला दशमलव शून्य हटाएं

  5. Oracle ODBC कनेक्शन के साथ पैरामीटर्स का उपयोग करना