जवाबों:
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)
दोनों UNION और UNION सभी दो अलग-अलग SQL के परिणाम को मिलाते हैं। वे डुप्लिकेट को संभालने के तरीके में भिन्न होते हैं।
यूनिअन किसी भी डुप्लिकेट पंक्तियों को हटाते हुए, परिणाम सेट पर एक DISTINCT करता है।
UNION ALL डुप्लिकेट को नहीं हटाता है, और इसलिए यह UNION से अधिक तेज़ है।
नोट: इस आदेश का उपयोग करते समय सभी चयनित स्तंभों को समान डेटा प्रकार का होना चाहिए।
उदाहरण: यदि हमारे पास दो टेबल हैं, 1) कर्मचारी और 2) ग्राहक
UNION
डुप्लिकेट निकालता है, जबकि UNION ALL
नहीं करता है।
हटाने के लिए डुप्लिकेट परिणाम सेट अनुसार क्रमबद्ध किया जाना चाहिए और इस में हो सकता है यूनिअन के प्रदर्शन पर प्रभाव पड़ता है, डेटा की मात्रा के आधार पर छाँटे जा रहा है, और (Oracle के लिए विभिन्न आरडीबीएमएस मानकों की सेटिंग PGA_AGGREGATE_TARGET
के साथ WORKAREA_SIZE_POLICY=AUTO
या SORT_AREA_SIZE
और SOR_AREA_RETAINED_SIZE
अगर WORKAREA_SIZE_POLICY=MANUAL
)।
मूल रूप से, सॉर्ट तेजी से होता है अगर इसे मेमोरी में किया जा सकता है, लेकिन डेटा की मात्रा के बारे में एक ही चेतावनी लागू होती है।
बेशक, यदि आपको डुप्लिकेट के बिना लौटाए गए डेटा की आवश्यकता है, तो आपको अपने डेटा के स्रोत के आधार पर UNION का उपयोग करना होगा ।
मैंने पहले पोस्ट पर "बहुत कम प्रदर्शन करने वाला" पात्र होने के लिए टिप्पणी की होगी, लेकिन ऐसा करने के लिए अपर्याप्त प्रतिष्ठा (अंक) है।
ORACLE में: UNION BLOB (या CLOB) कॉलम प्रकारों का समर्थन नहीं करता है, UNION ALL करता है।
UNION और UNION ALL के बीच का मूल अंतर यूनियन ऑपरेशन है, परिणाम सेट से डुप्लिकेट की गई पंक्तियों को समाप्त करता है, लेकिन यूनियन सभी जॉइनिंग के बाद सभी पंक्तियों को वापस कर देता है।
से http://zengin.wordpress.com/2007/07/31/union-vs-union-all/
आप डुप्लिकेट से बच सकते हैं और अभी भी UNION DISTINCT (जो वास्तव में UNION के समान है) की तुलना में बहुत तेजी से रन कर सकते हैं:
SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X
AND a!=X
भाग को नोटिस करें । यह बहुत तेजी से तब UNION है।
UNION
- UNION
यह भी डुप्लिकेट को हटा देता है जो उपश्रेणियों द्वारा लौटाए जाते हैं, जबकि आपका दृष्टिकोण नहीं होगा।
यहां चर्चा में मेरे दो सेंट जोड़ने के लिए: एक 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
।
UNION ALL
T-SQL द्वारा "ऑफ़र" नहीं किया गया है।UNION ALL
ANSI SQL मानक का हिस्सा है और MS SQL सर्वर के लिए विशिष्ट नहीं है।
यूनिअन आदेश बहुत पसंद, दो टेबल से संबंधित जानकारी का चयन करने के लिए किया जाता है आदेश। हालाँकि, कमांड का उपयोग करते समय सभी चयनित कॉलमों को समान डेटा प्रकार का होना चाहिए। के साथ , केवल विशिष्ट मानों का चयन किया जाता है।UNION
JOIN
UNION
UNION
यूनिअन सभी आदेश के बराबर है सिवाय इसके कि आदेश, चयन सभी मूल्यों।UNION ALL
UNION
UNION ALL
के बीच का अंतर Union
और Union all
वह यह है कि Union all
डुप्लीकेट पंक्तियों को खत्म नहीं होगा, बजाय यह सिर्फ सभी तालिकाओं एक तालिका में अपनी क्वेरी बारीकियों और उन सभी को संयुक्त फिटिंग से सभी पंक्तियों को खींचती है।
एक UNION
बयान प्रभावी ढंग से एकSELECT DISTINCT
परिणाम सेट पर । यदि आप जानते हैं कि आपके यूनियन से लौटे सभी रिकॉर्ड अद्वितीय हैं UNION ALL
, तो इसके बजाय इसका उपयोग करें , यह तेजी से परिणाम देता है।
यकीन नहीं होता कि यह किस डेटाबेस के लिए मायने रखता है
UNION
तथा UNION ALL
सभी SQL सर्वर पर काम करना चाहिए।
आपको अनावश्यक UNION
एस से बचना चाहिए क्योंकि वे विशाल प्रदर्शन रिसाव हैं। अंगूठे के एक नियम के रूप में UNION ALL
यदि आप सुनिश्चित नहीं हैं कि किसका उपयोग करना है।
यूनिअन - अलग रिकॉर्ड में परिणाम है
जबकि
यूनिअन ऑल - डुप्लिकेट सहित सभी रिकॉर्ड में परिणाम है।
दोनों आपरेटर्स को ब्लॉक कर रहे हैं और इसलिए मैं व्यक्तिगत रूप से ब्लॉकिंग ऑपरेटर्स (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 परिणाम का उपयोग करना । इस कथन को साबित करने का प्रमाण नीचे दिखाया गया है:
UNION
/ के लिए लागू नहीं है UNION ALL
)।
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
संघ का उपयोग दो तालिकाओं से अलग-अलग मूल्यों का चयन करने के लिए किया जाता है, जहां संघ सभी का उपयोग तालिकाओं से डुप्लिकेट सहित सभी मूल्यों का चयन करने के लिए किया जाता है
()
दूसरी बार दिखाए गए 'चौराहे दीर्घवृत्त' के साथ। दरअसल, दूसरे विचारों पर, क्योंकि union all
परिणाम एक सेट नहीं है, आपको वेन आरेख का उपयोग करके इसे खींचने का कोई प्रयास नहीं करना चाहिए!
(Microsoft SQL सर्वर बुक ऑनलाइन से)
यूनिअन [ALL]
निर्दिष्ट करता है कि एकाधिक परिणाम सेटों को संयुक्त किया जाना है और एकल परिणाम सेट के रूप में लौटाया जाता है।
सब
परिणामों में सभी पंक्तियों को शामिल करता है। इसमें डुप्लिकेट शामिल हैं। यदि निर्दिष्ट नहीं है, तो डुप्लिकेट पंक्तियाँ हटा दी जाती हैं।
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 , यह विशिष्ट -> धीमी के साथ विलय कर रहा है, क्योंकि इसकी तुलना करने की आवश्यकता है (ओरेकल 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;
UNION
एक संयुक्त तालिका में दो संरचनात्मक रूप से संगत तालिकाओं की सामग्री को मिलाता है।
के बीच का अंतर UNION
और UNION ALL
वह यह है कि UNION will
जबकि न आना डुप्लिकेट रिकॉर्ड UNION ALL
डुप्लिकेट रिकॉर्ड शामिल होंगे।
Union
परिणाम सेट को आरोही क्रम में क्रमबद्ध किया जाता है जबकि UNION ALL
परिणाम सेट को क्रमबद्ध नहीं किया जाता है
UNION
DISTINCT
इसके परिणाम सेट पर प्रदर्शन करता है ताकि यह किसी भी डुप्लिकेट पंक्तियों को समाप्त कर दे। जबकि UNION ALL
डुप्लिकेट को हटाया नहीं जाएगा और इसलिए यह इससे अधिक तेज़ है UNION
। *
नोट : आम तौर पर प्रदर्शन की UNION ALL
तुलना में बेहतर होगा UNION
, क्योंकि UNION
सर्वर को किसी भी डुप्लिकेट को हटाने का अतिरिक्त काम करने की आवश्यकता होती है। तो, ऐसे मामलों में जहां यह निश्चित है कि कोई डुप्लिकेट नहीं होगा, या जहां डुप्लिकेट होने की समस्या नहीं है, UNION ALL
प्रदर्शन कारणों के लिए उपयोग की सिफारिश की जाएगी।
ORDER BY
, तब तक सॉर्ट किए गए परिणाम की गारंटी नहीं होती है। हो सकता है कि आपके मन में एक विशेष SQL विक्रेता हो (फिर भी, आरोही क्रम क्या है ...?) लेकिन इस प्रश्न का कोई विक्रेता = विशिष्ट टैग नहीं है।
मान लीजिए कि आपके पास दो टेबल टीचर और स्टूडेंट हैं
दोनों में 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 लागू कर सकते हैं जिनमें समान संख्या में कॉलम हैं। लेकिन उनका अलग नाम या डेटा प्रकार है।
जब आप UNION
2 तालिकाओं पर ऑपरेशन लागू करते हैं , तो यह सभी डुप्लिकेट प्रविष्टियों की उपेक्षा करता है (एक तालिका में पंक्ति के सभी स्तंभ मान अन्य तालिका के समान हैं)। ऐशे ही
SELECT * FROM Student
UNION
SELECT * FROM Teacher
परिणाम होगा
जब आप UNION ALL
2 तालिकाओं पर संचालन लागू करते हैं , तो यह सभी प्रविष्टियों को डुप्लिकेट के साथ लौटाता है (यदि 2 तालिकाओं में पंक्ति के किसी भी स्तंभ के मूल्य में कोई अंतर है)। ऐशे ही
SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher
प्रदर्शन:
स्पष्ट रूप से यूनिअन सभी प्रदर्शन बेहतर है कि यूनिअन डुप्लिकेट मानों को हटाने के लिए अतिरिक्त कार्य करते हैं। आप MSSQL पर ctrl + L दबाकर एक्ज़ीक्यूशन अनुमानित समय से देख सकते हैं
UNION
अभिप्रेत अभिप्राय (यानी कोई डुप्लिकेट) का उपयोग नहीं करना चाहेंगे, क्योंकि UNION ALL
निरपेक्ष रूप से किसी भी वास्तविक जीवन प्रदर्शन को प्राप्त करने की संभावना नहीं है।
बहुत ही सरल शब्दों में UNION और UNION ALL में अंतर यह है कि UNION डुप्लिकेट रिकॉर्ड को छोड़ देगा जबकि UNION ALL में डुप्लिकेट रिकॉर्ड शामिल होंगे।
एक और बात मैं जोड़ना चाहूंगा-
संघ : - परिणाम सेट को आरोही क्रम में क्रमबद्ध किया जाता है।
Union All : - रिजल्ट सेट को हल नहीं किया जाता है। दो क्वेरी आउटपुट बस संलग्न हो जाता है।
UNION
करेगा । उपयोग किए बिना आप जो भी ऑर्डर देखते हैं, वह शुद्ध संयोग है। DBMS किसी भी रणनीति का उपयोग करने के लिए स्वतंत्र है जो डुप्लिकेट को निकालने के लिए कुशल है। यह छँटाई हो सकती है, लेकिन यह एक हैशिंग एल्गोरिथ्म या कुछ पूरी तरह से अलग भी हो सकती है - और पंक्तियों की संख्या के साथ रणनीति बदल जाएगी। ऐसा प्रतीत होता है कि 100 पंक्तियों के साथ सॉर्ट की गई पंक्ति 100.000 पंक्तियों के साथ नहीं हो सकती हैorder by
union
ORDER BY
खंड जोड़ें ।
एसईसीएल में यूनियन बनाम यूनियन ऑल के बीच अंतर
एसक्यूएल में संघ क्या है?
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
जरूरी! ओरेकल और मैसकल के बीच अंतर: मान लीजिए कि 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 के भीतर भी डुप्लीकेट पंक्तियाँ होंगी!
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 से अधिक पंक्तियाँ देता है
पूर्वता के परिप्रेक्ष्य में दोनों की एक ही पूर्वता है।
अगर वहाँ कोई नहीं है ORDER BY
, तो UNION ALL
पंक्तियों को वापस ला सकता है क्योंकि यह UNION
पूरी तरह से एक बार सेट करने से पहले आपको क्वेरी के बहुत अंत तक इंतजार करेगा। इससे समय-आउट की स्थिति में अंतर आ सकता है - aUNION ALL
कनेक्शन को जीवित रखता है, जैसा कि यह था।
इसलिए यदि आपके पास टाइम-आउट समस्या है, और कोई छँटाई नहीं है, और डुप्लिकेट एक मुद्दा नहीं है, UNION ALL
बल्कि सहायक हो सकता है।
एक आदत के रूप में, हमेशा UNION ALL का उपयोग करें । विशेष मामलों में केवल UNION का उपयोग करें जब आपको डुप्लिकेट को खत्म करने की आवश्यकता होती है जो बेहद गड़बड़ हो सकती है और आप यहां अन्य टिप्पणियों के बारे में सभी पढ़ सकते हैं।
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
नहीं होगा
केवल अंतर है:
"UNION" डुप्लिकेट पंक्तियों को हटा देता है।
"UNION ALL" डुप्लिकेट पंक्तियों को नहीं हटाता है।