بسم الله الرحمن الرحيم الدرس السابع نستأنف اليوم ما بدأنا به سابقا ونكمل كيفية التعامل مع جملة Select stament فكما قلت هي الاساس في استعراض البيانات واستغلال الفانكشن التي تم شرحها بالسابق تعطي قصر للوقت وعرض صحيح للبيان الصحيح سوف نستعرض اليوم ال Subqueries او ما يسمى بجمل ال selectالمتداخلة وهي تأتي بأشكال متعددة نذكر اشهرها وما يمكن التعامل معها اشكال ال Subqueries 1- WHERE CONDITION
select * from all_tables tabs where tabs.table_name in (select cols.table_name from all_tab_columns cols where cols.column_name = 'SUPPLIER_ID');
لاحظوا ان محور الحدث كله حول WHERE واستخدمنا ال IN لتوضح مفهوم هل هذا البيان موجود ضمن مجموعة من البيانات في جدول آخر وكأننا نقول اعرض لنا جميع البيانات من الجدول all_tables على ان يكون مثلا اسم الجدول موجود ضمن جملة select اخرى بحيث ترجع جميع اسماء الجداول واخص هنا واركز ان اسم الحقل قبل IN يجب ان يكون نوع البيانات قي جملة ال select بعد IN متوافقة بحيث لايجوان ان تقول
where cols.column_name in (select * from table_name)
ويوجد نوعين آخرين سوف يتم توضحهما فيما بعد ان شاء الله وهذا مثال توضحيح على ما سبق اعرض اسم الموظف ورقمه على ان يكون الموظفين في الادراة العامة
SELECT EMP_NAME,EMP_NO FROM EMPLOYEES WHERE DPT_NO IN (SELECT DPT_NO FROM DEPARTMENTS WHERE DPT_NAME='الادرارة العامة'
هنا سوف يعرض اسماء الموظفين الذين ينتمون الى الادارة رقم 10 مثلا على ان تكون هذه الادارة ضمن جملة ال SELECT الثانية وتكون اسمها الادارة العامة * UNION Query ويقصد بها دمج استعلامين لحقلين متشابهين او اكثر في جدولين مختلفين ويستفاد منها بعدم اظهار البيانات المتكررة على ان يكون عدد الحقول في الجدول الاول مساوي لعدد الحقول للجدول الثاني
select field1, field2, . field_n from tables UNION select field1, field2, . field_n from tables;
مثال
select supplier_id from suppliers UNION select supplier_id from orders;
استخدام With ORDER BY Clause مع union توضع في اخر ال unio وممن ان ترمز لاسم الحقل الاول برقم 1وهكذا
select supplier_id, supplier_name from suppliers where supplier_id > 2000 UNION select company_id, company_name from companies where company_id > 1000 ORDER BY 2;
رقم 2 هو رمز supplier_name وكذلك company_name ولايعني الرقم عدد الحقول ولكن تعني الترتيب فلو وحدنا الاسماء لكتبنا الاسماء بعد Order By CODE]select supplier_id, supplier_name as "name" from suppliers where supplier_id > 2000 UNION select company_id, company_name as "name" from companies where company_id > 1000 ORDER BY name;[/code] استخدام UNION ALL Query هي نفس مبدأ عمل ال union ولكن تعرض جميع البيانات في الجدولين مع التكرار
select field1, field2, . field_n from tables UNION ALL select field1, field2, . field_n from tables;
select supplier_id from suppliers UNION ALL select supplier_id from orders;
INTERSECT Query ومبدأ عمله يشبة ال union وهو دمج البيانات مع فارق انه يعرض البيانات الموجودة في الجدول الاول والتي غير موجودة في الجدول الثاني يعني يعرض الغير مكرر فقط select field1, field2, . field_n
from tables INTERSECT select field1, field2, . field_n from tables;
select supplier_id from suppliers INTERSECT select supplier_id from orders;
MINUS Query
هي عملية ارجاع البيانات في الاستعلام الاول والغير موجود في الاستعلام الثاني
select field1, field2, . field_n from tables MINUS select field1, field2, . field_n from tables;
select supplier_id from suppliers MINUS select supplier_id from orders;
ويجب ان تكون عدد الحقول متشابهه والنوع كذلك ومعنى المثال السابق اعرض البيانات في جملة الاستعلام الاولى والغير موجودة بالاستعلام التالي كأن تقول نريد ان نعرض اسماء الموردين الذين لم يتم الطلب على منتجاتهم الأسئلة 1-بين استخدام Union في جملة Select 2-بين استخدام ال count في union 3-ما الفرق بين INTERSECT Query و Minus Query انتهت الاسئلة
انتهى الدرس السابع