यह एक बहुत अच्छा सवाल है, इसलिए मैंने अपने ब्लॉग पर इस विषय के बारे में एक बहुत विस्तृत लेख लिखने का फैसला किया है ।
डेटाबेस तालिका मॉडल
मान लेते हैं कि हमारे डेटाबेस में निम्नलिखित दो टेबल हैं, जो एक से कई टेबल रिलेशनशिप बनाते हैं।

studentतालिका अभिभावक होता है और student_gradeबच्चे को मेज है, क्योंकि यह एक student_id विदेशी कुंजी स्तंभ छात्र तालिका में आईडी प्राथमिक कुंजी स्तंभ को संदर्भित है।
student tableनिम्नलिखित दो रिकॉर्ड में शामिल हैं:
| id | first_name | last_name | admission_score |
|
| 1 | Alice | Smith | 8.95 |
| 2 | Bob | Johnson | 8.75 |
और, student_gradeतालिका उन ग्रेडों को संग्रहीत करती है जो छात्र प्राप्त करते हैं:
| id | class_name | grade | student_id |
|
| 1 | Math | 10 | 1 |
| 2 | Math | 9.5 | 1 |
| 3 | Math | 9.75 | 1 |
| 4 | Science | 9.5 | 1 |
| 5 | Science | 9 | 1 |
| 6 | Science | 9.25 | 1 |
| 7 | Math | 8.5 | 2 |
| 8 | Math | 9.5 | 2 |
| 9 | Math | 9 | 2 |
| 10 | Science | 10 | 2 |
| 11 | Science | 9.4 | 2 |
SQL EXISTS
मान लें कि हम उन सभी छात्रों को प्राप्त करना चाहते हैं, जिन्हें गणित कक्षा में 10 ग्रेड प्राप्त हुए हैं।
यदि हम केवल छात्र पहचानकर्ता में रुचि रखते हैं, तो हम इस तरह एक क्वेरी चला सकते हैं:
SELECT
student_grade.student_id
FROM
student_grade
WHERE
student_grade.grade = 10 AND
student_grade.class_name = 'Math'
ORDER BY
student_grade.student_id
लेकिन, आवेदन studentकेवल पहचानकर्ता का पूरा नाम प्रदर्शित करने में रुचि रखता है , इसलिए हमें studentतालिका से भी जानकारी चाहिए ।
studentगणित में 10 ग्रेड वाले रिकॉर्ड को फ़िल्टर करने के लिए , हम इस तरह से EXISTS SQL ऑपरेटर का उपयोग कर सकते हैं:
SELECT
id, first_name, last_name
FROM
student
WHERE EXISTS (
SELECT 1
FROM
student_grade
WHERE
student_grade.student_id = student.id AND
student_grade.grade = 10 AND
student_grade.class_name = 'Math'
)
ORDER BY id
ऊपर क्वेरी चलाते समय, हम देख सकते हैं कि केवल ऐलिस पंक्ति चयनित है:
| id | first_name | last_name |
|
| 1 | Alice | Smith |
बाहरी क्वेरी उस studentपंक्ति कॉलम का चयन करती है जिसे हम ग्राहक को वापस करने में रुचि रखते हैं। हालाँकि, WHERE क्लॉज़ संबंधित आंतरिक उपकुंजी के साथ EXISTS ऑपरेटर का उपयोग कर रहा है।
यदि किसी पंक्ति का चयन नहीं किया जाता है, तो उपश्रेणी ऑपरेटर सही रिटर्न देता है और यदि उपकुंजी कम से कम एक रिकॉर्ड और गलत रिटर्न देता है। डेटाबेस इंजन को पूरी तरह से उपकुंजी चलाने की आवश्यकता नहीं है। यदि किसी एकल रिकॉर्ड का मिलान किया जाता है, तो EXISTS ऑपरेटर सही हो जाता है, और संबंधित अन्य क्वेरी पंक्ति चयनित होती है।
आंतरिक सबक्वेरी को सहसंबद्ध किया जाता है क्योंकि student_gradeटेबल के छात्र_आईडी कॉलम को बाहरी छात्र तालिका के आईडी कॉलम से मिलान किया जाता है।