UNION और UNION ALL में क्या अंतर है?


जवाबों:


1734

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

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

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

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)

179
इसका निहितार्थ यह है कि संघ बहुत कम प्रदर्शनकारी है क्योंकि उसे डुप्लिकेट के लिए परिणाम को स्कैन करना होगा
मैथ्यू वाटसन

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

6
बस ध्यान दिया गया कि यहाँ बहुत सारी अच्छी टिप्पणियाँ / उत्तर हैं, इसलिए मैंने विकी झंडे को चालू किया और प्रदर्शन के बारे में एक नोट जोड़ा ...
जिम हार्टे

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

23
@AdamCaviness आपकी टिप्पणी का कोई मतलब नहीं है।
kojow7

285

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

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

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

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

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

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

यहां छवि विवरण दर्ज करें

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

यहां छवि विवरण दर्ज करें

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

यहां छवि विवरण दर्ज करें

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

यहां छवि विवरण दर्ज करें


3
"सभी चयनित स्तंभों को समान डेटा प्रकार का होना चाहिए" - वास्तव में, चीजें इतनी सख्त नहीं हैं (संबंधपरक मॉडल बिंदु से अच्छी बात नहीं है!)। SQL मानक का कहना है कि उनके संबंधित कॉलम डिस्क्रिप्टर को नाम के अलावा समान होना चाहिए।
onayaywhen

47

UNIONडुप्लिकेट निकालता है, जबकि UNION ALLनहीं करता है।

हटाने के लिए डुप्लिकेट परिणाम सेट अनुसार क्रमबद्ध किया जाना चाहिए और इस में हो सकता है यूनिअन के प्रदर्शन पर प्रभाव पड़ता है, डेटा की मात्रा के आधार पर छाँटे जा रहा है, और (Oracle के लिए विभिन्न आरडीबीएमएस मानकों की सेटिंग PGA_AGGREGATE_TARGETके साथ WORKAREA_SIZE_POLICY=AUTOया SORT_AREA_SIZEऔर SOR_AREA_RETAINED_SIZEअगर WORKAREA_SIZE_POLICY=MANUAL)।

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

बेशक, यदि आपको डुप्लिकेट के बिना लौटाए गए डेटा की आवश्यकता है, तो आपको अपने डेटा के स्रोत के आधार पर UNION का उपयोग करना होगा

मैंने पहले पोस्ट पर "बहुत कम प्रदर्शन करने वाला" पात्र होने के लिए टिप्पणी की होगी, लेकिन ऐसा करने के लिए अपर्याप्त प्रतिष्ठा (अंक) है।


1
"डुप्लिकेट को निकालने के लिए परिणाम सेट को क्रमबद्ध किया जाना चाहिए" - हो सकता है कि आपके पास किसी विशेष विक्रेता को ध्यान में रखें लेकिन प्रश्न पर कोई विक्रेता-विशिष्ट टैग नहीं हैं। यहां तक ​​कि अगर वहाँ था, क्या आप साबित कर सकते हैं कि डुप्लिकेट को सॉर्ट किए बिना हटाया नहीं जा सकता है?
onedaywhen

2
अलग-अलग "निहित" परिणामों को क्रमबद्ध करेंगे, क्योंकि डुप्लिकेट को हटाने से एक हल सेट पर जल्दी होता है। इसका मतलब यह नहीं है कि लौटाया गया परिणाम वास्तव में उस तरह से हल किया गया है, लेकिन ज्यादातर मामलों में अलग (और इसलिए, यूनिअन) आंतरिक रूप से परिणामों के सेट को क्रमबद्ध करेगा।
डेविलसुइचिरो


21

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

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


13

आप डुप्लिकेट से बच सकते हैं और अभी भी UNION DISTINCT (जो वास्तव में UNION के समान है) की तुलना में बहुत तेजी से रन कर सकते हैं:

SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X

AND a!=Xभाग को नोटिस करें । यह बहुत तेजी से तब UNION है।


4
यह पंक्तियों को छोड़ देगा और इसलिए NULL मान सम्‍मिलित होने पर अपेक्षित परिणाम देने में विफल रहेगा। इसके अलावा, यह अभी भी एक ही परिणाम के रूप में वापस नहीं करता है UNION- UNIONयह भी डुप्लिकेट को हटा देता है जो उपश्रेणियों द्वारा लौटाए जाते हैं, जबकि आपका दृष्टिकोण नहीं होगा।
फ्रैंक श्मिट

@FrankSchmitt - इस उत्तर के लिए धन्यवाद; उपश्रेणियों के बारे में यह वही है जो मैं जानना चाहता था!
डोरादुस

11

यहां चर्चा में मेरे दो सेंट जोड़ने के लिए: एक 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


2
Nitpick: UNION ALLT-SQL द्वारा "ऑफ़र" नहीं किया गया है।UNION ALLANSI SQL मानक का हिस्सा है और MS SQL सर्वर के लिए विशिष्ट नहीं है।
फ्रैंक श्मिट

1
'नाइटपिक' टिप्पणी का अर्थ यह हो सकता है कि आप TSQL में "यूनियन ऑल" का उपयोग नहीं कर सकते, लेकिन आप कर सकते हैं। बेशक, टिप्पणी यह ​​नहीं कहती है, लेकिन कोई व्यक्ति इसे पढ़ सकता है।
जोसेफोग्गी

10

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

यूनिअन सभी आदेश के बराबर है सिवाय इसके कि आदेश, चयन सभी मूल्यों।
UNION ALLUNIONUNION ALL

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

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


8

यकीन नहीं होता कि यह किस डेटाबेस के लिए मायने रखता है

UNION तथा UNION ALL सभी SQL सर्वर पर काम करना चाहिए।

आपको अनावश्यक UNIONएस से बचना चाहिए क्योंकि वे विशाल प्रदर्शन रिसाव हैं। अंगूठे के एक नियम के रूप में UNION ALLयदि आप सुनिश्चित नहीं हैं कि किसका उपयोग करना है।


इस प्रश्न पर कोई SQL सर्वर टैग नहीं है। मुझे लगता है कि विकल्प जो केवल डुप्लिकेट लौटाता है क्योंकि यह सामान्य रूप से सबसे अच्छा प्रदर्शन करता है वह गलत सलाह है।
onayaywhen

1
@onedaywhen मुझे लगता है कि ओपी ने "SQL सर्वर" वाक्यांश का उपयोग सभी RDBMSs (जैसे MySQL, PostGreSQL, Oracle, SQL Server) के पर्याय के रूप में किया है। शब्दांकन दुर्भाग्यपूर्ण है, हालाँकि (और, मुझसे गलती हो सकती है)।
फ्रैंक श्मिट

@FrankSchmitt: आपके द्वारा सूचीबद्ध कोई भी उत्पाद सही मायने में RDBMSs :) नहीं हैं
onedaywhen

1
@onedaywhen देखभाल करने के लिए विस्तृत? कम से कम en.wikipedia.org/wiki/Relational_database_management_system मुझसे सहमत लगता है - इसमें स्पष्ट रूप से Microsoft SQL सर्वर, Oracle डेटाबेस और MySQL का उल्लेख है। या आप Oracle और Oracle डाटाबेस जैसे उदाहरण के बीच अंतर के बारे में बता रहे हैं?
फ्रैंक

8

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

जबकि

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

दोनों आपरेटर्स को ब्लॉक कर रहे हैं और इसलिए मैं व्यक्तिगत रूप से ब्लॉकिंग ऑपरेटर्स (UNION, INTERSECT, UNION ALL आदि) पर JOINS का उपयोग करना पसंद करता हूं।

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

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'

यहां छवि विवरण दर्ज करें

निम्नलिखित UNION ALL और UNION संचालन के परिणाम हैं।

यहां छवि विवरण दर्ज करें

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

