Join Queries: Inner, Outer (Left/Right/Full), Cross

SQL Joins relational पुलों की तरह काम करते हैं, एक साझा field link इस्तेमाल करके अलग tables को अगल-बगल जोड़ते हुए।

11 min read · 10 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

बिखरे Ticket की समस्या

हमारे TicketDesk database schema को देखिए। अगर एक support manager आपसे सारे active tickets की एक live report assigned agent के नाम के साथ print करने को कहता है, आप एक तुरंत बाधा का सामना करते हैं। tickets table में केवल एक numeric agent_id अंक है। उन इंसानों के असल नाम agents table के अंदर रहते हैं। आप एक system client को raw ID numbers नहीं दिखा सकते। आप एक अकेली query कैसे लिखते हैं जो इन 2 अलग tables को अगल-बगल चिपकाए?

Theory

बँटा Token Connection

एक high security conference की कल्पना कीजिए जहाँ guests एक security token के बाएँ हिस्से रखते हैं और hosts दाएँ हिस्से रखते हैं। पहचान सत्यापित करने के लिए, आप मेल खाते हिस्सों को साथ सरकाते हैं। एक inner join केवल उन लोगों को जोड़ता है जिनके पास एक मेल खाता समकक्ष है। एक outer join पक्का करता है कि भले एक guest के पास एक assigned host न हो (या एक host के पास कोई guests न हों), वे फिर भी सूचीबद्ध होते हैं, गुमशुदा पक्ष पूरी तरह खाली छोड़ते हुए।

Theory

Join परिवार औपचारिक रूप से

Oracle SQL में, एक Join Query 2 या ज़्यादा tables के columns को उनके बीच एक संबंधित सामान्य column के आधार पर मिलाती है। एक INNER JOIN rows केवल तब return करता है जब join condition दोनों tables में मेल खाती है। एक LEFT OUTER JOIN left table के सारे records साथ ही right से मेल खाते records return करता है। एक RIGHT OUTER JOIN बिल्कुल उल्टा करता है। एक FULL OUTER JOIN दोनों पक्षों के सारे records सुरक्षित रखता है, जबकि एक CROSS JOIN एक Cartesian product पैदा करता है।

At a glance

बेमेल data records पर SQL join variations का व्यवहारिक matrix

Join VariationMatching LogicMismatched Rows Behavior
INNER JOINदोनों पक्षों पर सख़्त matchअंतिम results से पूरी तरह बाहर
LEFT OUTER JOINदोनों match करता है, सारी Left रखता हैRight side attributes NULL से भरते हैं
RIGHT OUTER JOINदोनों match करता है, सारी Right रखता हैLeft side attributes NULL से भरते हैं
CROSS JOINकोई condition evaluate नहींहर एक row दूसरी table से गुणा होती है

Practical

TicketDesk में Explicit ANSI Joins लिखना

-- Query 1: Fetching tickets with their agent names using INNER JOIN
SELECT t.title, a.name 
FROM tickets t 
INNER JOIN agents a 
ON t.agent_id = a.id;

-- Query 2: Left Join to include tickets that have no assigned agent yet
SELECT t.title, a.name 
FROM tickets t 
LEFT OUTER JOIN agents a 
ON t.agent_id = a.id;

This example runs in Gri-Learn on the web, where you can edit it and see the output.

Quiz

अगर tickets table में agent_id values 10, 20, और NULL के साथ 3 rows हैं, और agents table में IDs 10 और 20 हैं, एक INNER JOIN query कितनी rows return करती है?

  1. 3 rows
  2. 2 rows
  3. 1 row
  4. 0 rows
Show the answer

2 rows

एक INNER JOIN को दोनों पक्षों पर एक सख़्त, सफल match चाहिए। NULL agent_id रखती ticket row agents table में कुछ भी match नहीं कर सकती, इसलिए यह अंतिम output से पूरी तरह हटा दी जाती है, बिल्कुल 2 मेल खाती rows छोड़ते हुए।

Think first

Mental Calculation: Cross Join विस्फोट

मान लीजिए TicketDesk बढ़कर बिल्कुल 100 tickets और 5 registered agents रखता है। reveal करने को click करने से पहले मन में calculate कीजिए कि एक CROSS JOIN query कुल कितनी rows पैदा करेगी।

Show the answer

यह बिल्कुल 500 rows पैदा करेगी। एक CROSS JOIN पहली table की हर एक row को दूसरी table की हर एक row से गुणा करता है (100 × 5 = 500), किसी भी तार्किक संबंध कड़ियों या मेल खाती keys को पूरी तरह नज़रअंदाज़ करते हुए।

Watch out

गुमशुदा ON Clause की आपदा

university exams में marks खोने का सबसे आम तरीक़ा ON clause या इसकी समतुल्य WHERE condition भूलना है। अगर आप matching key logic निर्दिष्ट किए बिना SELECT * FROM tickets, agents; लिखते हैं, Oracle एक अनजाना CROSS JOIN execute करता है। यह एक विशाल data विस्फोट पैदा करता है जो आपके development server को crash या आपके exam lab terminal को freeze कर सकता है अगर tables में बड़े datasets हों!

Theory

Industry Best Practices और भविष्य के Semesters

पुराने Oracle legacy systems में, developers outer joins के लिए एक विशेष (+) operator syntax इस्तेमाल करते थे। यह करने से बचिए! आधुनिक enterprise software environments और आपका आने वाला Sem 3 SQLite curriculum सख़्ती से आधुनिक explicit ANSI standard JOIN ... ON command words इस्तेमाल करते हैं। यह queries को पढ़ने-लायक़, अलग database brands भर सार्वभौमिक रूप से portable, और साफ़ करने में आसान रखता है।

Summary

Key takeaways

  • SQL Joins संबंधित primary और foreign key columns इस्तेमाल करके अलग tables भर data मिलाते हैं।
  • INNER JOIN सख़्ती से अनन्य है, results केवल तब return करता है जब एक पूर्ण match मौजूद हो।
  • LEFT और RIGHT OUTER JOINS गुमशुदा पक्षों को NULL entries से भरकर unmatched data rows की रक्षा करते हैं।
  • FULL OUTER JOIN match की सफलता की परवाह किए बिना दोनों tables का हर एक record बनाए रखता है।
  • एक matching condition छोड़ना एक आकस्मिक CROSS JOIN का कारण बनता है, एक Cartesian product गुणा में परिणत होते हुए।
  • Memory hook: Inner मेल खाते जोड़े चुनता है, Outer अकेले data की रक्षा करता है, Cross सबको गुणा करता है!

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Introduction of Relational Database

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati