الانتقال إلى المحتوى

مثبت دورة تشمل اهم موضوعات Sql في 19 درس


programmer_85

Recommended Posts

  • الردود 114
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

  • programmer_85

    41

  • wael topar

    24

  • abduallah alshaibani

    5

  • miash80

    4

select empno,ename,job,sal,mgr,emp.deptno,dname,grade ,comm
from emp,SALGRADE,dept
where emp.deptno=dept.deptno
and sal between SALGRADE.LOSAL and SALGRADE.HISAL
and emp.empno in(select mgr
	 from emp)
and emp.deptno in(10,30)
and comm is not null
and mgr is not null
and ename like'%A%';



no rows selected

تم تعديل بواسطة miash80
رابط هذا التعليق
شارك

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

[b]select empno,ename,job,sal,mgr,emp.deptno,dname,grade ,comm
from emp,SALGRADE,dept
where emp.deptno=dept.deptno
and sal between SALGRADE.LOSAL and SALGRADE.HISAL
and MGR IS NOT NULL
and dname in('ACCOUNTING','SALES')
and comm is not null
and ename like'%A%';[/b]



المشكلة هي في mgr فقط ..

MGR IS NOT NULL



حيث اننا لو نظرنا الى mgr لراينا ان كل موظف لديه mgr ماعدا king وهذا يفيد ان كل موظف له مدير او مشرف ام king فليس لديه mgr يفيد بانه هو رئيس مثلا الشركه ولاحد اعلى منه
اذا مادام انه لكل موظف mgr سوف اعمل فقط شرط يبين لي فقط بان لايكون mgr هو null..

بالنسبة للشي الثاني وان كان برمجيا صحيح لكن منطقيا خطأ وهو:

'( dname in('ACCOUNTING','SALES



انا قلت انهم يعملون في قسم المبيعات والحسابات .. تخيل انك لاتعرف كم رقم الحسابات او المبيعات
مثلا 30 هو للحسابات ام المبيعات او تخيل ان لديك الكثيرمن الدوائر اكثر من 100 دائرة مثلا سحيصل لك ارتباك وتشوش وخبط في المعلومات
..وان كان الكود صحيح .. فلابد ننتبه الى المطلوب ماهو بالضبط.

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

تم تعديل بواسطة programmer_85
رابط هذا التعليق
شارك

اخي الفاضل ارجو منك عدم العب في طريقة السؤال

نحن نعرف الحل الصحيح

