sql - यूनियन और यूनियन के बीच क्या अंतर है?




union union-all (18)

यूनियन और यूनियन सभी दो या दो से अधिक क्वेरी परिणामों को गठबंधन करते थे।

यूनियन कमांड दो तालिकाओं से अलग और संबंधित जानकारी का चयन करता है जो डुप्लिकेट पंक्तियों को समाप्त कर देगा।

दूसरी तरफ, यूनियन ऑल कमांड दोनों टेबलों से सभी मानों का चयन करता है, जो सभी पंक्तियों को प्रदर्शित करता है।

UNION और UNION ALL बीच क्या अंतर है?


यहां चर्चा के लिए मेरे दो सेंट जोड़ने के लिए: कोई UNION ऑपरेटर को शुद्ध, एसईटी उन्मुख यूनियन के रूप में समझ सकता है - उदाहरण के लिए सेट ए = {2,4,6,8}, सेट बी = {1,2,3, 4}, एक यूनियन बी = {1,2,3,4,6,8}

सेट से निपटने पर, आप नंबर 2 और 4 को दो बार नहीं दिखाना चाहते हैं, क्योंकि एक तत्व या तो सेट में नहीं है या नहीं

एसक्यूएल की दुनिया में, हालांकि, आप दोनों सेटों के सभी तत्वों को एक साथ "बैग" {2,4,6,8,1,2,3,4} में देखना चाहते हैं। और इस उद्देश्य के लिए टी-एसक्यूएल ऑपरेटर UNION ALL प्रदान करता है।


यूनियन का उपयोग दो तालिकाओं से अलग मूल्यों का चयन करने के लिए किया जाता है, जहां यूनियन का उपयोग सभी मूल्यों का चयन करने के लिए किया जाता है जिसमें टेबल से डुप्लीकेट शामिल हैं


यूनियन - अलग-अलग रिकॉर्ड में परिणाम

जबकि

यूनियन ऑल - डुप्लिकेट समेत सभी रिकॉर्ड में परिणाम।

दोनों ऑपरेटरों को अवरुद्ध कर रहे हैं और इसलिए मैं व्यक्तिगत रूप से ब्लॉकिंग ऑपरेटरों (यूनियन, इंटरसेक्ट, यूनियन ऑल इत्यादि) पर जॉइन का उपयोग करना पसंद करता हूं।

उदाहरण के लिए यूनियन ऑल चेकआउट निम्नलिखित उदाहरण की तुलना में यूनियन ऑपरेशन खराब प्रदर्शन क्यों करता है।

CREATE TABLE #T1 (data VARCHAR(10))

INSERT INTO #T1
SELECT 'abc'
UNION ALL
SELECT 'bcd'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'def'
UNION ALL
SELECT 'efg'


CREATE TABLE #T2 (data VARCHAR(10))

INSERT INTO #T2
SELECT 'abc'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'efg'

यूनियन ऑल और यूनियन ऑपरेशंस के परिणाम निम्नलिखित हैं।

एक यूनियन स्टेटमेंट प्रभावी रूप से परिणाम सेट पर एक चयन डिस्टिंट करता है। यदि आप जानते हैं कि लौटाए गए सभी रिकॉर्ड आपके संघ से अद्वितीय हैं, तो इसके बजाय यूनियन का उपयोग करें, यह तेजी से परिणाम देता है।

निष्पादन योजना में यूनिट परिणाम का अलग क्रमबद्ध संचालन में परिणाम। इस कथन को साबित करने के लिए सबूत नीचे दिखाया गया है:


ओरेकल में: यूनियन बीएलओबी (या सीएलओबी) कॉलम प्रकारों का समर्थन नहीं करता है, यूनियन सभी करता है।


यूनियन और यूनियन दोनों ही दो अलग-अलग एसक्यूएल के परिणाम को जोड़ते हैं। वे डुप्लिकेट को संभालने के तरीके में भिन्न होते हैं।

  • यूनियन किसी भी डुप्लिकेट पंक्तियों को समाप्त करने, परिणाम सेट पर एक DISTINCT करता है।

  • यूनियन सभी डुप्लिकेट को नहीं हटाते हैं, और इसलिए यह यूनियन से तेज़ है।