निष्पादन योजना में डिस्टिंच सॉर्ट ऑपरेशंस में UNION परिणाम का उपयोग करना । इस कथन को साबित करने का प्रमाण नीचे दिखाया गया है:

यहां छवि विवरण दर्ज करें


3
इस उत्तर में सब कुछ पहले से ही कहा गया है, बहुत उपयोगी होने के लिए भ्रमित है (जब वे अलग-अलग काम करते हैं, तो यूनियनों में शामिल होने का सुझाव देते हैं, "अवरुद्ध" एक कारण के रूप में यह बताए बिना कि आप उस या जो डेटाबेस सर्वर पर लागू होते हैं), या अत्यधिक भ्रामक है (आपके स्क्रीनशॉट में आपका प्रतिशत वास्तविक वास्तविक उपयोग UNION/ के लिए लागू नहीं है UNION ALL)।

ब्लॉकिंग ऑपरेटर TSQL में प्रसिद्ध ऑपरेटर हैं। ब्लॉकिंग ऑपरेटर जो कुछ भी करते हैं वह जॉइन द्वारा प्राप्त किए जा सकते हैं लेकिन इसके विपरीत नहीं। डिस्टिक्ट सॉर्ट ऑपरेशन चित्र में दिखाया गया है कि यूनियन सभी संघ से बेहतर प्रदर्शन क्यों करती है और यह भी दिखाती है कि निष्पादन योजना में यह कहां मौजूद है। प्रतिशत के साथ खेलने के लिए टेबल T1 और T2 में अधिक डेटा जोड़ने के लिए स्वतंत्र महसूस करें!
DBA

आप तकनीकी रूप unionसे joinएस और कुछ वास्तव में बुरा caseएस के संयोजन का उपयोग कर के परिणाम दे सकते हैं , लेकिन यह क्वेरी को पढ़ने और बनाए रखने के लिए असंभव बना देता है, और मेरे अनुभव में यह प्रदर्शन के लिए भी भयानक है। तुलना करें: select foo.bar from foo union select fizz.buzz from fizzखिलाफselect case when foo.bar is null then fizz.buzz else foo.bar end from foo join fizz where foo.bar is null or fizz.buzz is null
डेविन लैमोटेक्ट

@DBA एमएस SQL ​​सर्वर के उपयोगकर्ताओं के लिए आपका उत्तर केवल प्रासंगिक है। ओपी ने कभी भी आरडीबीएमएस का उल्लेख नहीं किया जिसका वे उपयोग कर रहे हैं - वे MySQL, PostgreSQL, Oracle, SQLite, ... का उपयोग कर सकते हैं ...
फ्रैंक श्मिट

6

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


6

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

यहाँ स्रोत के लिए लिंक है। अच्छा वर्णन है।

यहां छवि विवरण दर्ज करें


5
आपकी दूसरी तस्वीर बताती है कि जब वे नहीं हैं तो दोनों परस्पर अनन्य हैं। तस्वीर को पहले जैसा ही दिखाना चाहिए लेकिन ()दूसरी बार दिखाए गए 'चौराहे दीर्घवृत्त' के साथ। दरअसल, दूसरे विचारों पर, क्योंकि union allपरिणाम एक सेट नहीं है, आपको वेन आरेख का उपयोग करके इसे खींचने का कोई प्रयास नहीं करना चाहिए!
onedaywhen

5

(Microsoft SQL सर्वर बुक ऑनलाइन से)

यूनिअन [ALL]

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

सब

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

UNIONDISTINCTपरिणाम पर लागू होने वाली डुप्लिकेट पंक्तियों को खोजने में बहुत लंबा समय लगेगा ।

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)पर लागू किए गए अनुसार दिखाए जाएंगे । जब आप कोई डुप्लिकेट पंक्ति नहीं रखते हैं तो आप इस दुष्प्रभाव को देख सकते हैं।


5

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

UNION , यह विशिष्ट -> धीमी के साथ विलय कर रहा है, क्योंकि इसकी तुलना करने की आवश्यकता है (ओरेकल SQL डेवलपर में, क्वेरी चुनें, लागत विश्लेषण देखने के लिए 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;

2

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

  • अंतर:

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

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

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

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


1
"यूनियन रिजल्ट सेट को आरोही क्रम में क्रमबद्ध किया जाता है" - जब तक कि ए नहीं है ORDER BY, तब तक सॉर्ट किए गए परिणाम की गारंटी नहीं होती है। हो सकता है कि आपके मन में एक विशेष SQL विक्रेता हो (फिर भी, आरोही क्रम क्या है ...?) लेकिन इस प्रश्न का कोई विक्रेता = विशिष्ट टैग नहीं है।
onedaywhen

"दो संरचनात्मक रूप से संगत तालिकाओं की सामग्री को मर्ज करता है" - मुझे लगता है कि आपने इस हिस्से को वास्तव में अच्छी तरह से कहा है :)
onedaywhen

2

मान लीजिए कि आपके पास दो टेबल टीचर और स्टूडेंट हैं

दोनों में 4 कॉलम हैं जैसे अलग-अलग नाम

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

यहां छवि विवरण दर्ज करें

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

यहां छवि विवरण दर्ज करें

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

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

SELECT * FROM Student
UNION
SELECT * FROM Teacher

परिणाम होगा

यहां छवि विवरण दर्ज करें

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

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

उत्पादन यहां छवि विवरण दर्ज करें

प्रदर्शन:

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


वास्तव में? एक चार-पंक्ति परिणाम के लिए ?! मुझे लगता है कि यह एक ऐसा परिदृश्य है जहां आप UNIONअभिप्रेत अभिप्राय (यानी कोई डुप्लिकेट) का उपयोग नहीं करना चाहेंगे, क्योंकि UNION ALLनिरपेक्ष रूप से किसी भी वास्तविक जीवन प्रदर्शन को प्राप्त करने की संभावना नहीं है।
onedaywhen

2

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


1

एक और बात मैं जोड़ना चाहूंगा-

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

Union All : - रिजल्ट सेट को हल नहीं किया जाता है। दो क्वेरी आउटपुट बस संलग्न हो जाता है।


सच ! यूनिअन दो उप-परिणामों के क्रम को बदल सकता है।
ग्रेचस

6
ये गलत है। A आरोही क्रम में परिणाम को सॉर्ट नहींUNION करेगा । उपयोग किए बिना आप जो भी ऑर्डर देखते हैं, वह शुद्ध संयोग है। DBMS किसी भी रणनीति का उपयोग करने के लिए स्वतंत्र है जो डुप्लिकेट को निकालने के लिए कुशल है। यह छँटाई हो सकती है, लेकिन यह एक हैशिंग एल्गोरिथ्म या कुछ पूरी तरह से अलग भी हो सकती है - और पंक्तियों की संख्या के साथ रणनीति बदल जाएगी। ऐसा प्रतीत होता है कि 100 पंक्तियों के साथ सॉर्ट की गई पंक्ति 100.000 पंक्तियों के साथ नहीं हो सकती हैorder byunion
a_horse_with_no_name

2
क्वेरी पर एक आदेश द्वारा खंड के बिना, RDBMS किसी भी क्रम में पंक्तियों को वापस करने के लिए स्वतंत्र है । UNION ऑपरेशन से सेट किया गया अवलोकन "आरोही क्रम में" वापस आ जाता है, जो डेटाबेस द्वारा किए गए "सॉर्ट यूनिक" ऑपरेशन का केवल एक प्रतिफल है। देखे गए व्यवहार की गारंटी नहीं है । तो इस पर भरोसा मत करो। यदि विनिर्देश किसी विशेष क्रम में पंक्तियों को वापस करना है, तो एक उपयुक्त ORDER BYखंड जोड़ें ।
spencer7593

1

एसईसीएल में यूनियन बनाम यूनियन ऑल के बीच अंतर

एसक्यूएल में संघ क्या है?

UNION ऑपरेटर का उपयोग दो या अधिक डेटा सेट के परिणाम-सेट को संयोजित करने के लिए किया जाता है।

Each SELECT statement within UNION must have the same number of columns
The columns must also have similar data types
The columns in each SELECT statement must also be in the same order

उदाहरण के साथ संघ बनाम संघ


1

जरूरी! ओरेकल और मैसकल के बीच अंतर: मान लीजिए कि t1 t2 में उनके बीच डुप्लिकेट पंक्तियाँ नहीं हैं, लेकिन उनकी डुप्लिकेट पंक्तियाँ अलग-अलग हैं। उदाहरण: t1 की 2017 से बिक्री है और 2018 से t2 है

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

ओरेकल यूनिअन में सभी तालिकाओं से सभी पंक्तियों को प्राप्त करते हैं। ऐसा ही MySQL में होगा।

तथापि:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

में ओरेकल , यूनिअन दोनों तालिकाओं से सभी पंक्तियों को हासिल करेगा क्योंकि वहाँ t1 और t2 के बीच कोई डुप्लिकेट मानों हैं। दूसरी ओर MySQL में परिणामी पंक्तियाँ कम होंगी क्योंकि तालिका t1 के भीतर और तालिका t2 के भीतर भी डुप्लीकेट पंक्तियाँ होंगी!


0

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

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

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 से अधिक पंक्तियाँ देता है

पूर्वता के परिप्रेक्ष्य में दोनों की एक ही पूर्वता है।


0

अगर वहाँ कोई नहीं है ORDER BY , तो UNION ALLपंक्तियों को वापस ला सकता है क्योंकि यह UNIONपूरी तरह से एक बार सेट करने से पहले आपको क्वेरी के बहुत अंत तक इंतजार करेगा। इससे समय-आउट की स्थिति में अंतर आ सकता है - aUNION ALL कनेक्शन को जीवित रखता है, जैसा कि यह था।

इसलिए यदि आपके पास टाइम-आउट समस्या है, और कोई छँटाई नहीं है, और डुप्लिकेट एक मुद्दा नहीं है, UNION ALLबल्कि सहायक हो सकता है।


लेकिन आपके परिणामों का पहला हिस्सा एक पंक्ति को कई बार दोहराया जा सकता है: यह कितना उपयोगी है ?!
onedaywhen

0

UNION और UNION ALL दो या दो से अधिक क्वेरी परिणामों को मिलाते थे।

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

दूसरी ओर, UNION ALL कमांड दोनों तालिकाओं से सभी मानों का चयन करता है, जो सभी पंक्तियों को प्रदर्शित करता है।


0

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


0

UNION ALLअधिक डेटा प्रकारों पर भी काम करता है। उदाहरण के लिए जब स्थानिक डेटा प्रकारों को मिलाने की कोशिश की जा रही है। उदाहरण के लिए:

select a.SHAPE from tableA a
union
select b.SHAPE from tableB b

फेंक देंगे

The data type geometry cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable.

हालांकि union allनहीं होगा


-1

केवल अंतर है:

"UNION" डुप्लिकेट पंक्तियों को हटा देता है।

"UNION ALL" डुप्लिकेट पंक्तियों को नहीं हटाता है।


13
स्वीकृत उत्तर की तुलना में यह किसी भी मूल्य को कैसे जोड़ता है?
निक

@ यह छोटा जवाब है।
मुस्तफा वतनपुर

यदि आपको यह डेटा प्राप्त करने के लिए स्वीकृत उत्तर का एक महत्वपूर्ण भाग पढ़ना पड़ता है, तो शॉर्टर एक फायदा हो सकता है। लेकिन इस मामले में स्वीकृत उत्तर में यह सब जानकारी पहले वाक्य में है, जिसके बाद यह अंतर के बारे में विस्तार से चर्चा करता है।
dmckee --- पूर्व-मध्यस्थ ने बिल्ली का बच्चा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.