ahmedabdelwahed1332 بتاريخ: 17 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 17 فبراير 2013 ماشاء الله شرح جميييييييييييييييييييييييييييييل استمر وان شاء الله إحنا معكوربنا يجعله في ميزان حسناتك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 17 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 17 فبراير 2013 (معدل) 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 تم تعديل 17 فبراير 2013 بواسطة miash80 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 17 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 17 فبراير 2013 (معدل) اشكركم على التفاعل الجيد..اما بالنسبة للتمرين فهذا هو الحل الصحيح [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 دائرة مثلا سحيصل لك ارتباك وتشوش وخبط في المعلومات..وان كان الكود صحيح .. فلابد ننتبه الى المطلوب ماهو بالضبط.واخيرا بارك الله فيكم على الجهد الذي بذلتموه في حل هذا التمرين ..اراكم ان شاء الله في الدرس القادم تم تعديل 17 فبراير 2013 بواسطة programmer_85 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
miash80 بتاريخ: 17 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 17 فبراير 2013 اخي الفاضل ارجو منك عدم العب في طريقة السؤالنحن نعرف الحل الصحيحولكن عدم قلت ((والذي لديهم عموله وكذا لديهم مدير يشرف عليهم اي الذينيعملون تحت اشراف مدير (انتبه لهذا النقطة )لعبت في صياغة السؤال وفهمنا خطا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 17 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 17 فبراير 2013 كله خير ان شاء الله .. 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
amal.farid بتاريخ: 17 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 17 فبراير 2013 كيف الواحد يقدر يشارك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 17 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 17 فبراير 2013 الدرس الثالث اخذنا البارحة درس 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) ارجو ان يكون السؤال واضح ..اراكم ان شاء الله في الدرس القادم 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 17 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 17 فبراير 2013 اجابة التمريم ياباشاselect p.ename||' '||'work under'||e.ename,p.hiredatefrom emp e,emp pwhere p.mgr=e.empnoandp.hiredate>(select hiredate from emp where ename ='CLARK'); اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 17 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 17 فبراير 2013 ايه رأيك ياباشمهندس اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 17 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 17 فبراير 2013 (معدل) الله عليك ياستاذ وائلماشاء الله عليك .. ربنا يبارك فيك ..حلك صحيح لكن نحن لم تستخدم بعد الصب كيوري 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 % تم تعديل 17 فبراير 2013 بواسطة programmer_85 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 18 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 18 فبراير 2013 الدرس الرابع اكلمنا في الدروس السابقة نوعان من انواع الجوين ..واليوم ان شاء الله سوف ناخذ النواع الثالث منها وهو 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 BOSTON56 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; في الاصل هذا النوع ليس بذاك الاهمية ولكن ذكرناه هنا من باب زدياة المعلومات وكذا معرفة ماهي انواع الجوين .حتى لو رجعنا الى مصادر اوراكل تراها انها تتاهل هذا النوع ولايذكر الا نادرا ...اليوم لن ناخذ تمرين لانه ليس بذالك الاهمية ..اراكم في الدرس القادم وهو من اهم انواع الجوين .. وسوف نرى ماهو ان شاء الله 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ahmedmoheb2003 بتاريخ: 18 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 18 فبراير 2013 تستحق التقدير والدعاء ولك مني خالص التحيات اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
DBProgrammer بتاريخ: 18 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 18 فبراير 2013 شي مفرح ان نرى من يؤثر بما عنده من علم للاخرين .بارك الله في وقتك وجهدك وعلمك .. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 18 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 18 فبراير 2013 ربنا يباركلك فيما اتاك من علم اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
moh172 بتاريخ: 18 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 18 فبراير 2013 السلام عليكم ،،،ارجو الموافقة على ضمي فى هذا الكورسولكم جزيل الشكر ،،،محمد يوسف اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ahmedabdelwahed1332 بتاريخ: 19 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 19 فبراير 2013 `حَدَّثنَا أحمد بْن عِيْسَى المصؤي. حَدَّثنَا عَبْد اللّه بْن وهب، عَن يَحْيَى بْن أيوب، عَن سهَلْ بْن معاذ بْن أنس، عَن أبِيه؛- أَن الْنَّبِيّ صَلى اللّه عَلَيْهِ وَسَلَّمْ قَالَ: ((من علم علما، فله أجر من عمل بِهِ. لا ينقص من أجر العامل))حَدَّثنَا أحمد بْن عِيْسَى المصؤي. حَدَّثنَا عَبْد اللّه بْن وهب، عَن يَحْيَى بْن أيوب، عَن سهَلْ بْن معاذ بْن أنس، عَن أبِيه؛- أَن الْنَّبِيّ صَلى اللّه عَلَيْهِ وَسَلَّمْ قَالَ: ((من علم علما، فله أجر من عمل بِهِ. لا ينقص من أجر العامل)).قَالَ رَسُول اللّه صَلى اللّه عَلَيْهِ وَسَلَّمْ: ((أَن مما يلحق المؤمن من عمله وحسناته بَعْد موته، علما علمه ونشره، وولدا صالحا تركه. ومصحفا ورثه، أو مسجدا بْناه أو بيتا لابْن السبيل بْناه، أو نهرا أجراه أو صدقة أخرجها من ماله فِي صحته وحياته. يلحقه من بَعْد موته)). اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 19 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 فبراير 2013 (معدل) الدرس الخامس اكملنا في الدرس السابق النوع الرابع من انواع الجوين 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 ACCOUNTINGMILLER CLERK 1300 10 ACCOUNTINGCLARK MANAGER 2450 10 ACCOUNTINGSMITH CLERK 800 20 RESEARCHFORD ANALYST 3000 20 RESEARCHADAMS CLERK 1100 20 RESEARCHSCOTT ANALYST 3000 20 RESEARCHJONES MANAGER 2975 20 RESEARCHJAMES CLERK 950 30 SALESALLEN SALESMAN 1600 30 SALESBLAKE MANAGER 2850 30 SALESMARTIN SALESMAN 1250 30 SALESTURNER SALESMAN 1500 30 SALESWARD 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 YORKKING PRESIDENT 10 5000 ACCOUNTING NEW YORKCLARK MANAGER 10 2450 ACCOUNTING NEW YORKFORD ANALYST 20 3000 RESEARCH DALLASADAMS CLERK 20 1100 RESEARCH DALLASSCOTT ANALYST 20 3000 RESEARCH DALLASJONES MANAGER 20 2975 RESEARCH DALLASSMITH CLERK 20 800 RESEARCH DALLASJAMES CLERK 30 950 SALES CHICAGOTURNER SALESMAN 30 1500 SALES CHICAGOBLAKE MANAGER 30 2850 SALES CHICAGOMARTIN SALESMAN 30 1250 SALES CHICAGOWARD SALESMAN 30 1250 SALES CHICAGOALLEN SALESMAN 30 1600 SALES CHICAGO ahmed analyst 200015 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 YORKMILLER CLERK 10 1300 ACCOUNTING NEW YORKCLARK MANAGER 10 2450 ACCOUNTING NEW YORKSMITH CLERK 20 800 RESEARCH DALLASFORD ANALYST 20 3000 RESEARCH DALLASADAMS CLERK 20 1100 RESEARCH DALLASSCOTT ANALYST 20 3000 RESEARCH DALLASJONES MANAGER 20 2975 RESEARCH DALLASJAMES CLERK 30 950 SALES CHICAGOALLEN SALESMAN 30 1600 SALES CHICAGOBLAKE MANAGER 30 2850 SALES CHICAGOMARTIN SALESMAN 30 1250 SALES CHICAGOTURNER SALESMAN 30 1500 SALES CHICAGOWARD SALESMAN 30 1250 SALES CHICAGO OPERATIONS BOSTON15 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 سوف نوضح ذلك ان شاء الله ..اراكم ان شاء اله في الدرس القادم ..لاتنسوني من دعائكم . تم تعديل 19 فبراير 2013 بواسطة programmer_85 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 19 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 19 فبراير 2013 SELECT E.EMPNO,E.ENAME,D.DEPTNOFROM EMP E,DEPT DWHERE D.DEPTNO(+)=E.DEPTNO(+); اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 19 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 فبراير 2013 هل نفذ ت هذا الكود ..؟؟؟ وهل هو صحيح ... فسر ذلك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 19 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 19 فبراير 2013 SELECT E.EMPNO,E.ENAME,D.DEPTNOFROM EMP E,DEPT DWHERE D.DEPTNO(+)=E.DEPTNO(+); جربتها منفعش............... اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 19 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 فبراير 2013 ماذا تستنج من ذلك ؟؟؟ اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 19 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 فبراير 2013 سوف اوضح في الدرس القادم ماهي العيوب الموجودة في outer join؟؟ ان شاء الله اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 19 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 19 فبراير 2013 SELECT E.EMPNO,E.ENAME,D.DEPTNOFROM EMP E FULL OUTER JOIN DEPT DON D.DEPTNO=E.DEPTNO;دورت عليها ياباشا وجبتها 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 19 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 19 فبراير 2013 استنتج ان الOPERATOR مينفعش مع الFULL OUTER لذلكلابد من استخدام الكود بـــ FROM EMP FULL OUTER JOIN DEPTON D.DEPTNO=E.DEPTNO اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 19 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 فبراير 2013 هذا مانذكر في الدروس القادمة وهي من انواع anasi join التي تعمل على 9I 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.