नोट: इस आदेश का उपयोग करते समय सभी चयनित कॉलमों को एक ही डेटा प्रकार की आवश्यकता होती है।

उदाहरण: यदि हमारे पास दो टेबल हैं, 1) कर्मचारी और 2) ग्राहक

  1. कर्मचारी तालिका डेटा:

  1. ग्राहक तालिका डेटा:

  1. यूनियन उदाहरण (यह सभी डुप्लिकेट रिकॉर्ड हटा देता है):

  1. यूनियन सभी उदाहरण (यह सिर्फ रिकॉर्ड को जोड़ता है, डुप्लीकेट को खत्म नहीं करता है, इसलिए यह यूनियन से तेज़ है):


(माइक्रोसॉफ्ट एसक्यूएल सर्वर बुक ऑनलाइन से)

यूनियन [सभी]

निर्दिष्ट करता है कि एकाधिक परिणाम सेट संयुक्त किए जाने और एकल परिणाम सेट के रूप में लौटाए जाने हैं।

सब

परिणामों में सभी पंक्तियों को शामिल करता है। इसमें डुप्लिकेट शामिल हैं। यदि निर्दिष्ट नहीं है, तो डुप्लिकेट पंक्तियां हटा दी जाती हैं।

UNION को बहुत अधिक समय लगेगा क्योंकि परिणाम पर DISTINCT की तरह डुप्लिकेट पंक्तियां लागू होती हैं।

SELECT * FROM Table1
UNION
SELECT * FROM Table2

के बराबर है:

SELECT DISTINCT * FROM (
    SELECT * FROM Table1
    UNION ALL
    SELECT * FROM Table2) DT

परिणामों पर DISTINCT लगाने का दुष्प्रभाव परिणाम पर एक सॉर्टिंग ऑपरेशन है।

UNION ALL परिणामों को परिणामों पर मनमाने ढंग से आदेश के रूप में दिखाया जाएगा लेकिन परिणामों पर लागू UNION परिणामों को ORDER BY 1, 2, 3, ..., n (n = column number of Tables) रूप में दिखाया जाएगा। जब आप कोई डुप्लिकेट पंक्ति नहीं रखते हैं तो आप इस दुष्प्रभाव को देख सकते हैं।


UNION डुप्लिकेट रिकॉर्ड हटा देता है (जहां परिणामों में सभी कॉलम समान होते हैं), UNION ALL नहीं करता है।

UNION ALL बजाय UNION का उपयोग करते समय एक प्रदर्शन हिट होता है, क्योंकि डेटाबेस सर्वर को डुप्लिकेट पंक्तियों को हटाने के लिए अतिरिक्त कार्य करना चाहिए, लेकिन आमतौर पर आप डुप्लिकेट नहीं चाहते हैं (विशेष रूप से रिपोर्ट विकसित करते समय)।

यूनियन उदाहरण:

SELECT 'foo' AS bar UNION SELECT 'foo' AS bar

परिणाम:

+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)

यूनियन सभी उदाहरण:

SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar

परिणाम:

+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)

वेन आरेख के साथ समझना अच्छा है।

यहां स्रोत का link है। एक अच्छा विवरण है।


यूनियन और यूनियन के बीच मूल अंतर सभी संघीय संचालन परिणाम सेट से डुप्लिकेट पंक्तियों को समाप्त करता है लेकिन यूनियन सभी शामिल होने के बाद सभी पंक्तियों को वापस कर देता है।

http://zengin.wordpress.com/2007/07/31/union-vs-union-all/


मैं एक उदाहरण जोड़ता हूँ,

यूनियन , यह अलग-अलग -> धीमी गति से विलय कर रहा है, क्योंकि इसकी तुलना करने की आवश्यकता है (ओरेकल एसक्यूएल डेवलपर में, क्वेरी चुनें, लागत विश्लेषण देखने के लिए F10 दबाएं)।

यूनियन सभी , यह बिना किसी विशिष्ट के विलय कर रहा है -> तेज़।

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

तथा

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

यूनिअन
UNION कमांड का उपयोग दो तालिकाओं से संबंधित जानकारी का चयन करने के लिए किया जाता है, जो JOIN कमांड की तरह है। हालांकि, UNION कमांड का उपयोग करते समय सभी चयनित कॉलमों को एक ही डेटा प्रकार की आवश्यकता होती है। UNION साथ, केवल विशिष्ट मान चुने जाते हैं।

यूनियन सभी
UNION ALL कमांड UNION ALL कमांड के बराबर है, सिवाय इसके कि UNION ALL सभी मानों का चयन करता है।

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

एक UNION स्टेटमेंट प्रभावी रूप से परिणाम सेट पर एक SELECT DISTINCT करता है। यदि आप जानते हैं कि लौटाए गए सभी रिकॉर्ड आपके संघ से अद्वितीय हैं, तो इसके बजाय यूनियन का उपयोग करें, यह तेजी से परिणाम देता है।


बहुत सरल शब्दों में यूनियन और यूनियन के बीच अंतर यह है कि यूनियन डुप्लिकेट रिकॉर्ड छोड़ देगा जबकि यूनियन सभी में डुप्लिकेट रिकॉर्ड शामिल होंगे।


मान लीजिए कि आपके पास दो टेबल शिक्षक और छात्र हैं

दोनों के पास इस तरह के अलग-अलग नाम के साथ 4 कॉलम हैं

Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))

Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)

आप उन दो तालिकाओं के लिए यूनियन या यूनियन सभी लागू कर सकते हैं जिनमें कॉलम की संख्या समान है। लेकिन उनके पास अलग-अलग नाम या डेटा प्रकार हैं।

जब आप 2 टेबल पर UNION ऑपरेशन लागू करते हैं, तो यह सभी डुप्लिकेट प्रविष्टियों को उपेक्षा करता है (तालिका में पंक्ति के सभी कॉलम मान किसी अन्य तालिका के समान होते हैं)। इस कदर

SELECT * FROM Student
UNION
SELECT * FROM Teacher

परिणाम होगा

जब आप 2 टेबल पर UNION ALL ऑपरेशन लागू करते हैं, तो यह डुप्लिकेट के साथ सभी प्रविष्टियों को लौटाता है (यदि 2 टेबल में पंक्ति के किसी भी कॉलम मान के बीच कोई अंतर है)। इस कदर

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

उत्पादन

प्रदर्शन:

स्पष्ट रूप से यूनियन सभी प्रदर्शन बेहतर है कि यूनियन के रूप में वे डुप्लिकेट मानों को हटाने के लिए अतिरिक्त कार्य करते हैं। आप MSSQL पर प्रेस ctrl + L दबाकर निष्पादन अनुमानित समय से जांच सकते हैं


एक और चीज जिसे मैं जोड़ना चाहता हूं-

संघ : - परिणाम सेट आरोही क्रम में क्रमबद्ध है।

संघ सभी : - परिणाम सेट क्रमबद्ध नहीं है। दो क्वेरी आउटपुट बस संलग्न हो जाता है।


यूनियन अन्य हाथों में डुप्लिकेट रिकॉर्ड हटा देता है यूनियन सभी नहीं करता है। लेकिन किसी को संसाधित होने वाले बड़े पैमाने पर डेटा की जांच करने की आवश्यकता है और कॉलम और डेटा प्रकार समान होना चाहिए।

चूंकि संघ आंतरिक रूप से पंक्तियों का चयन करने के लिए "विशिष्ट" व्यवहार का उपयोग करता है, इसलिए यह समय और प्रदर्शन के मामले में अधिक महंगा है। पसंद

select project_id from t_project
union
select project_id from t_project_contact  

यह मुझे 2020 रिकॉर्ड देता है

दुसरी तरफ

select project_id from t_project
union all
select project_id from t_project_contact

मुझे 17402 से अधिक पंक्तियां देता है

प्राथमिकता परिप्रेक्ष्य दोनों पर समान प्राथमिकता है।


UNION दो संरचनात्मक रूप से संगत तालिकाओं की सामग्री को एक संयुक्त तालिका में विलीन करता है।

  • अंतर:

UNION और UNION ALL बीच अंतर यह है कि UNION will डुप्लिकेट रिकॉर्ड छोड़ UNION will जबकि UNION ALL में डुप्लिकेट रिकॉर्ड शामिल होंगे।

Union परिणाम सेट आरोही क्रम में क्रमबद्ध किया गया है जबकि UNION ALL परिणाम सेट को हल नहीं किया गया है

UNION अपने परिणाम सेट पर एक DISTINCT करता है ताकि यह किसी भी डुप्लिकेट पंक्तियों को खत्म कर देगा। जबकि UNION ALL डुप्लिकेट को नहीं हटाएंगे और इसलिए यह UNION से तेज है। *

नोट : UNION ALL का प्रदर्शन आम तौर पर UNION से बेहतर होगा, क्योंकि UNION को सर्वर को किसी भी डुप्लीकेट को हटाने का अतिरिक्त कार्य करने की आवश्यकता होती है। इसलिए, ऐसे मामलों में जहां यह निश्चित है कि कोई डुप्लिकेट नहीं होगा, या जहां डुप्लिकेट समस्या नहीं है, प्रदर्शन कारणों के लिए UNION ALL उपयोग UNION ALL की सिफारिश की जाएगी।


सरल शब्दों में:

आंतरिक शामिल हों -> माता-पिता और बाल सारणी से केवल सामान्य रिकॉर्ड लें, जहां माता-पिता तालिका की प्राथमिक कुंजी बाल तालिका में विदेशी कुंजी से मेल खाती है।

बाएं शामिल हों ->

छद्म कोड

1.Take All records from left Table
2.for(each record in right table,) {
    if(Records from left & right table matching on primary & foreign key){
       use their values as it is as result of join at the right side for 2nd table.
    } else {
       put value NULL values in that particular record as result of join at the right side for 2nd table.
    }
  }

सही शामिल हों : बाएं जुड़ने के बिल्कुल विपरीत। राइट जॉइन में दाईं ओर बाएं जॉइन में टेबल का नाम दें, आपको बाएं जॉइन के समान आउटपुट मिलता है।

बाहरी शामिल हों : दोनों तालिकाओं में सभी रिकॉर्ड दिखाएं No matter what। यदि बाएं तालिका में रिकॉर्ड्स प्राथमिक, फ़ॉरिगइन कुंजी के आधार पर सही तालिका से मेल नहीं खाते हैं, तो शामिल होने के परिणामस्वरूप न्यूल मान का उपयोग करें।

उदाहरण :

आइए अब 2 टेबल के लिए मान लें

1.employees , 2.phone_numbers_employees

employees : id , name 

phone_numbers_employees : id , phone_num , emp_id   

यहां, कर्मचारी तालिका मास्टर टेबल है, phone_numbers_employees बाल तालिका है (इसमें emp_idविदेशी कुंजी है जो employee.idइसकी बाल तालिका को जोड़ती है।)

अंदरूनी जुड़ता है

केवल 2 टेबल के रिकॉर्ड लें यदि कर्मचारी तालिका (इसकी आईडी) की प्राथमिक कुंजी बाल तालिका phone_numbers_employees (emp_id) की विदेशी कुंजी से मेल खाती है

तो सवाल होगा:

SELECT e.id , e.name , p.phone_num FROM employees AS e INNER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;

यहां ऊपर वर्णित अनुसार प्राथमिक कुंजी = विदेशी कुंजी पर केवल मिलान पंक्तियां लें। प्राथमिक कुंजी पर गैर मेल खाने वाली पंक्तियां = विदेशी कुंजी को शामिल होने के परिणामस्वरूप छोड़ दिया जाता है।

बाएं जुड़ता है :

बाईं ओर बाएं टेबल की सभी पंक्तियों को बरकरार रखा गया है, भले ही सही पंक्ति पर मेल खाने वाली कोई पंक्ति हो।

SELECT e.id , e.name , p.phone_num FROM employees AS e LEFT JOIN phone_numbers_employees AS p ON e.id = p.emp_id;

बाहरी जुड़ता है :

SELECT e.id , e.name , p.phone_num FROM employees AS e OUTER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;

आरेखण रूप से ऐसा लगता है:





sql union union-all