اختيار ودمج الأعمدة من جدولين في SQL
عند العمل مع قواعد البيانات، من الشائع مواجهة حالات تحتاج فيها إلى استرجاع بيانات من جداول متعددة. تنشأ إحدى هذه السيناريوهات عندما يكون لديك جدولان يحتويان على عمود مشترك. في هذا المنشور، نستكشف كيفية اختيار عمود محدد، ColumnA
، من جدولين مختلفين—Table1
وTable2
—وإرجاعه كجدول نتائج واحد.
المشكلة
افترض أن لديك جدولين في قاعدة بياناتك:
-
Table1 يحتوي على عمود باسم
ColumnA
مع القيم:- a
- b
- c
-
Table2 يحتوي أيضًا على عمود باسم
ColumnA
مع القيم:- d
- e
- f
هدفك هو استخراج جميع مثيلات ColumnA
من كلا الجدولين في عمود واحد في مجموعة النتائج. هذا يعني أنك تريد أن تظهر البيانات كالتالي:
a
b
c
d
e
f
الحل
لتحقيق ذلك، يمكننا استخدام استعلام SQL مع عامل UNION
. يسمح لنا عامل UNION
بدمج نتائج اثنين أو أكثر من جمل SELECT
في مجموعة نتائج واحدة.
مثال لاستعلام SQL
إليك استعلام SQL الذي يحقق هذه المهمة:
SELECT ColumnA FROM Table1
UNION
SELECT ColumnA FROM Table2
ORDER BY 1;
تحليل الاستعلام
-
اختيار الأعمدة:
- نبدأ بـ
SELECT ColumnA FROM Table1
لاستخراج جميع الإدخالات منColumnA
فيTable1
. - الجزء التالي،
SELECT ColumnA FROM Table2
، يقوم بنفس الشيء بالنسبة لـTable2
.
- نبدأ بـ
-
دمج النتائج:
- يقوم عامل
UNION
بدمج مجموعات النتائج من كلا جملتيSELECT
. - لاحظ أنه حسب الافتراضي، يقوم
UNION
بإزالة القيم المكررة، لذا إذا كان هناك أي تداخل في قيمColumnA
بين الجدولين، فإنها ستظهر مرة واحدة فقط في الإخراج النهائي.
- يقوم عامل
-
ترتيب النتائج:
- عبارة
ORDER BY 1
ترتب الإخراج النهائي حسب العمود الأول، والذي، في هذه الحالة، هوColumnA
.
- عبارة
متى تستخدم UNION ALL
إذا كنت متأكدًا من أن القيم في ColumnA
من Table1
وTable2
لن تتداخل أبدًا، فكر في استخدام UNION ALL
بدلاً من UNION
. هذه الخيار يتجنب عبء التحقق من التكرارات ويمكن أن يحسن الأداء:
SELECT ColumnA FROM Table1
UNION ALL
SELECT ColumnA FROM Table2
ORDER BY 1;
ملخص
باختصار، يمكن التعامل بكفاءة مع دمج البيانات من جداول متعددة في SQL باستخدام عامل UNION
. هذه الممارسة لا تسهل فقط استرجاع البيانات ولكن تجعل أيضًا استعلامات قاعدة البيانات لديك أكثر قوة ومرونة.
الآن يمكنك بسهولة استخراج ودمج الأعمدة من جداول مختلفة، مما يعزز قدرتك على إدارة وتحليل بياناتك بشكل فعال!