ولكن عدم قلت ((والذي لديهم عموله وكذا لديهم مدير يشرف عليهم اي الذين
يعملون تحت اشراف مدير (انتبه لهذا النقطة )


لعبت في صياغة السؤال وفهمنا خطا

رابط هذا التعليق
شارك

الدرس الثالث



اخذنا البارحة درس none_equi_join وعرفنا كيف يتم عمله ومن قبله كان درس equi_join وبهذا اكملنا النوع الاول وهو inner_join من انواع non_equi.
ناتي اليوم الى النوع الثاني وهو self_join ويعتبر من انواع non_equi


ماهو self_join؟؟

عرفنا سابقا بان كلا انواع inner_join يتم عملهما فقط على اكثر من جدولين .
اما في هذا الجوين فيتم عمله على نفس الجدول .. اي نستطيع نعمل جوين على نفس الجدول ذاته ... وهذا هو من اسمه self.
لتنفيذ هذا الجوين يجب ان نستخدم table_alias على نفس الجدول لكن باسماء استعارة او alias اخرى .

مثلا اذا استخدمنا الجدول emp .. يمكن ان نتسخدمه مرتين في الكيوري لكن يجب ان نحدد لكل منهما اسم alias مختلف عن الاخر .emp m,emp e

ايضا ينبغي ان تكون البيانات المستعادة وشرط الجوين مرتبط على جدول وحيد .. يعني الشرط يكون على عمودين موجودين في نفس الجدول ..


لناخذ هذا المثال ونرى كيفية عمل هذا الجوين ...

سنعرض empno,ename,mgr,لكل الموظفين

select e.empno,m.ename,m.mgr from emp e,emp m
where e.empno=m.mgr;



لنحلل الكود سويا ....

select e.empno,m.ename,m.mgr from emp e,emp m



نلاحظ ان الجدول هو emp وجلبنا منه تلك الاعمدة وهي empno,ename,mgr
لكن الشي المهم هنا اننا اعطينا قبل كل عمود اسمه الجدول الذي عملنا له alias
اذا كتبا الاعمدة من دون ان نحدد لاي alias جدول ينتمي سوف يعطيينا خطأ لان جملة الكيوري حصل له ارتباك وتشوش في المعلومات فهي لاتعرف لاي جدول هذا العمود ينتمي
وكما اشارنا سابقا بان alias تعمل فقط في مرحلة البفر buffer اي سوف يكون هناك جدولين في هذه المرحلة وهما emp e ,emp m
اذا ... نخرج من هذه النقطة بان table_alias اجبارية في هذا الجوين والا سوف يكون الجوين خطأ.

في الاصل ان الجوين ككل يعمل على جدولين ... اذا لماذا self_join يعمل على جدول واحد فقط؟؟؟

للرد على هذا السؤال .. ان كل الجوين joins تعمل على اكثر من جدول حيت تاتي بها من قواعد اليبانات database ..
اما عن self_join فهو اي يعمل على جدولين ..؟؟ كيف يعمل على جدولين لكن ليست ياتي بها من قواعد البيانات كما هو في بقية الجوين
انما ياتي بها في مرحلة البفر buffer كما اشارنا سابقا وينشى فيها جدولين مثل EMP M,EMP E


ناتي الى تحليل الشرط ..

where e.empno=m.mgr;



في هذا الشرط يكون بينهما علاقة على نفس الجدول وهي المفتاح الاساسي والمفتاح الاجنبي او الفرعي
حيث يمثل EMPNO هو المفتاح الاساسي اما MGR يمثل المفتاح الاجنبي .
هنا يجب ان نعرف ان عندما يتساوى EMPNOمع MGR سوف يرجع لنا نتيجة في المخرجات
وهذا يعني ان هذا الموظف له مدير او مشرف ...

اذا لماذا عملنا في E.EMPNO وفي M,MGR ؟؟

كما اشارنا سابقا بانهما جدولان في مرحلة البفر Buffer يعني يجب ان نعين لكل واحد table_alias حتى تتم المقارنة ..

قد يقول قائل ماذا لو عملنا لهما نفس alias اي e.empno و e.mgr ؟؟

في هذه الحالة لن يرجع لك اي صف لان المقارنة تمت على جدول واحد في مرحلة البفر وليس جدولين

اذا يجب ان نتبه لهذا النقطة ...

سوف تكون المخرجات بهذا الشكل ..




EMPNO ENAME MGR
------ ---------- ----------
7902 SMITH 7902
7698 ALLEN 7698
7698 WARD 7698
7839 JONES 7839
7698 MARTIN 7698
7839 BLAKE 7839
7839 CLARK 7839
7566 SCOTT 7566
7698 TURNER 7698
7788 ADAMS 7788
7698 JAMES 7698
7566 FORD 7566
7782 MILLER 7782


ارجو ان تكون الفكرة قد وصلت ..

في الاصل ان درس self join يعتبر درس مبسط وسهل ومفهوم ولااشكال في ذلك ..
لذا نكتفي بمثال واحد .. لكن في حالة اذا رغبتوا في اكثر من مثال فانا مستعد

تمرين ....

قم بعرض اسماء الموظفين وتاريخ تعينهم حيث ان الموظفين لديهم مدير ويعتبر هذا المدير هو الاقدم في التعيين اي في التاريخ ..

مثلا اعرض الموظفين الذي يعملون تحت BLAKE ويكون تاريخ تعينهم بعد تاريخ تعينه .. اي هو عين قبلهم ...(مستخدما Self join) ارجو ان يكون السؤال واضح ..

اراكم ان شاء الله في الدرس القادم
رابط هذا التعليق
شارك

الله عليك ياستاذ وائل
ماشاء الله عليك .. ربنا يبارك فيك ..

حلك صحيح لكن نحن لم تستخدم بعد الصب كيوري subquery
فبدل مانتسخدم الصب كيوري نستخدم التاريخ المباشر بدلا عنه

رايح يكون الحل هكذا ..

select p.ename||' '||'work under'||e.ename as name
,p.hiredate
from emp e,emp p
where p.mgr=e.empno
and
p.hiredate>e.hiredate;



نفذ هذا الكود وراح تشوف انه نفس المخرجات حق الكيوري حقك

ع العموم حلك صحيح 100 %

تم تعديل بواسطة programmer_85
رابط هذا التعليق
شارك

الدرس الرابع



اكلمنا في الدروس السابقة نوعان من انواع الجوين ..

واليوم ان شاء الله سوف ناخذ النواع الثالث منها وهو
Cartesian join


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

وهذا طبيعا.. يحدث عندما لايوجد اي ارتباط في الشرط .... اي لايتربط عمود بعمود اخر (اي لايوجد شرط في الجوين)

ويسمى ايضا بــــ product join وذلك لان كل السجلات من الجدول الاول سوف ترتبط بكل السجلات من الجدول الثاني

فمثلا .. اذا كان لدينا جدول يحتوي على 100 ولدينا جدول اخر يحتوي على 1000 صف .

فسوف تصبح المخرجات والنتيجة هي 100000 صف .. وهذا مايمسى Cartesian join

لدينا جدول الموظفين emp حيث يحتوي على 14 صف ولدينا جدول dept حيث يحتوي على 4 صفوف.

عندما نضرب هذه الصفوف يصبح النانج 56 صف من هذان الجدولين ..

نرى ذلك سويا ...

SELECT * FROM emp, dept;



سوف تكون المخرجات بهذا الشكل ..




EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO DNAME LOC
----- ---------- --------- ----- --------- ----- ----- ------ ------ -------------- -----------
7369 SMITH CLERK 7902 17-DEC-80 800 20 10 ACCOUNTING NEW YORK
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 10 ACCOUNTING NEW YORK
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 10 ACCOUNTING NEW YORK
7566 JONES MANAGER 7839 02-APR-81 2975 20 10 ACCOUNTING NEW YORK
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 10 ACCOUNTING NEW YORK
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 10 ACCOUNTING NEW YORK
7782 CLARK MANAGER 7839 09-JUN-81 2450 10 10 ACCOUNTING NEW YORK
7788 SCOTT ANALYST 7566 19-APR-87 3000 20 10 ACCOUNTING NEW YORK
7839 KING PRESIDENT 17-NOV-81 5000 10 10 ACCOUNTING NEW YORK
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 10 ACCOUNTING NEW YORK
7876 ADAMS CLERK 7788 23-MAY-87 1100 20 10 ACCOUNTING NEW YORK
7900 JAMES CLERK 7698 03-DEC-81 950 30 10 ACCOUNTING NEW YORK
7902 FORD ANALYST 7566 03-DEC-81 3000 20 10 ACCOUNTING NEW YORK
7934 MILLER CLERK 7782 23-JAN-82 1300 10 10 ACCOUNTING NEW YORK
7369 SMITH CLERK 7902 17-DEC-80 800 20 20 RESEARCH DALLAS
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 20 RESEARCH DALLAS
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 20 RESEARCH DALLAS
7566 JONES MANAGER 7839 02-APR-81 2975 20 20 RESEARCH DALLAS
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 20 RESEARCH DALLAS
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 20 RESEARCH DALLAS
7782 CLARK MANAGER 7839 09-JUN-81 2450 10 20 RESEARCH DALLAS
7788 SCOTT ANALYST 7566 19-APR-87 3000 20 20 RESEARCH DALLAS
7839 KING PRESIDENT 17-NOV-81 5000 10 20 RESEARCH DALLAS
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 20 RESEARCH DALLAS
7876 ADAMS CLERK 7788 23-MAY-87 1100 20 20 RESEARCH DALLAS
7900 JAMES CLERK 7698 03-DEC-81 950 30 20 RESEARCH DALLAS
7902 FORD ANALYST 7566 03-DEC-81 3000 20 20 RESEARCH DALLAS
7934 MILLER CLERK 7782 23-JAN-82 1300 10 20 RESEARCH DALLAS
7369 SMITH CLERK 7902 17-DEC-80 800 20 30 SALES CHICAGO
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 30 SALES CHICAGO
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 30 SALES CHICAGO
7566 JONES MANAGER 7839 02-APR-81 2975 20 30 SALES CHICAGO
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 30 SALES CHICAGO
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 30 SALES CHICAGO
7782 CLARK MANAGER 7839 09-JUN-81 2450 10 30 SALES CHICAGO
7788 SCOTT ANALYST 7566 19-APR-87 3000 20 30 SALES CHICAGO
7839 KING PRESIDENT 17-NOV-81 5000 10 30 SALES CHICAGO
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 30 SALES CHICAGO
7876 ADAMS CLERK 7788 23-MAY-87 1100 20 30 SALES CHICAGO
7900 JAMES CLERK 7698 03-DEC-81 950 30 30 SALES CHICAGO
7902 FORD ANALYST 7566 03-DEC-81 3000 20 30 SALES CHICAGO
7934 MILLER CLERK 7782 23-JAN-82 1300 10 30 SALES CHICAGO
7369 SMITH CLERK 7902 17-DEC-80 800 20 40 OPERATIONS BOSTON
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 40 OPERATIONS BOSTON
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 40 OPERATIONS BOSTON
7566 JONES MANAGER 7839 02-APR-81 2975 20 40 OPERATIONS BOSTON
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 40 OPERATIONS BOSTON
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 40 OPERATIONS BOSTON
7782 CLARK MANAGER 7839 09-JUN-81 2450 10 40 OPERATIONS BOSTON
7788 SCOTT ANALYST 7566 19-APR-87 3000 20 40 OPERATIONS BOSTON
7839 KING PRESIDENT 17-NOV-81 5000 10 40 OPERATIONS BOSTON
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 40 OPERATIONS BOSTON
7876 ADAMS CLERK 7788 23-MAY-87 1100 20 40 OPERATIONS BOSTON
7900 JAMES CLERK 7698 03-DEC-81 950 30 40 OPERATIONS BOSTON
7902 FORD ANALYST 7566 03-DEC-81 3000 20 40 OPERATIONS BOSTON
7934 MILLER CLERK 7782 23-JAN-82 1300 10 40 OPERATIONS BOSTON

56 rows selected.


وهكذا الحال عندما يكون لدينا ثلاثة جدول emp ,dept,salgrade حيث ان جدول salgrade يحتوي على 5 صفوف

فسوف يصبح عدد الصفوف هي 14*4*5=280 صف.

نفذ هذا الكيوري لترى ذلك ..


select ename,job,e.deptno,dname,grade from emp e,dept,salgrade;



يمكن ان نتسخدم الــــــــwhere clause لفلترة بعض الشروط واخراج مانريد من مخرجات

مثلا ... نفس الكيوري السابق فقط نضيف جملة where حيث يكون sal اكبر من 3000

select ename,job,e.deptno,dname,grade from
emp e,dept,salgrade where sal >3000;



في الاصل هذا النوع ليس بذاك الاهمية ولكن ذكرناه هنا من باب زدياة المعلومات وكذا معرفة ماهي انواع الجوين .

حتى لو رجعنا الى مصادر اوراكل تراها انها تتاهل هذا النوع ولايذكر الا نادرا ...

اليوم لن ناخذ تمرين لانه ليس بذالك الاهمية ..

اراكم في الدرس القادم وهو من اهم انواع الجوين .. وسوف نرى ماهو ان شاء الله

رابط هذا التعليق
شارك

`حَدَّثنَا أحمد بْن عِيْسَى المصؤي. حَدَّثنَا عَبْد اللّه بْن وهب، عَن يَحْيَى بْن أيوب، عَن سهَلْ بْن معاذ بْن أنس، عَن أبِيه؛
- أَن الْنَّبِيّ صَلى اللّه عَلَيْهِ وَسَلَّمْ قَالَ: ((من علم علما، فله أجر من عمل بِهِ. لا ينقص من أجر العامل))

حَدَّثنَا أحمد بْن عِيْسَى المصؤي. حَدَّثنَا عَبْد اللّه بْن وهب، عَن يَحْيَى بْن أيوب، عَن سهَلْ بْن معاذ بْن أنس، عَن أبِيه؛
- أَن الْنَّبِيّ صَلى اللّه عَلَيْهِ وَسَلَّمْ قَالَ: ((من علم علما، فله أجر من عمل بِهِ. لا ينقص من أجر العامل)).

قَالَ رَسُول اللّه صَلى اللّه عَلَيْهِ وَسَلَّمْ: ((أَن مما يلحق المؤمن من عمله وحسناته بَعْد موته، علما علمه ونشره، وولدا صالحا تركه. ومصحفا ورثه، أو مسجدا بْناه أو بيتا لابْن السبيل بْناه، أو نهرا أجراه أو صدقة أخرجها من ماله فِي صحته وحياته. يلحقه من بَعْد موته)).

رابط هذا التعليق
شارك

الدرس الخامس


اكملنا في الدرس السابق النوع الرابع من انواع الجوين join وهو Cartesian join
وكما اشارنا سابقا عليه بان هذا النوع ليس بذالك الاهمية وانما من باب زيادة المعلومات وكذاا معرفة هذه الانواع ...

اليوم ان شاء الله سوف ناخذ في هذا الدرس هو اهم انواع الجوين والذي يعتبر بمثابة اللب لهذا الجوين ..

انه النوع الخامس من انواع الجوين وهو outer_join


ماهو اذا الـــــ outer join ؟؟؟؟

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

في الجوين يظهر الصفوف التي ترتبط ببعضها البعض وكذا ايضا بالصفوف التي لاترتبط ببعضها البعض ..

وهذا ينتج عن المعامل operator (+) التي تدعمه اوراكل لعمل تلك المهمة ...

في الحقيقة ان outer join يحتوي على نوعان هما :::


النوع الاول هو : left outer join

النوع الثاني هو right outer join


ماهو left outer join؟؟؟؟

ان المعامل (+) يكون على جهة اليمين من شرط الجوين (( سنرى ذلك في الامثلة))

والتي يقوم باسترجاع الصفوف المرتبطة والغير مرتبطة من الجدول على جهة اليسار من شرط الجوين

وسوف تعوض القيم الخالية التي لاتوجد لها ارتباط لكل الاعمدة التي على جهة اليمين من شرط الجوين


لنرى ذلك عبر الامثله حتى يتضح لنا هذا النوع left outer .....


لنرى اولا ماهي الصيغة العامة لهذا النوع ..

select ..... from table 1,table2b

;(+)where table1.column1=table2.column2

على سبيل المثال ::

لدينا ename,job,deptno,sal,dname,loc,من جدول الموظفين emp وجدول الاقسام dept..

سوف نعرض في هذا الجدولان كل الصفوف المرتبطة في جدول الموظفين يعني اي صف او خانه معينة خالية

سوف يقوم بعرضها في هذا الكيوري لنرى ذلك ثم نحلل هذا لكيوري سويا ..

select ename,job,e.deptno,sal,dname,loc from emp e ,dept d
;(+)where e.deptno=d.deptno[/b][/size]
[size="4"][b]



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

هذا هو شرط الجوين مع الجوين left_outer

[b];(+)where e.deptno=d.deptno[/b]


عرفنا سابقا كيف نربط الجوين وكيفية عمله شرطه .. ولا اظن ان فيه اي اشكال ..

الذي يهمنا هنا هو المعامل (+) نلاحظ انه تم وضعه بعد d.deptno وهذا يعني ان هذا المعامل كما اشرنا في التعريف على الجهة المعاكسه له

نلاحظ الان انه في جهة اليمين وسوف يكون تنفيذ الكيوري على جهة اليسار اي مادام انه في (+)d.deptno س وف يكون تنفيذ الكيوري

على هذا الجدول او هذا الشرط وهو e.deptno فمثلا اذا عكسنا الشرط وجعلنا جدول الموظفين في النهاية مثل ..

[b];(+)where d.deptno=e.deptno[/b]



سوف يكون التنفيذ على جدول الاقسام deptلانه في جهة اليسار من المعامل ...

اذا نعود الى الكيوري السابق الذي فيه سوف يكون التنفيذ على جدول الموظفين لانه في جهة اليسار ...

اذا ماذا سيفعل هذا الكيوري.. طالما ان المعامل في اليمين والجدول الذي يكون عليه التنفيذ في اليسار ؟؟؟

سوف يعرض كل الصفوف في جدول الموظفين سواء كانت مرتبطة ام غير مرتبطة

ملاحظة مهمة جدا:: هنا في جدول الموظفين لن ترى اي صفوف غير مرتبطة لان كل الصفوف مرتبطة باي قسم من الاقسام سواء 10 او 20 او 30 او غير ذلك.

لكن لفهم هذا النقطة يجب ان نضيف صف جديد مثلا يحمل هذة القيم حتى نرى ذلك عيانا ..

insert into emp (empno,ename,job,sal)values(2222,'ahmed','analyst',2000);



ثم نفذ هذا الكود بعد ان تضيف الصف السابق ..

select ename,job,sal,e.deptno,dname from emp e,dept d
where e.deptno=d.deptno;[/b][/size]
[size=5][b]



ماذا سوف تلاحظ في المخرجات هذه هي المخرجات مثلا ...






ENAME JOB SAL DEPTNO DNAME
---------- --------- ------ ------ --------------
KING PRESIDENT 5000 10 ACCOUNTING
MILLER CLERK 1300 10 ACCOUNTING
CLARK MANAGER 2450 10 ACCOUNTING
SMITH CLERK 800 20 RESEARCH
FORD ANALYST 3000 20 RESEARCH
ADAMS CLERK 1100 20 RESEARCH
SCOTT ANALYST 3000 20 RESEARCH
JONES MANAGER 2975 20 RESEARCH
JAMES CLERK 950 30 SALES
ALLEN SALESMAN 1600 30 SALES
BLAKE MANAGER 2850 30 SALES
MARTIN SALESMAN 1250 30 SALES
TURNER SALESMAN 1500 30 SALES
WARD SALESMAN 1250 30 SALES




اذا لو تلاحظ ان الصف الاخير الذي اضفناه غير موجود عندما نعرض من جدول بطريقة equi join
في الاصل ان الصف الاخير الذي اضفناه لم يكن يحمل اي رقم قسم اي لاينتمي لاي قسم من الاقسام السابقة
ففي هذه الحالة لن يعرضه ابدا في equi join ...

اذا لو قال لك شخص اريد ان اعرف كم موظفين في شركتي سواء كانوا مرتبطين بقسم ام غير مرتبطين ..

ارين ان اعرف فقط هولاء الموظفين من في هذا الدائرة 10 ومن في دائرة 20 ومن في دائرة 30 ومن هو ليس فس اي دائرة

في حالة استخدامنا للجوين equi join لن يظهر اي موظفين لايتربط باي قسم سوف يتجاهله .. ولكن فعلا لدينا موظفين ليسوا في قسم ..


اذا من هنا لابد ان نتسخدم outer join بنوعية left ,right لكي يظهر لنا الموظفين الذي ليسوا في دائرة

او القسم الذي لايوجد فيه اي موظفين ولايتربط به احد ...

فلابد ان نتسخدم هذا الجوين لكي نظهر كل الموظفين المرتبطين وغير المرتبطين بالاقسام ..

[/b]
[size="4"][b]select ename,job,e.deptno,sal,dname,loc from emp e ,dept d
;(+)where e.deptno=d.deptno[/b][/size]
[size="4"][b]

[/size]

سوف تكون المخرجات الان 15 صف اضافة الي الصف الاخير الذي اضفناها



ENAME JOB DEPTNO SAL DNAME LOC
---------- --------- ------ ------ -------------- -------------
MILLER CLERK 10 1300 ACCOUNTING NEW YORK
KING PRESIDENT 10 5000 ACCOUNTING NEW YORK
CLARK MANAGER 10 2450 ACCOUNTING NEW YORK
FORD ANALYST 20 3000 RESEARCH DALLAS
ADAMS CLERK 20 1100 RESEARCH DALLAS
SCOTT ANALYST 20 3000 RESEARCH DALLAS
JONES MANAGER 20 2975 RESEARCH DALLAS
SMITH CLERK 20 800 RESEARCH DALLAS
JAMES CLERK 30 950 SALES CHICAGO
TURNER SALESMAN 30 1500 SALES CHICAGO
BLAKE MANAGER 30 2850 SALES CHICAGO
MARTIN SALESMAN 30 1250 SALES CHICAGO
WARD SALESMAN 30 1250 SALES CHICAGO
ALLEN SALESMAN 30 1600 SALES CHICAGO
ahmed analyst 2000

15 rows selected.





اذا اذا عكسنا المعامل او عكسنا الشرط حولنا الاول جدول الموظفين مثل الاتي

select ename,job,e.deptno,sal,dname,loc from emp e ,dept d
where e.deptno(+)=d.deptno;



وهذا هو right outer join اي سوف يكون التنفيذ على جدول deptno

وسوف يعرض لنا كل الاقسام سواء كانت مرتبطة مع موظفين ام غير مرتبطة .. وهذه هي المخرجات ..



ENAME JOB DEPTNO SAL DNAME LOC
---------- --------- ------ ------ -------------- -------------
KING PRESIDENT 10 5000 ACCOUNTING NEW YORK
MILLER CLERK 10 1300 ACCOUNTING NEW YORK
CLARK MANAGER 10 2450 ACCOUNTING NEW YORK
SMITH CLERK 20 800 RESEARCH DALLAS
FORD ANALYST 20 3000 RESEARCH DALLAS
ADAMS CLERK 20 1100 RESEARCH DALLAS
SCOTT ANALYST 20 3000 RESEARCH DALLAS
JONES MANAGER 20 2975 RESEARCH DALLAS
JAMES CLERK 30 950 SALES CHICAGO
ALLEN SALESMAN 30 1600 SALES CHICAGO
BLAKE MANAGER 30 2850 SALES CHICAGO
MARTIN SALESMAN 30 1250 SALES CHICAGO
TURNER SALESMAN 30 1500 SALES CHICAGO
WARD SALESMAN 30 1250 SALES CHICAGO
OPERATIONS BOSTON

15 rows selected.




ان عملية left ,right فقط تتغير في تغير المعامل عندما يكون المعامل في اليمين سوف
يكون التنفيذ على اليسار والعكس صحيح ..

وممكن ايضا نلعب في تغير الجداول نقدم الاول وناخر الثاني اذا ارنا فقط التطبيق على اليسار وكذا ايضا على اليمين مثل الاتي ..

الحالة الاولى : في هذا الشرط يكون المعامل على اليمين والتنفيذ على اليسار (( حيث يكون التنفيذ على جدول الاقسام ))
where e.deptno(+)=d.deptno;[/b]
[b]



الحالة الثانية : في هذا الشرط يكون المعامل على اليمين والتنفيذ على اليسار ((حيث يكون التنفيذ على جدول الموظفين))


where d.deptno(+)=e.deptno;[/b]
[b]




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

[/b]
[b](+)[/b][b]where e.deptno=d.deptno;[/b]
[b]



الحالة االرابعة :في هذا الشرط يكون المعامل على اليمين والتنفيذ على اليسار ((حيث يكون التنفيذ على جدول الموظفين))

[/b]
[b](+)[/b][b]where d.deptno=e.deptno;[/b]
[b]



ملاحظة::اذا قمت بالتنفيذ على اليسار فاعلم ان اليمين عكسا دائما في المعامل ولذا اكتفيت بشرح اليسار ..فاذا فهمت اليسار فسوف تفهم اليمين مباشرة..

تمرين ::: قم بعرض بعض الاعمدة والصفوف حيث يشمل كل الصفوف المرتبطة والغير المرتبطة في جدول الاقسام وكذا جدول الموظفين .

اي قم بعرض كل صف في الجدولين سواء كانت مرتبط او غير مرتبط .. من المعلوم اننا اخذنا فقط ام على هذا الجدول واما على ذالك الجدول ولما ناخذهم معا ..

فهل ممكن تفعل ذلك ام .. ام انه لايمكن ذلك ؟؟ فسر ذلك ..

ارجو ان يكون الدرس مفهوم ومبسط ..

وبهذا اكلمنا الجوين non ansa join وسوف نبداء في الجزء الثاني منه الذي يعمل فقط على 9i من قواعد البيانات وهو في الاصل نفس هذا الجوين الا انه فقط يعمل على ال key works سوف نوضح ذلك ان شاء الله ..

اراكم ان شاء اله في الدرس القادم ..

لاتنسوني من دعائكم .

تم تعديل بواسطة programmer_85
رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل



×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية