سؤال

ما هو الفرق بين UNION و UNION ALL?

هل كانت مفيدة؟

المحلول

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)

نصائح أخرى

كل من الاتحاد والاتحاد كل لسلسلة نتيجة مختلفة SQLs.أنها تختلف في طريقة التعامل مع التكرارات.

  • الاتحاد يؤدي متميزة في مجموعة النتائج ، والقضاء على أي الصفوف المكررة.

  • الاتحاد لا إزالة التكرارات ، ولذلك أسرع من الاتحاد.

ملاحظة: أثناء استخدام هذه الأوامر كل الأعمدة المحددة تحتاج إلى أن تكون من نفس نوع البيانات.

على سبيل المثال:إذا كان لدينا اثنين من الجداول 1) موظف و 2) العملاء

  1. الموظف بيانات الجدول:

enter image description here

  1. العملاء بيانات الجدول:

enter image description here

  1. الاتحاد المثال (يزيل جميع سجلات مكررة):

enter image description here

  1. الاتحاد جميع المثال (فقط لسلسلة السجلات ، وليس القضاء على التكرارات ، لذلك هو أسرع من الاتحاد):

enter image description here

UNION إزالة التكرارات ، بينما UNION ALL لا.

من أجل إزالة التكرارات مجموعة النتائج يجب أن يتم فرز هذه قد يكون لها تأثير على أداء الاتحاد ، اعتمادا على حجم البيانات التي يتم فرزها ، و إعدادات مختلفة RDBMS المعلمات ( Oracle PGA_AGGREGATE_TARGET مع WORKAREA_SIZE_POLICY=AUTO أو SORT_AREA_SIZE و SOR_AREA_RETAINED_SIZE إذا WORKAREA_SIZE_POLICY=MANUAL ).

أساسا ، وهذا النوع أسرع إذا كان يمكن القيام بها في الذاكرة, ولكن نفس التحذير عن حجم البيانات ينطبق.

بالطبع, إذا كنت بحاجة إلى البيانات التي تم إرجاعها دون التكرارات ثم يجب أن استخدام الاتحاد ، اعتمادا على مصدر البيانات.

كنت قد علقت على أول وظيفة في التأهل "هو أقل بكثير performant" التعليق ولكن غير كاف سمعة (نقطة) للقيام بذلك.

في أوراكل:الاتحاد لا يدعم النقطة (أو CLOB) عمود أنواع الاتحاد كل ما يفعل.

الفرق الأساسي بين الاتحاد والاتحاد هو عملية الاتحاد يلغي تكرار الصفوف من مجموعة النتائج ولكن الاتحاد جميع إرجاع كافة الصفوف بعد انضمامه.

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

يمكنك تجنب مكررة و لا تزال تعمل بشكل أسرع بكثير من الاتحاد متميزة (الذي هو في الواقع نفس الاتحاد) قبل تشغيل الاستعلام مثل هذا:

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

لاحظ AND a!=X جزء.هذا هو أسرع بكثير ثم الاتحاد.

فقط لإضافة بلدي اثنين سنتا إلى المناقشة هنا:يمكن للمرء أن يفهم UNION مشغل محض ، مجموعة المنحى الاتحاد - على سبيل المثال ، المجموعة A={2,4,6,8}, مجموعة B={1,2,3,4}, الاتحاد ب = {1,2,3,4,6,8}

عند التعامل مع مجموعات, كنت لا تريد أرقام 2 و 4 الظهور مرتين ، كعنصر إما هو أو لا في مجموعة.

في عالم SQL, على الرغم من أنك قد ترغب في رؤية كافة عناصر من مجموعتين معا في "كيس" {2,4,6,8,1,2,3,4}.و لهذا الغرض T-SQL يقدم المشغل UNION ALL.

الاتحاد
على UNION الأوامر المستخدمة في تحديد المعلومات ذات الصلة من جدولين ، مثل الكثير من JOIN الأوامر.ومع ذلك ، عند استخدام UNION قيادة جميع الأعمدة المحددة تحتاج إلى أن تكون من نفس نوع البيانات.مع UNION, فقط متميزة القيم المختارة.

الاتحاد جميع
على UNION ALL الأمر يساوي UNION الأمر, إلا أن UNION ALL يختار كل القيم.

الفرق بين Union و Union all هو أن Union all لن تقضي على الصفوف المكررة, بدلا من ذلك فقط تسحب جميع الصفوف من جميع الجداول المناسب الاستعلام الخاص بك تفاصيل ويجمع بينهما في الجدول.

A UNION بيان فعال لا SELECT DISTINCT في مجموعة النتائج.إذا كنت تعرف أن كافة السجلات التي تم إرجاعها هي فريدة من نوعها من الاتحاد الخاص بك, استخدام UNION ALL بدلا من ذلك, أنه يعطي نتائج أسرع.

لست متأكدا من أن ذلك مسائل قاعدة البيانات

UNION و UNION ALL يجب أن تعمل على جميع ملقمات SQL.

يجب تجنب لا لزوم لها UNIONs فهي ضخمة الأداء تسرب.وكقاعدة عامة من الإبهام استخدام 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'

enter image description here

وفيما يلي نتائج الاتحاد جميع عمليات الاتحاد.

enter image description here

الاتحاد بيان فعالية مختارة متميزة في مجموعة النتائج.إذا كنت تعرف أن كافة السجلات التي تم إرجاعها هي فريدة من نوعها من الاتحاد ، استخدم الاتحاد جميع بدلا من ذلك ، فإنه يعطي نتائج أسرع.

استخدام النتائج في الاتحاد نوع متميز عمليات في تنفيذ الخطة.دليل على أن يثبت هذا البيان هو مبين أدناه:

enter image description here

(من Microsoft SQL Server الكتاب على الانترنت)

الاتحاد [جميع]

ينص على أن عدة مجموعات نتيجة هي أن تكون جنبا إلى جنب وعاد واحد مجموعة النتائج.

كل

يشتمل على جميع الصفوف في النتائج.وهذا يشمل التكرارات.إذا لم يتم تحديد الصفوف المكررة وإزالتها.

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) تطبق على النتائج.يمكنك أن ترى هذه الآثار الجانبية عندما لا يكون لديك أي صف مكرر.

فمن الجيد أن نفهم مع فين diagramm.

هنا الرابط إلى المصدر.هناك وصفا جيدا.

enter image description here

أود أن أضيف على سبيل المثال ،

الاتحاد, هو دمج مع متميزة --> أبطأ ، لأنه بحاجة مقارنة (في SQL Oracle developer, اختر الاستعلام اضغط 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 سيكون من المستحسن لأسباب تتعلق بالأداء.

لنفترض أن لديك اثنين من الجدول المعلم & طالب

كلاهما 4 عمود مع اسم مختلف مثل هذا

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

enter image description here

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

enter image description here

يمكنك تطبيق الاتحاد أو الاتحاد جميع لهذين الجدول التي لها نفس عدد الأعمدة.ولكن لديهم مختلفة اسم أو نوع البيانات.

عند تطبيق UNION العمليات على الجداول 2 فإنه يهمل جميع إدخالات مكررة(جميع الأعمدة قيمة صف في الجدول هو نفسه من جدول آخر).مثل هذا

SELECT * FROM Student
UNION
SELECT * FROM Teacher

ستكون النتيجة

enter image description here

عند تطبيق UNION ALL العمليات على الجداول 2, تقوم بإرجاع كافة إدخالات مكررة(إذا كان هناك أي اختلاف بين أي قيمة عمود من الصف في الجداول 2).مثل هذا

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

الإخراج enter image description here

الأداء:

من الواضح الاتحاد جميع الأداء الأفضل أن الاتحاد كما يفعلون إضافية مهمة إزالة القيم المكررة.يمكنك التحقق من ذلك من إعدام الوقت المقدر من قبل الصحافة ctrl+L في MSSQL

أكثر شيء واحد أود أن أضيف-

الاتحاد:- مجموعة النتائج يتم فرز في ترتيب تصاعدي.

الاتحاد جميع:- مجموعة النتائج لم يتم فرزها.اثنين إخراج الاستعلام فقط يحصل المرفقة.

في كلمات بسيطة جدا الفرق بين الاتحاد والاتحاد هو أن الاتحاد سيتم حذف سجلات مكررة في حين أن الاتحاد سوف تشمل جميع السجلات المكررة.

الفرق بين الاتحاد Vs الاتحاد كل في Sql

ما هو الاتحاد في SQL ؟

الاتحاد المشغل يستخدم الجمع بين النتيجة مجموعة من اثنين أو أكثر من مجموعة البيانات .

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

الاتحاد Vs الاتحاد مع كل مثال

هام!الفرق بين Oracle و Mysql:دعنا نقول أن t1 t2 لا يجب الصفوف المكررة بينهما ولكن لديهم تكرار الصفوف الفردية.على سبيل المثال:t1 وقد المبيعات من عام 2017 و t2 من 2018

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

في أوراكل الاتحاد جميع جلب كافة الصفوف من كلا الجدولين.وسوف يحدث نفس الشيء في الخلية.

ومع ذلك:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

في أوراكل, الاتحاد جلب كافة الصفوف من كلا الجدولين لأنه لا توجد قيم مكررة بين t1 و t2.من ناحية أخرى في الخلية resultset سوف يكون أقل الصفوف لأنه سيكون هناك تكرار الصفوف في الجدول t1 و أيضا ضمن جدول t2!

الاتحاد يزيل سجلات مكررة في المقابل الاتحاد لا.ولكن واحدة تحتاج إلى تحقق الجزء الأكبر من البيانات التي سوف يتم معالجتها العمود نوع البيانات يجب أن يكون نفسه.

منذ الاتحاد داخليا يستخدم "متميزة" السلوك لتحديد الصفوف وبالتالي هو أكثر تكلفة من حيث الوقت والأداء.مثل

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 لن تجعلك الانتظار حتى نهاية الاستعلام قبل مما يتيح لك كل النتائج في كل مرة.هذا يمكن أن تحدث فرقا في وقت الوضع - UNION ALL تحافظ على اتصال على قيد الحياة ، كما كان.

حتى إذا كان لديك الوقت ، لا يوجد الفرز ، والتكرارات ليست قضية ، UNION ALL قد تكون مفيدة.

الاتحاد الاتحاد تستخدم الجمع بين اثنين أو أكثر من نتائج الاستعلام.

الاتحاد الأوامر يختار متميزة والمعلومات ذات الصلة من اثنين من الجداول التي سوف يلغي الصفوف المكررة.

من ناحية أخرى, الاتحاد جميع الأوامر يختار كل القيم من الجداول ، الذي يعرض جميع الصفوف.

الفرق الوحيد هو :

"الاتحاد" يزيل الصفوف المكررة.

"الاتحاد كل" لا إزالة الصفوف المكررة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top