SQL
यूनिअन / यूनिअन ऑल
खोज…
परिचय
वाक्य - विन्यास
- 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
यह विशेष रूप से उपयोगी है जब दृश्य बनाने के लिए जो उस डेटा से जुड़ते हैं जो शारीरिक रूप से कई तालिकाओं में विभाजित होने के लिए डिज़ाइन किया गया है (शायद प्रदर्शन कारणों के लिए, लेकिन फिर भी रिकॉर्ड अप करना चाहता है)। चूंकि डेटा पहले से ही विभाजित है, डेटाबेस इंजन को डुप्लिकेट को हटाने से कोई मूल्य नहीं जुड़ता है और सिर्फ प्रश्नों के लिए अतिरिक्त प्रसंस्करण समय जोड़ता है।