PostgreSQL الاتحاد، الاتحاد الكل مع الأمثلة

⚡ ملخص ذكي

PostgreSQL تقوم عبارة UNION بدمج نتائج عبارتين أو أكثر من عبارات SELECT في مجموعة نتائج واحدة وتزيل الصفوف المكررة، بينما تحتفظ عبارة UNION ALL بكل صف، مما يوفر خيارًا أسرع عندما لا تكون التكرارات مهمة.

  • 🔗 الجمع بين: تقوم عملية UNION بدمج الصفوف من عبارات SELECT المتعددة في مجموعة نتائج واحدة.
  • 🧹 مكرر: تقوم عملية UNION بإزالة الصفوف المكررة، بينما تحتفظ عملية UNION ALL بكل صف مطابق.
  • 📐 قواعد: يجب أن تُرجع كل استعلام SELECT نفس عدد الأعمدة بأنواع بيانات متوافقة.
  • ↕️ ترتيب حسب: تقوم عبارة ORDER BY واحدة في النهاية بترتيب مجموعة النتائج المجمعة.
  • ⚡ الأداء: يعمل الأمر UNION ALL بشكل أسرع لأنه يتخطى خطوة إزالة التكرارات.
  • 🤖 مساعدة الذكاء الاصطناعي: تقوم المساعدات المدعومة بالذكاء الاصطناعي بمحاذاة الأعمدة والاختيار بين UNION و UNION ALL.

PostgreSQL الاتحاد والاتحاد ALL

ما هي تفاصيل PostgreSQL اتحاد؟

استخدم PostgreSQL يتم استخدام عامل UNION لدمج مجموعات النتائج من أكثر من عبارة SELECT في مجموعة نتائج واحدة. يتم التخلص من أي صفوف مكررة من نتائج عبارات SELECT. يعمل عامل UNION في ظل شرطين:

  • يجب أن تُرجع استعلامات SELECT نفس عدد الأعمدة.
  • يجب أن تكون أنواع البيانات لجميع الأعمدة المقابلة متوافقة.

يتم استخدام عامل UNION عادةً لدمج البيانات من الجداول ذات الصلة التي لم يتم تطبيعها بشكل مثالي.

بناء الجملة

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

فيما يلي شرح للمعلمات المذكورة أعلاه:

إن Expression_1، Expression_2، … Expression_n هي الحسابات أو الأعمدة التي تحتاج إلى استردادها.

الجداول هي الجداول التي تحتاج إلى استرداد السجلات منها.

شرط (شروط) WHERE هي الشروط التي يجب استيفاؤها حتى يتم استرداد السجلات.

ملاحظة: بما أن عامل UNION لا يُرجع التكرارات، فإن استخدام UNION DISTINCT لن يكون له أي تأثير على النتائج.

PostgreSQL الاتحاد

يقوم عامل UNION بإزالة العناصر المكررة، بنفس الطريقة التي حدد متميز نعم. دعونا نوضح ذلك. لدينا قاعدة بيانات باسم Demo تحتوي على الجداول التالية:

كتاب:

PostgreSQL الاتحاد

السعر:

PostgreSQL الاتحاد

دعونا ننفذ الأمر التالي:

SELECT id
FROM Book
UNION
SELECT id
FROM Price;

سوف يقوم الأمر بإرجاع ما يلي:

PostgreSQL الاتحاد

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

PostgreSQL الاتحاد الكل

يجمع هذا المشغل مجموعات النتائج من أكثر من عبارة SELECT واحدة دون إزالة التكرارات. يتطلب المشغل أن تحتوي كل عبارة SELECT على عدد مماثل من الحقول في مجموعات النتائج ذات أنواع البيانات المماثلة.

بناء الجملة:

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION ALL
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

فيما يلي شرح للمعلمات المذكورة أعلاه:

إن Expression_1، Expression_2، … Expression_n هي الحسابات أو الأعمدة التي تحتاج إلى استردادها.

الجداول هي الجداول التي تحتاج إلى استرداد السجلات منها.

شرط (شروط) WHERE هي الشروط التي يجب استيفاؤها حتى يتم استرداد السجلات.

ملاحظة: يجب أن تحتوي كلتا عبارتي SELECT على عدد متساوٍ من التعبيرات.

سنستخدم الجداول التالية:

كتاب:

PostgreSQL الاتحاد الكل

السعر:

PostgreSQL الاتحاد الكل

قم بتشغيل الأمر التالي:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

ينبغي أن يعود ما يلي:

PostgreSQL الاتحاد الكل

لم تتم إزالة التكرارات.

ترتيب حسب

استخدم PostgreSQL يمكن استخدام عامل UNION مع شرط ORDER BY لترتيب نتائج الاستعلام. ولإثبات ذلك، سنستخدم الجداول التالية:

السعر:

ترتيب حسب

السعر2:

ترتيب حسب

فيما يلي الأمر الذي يوضح كيفية استخدام عامل UNION مع شرط ORDER BY:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price;

سوف يقوم الأمر بإرجاع ما يلي:

ترتيب حسب

تم ترتيب السجلات حسب عمود السعر. يقوم البند بترتيب السجلات بترتيب تصاعدي بشكل افتراضي. لترتيبها تنازليا، أضف جملة DESC كما هو موضح أدناه:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

