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

Oracle में साइन इन करें प्लस (+) का उपयोग करके बाएँ और दाएँ जुड़ते हैं

  • इनर जॉइन क्या है?
  • बाहरी जुड़ाव क्या है?
    • (+) चिह्न का उपयोग करके बाहरी जोड़ निष्पादित करना

लगभग सभी रिलेशनल डेटाबेस की तरह, Oracle क्वेरी को उत्पन्न करने की अनुमति देता है जो गठबंधन या JOIN अंतिम परिणाम सेट बनाने के लिए दो या दो से अधिक तालिकाओं से पंक्तियाँ। जबकि कई प्रकार हैं जो जॉइन किए जा सकते हैं उनमें से सबसे आम हैं INNER JOIN और OUTER JOIN

इस ट्यूटोरियल में, हम संक्षेप में INNER . के बीच के अंतर का पता लगाएंगे और OUTER JOIN और फिर OUTER JOINS के निष्पादन के लिए Oracle द्वारा प्रदान की गई शॉर्टहैंड विधि की जांच करें विशेष रूप से + . का उपयोग करके ऑपरेटर प्रतीक।

इनर जॉइन क्या है?

एक INNER JOIN एक रिलेशनल डेटाबेस में केवल दो या दो से अधिक तालिकाओं का जुड़ना होता है, जिसके परिणाम में केवल वह डेटा होता है जो सभी शामिल होने की शर्तों को पूरा करता है

उदाहरण के लिए, यहाँ हमारे पास एक बुनियादी library है दो टेबल वाली स्कीमा:books और languages . languages तालिका केवल संभावित भाषा नामों की एक सूची है और एक अद्वितीय भाषा id . है :

SELECT * FROM library.languages;

id   name
1   English
2   French
3   German
4   Mandarin
5   Spanish
6   Arabic
7   Japanese
8   Russian
9   Greek
10   Italian

इस बीच, हमारी books तालिका में एक language_id है वह पंक्ति जिसमें अधिकांश के लिए, लेकिन सभी के लिए नहीं, पुस्तकों में केवल language_id होती है पुस्तक की मूल प्रकाशित भाषा से संबद्ध:

SELECT * FROM
  books
ORDER BY
  id
FETCH FIRST 10 ROWS ONLY;

id title    author    year_published    language_id
1   In Search of Lost Time  Marcel Proust   1913    2
2   Ulysses James Joyce 1922    1
3   Don Quixote Miguel de Cervantes 1605    5
4   Moby Dick   Herman Melville 1851    1
5   Hamlet  William Shakespeare 1601 (null)
6   War and Peace   Leo Tolstoy 1869    8
7   The Odyssey Homer   -700    9
8   The Great Gatsby    F. Scott Fitzgerald 1925    1
9   The Divine Comedy   Dante Alighieri     1472    10
10  Madame Bovary   Gustave Flaubert    1857    2

कई मामलों में, हम INNER JOIN perform करना चाह सकते हैं books . में से और languages टेबल्स ताकि अर्थहीन language_id को देखने के बजाय प्रत्येक पुस्तक का मूल्य, हम वास्तव में language name . देख सकते हैं इसके बजाय।

SELECT
  b.id,
  b.title,
  b.author,
  b.year_published,
  l.name language
FROM
  books b
INNER JOIN
  library.languages l
ON
  b.language_id = l.id
ORDER BY
  b.id
FETCH FIRST 10 ROWS ONLY;

id title    author    year_published    language
1   In Search of Lost Time  Marcel Proust   1913    French
2   Ulysses James Joyce 1922    English
3   Don Quixote Miguel de Cervantes 1605    Spanish
4   Moby Dick   Herman Melville 1851    English
6   War and Peace   Leo Tolstoy 1869    Russian
7   The Odyssey Homer   -700    Greek
8   The Great Gatsby    F. Scott Fitzgerald 1925    English
9   The Divine Comedy   Dante Alighieri     1472    Italian
10  Madame Bovary   Gustave Flaubert    1857    French
11  The Brothers Karamazov  Fyodor Dostoyevsky  1880    Russian

यहां ध्यान देने योग्य बात यह है कि उपरोक्त दो प्रश्नों में हमारा परिणाम सेट थोड़ा अलग था। पहले में, हमने बस पहले 10 . को सूचीबद्ध किया था किताबें, लेकिन INNER JOIN . में क्वेरी हम केवल परिणाम लौटा रहे हैं जो दोनों तालिकाओं से सभी शर्तों को पूरा करते हैं। इस कारण से, Hamlet . का रिकॉर्ड (जिसमें एक language_id है null . का मान या खाली) को नजरअंदाज कर दिया जाता है और हमारे INNER JOIN . के परिणाम में वापस नहीं किया जाता है ।

आउटर जॉइन क्या है?

केवल उन परिणामों को वापस करने के बजाय जो INNER JOIN . की सभी सम्मिलित शर्तों को पूरा करते हैं , एक OUTER JOIN न केवल सभी शर्तों को पूरा करने वाले परिणाम देता है, बल्कि भी एक तालिका से पंक्तियाँ लौटाता है जो शर्त को पूरा नहीं करती है। सशर्त आवश्यकताओं के इस "बाईपास" के लिए चुनी गई तालिका को शामिल होने की दिशा या "पक्ष" द्वारा निर्धारित किया जाता है, जिसे आमतौर पर LEFT के रूप में संदर्भित किया जाता है। या RIGHT बाहरी जोड़।

अपने OUTER JOIN में एक पक्ष को परिभाषित करते समय , आप निर्दिष्ट कर रहे हैं कि कौन सी तालिका हमेशा अपनी पंक्ति लौटाएगी, भले ही विरोध जॉइन के दूसरी तरफ टेबल गायब है या null शामिल होने की स्थिति के हिस्से के रूप में मान।

इसलिए, यदि हम वही मूल JOIN . करते हैं books retrieve को पुनः प्राप्त करने के लिए ऊपर के रूप में और language names , हम जानते हैं कि हमारी books तालिका को हमेशा डेटा लौटाना चाहिए, इसलिए हमारा JOIN हमारी books . की तरफ़ "इंगित" होना चाहिए तालिका, जिससे languages . बनती है तालिका OUTER तालिका हम इसे संलग्न कर रहे हैं।

इसे पूरा करने के लिए, हम बस इसे बदलते हैं:

books b INNER JOIN library.languages l

... इसके लिए:

books b LEFT OUTER JOIN library.languages l

इस प्रकार, संपूर्ण क्वेरी और परिणाम सेट लगभग INNER JOIN . के समान दिखता है उस मामूली बदलाव को छोड़कर:

SELECT
  b.id,
  b.title,
  b.author,
  b.year_published,
  l.name language
FROM
  books b
LEFT OUTER JOIN
  library.languages l
ON
  b.language_id = l.id
ORDER BY
  b.id
FETCH FIRST 10 ROWS ONLY;

id title    author    year_published    language
1   In Search of Lost Time  Marcel Proust   1913    French
2   Ulysses James Joyce 1922    English
3   Don Quixote Miguel de Cervantes 1605    Spanish
4   Moby Dick   Herman Melville 1851    English
5   Hamlet  William Shakespeare 1601  (null)
6   War and Peace   Leo Tolstoy 1869    Russian
7   The Odyssey Homer   -700    Greek
8   The Great Gatsby    F. Scott Fitzgerald 1925    English
9   The Divine Comedy   Dante Alighieri     1472    Italian
10  Madame Bovary   Gustave Flaubert    1857    French

जैसा अपेक्षित था, LEFT OUTER JOIN . का उपयोग करके पिछले INNER JOIN . के बजाय , हम दोनों दुनिया के सर्वश्रेष्ठ प्राप्त कर रहे हैं:हम किसी भी books को नहीं छोड़ रहे हैं रिकॉर्ड (जैसे Hamlet ) केवल इसलिए कि language_id मान null है उस रिकॉर्ड के लिए, फिर भी उन सभी रिकॉर्ड के लिए जहां language_id मौजूद है, हमें अच्छी तरह से स्वरूपित language name . मिलता है हमारी languages . से प्राप्त किया गया टेबल।

(+) सिंबल का उपयोग करके आउटर जॉइन करना

जैसा कि आधिकारिक दस्तावेज़ीकरण में बताया गया है, Oracle एक विशेष outer join operator . प्रदान करता है (+ सिंबल) जो OUTER JOINS . के प्रदर्शन के लिए शॉर्टहैंड है ।

व्यवहार में, + प्रतीक सीधे सशर्त में रखा गया है कथन और वैकल्पिक तालिका के किनारे पर (वह जिसमें खाली या null रखने की अनुमति है सशर्त के भीतर मान)।

इसलिए, हम एक बार फिर से हमारे उपरोक्त LEFT OUTER JOIN . को फिर से लिख सकते हैं + . का उपयोग करके स्टेटमेंट ऐसा ऑपरेटर:

SELECT
  b.id,
  b.title,
  b.author,
  b.year_published,
  l.name language
FROM
  books b,
  library.languages l
WHERE
  l.id (+)= b.language_id
ORDER BY
  b.id
FETCH FIRST 10 ROWS ONLY;

परिणाम मानक LEFT OUTER JOIN . के समान हैं उदाहरण ऊपर दिया गया है, इसलिए हम उन्हें यहां शामिल नहीं करेंगे। हालांकि, + . का उपयोग करके सिंटैक्स के बारे में ध्यान देने योग्य एक महत्वपूर्ण पहलू है OUTER JOINS . के लिए ऑपरेटर ।

+ ऑपरेटर जरूरी सशर्त के बाईं ओर हो (बराबर के बाईं ओर = संकेत)। इसलिए, इस मामले में, क्योंकि हम यह सुनिश्चित करना चाहते हैं कि हमारी languages तालिका वैकल्पिक तालिका है जो null return लौटा सकती है इस तुलना के दौरान, हमने इस सशर्त में तालिकाओं के क्रम को बदल दिया, इसलिए languages बाईं ओर है (और वैकल्पिक है) जबकि books दाईं ओर है।

अंत में, + . का उपयोग करते समय सशर्त में तालिका पक्षों के इस पुनर्क्रमण के कारण ऑपरेटर, यह महसूस करना महत्वपूर्ण है कि उपरोक्त RIGHT OUTER JOIN के लिए बस शॉर्टहैंड है . इसका मतलब है कि क्वेरी का यह स्निपेट:

FROM
  books b,
  library.languages l
WHERE
  l.id (+)= b.language_id

…प्रभावी रूप से इसके समान है:

FROM
  library.languages l
RIGHT OUTER JOIN
  books b
ON
  b.language_id = l.id

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बल्क संग्रह का उपयोग करते हुए LIMIT के लिए मान सेट करना

  2. ओरेकल:एक सीमा से अधिक समूह कैसे करें?

  3. JSON_ARRAYAGG () Oracle में फ़ंक्शन

  4. Oracle डेटाबेस में CLOB डालें

  5. regex_substr . में क्लॉज द्वारा कनेक्ट करें