السلام عليكم ورحمة الله وبركاته كل عام وانتم
بخير احبابنا احباب مدونة اقرا معي وتعلم على الانترنت نتمنى ان تفييدكم هذه
المدونة بكل ما يعود عليكم بالمنفعة ...اخذنا في السابق استعمال الاستعلامات الفرعية ضمن
شرط where
اليوم نأخذ معاً دمج البيانات من استعلامين بإستخدام Union و Intersect
و Except
...
تستخدم Union و Intersect
و Except(Minus)
لدمج استعلامين .
وتختلف نتائج هذا الدمج بحسب التعبير المستخدم .
تستخدم التعابير السابقة وفق الصيغة
select
columnA,columnB from tableA
التعبير
Select
columnC,columnD from tableB;
وعملية الدمج تتطلب شروط وهي :
ان يكون عدد الحقول التي يعيدها كلاً من
الاستعلامين متساوياً .
ان يكون نمط البيانات في تلك الحقول متطابقاً بين
الاستعلامين .
بالنتيجة يستخدم الدمج في حالة الجداول التي
تحتوي بيانات مختلفة ولكن لها هيكلية متشابهة .
اولاُ التعبير UNION
يستخدم لدمج البيانات التي يعيدها استعلامين ..ويستخدم
وفق الصيغة
select
columnA,columnB from tableA
UNION
Select
columnC,columnD from tableB;
في
هذه الحالة سيتم
إدراج السجلات المعادة من الاستعلام الأول مع
السجلات المعادة من
الاستعلام الثاني، مع
إهمال السجلات المكررة.
في
حال أردنا دمج
جميع السجلات المعادة من الاستعلام الأول مع
جميع السجلات المعادة من الاستعلام الثاني بدون
إهمال نستخدم التعبير Union All
بدلا من Union
.
مثال:
ليكن لدينا جدول اسمة Employees
يحتوي على اسماء employeeName
ودرجات employeeGrade
اختبار اللغة الانجليزية للعاملين في شركة ، وليكن لدينا جدول اخر اسمة Managers
يحتوي على اسماء managerName
ودرجات managerGrade
مدراء الاقسام الفروع في الشركة نفسها .
لتصدير التقرير الشامل حول امتحان اللغة
الانجليزية والذي تظهر فيه اسماء الناجحين في فحص اللغة علماً ان درجة النجاح هي
50 للموظفين و60 للمدراء نكتب الاستعلام كالتالي:
Select employeeName,
employeeGrade from Employees
where employeeGrade
>50
Union
Select managerName,
managerGrade from Managers
where
managerGrade>60;
ثانياً التعبير Intersect
يستخدم لاستعادة السجلات التي تظهر في كل من
السجلات التي يعيدها الاستعلام الاول والسجلات التي يعيدها من الاستعلام الثاني
وياخذ الصيغة التالية
select
columnA,columnB from tableA
Intersect
Select
columnC,columnD from tableB;
مثال
لدينا جدولين الاول Theoretical
يحتوي على قائمة اسماء Name ودرجات Mark
المتقدمين لفحص قيادة السيارات – الجزء النظري ويحتوي الثاني والذي اسمة Practical
على اسماء Name
ودرجات Mark
المتقدمين لفحص قيادة السيارات – الجزء العملي .
لاظهار قائمة بأسماء الناجحين في الاختبارين معاً
لإعطائهم شهادة قيادة سيارة نكتب الاستعلام التالي:
Select
Theoretical.Name from Theoretical where Theoretical.Mark>50
Intersect
Select
Practical.Name from Practical where Practical.Mark>50;
ملاحظة :
تدعم قواعد البيانات DB2 و Oracle
فقط التعبير Intersect
.
ثالثاً التعبير Except
:
يستخدم التعبير Except
لإعادة السجلات التي تظهر في نتيجة الاستعلام الاول ولا تظهر في نتيجة الاستعلام
الثاني ويتستخدم الصيغة التالية:
select
columnA,columnB from tableA
Except
Select
columnC,columnD from tableB;
انتبه:
في Oracle يستخدم التعبير Minus بدلا
من Except
.
التعبير (Minus)
Except
مدعوم فقط في قواعد بيانات DB2 و ر Oracle
مثال :
يعتمد مركز تأجير افلام لحفظ معلوماته على جدولين
الاول اسمة Movies
يحتوي على قائمة بأسماء الافلام movieName ونوعها movueType
ورقمها movieNumber
ويحتوي الجدول الثاني الذي اسمة rentMovies على قائمة بأسماء الافلام المؤجرة حاليا ً
مع رقمها ....
لكي تظهر قائمة بجميع الافلام من النوع Action’
غير المؤجرة نستخدم الاستعلام التالي :
Select
movies.movieName, Movies.movieNumber from Movies
where
movieType=’Action’
Minus
Select
rentMovies.movieName, rentMovies.movieNumber from rentMovies;
اكتفي بهذا القدر ونلتقي في التدوين القادم نأمل
من الله ان نكون وفقنا في الطرح ... لا تنسى ان تشترك في مدونتنا وقناتنا وكذلك
صفحتنا على الفيس بوك
ومشاركة هذا مع اصدقائك
دمت بخير
إرسال تعليق
لا تبخل علينا باقتراحك او قم بمشاركة الموضوع ليستفيد الاخرين ايضاً شكرا لزيارتك عزيزي الزائر