SQL सर्वर में, आप T-SQL का उपयोग कर सकते हैं INTERSECT
ऑपरेटर अलग-अलग पंक्तियों को वापस करने के लिए जो बाएँ और दाएँ इनपुट क्वेरी दोनों द्वारा आउटपुट हैं।
सिंटैक्स
वाक्य रचना इस प्रकार है:
{ <query_specification> | ( <query_expression> ) }
{ INTERSECT }
{ <query_specification> | ( <query_expression> ) }
असल में, Microsoft दस्तावेज़ में EXCEPT
. शामिल है ऑपरेटर अपनी परिभाषा में, जैसा कि वही सिंटैक्स INTERSECT
. पर लागू होता है और EXCEPT
।
Microsoft सिंटैक्स इस प्रकार है:
{ <query_specification> | ( <query_expression> ) }
{ EXCEPT | INTERSECT }
{ <query_specification> | ( <query_expression> ) }
उदाहरण
कल्पना कीजिए कि आपके पास दो टेबल हैं; Cats
और Dogs
.
Cats
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Brush | | 2 | Scarcat | | 3 | Flutter | | 4 | Flutter | +---------+-----------+
Dogs
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Yelp | | 2 | Woofer | | 3 | Brush | | 4 | Brush | +---------+-----------+
ध्यान दें कि एक बिल्ली है जिसे ब्रश कहा जाता है और दो कुत्ते भी हैं जिन्हें ब्रश कहा जाता है।
हम INTERSECT
. का उपयोग कर सकते हैं ऑपरेटर केवल उन विशिष्ट पंक्तियों को वापस करने के लिए जो बाएँ और दाएँ दोनों इनपुट प्रश्नों द्वारा आउटपुट हैं।
दूसरे शब्दों में, यह दोनों तालिकाओं में दिखाई देने वाले किसी भी मान को वापस कर देगा, लेकिन यह केवल एक पंक्ति लौटाएगा (भले ही कई पंक्तियाँ हों)। इसलिए, हमारे मामले में यह Brush
लौटाएगा ।
चलो करते हैं।
SELECT
CatName AS PetName
FROM Cats
INTERSECT
SELECT
DogName AS PetName
FROM Dogs;
परिणाम:
Brush
जैसा कि बताया गया है, यह अलग-अलग पंक्तियां देता है, इसलिए इस मामले में केवल एक पंक्ति लौटा दी जाती है।
यह एक LEFT SEMI JOIN
के रूप में प्रकट होता है निष्पादन योजना में।
यह निम्न कार्य करने के समान है:
SELECT
DISTINCT CatName
FROM Cats c
WHERE EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);
परिणाम:
Brush
ध्यान दें कि INTERSECT
. का उपयोग करते समय , सभी प्रश्नों में कॉलम की संख्या और क्रम समान होना चाहिए। साथ ही, डेटा प्रकार संगत होना चाहिए। उनका वास्तव में वही होना जरूरी नहीं है, लेकिन उन्हें निहित रूपांतरण के माध्यम से तुलनीय होना चाहिए।
साथ ही, DISTINCT
. निर्धारित करने के लिए कॉलम मानों की तुलना करते समय पंक्तियाँ, दो NULL
मूल्यों को समान माना जाता है।
यदि आप INTERSECT
. का उपयोग करना चाहते हैं वितरित प्रश्नों में, ध्यान दें कि इसे केवल स्थानीय सर्वर पर निष्पादित किया जाता है और लिंक किए गए सर्वर पर नहीं धकेला जाता है, और इसलिए यह प्रदर्शन को प्रभावित कर सकता है।