खोज…


परिचय

SQL में UNION कीवर्ड का उपयोग किसी भी डुप्लिकेट के साथ SELECT स्टेटमेंट परिणामों को संयोजित करने के लिए किया जाता है। UNION का उपयोग करने और परिणामों को संयोजित करने के लिए दोनों SELECT स्टेटमेंट में समान क्रम में समान डेटा प्रकार के साथ समान कॉलम होना चाहिए, लेकिन कॉलम की लंबाई भिन्न हो सकती है।

वाक्य - विन्यास

  • SELECT column_1 [, column_2] FROM table_1 [, table_2] [WHERE की स्थिति]
    यूनिअन | यूनिअन ऑल
    SELECT column_1 [, column_2] FROM table_1 [, table_2] [WHERE की स्थिति]

टिप्पणियों

UNION और UNION ALL क्लॉज़ दो या दो से अधिक समान रूप से संरचित सेलेक्ट स्टेटमेंट के सेट को एकल परिणाम / तालिका में जोड़ते हैं।

प्रत्येक क्वेरी के लिए स्तंभ गणना और स्तंभ प्रकार दोनों को काम करने के लिए UNION / UNION ALL लिए मेल खाना है।

UNION और UNION ALL क्वेरी के बीच का अंतर यह है कि UNION क्लॉज़ उस परिणाम में कोई डुप्लिकेट पंक्तियाँ निकाल देगा जहाँ UNION ALL नहीं होगा।

रिकॉर्ड की यह अलग-अलग निष्कासन क्वेरी को धीमा कर सकती है, भले ही इसके कारण कोई अलग-अलग पंक्तियाँ न हों, क्योंकि यदि आप जानते हैं कि कोई डुप्लिकेट नहीं होगा (या परवाह नहीं) हमेशा एक अधिक अनुकूलित क्वेरी के लिए UNION ALL लिए डिफ़ॉल्ट है।

मूल यूनिअन सभी क्वेरी

CREATE TABLE HR_EMPLOYEES
(
    PersonID int,
    LastName VARCHAR(30),
    FirstName VARCHAR(30),
    Position VARCHAR(30)
);

CREATE TABLE FINANCE_EMPLOYEES
(
    PersonID INT,
    LastName VARCHAR(30),
    FirstName VARCHAR(30),
    Position VARCHAR(30)
);

मान लीजिए कि हम अपने विभागों से सभी managers के नाम निकालना चाहते हैं।

UNION का उपयोग करके हम HR और वित्त दोनों विभागों के सभी कर्मचारियों को प्राप्त कर सकते हैं, जो एक manager की position

SELECT 
    FirstName, LastName   
FROM 
    HR_EMPLOYEES  
WHERE 
    Position = 'manager'  
UNION ALL  
SELECT 
    FirstName, LastName  
FROM 
    FINANCE_EMPLOYEES  
WHERE 
    Position = 'manager'  

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

यदि आप प्रत्येक आउटपुट कॉलम के लिए एक उपनाम का उपयोग करना चाहते हैं, तो आप उन्हें निम्न प्रकार से पहले चयन कथन में रख सकते हैं:

SELECT 
    FirstName as 'First Name', LastName as 'Last Name'
FROM 
    HR_EMPLOYEES  
WHERE 
    Position = 'manager'  
UNION ALL  
SELECT 
    FirstName, LastName  
FROM 
    FINANCE_EMPLOYEES  
WHERE 
    Position = 'manager'  

सरल व्याख्या और उदाहरण

आसान शब्दों में:

  • परिणाम सेट से डुप्लिकेट हटाते समय UNION 2 परिणाम सेट में शामिल होता है
  • UNION ALL डुप्लिकेट को हटाने के प्रयास के बिना 2 परिणाम सेट में शामिल होता है

एक गलती जो बहुत से लोग करते हैं, वह है एक UNION का उपयोग करना जब उन्हें डुप्लिकेट को निकालने की आवश्यकता नहीं होती है। बड़े परिणाम सेट के खिलाफ अतिरिक्त प्रदर्शन लागत बहुत महत्वपूर्ण हो सकती है।

जब आपको UNION आवश्यकता हो सकती है

मान लें कि आपको 2 अलग-अलग विशेषताओं के खिलाफ एक तालिका को फ़िल्टर करने की आवश्यकता है, और आपने प्रत्येक कॉलम के लिए अलग-अलग गैर-क्लस्टर इंडेक्स बनाए हैं। एक UNION आपको डुप्लिकेट को रोकने के दौरान दोनों अनुक्रमित का लाभ उठाने में सक्षम बनाता है।

SELECT C1, C2, C3 FROM Table1 WHERE C1 = @Param1
UNION
SELECT C1, C2, C3 FROM Table1 WHERE C2 = @Param2

यह आपके प्रदर्शन ट्यूनिंग को सरल बनाता है क्योंकि इन प्रश्नों को बेहतर तरीके से करने के लिए केवल सरल अनुक्रमित की आवश्यकता होती है। तुम भी स्रोत तालिका के खिलाफ समग्र लेखन प्रदर्शन में सुधार करने के लिए काफी कम गैर-संकुल सूचकांक के साथ प्राप्त करने में सक्षम हो सकता है।

जब आपको UNION ALL आवश्यकता हो सकती है

मान लीजिए कि आपको अभी भी 2 विशेषताओं के खिलाफ तालिका को फ़िल्टर करने की आवश्यकता है, लेकिन आपको डुप्लिकेट रिकॉर्ड्स को फ़िल्टर करने की आवश्यकता नहीं है (या तो क्योंकि इससे कोई फर्क नहीं पड़ता या आपके डेटा मॉडल डिज़ाइन के कारण यूनियन के दौरान आपका डेटा किसी भी डुप्लिकेट का उत्पादन नहीं करेगा)।

SELECT C1 FROM Table1
UNION ALL
SELECT C1 FROM Table2

यह विशेष रूप से उपयोगी है जब दृश्य बनाने के लिए जो उस डेटा से जुड़ते हैं जो शारीरिक रूप से कई तालिकाओं में विभाजित होने के लिए डिज़ाइन किया गया है (शायद प्रदर्शन कारणों के लिए, लेकिन फिर भी रिकॉर्ड अप करना चाहता है)। चूंकि डेटा पहले से ही विभाजित है, डेटाबेस इंजन को डुप्लिकेट को हटाने से कोई मूल्य नहीं जुड़ता है और सिर्फ प्रश्नों के लिए अतिरिक्त प्रसंस्करण समय जोड़ता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow