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

SQL सर्वर में INTERSECT कैसे काम करता है

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 . का उपयोग करना चाहते हैं वितरित प्रश्नों में, ध्यान दें कि इसे केवल स्थानीय सर्वर पर निष्पादित किया जाता है और लिंक किए गए सर्वर पर नहीं धकेला जाता है, और इसलिए यह प्रदर्शन को प्रभावित कर सकता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. freeTDS अपने कॉन्फिग का उपयोग नहीं कर रहा है

  2. SQL सर्वर में Msg 529 "डेटा प्रकार int से xml में स्पष्ट रूपांतरण की अनुमति नहीं है" को ठीक करें

  3. SQL सर्वर में 1/1/1753 का क्या महत्व है?

  4. SQL सर्वर में ORIGINAL_DB_NAME () कैसे काम करता है

  5. SQL सर्वर (T-SQL) में डेटाबेस मेल प्रोफाइल की सूची लौटाएं