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

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

आप टी-एसक्यूएल EXCEPT का उपयोग कर सकते हैं बाएं इनपुट क्वेरी से अलग पंक्तियों को वापस करने के लिए SQL सर्वर में ऑपरेटर जो सही इनपुट क्वेरी द्वारा आउटपुट नहीं हैं।

सिंटैक्स

वाक्य रचना इस प्रकार है:

{ <query_specification> | ( <query_expression> ) }   
{ EXCEPT }  
{ <query_specification> | ( <query_expression> ) }

दरअसल, माइक्रोसॉफ्ट के दस्तावेज़ में INTERSECT . शामिल है इसकी परिभाषा में ऑपरेटर, जैसा कि समान सिंटैक्स EXCEPT . पर लागू होता है और INTERSECT

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     |
+---------+-----------+

हम EXCEPT . का उपयोग कर सकते हैं ऑपरेटर केवल बाईं इनपुट क्वेरी से अलग पंक्तियों को वापस करने के लिए जो सही इनपुट क्वेरी द्वारा आउटपुट नहीं हैं।

यहाँ एक उदाहरण है।

SELECT CatName FROM Cats
EXCEPT
SELECT DogName FROM Dogs;

परिणाम:

+-----------+
| CatName   |
|-----------|
| Flutter   |
| Scarcat   |
+-----------+

इसलिए हमें केवल वही मान मिलते हैं जो Cats . में दिखाई देते हैं तालिका जो Dogs . में भी दिखाई नहीं देती है टेबल। जैसा कि उल्लेख किया गया है, यह अलग-अलग पंक्तियों को लौटाता है, इसलिए Flutter . के लिए केवल एक पंक्ति लौटा दी जाती है .

हम इसे बदल भी सकते हैं और Dogs . को रख सकते हैं बाईं ओर तालिका और Cats दाईं ओर।

SELECT DogName FROM Dogs
EXCEPT
SELECT CatName FROM Cats;

परिणाम:

+-----------+
| DogName   |
|-----------|
| Woofer    |
| Yelp      |
+-----------+

EXCEPT ऑपरेटर LEFT ANTI SEMI JOIN के रूप में प्रकट होता है निष्पादन योजना में।

तो हमारा पहला उदाहरण निम्नलिखित करने के समान है:

SELECT 
    DISTINCT CatName
FROM Cats c 
WHERE NOT EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);

परिणाम:

+-----------+
| CatName   |
|-----------|
| Flutter   |
| Scarcat   |
+-----------+

ध्यान दें कि EXCEPT . का उपयोग करते समय , सभी प्रश्नों में कॉलम की संख्या और क्रम समान होना चाहिए। साथ ही, डेटा प्रकार संगत होना चाहिए। उनका वास्तव में वही होना जरूरी नहीं है, लेकिन उन्हें निहित रूपांतरण के माध्यम से तुलनीय होना चाहिए।

साथ ही, DISTINCT . निर्धारित करने के लिए कॉलम मानों की तुलना करते समय पंक्तियाँ, दो NULL मूल्यों को समान माना जाता है।

यदि आप EXCEPT . का उपयोग करना चाहते हैं वितरित प्रश्नों में, ध्यान दें कि इसे केवल स्थानीय सर्वर पर निष्पादित किया जाता है और लिंक किए गए सर्वर पर नहीं धकेला जाता है, और इसलिए यह प्रदर्शन को प्रभावित कर सकता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्टॉप वर्ड सूची खाली होने पर भी स्टॉप वर्ड शामिल होने पर पूर्ण टेक्स्ट सर्च काम नहीं करता है

  2. SQL सर्वर लॉगिन के लिए पासवर्ड बदलें

  3. SQL सर्वर (T-SQL) में किसी मौजूदा तालिका में एक विदेशी कुंजी बाधा कैसे जोड़ें

  4. एक वर्चर डेटा प्रकार को डेटाटाइम डेटा प्रकार में बदलने के परिणामस्वरूप एक आउट-ऑफ-रेंज मान होता है

  5. महत्वपूर्ण SQL डेटाबेस को पुनर्प्राप्त करने के लिए 2020 के लिए सर्वश्रेष्ठ SQL पुनर्प्राप्ति उपकरण