سوف يقوم الأمر بإرجاع ما يلي:

ترتيب حسب

تم ترتيب السجلات بناءً على عمود السعر بترتيب تنازلي.

متى نستخدم الأمر Union ومتى نستخدم الأمر Union All؟

استخدم عامل UNION عندما يكون لديك عدة جداول ذات بنية متشابهة ولكن تم تقسيمها لسبب ما. وهو مفيد عند الحاجة إلى إزالة السجلات المكررة.

استخدم عامل UNION ALL عندما لا تحتاج إلى إزالة أو حذف السجلات المكررة.

باستخدام pgAdmin

والآن دعونا نرى كيف يتم تنفيذ الإجراءات الثلاثة باستخدام pgAdmin.

كيف تعمل PostgreSQL الاتحاد باستخدام pgAdmin

فيما يلي شرح مفصل لكيفية استخدام PostgreSQL الاتحاد عبر pgAdmin:

الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك.

الخطوة 2) من شريط التنقل على اليسار، انقر فوق قواعد البيانات، ثم انقر فوق عرض توضيحي.

استعمل PostgreSQL الاتحاد باستخدام pgAdmin

الخطوة 3) اكتب الاستعلام في محرر الاستعلام:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

الخطوة 4) انقر فوق الزر "تنفيذ".

استعمل PostgreSQL الاتحاد باستخدام pgAdmin

ينبغي أن يعود ما يلي:

استعمل PostgreSQL الاتحاد باستخدام pgAdmin

الاتحاد الكل

الخطوة 1) قم بتسجيل الدخول إلى حساب pgAdmin الخاص بك.

الخطوة 2) من شريط التنقل على اليسار، انقر فوق قواعد البيانات، ثم انقر فوق عرض توضيحي.

استعمل PostgreSQL اتحاد الكل باستخدام pgAdmin

الخطوة 3) اكتب الاستعلام في محرر الاستعلام:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

الخطوة 4) انقر فوق الزر "تنفيذ".

استعمل PostgreSQL اتحاد الكل باستخدام pgAdmin

ينبغي أن يعود ما يلي:

استعمل PostgreSQL اتحاد الكل باستخدام pgAdmin

ترتيب حسب

يمكن دمج عامل UNION ALL مع شرط ORDER BY لترتيب النتائج في مجموعة النتائج. على سبيل المثال:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price
ORDER BY id;

سوف يقوم الأمر بإرجاع ما يلي:

استعمل PostgreSQL اطلب باستخدام pgAdmin

لقد تم طلب النتائج.

قم بتنزيل قاعدة البيانات المستخدمة في هذا البرنامج التعليمي

الأسئلة الشائعة

تُعدّ عبارة UNION ALL أسرع لأنها ببساطة تُدمج الصفوف. بينما تتطلب عبارة UNION فرز أو تجزئة الصفوف المدمجة لإزالة التكرارات، مما يزيد من الحمل على النظام. عندما لا تُشكّل التكرارات مشكلة، تُصبح عبارة UNION ALL الخيار الأمثل.

نعم. يجب أن تُرجع كل استعلام SELECT في استعلام UNION نفس عدد الأعمدة، ويجب أن تكون أنواع بيانات الأعمدة المتطابقة متوافقة بنفس الترتيب. وإلا PostgreSQL يُثير خطأً وتفشل الاستعلامات.

نعم. يمكن أن تختلف أسماء الأعمدة لأن عملية UNION تُطابق الأعمدة حسب موقعها، وليس حسب اسمها. يجب أن تظل أنواع البيانات متوافقة، وتستخدم مجموعة النتائج أسماء الأعمدة من عبارة SELECT الأولى.

تقوم عملية UNION بتجميع صفوف مجموعتي نتائج عموديًا في قائمة أعمدة واحدة، مع إزالة التكرارات. أما عملية JOIN فتجمع أعمدة من جداول مختلفة أفقيًا بناءً على مفتاح مشترك، لذا فهي توسّع الصفوف بدلًا من إلحاقها.

تقوم عبارة ORDER BY بترتيب النتيجة النهائية المجمعة، لذلك PostgreSQL يسمح بوضع عبارة ORDER BY واحدة فقط بعد عبارة SELECT الأخيرة. ترتيب الاستعلامات الفردية أولاً يصبح بلا جدوى بمجرد دمج صفوفها معًا.

تقوم مساعدات الذكاء الاصطناعي مثل GitHub Copilot بمحاذاة قوائم الأعمدة لكل استعلام SELECT، وتحديد أنواع البيانات غير المتطابقة، والتوصية باستخدام UNION أو UNION ALL بناءً على ما إذا كان ينبغي الاحتفاظ بالبيانات المكررة، مما يقلل من أخطاء الاستعلام الشائعة.

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

تُعيد دالة UNION الصفوف الموجودة في أيٍّ من الاستعلامين. بينما تُعيد دالة INTERSECT الصفوف الموجودة في كلا الاستعلامين فقط، أما دالة EXCEPT فتُعيد الصفوف الموجودة في الاستعلام الأول فقط دون الثاني. وتُزيل الدوال الثلاث الصفوف المكررة افتراضيًا.

تلخيص هذه التدوينة بـ: