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