programmer_85 بتاريخ: 20 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 20 فبراير 2013 الدرس السادس في الاصل هذا الدرس يتبع الدرس السابق outer join حيث نرى اليوم في الدرس ماهي العيوب في outer join بقسيمه left,right ....العيب الاول : لايمكن ان نتسخدم المعامل (+) معا اي في مرحلة الــ left ,right ان المعامل (+) لايمكن ان يعمل سويا في كلا المرحلتين مثل الاتي .. where e.deptno(+)=d.deptno(+); اذا نفذت هذا الكود الاتي سوف تظهر لك هذا الخطأ والمسمى ORA-01468: a predicates may reference only one outer-joined table العيب الثاني : لايمكن ان نتسخدم المعامل in مع المعامل (+) معا في نفس الوقتعند تنفيذك مثلا لهذا الكيوري الذي يحتوي على ename,job,sal,deptno,dname,loc لكي نعرض الموظفين الذي يعملون في الدوائر 10 و20 .. سوف يكون الكيوري كالاتي ::: select ename,job,sal,e.deptno,dname,loc from emp e,dept d where e.deptno(+) in (20,10); سوف يعطي لك خطأ في الكيوري بعد ماتنفذه وهذا هو الخطا : ORA-01719: outer join operator (+) not allowed in operand of OR or IN العيب الثالث : لايمكن ايضا ان نتسخدم المعامل or والمعامل (+) معا في نفس الوقت قم بتنفيذ هذا الكيوري لترى ماهو الخطا الذي ينتجه عنه عند استخدام المعامل or [b]select ename,job,sal,e.deptno,dname,loc from emp e,dept d where e.deptno(+)=d.deptno or e.deptno=10;[/b] الخطا هو نفس الخطا الذي موجود في المعامل inملاحظة يمكن ان نتسخدم المعامل and مع المعامل (+) في نفس الكيوري وهو لا اشكال فيه ..سوف نقوم يتنفي هذا الكيوري لنرى ذلك سويا .. select empno,ename,job,sal,dname,loc from emp e ,dept d where e.deptno=d.deptno(+) and job ='CLERK'; سوف تكون المخرجات بهذا الشكل .. EMPNO ENAME JOB SAL DNAME LOC------- ---------- --------- ---------- -------------- ------------- 7934 MILLER CLERK 1300 ACCOUNTING NEW YORK 7876 ADAMS CLERK 1100 RESEARCH DALLAS 7369 SMITH CLERK 800 RESEARCH DALLAS 7900 JAMES CLERK 950 SALES CHICAGO وبهذا يعتبر اننا قد اكلمنا الجزء الاول من الجوين بكل انواعه ..يعتبر هذا الجوين بانه يعمل على كل اصدرات الاوراكل ماعدا 9i .. اذا في القسم الاخر سوف نرى الجزء الثاني من الجوين وهو في الاصل نفس هذا الجوين الا انه يختلف فقط بانه يكون عمله فقط على keywords بدلا من operations الذي يعمل على الاصدرات الاخرى من اوراكل ..اراكم ان شاء الله في الدرس القادم .. 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 20 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 20 فبراير 2013 هو ان الjoin مينفعش مع in ده شئ منطقى مفهوموانه ينفع مع and شئ منطقى مفهوم بردهلاكن مع or لأ انا مش فاهمهاexamb انا ممكن فى مثال اكتب الشرط ده;where comm is null or comm is not null, اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 20 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 20 فبراير 2013 هو ان الjoin مينفعش مع in ده شئ منطقى مفهوموانه ينفع مع and شئ منطقى مفهوم بردهلاكن مع or لأ انا مش فاهمهاexambانا ممكن فى مثال اكتب الشرط ده;where comm is null or comm is not null, ارجو الرد ياباشا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 20 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 20 فبراير 2013 لايمكن ابدا ان تستخدم or بعد شرط الجوين وليس بعد شرط الفلترة حووووول ان تفرق بين الاثنانفي حالة كتبت شرط الجوين مثلwhere .e.deptno(+)=d.deptno or job ='CLERK';فسوف يعطيك خطأ ولا اقصد ان شرط الفلترة فرق بين الاثنان ..ارجو ان تكون قد وصلت الفكرة اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 21 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 21 فبراير 2013 وصلت ياعمناشكرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 21 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 21 فبراير 2013 (معدل) الدرس السابع اكملنا البارحة كل انواع الجوين المتعلقة بالعمليات operations سوف نرى اليوم ان شاء الله النوع الثاني من الجوين وهو ANSI JOIN..ماهو ANSI JOIN؟؟ان هذا الجوين يسمى غالبا بالـــ ORACLE 9I JOIN لانه النوع الاول من الجوين لايمكن ان يعمل على هذا الاصدار 9I .لكن في الاصل الجوين هذا يعمل نفس عمل الجوين الاول فقط يختلف في شي وهو انه هنا لابد ان تكتب الكلمة في الجوين ..حيث يتم تنفيذ هذا الجوين على مايسمى بالــــ KEYWORDS اي الكلمات المحجوزة وليس على العمليات التي راينها في النوع الاول .ماهي انواع ANSI JOIN؟؟يحتوي هذا الجوين على خمسه انواع وهي كالتالي:1-Natural join2- cross join3-join .....using clause4- join .....on clause5- outer join وسوف نرى كل واحد منها في درس خاص به ..سوف نتكلم في هذا الدرس على النوع الاول منها وهو natural join..ماهو natural join؟؟انه مشابه ومماثل للــــ equi join (راجع الدرس الاول )للعمل على هذا الجوين لابد ان يتوفر هناك عمودان على الاقل مشتركان في الاسم وفي نوع البيانات (datatypes)..( نفس فكرة equi join )اذا استنتجنا من هذا النوع انع في الاصل نفس equi join ولايختلف فقط الا في ان هذا النوع بدل من ان نكتب العملية مثل (=) يجب ان نكتب كلمة محجوزة بدلا عن العملية.اذا مادام انه لايختلف عن الاول فلماذا يتكرر نفس العمل دام ان فيه نوع يقوم بنفس المهمة ؟؟للجابة على هذا السؤال بان العمليات في الاصل لاتعمل على الاصدار 9i وانما يعمل عليها الكلمات المحجوزة (سنرى في الامثلة ماهي الكلمات المحجوزة)واما هذا النوع من الجوين فهو خصص للـــ 9i ... لكن تستطيع ان تنفذ هذا الجوين على اي اصدار .. لكن جوين العمليات لايتم تنفيذه على 9i .اذا سو ناخذ بعض الامثلة لتوضح لنا اكثر تفسيرا ..المثال الاول :اكتب كيوري يقوم بعرض كل الموظفين الذي يعملون في كل الاقسام مبينا رقم القسم واسمه معتمدا في ذلك على natural join لحل هذا المثال . select empno,ename,job,sal,deptno ,dname from emp natural join dept; سوف نحلل الان فقط مايمسى بشرط الجوين .. [b]emp natural join dept[/b] اذا هذا هو شرط الجوين او مايمسى بــــــــــــ keywords الكلمات المحجوزة .في حين اننا عندما راينا سابقا كيف تتم ربط شرط الجوين في equi join كالاتي : e.deptno=.d.deptno; يقابل هذه الصيغة في هذا الجوين natural join هذة الصيغة CODE]emp natural join dept[/code]حيث تكتب الكلمات المحجوزة وهي natural join بين الجدولين المراد بهما الربط سوف تكون المخرجات كالشكل الاتي : EMPNO ENAME JOB SAL DEPTNO DNAME------ ---------- --------- ------ ------ -------------- 7782 CLARK MANAGER 2450 10 ACCOUNTING 7839 KING PRESIDENT 5000 10 ACCOUNTING 7934 MILLER CLERK 1300 10 ACCOUNTING 7566 JONES MANAGER 2975 20 RESEARCH 7902 FORD ANALYST 3000 20 RESEARCH 7876 ADAMS CLERK 1100 20 RESEARCH 7369 SMITH CLERK 800 20 RESEARCH 7788 SCOTT ANALYST 3000 20 RESEARCH 7521 WARD SALESMAN 1250 30 SALES 7844 TURNER SALESMAN 1500 30 SALES 7499 ALLEN SALESMAN 1600 30 SALES 7900 JAMES CLERK 950 30 SALES 7698 BLAKE MANAGER 2850 30 SALES 7654 MARTIN SALESMAN 1250 30 SALES المثال الثاني :اكتب كيوري يقوم بعرض بعض empno,ename,sal,job,dname,deptnoحيث يكون هولاء الموظفين يعملون في الدائرة 10 ووضيفته هي CLERK select empno,ename,job,sal,deptno , dname from emp natural join dept where job='CLERK' AND DEPTNO=10;[/size][/b] [b][size=5] هو نفس الكيوري السابق الا اننا فقط قمنا باضافة بعض الفلترة للكيوري حسب المطلوب واستخدمنا جملة WHERE لكي تخرج لنا المخرجات وفقا للمطلوب. [b]where job='CLERK' AND DEPTNO=10[/b] سوف تكون المخرجات بهذا الشكل للمثال الثاني : EMPNO ENAME JOB SAL DEPTNO DNAME------ ---------- --------- ------ ------ -------------- 7934 MILLER CLERK 1300 10 ACCOUNTING 7369 SMITH CLERK 800 20 RESEARCH 7876 ADAMS CLERK 1100 20 RESEARCH 7900 JAMES CLERK 950 30 SALES ارجو ان تكون قد وصلت الفكرة بوضوح .. احبتي الكرام تمرين : اكتب كيوري يقوم بعرض الموظفين الذي لديهم COMM عمولة تفوق 1000 ويعملون في دائرة المبيعات SALES وكذا رقم الدائرة مستخدما NATURAL JOIN في حلك لهذا المثال..اراكم ان شاء الله في الدرس القادم ومع النوع الثاني من انواع هذا الجوين لاتنسوني من دعائكم .. بارك الله فيكم تم تعديل 21 فبراير 2013 بواسطة programmer_85 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 21 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 21 فبراير 2013 اجابة التمرين ياباشا,deptno select e.ename,d.dname,e.commfrom emp e natural join dept dwhere e.comm>1000 andd.dname='SALES'; 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
تيسير نافع بتاريخ: 22 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 22 فبراير 2013 سلام عليكم..جزاك الله خير ياباشمهندس على هذا العمل وفي ميزان حسناتك ان شاء اللهوأود الانضمام إليكم.. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 22 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 22 فبراير 2013 (معدل) الدرس الثامن اكلمنا البارحة النوع الاول من انواع الجوين ansi join وهو natural join في هذه الجلسة ان شاء الله سوف تناول النوع الثاني منها وهو join .....on clause وكيف يتم عمله ..ماهو join .......on clause ؟؟كما ذكرنا يوم امس في درس natural join بانه يختص بالاصدار 9i ويمكن ان نطبقه على اي اصدار ..لكن نظرا لان العمليات operations لاتعمل اللي على الاصدارات من غير 9i (راجع درس البارحة)اذا join .....on clause يتم تنفيذه على الكلمات المحجوزة keywords ..فاذا كنت تستخدم الجوين على اكثر من عمود column من جدولين او اكثر فان تلك الاعمدة تزودنا وتدعمنا بان نستخدم join ...on clause ...ويمكن ان نتسخدم المعامل and في حالة ربطنا باكثر من جدولين ... الخلنرى ماهي الصيغة العامة اولا للـــــــــ join......on clause . يمكن ان تكتب الصيغة العامة للــ join ...on clause بهذا الشكل : select .... from table1 inner join table2 on table1.col1=table2.col2and table1.col1=table2.col2; حيث ان الكمات المحجوزة في هذا الجوين هي inner join التي اتت قبل table1 وايضا on والتي اتت بعد table 1 وقبل table2 اي بينهما ..ومن ثم نربط مالدينا ايضا من اكثر من عمود .مثال على ذلك يوضح اكثر :سوف نقوم بعرض empno,ename,job,grade من جدولين وهما emp,salgrade حيث يكون الشرطالمرتبط بينهما هو sal الاعلى منه او الاقل منه .. سوف يكون هذا الكيوري : select empno,ename,job,grade from emp inner join [/size][/b] [b][size=5]salgrade on sal between losal and hisal;[/size][/b] [b][size=5] وممكن تكتب الكود من دون inner مثل الكود التالي : select empno,ename,job,grade from emp join [/size][/b] [b][size=5]salgrade on sal between losal and hisal;[/size][/b] [b][size=5] كلا الحالتين صحيحة ..اما عن المخرجات فسوف تكون كالاتي : EMPNO ENAME JOB GRADE------ ---------- --------- ------ 7369 SMITH CLERK 1 7900 JAMES CLERK 1 7876 ADAMS CLERK 1 7521 WARD SALESMAN 2 7654 MARTIN SALESMAN 2 7934 MILLER CLERK 2 7844 TURNER SALESMAN 3 7499 ALLEN SALESMAN 3 7782 CLARK MANAGER 4 7698 BLAKE MANAGER 4 7566 JONES MANAGER 4 7788 SCOTT ANALYST 4 7902 FORD ANALYST 4 7839 KING PRESIDENT 5 في المصال السابق join....on clause يمثل non equi join مثال اخر : حيث يمثل هنا join ...on clause الــــ equi join و non equi join معا مختلفا فقط في العمليات ..قم بعرض empno,ename,job,grade ,dname,detpno من الجداول emp,dept,salgrade .. select empno,ename,job,e.deptno,dname,grade from emp e join dept d on e.deptno=d.deptno join salgrade s on sal between losal and hisal; حيث تم في هذا المثال ربط اكثر من join ....on clause حيث تم في الاول ربط هذا الجوين emp e join dept d on e.deptno=d.deptno ومن ثم الجدول الثالث تم الربط كالاتي : join salgrade s on sal between losal and hisal; اما عن المخرجات فسوف تكون كالاتي : EMPNO ENAME JOB DEPTNO DNAME GRADE------ ---------- --------- ------ -------------- ------ 7369 SMITH CLERK 20 RESEARCH 1 7900 JAMES CLERK 30 SALES 1 7876 ADAMS CLERK 20 RESEARCH 1 7521 WARD SALESMAN 30 SALES 2 7654 MARTIN SALESMAN 30 SALES 2 7934 MILLER CLERK 10 ACCOUNTING 2 7844 TURNER SALESMAN 30 SALES 3 7499 ALLEN SALESMAN 30 SALES 3 7782 CLARK MANAGER 10 ACCOUNTING 4 7698 BLAKE MANAGER 30 SALES 4 7566 JONES MANAGER 20 RESEARCH 4 7788 SCOTT ANALYST 20 RESEARCH 4 7902 FORD ANALYST 20 RESEARCH 4 7839 KING PRESIDENT 10 ACCOUNTING 5 ارجو ان تكون قد وصلت الفكرة بشكل واضح ..تمرين : قم بعمل صياغة سؤال من عندك على مثل تلك الامثلة السابقة مستخدما فيها اكثر من ثلاث جداول مثلا واكثر من شرط للجوين .. تم تعديل 22 فبراير 2013 بواسطة programmer_85 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 22 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 22 فبراير 2013 ياباشا حضرتك تسألنا واحنا نجاوبدى المرحلة اللى احنا فيهاوشكراً اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 22 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 22 فبراير 2013 ياباشا حضرتك تسألنا واحنا نجاوبدى المرحلة اللى احنا فيهاوشكراً اخرى............يابشمهندس اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 22 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 22 فبراير 2013 معلشى ياباشا سؤال صغير بس مهم بالنسبة لياان شاء الله حضرتك ناوى تكمل pl , forms اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 23 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 23 فبراير 2013 الدرس التاسع اليوم ان شاء الله في هذا الجلسة سوف تناول اهم موضوع في nsai join والذي هو outer join وهو في الاصل يقابل outer join بقسيمة left ,right ...سنرى في هذه الجلسة كيف تتم تلك العملية ..ماهو outer join؟ان outer join هو في الاصل نفس outer join الذي تم العمل عليه بواسطة الــعمليات operations واليوم ان شاء الله سوف نرى كيف يتم عمله على keywords حيث ينقسم outer join الى ثلاثة اقسام :الاول منها : left outer الثاني : right outer الثالث: full outerوسوف نرى كلا منهم على حده مع الامثلة وكيفية العمل .اولا :left outer لو رجعنا الى النوع الاول من الجوين ,وهو non ansi join كيف تم عمله وكيف راينا ذلك.ان هذا النوع هو نفس النوع الاول ماعدا الاختلاف فقط ان ذالك الجوين يتم عمله على العمليات operations اما هذا يكون عمله على keywords سوف نرى ذلك الان ان شا ءالله ..لدينا هذا المثال : select empno,ename,job,sal,dname from emp e[/size][/b] [b][size="4"]left outer join dept d on e.deptno=d.deptno حيث ان الكود المهم في هذا هو : left outer join dept d on e.deptno=d.deptno حقيقة ان هذا الكود مفهوم ولا اشكال فيه فقط كيف تضع الكلمات المحجوزة في كودك والا كل شي نفس الاول الجوين سابقا.ثانيا : ماهو right outer هو نفس الكود السابق فقط في تغيير كلمة left الى right لاغيرلدينا هالمثال : select empno,ename,job,sal,dname from emp e[/size][/b] [b][size="4"]right outer join dept d on e.deptno=d.deptno حيث ان الكود المهم في هذا هو : right outer join dept d on e.deptno=d.deptno حقيقة ان هذا الكود مفهوم ولا اشكال فيه فقط كيف تضع الكلمات المحجوزة في كودك والا كل شي نفس الاول الجوين سابقا.ثالثا: ماهو full outer ان هذا الجوين يعتبر حلا للجوين السابق الذي ذكر في النوع الاول وهو non ansi join حيثيعتبر ذالك الجوين وهو left او right لايمكن ان يعملا معا ..بالمعامل (+) في كلا الطرفين .ففي هذا الجوين تم حل ذلك .. لدينا المثال التالي يوضح اكثر : select empno,ename,job,sal,dname from emp e[/size][/b] [b][size="4"]full outer join dept d on e.deptno=d.deptno full outer join dept d on e.deptno=d.deptno حيث يقوم هذا الجوين بدمج left و right معا ..اي ان اي صفوف لاتظهر في left وتظهر في right سوف يقوم باظهارها معا والعكس صحيح اي سوف يقوم باظهار كلا من في left و right سويا .. وهذا ماراينا سابقا ان لايمكن ان يتم المعامل (+) ,ويكتب معا في كلا الحالتين right و left ..ارجو ان تكون قد وصلت الفكرة ..تمرين : بقم بعرض كلا من ename ,job,sal ,deptno ,dname,grade لكل الموظفين من تلك الجداول .. ؛(اي ثلاثة جداول) فسر ذلك .. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 23 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 23 فبراير 2013 select e.ename,e.job,e.sal,d.deptno,s.gradefrom emp e full outer join dept don d.deptno=e.deptnofull outer join salgrade son e.sal between s.losal and s.hisal; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 23 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 23 فبراير 2013 select e.ename,e.job,e.sal,d.deptno,s.gradefrom emp e full outer join dept don d.deptno=e.deptnofull outer join salgrade son e.sal between s.losal and s.hisal; استنتاج انه مثل inner joinصح؟ربنا يجزيك كل الخيربصراحة شرحك بيكمله تمرينك (جميل جداً) اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 23 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 23 فبراير 2013 لا ليس مثله لانه هنا سواء في حالة left او right بصفوف لم تكن مربوطة يعين لايوجد جوين بينهم فيقوم بعرضهاوفقا لكل من left و right ( راجع الدرس outer join في القسم الاول من non ansi join لترى ذلك وربنا يجزيك الف خير اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
مستر سمعة بتاريخ: 24 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 24 فبراير 2013 تابعت الدرس كاملاً وحللت تمارينه، وجزاك الله خيراً، وعَظَم لك الأجرووُجود مُشارَكات الأخ وائل أضفت نكهة على الدرسوهذه أول مُشاركة في المنتدى، وبإذن الله ليست الأخيرة اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 24 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 24 فبراير 2013 الدرس العاشر في هذه الجلسة ان شاء الله سوف تناول اخر نوع من انواع هذا الجوين وبهذا نتعبر قد اكلمنا كل مافي الجوين باذن الله ..في الحقيقة هي ثلاثة انواع وسوف تناول بمنتهى السرعة لانها بسيطة وسهلة ولا يوجد فيها اي تعقيد ..النوع الاول منها : Cross join النوع الثاني :self joinالنوع الثالث: join...using classالنوع الاول : cross join :في الاصل يهتبر هذا النوع مشابها للنوع Cartesian join ( راجع الدرس)لدينا هذا المثال يبين كيفية عمل هذا الجوين : سوف نعرض الموظفين من جدولين مستخدمين هذا الجوين .. select empno,ename,job,sal,dname,loc from emp cross join dept; وهذه هي النقطة الت تهمنا وهي الشرط في المثال السابق [/b][/size] [size=1][b] emp cross join dept;[/b][/size] [size=1][b] حيث ستكون المخرجات (56=14*4) (راجع درس Cartesian) في المثال التالي سوف نرى الان كيف يتم على 3 جداول select empno,ename,job,sal,dname,grade from emp cross join dept cross join salgrade ; حيث ان الشرط يربط بين اكثر من جدولين .. emp cross join dept cross join salgrade ; النوع الثاني :self joinهذا النوع يعتبر نفس نوع self join الذي في النوع الاول لكن فقط الاختلاف فيه ان هذا الجوينيستخدم في عمله keywords الكلمات المحجوزة اما في ذاك الجوين فيستخدمه في عمله operations العملياتلدينا هذا المثال يوضح اكثر:سوف نعرض الموظفين الذي بعملون في كل الاقسام مستخدمين في ذلك هذا الجوين حيث يظهر كل موظفين عمله في اي قسم . select m.empno,e.ename,e.mgr from emp e join emp m on m.empno=e.mgr; حيث يعتبر هذا هو الشرط في المثال السابق CODE] empe join emp m on m.empno=e.mgr;[/code]النوع الثالث : using ....join clauseهذا النوع لايختلف كثيرا عن سابقيه ماعدا فقط يكتب نفس الـــ column مرة واحدة ولايكتب معاه اسمه الجدول مثلا alias ..ايضا لايمكننا ان نتسخدم columns-alias في expression اي بعد جملة الــ select لدينا هذا المثال يوضح اكثر : select ename,job,sal, dname,deptno from emp e inner join dept d using (deptno); حيث ان الشرط كتب فقط فيه رقم القسم مرة واحد ولم يعمل بينهما اي مساواة .. فقط يكتب بين قوسين وايضا لايكتب له اي alias emp e inner join dept d using (deptno ارجو ان تكون قط وصلت هالفكرة بشكل واضح ومفهوم ..وبهذا نعتبر قد اكلمنا مرحلة الجوين بالتفصيل وكيفية عملها وان شاء الله كانت الشروح والدروس واضحة ولايوجد بها اي ابهام او التباس ..في الدرس القادم ان شاء الله سوف نبدا في subquery وكيفية عمله وهو اوسع بكثير من الجوين سنرى ذلك ان شاء الله بالتفصيل الممل ..تمرين: قم بعمل مراجعة لكل انواع الجوين السابقة تماما واعمل عليها اكثر من امثله حتى ترسخ جيدا (( لابد من المراجعة والممارسة والتدرب علي الجوين ))اراكم ان شا ءالله في الدرس القادم .... 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 24 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 24 فبراير 2013 بس ايه رأيك يامستر سمعة بس نكهه بــــ ايه؟ماشى ياباشا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 26 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 26 فبراير 2013 (معدل) السلام عليكم ورحمه وبركاتههذا ملخص ماسندرسه في subquery ..انواع subqueryهناك ثلاثة انواع وهم:الاول : subquery base on usageولديه نوعان وهما : normal subquery -12- correlated subqueryالنوع الثاني هو: subquery base on execution ( المعتمد على كيفية التنفيذ)ولديه اربعة انواع :1- single col-single row 2- single col-multiple rows3- multiple cols-single rows4- multiple cols-multiple rowsالنوع الثالث : nested subquery حيث ان الــــــــــــ subquery يمكن ان يكتب كالاتي :1- at where clause2- at having clause3- at from clause 4- as on expression (اي داخل جملة السيلكت نفسها)5- under DML queries وسوف نرى كل منهم على حده ان شاء الله بالتفصيل الممل تم تعديل 26 فبراير 2013 بواسطة programmer_85 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
moshy بتاريخ: 26 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 26 فبراير 2013 تما جداا أنا معاكو فى الكورس اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 26 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 26 فبراير 2013 الدرس الحادي عشر مقدمة :ان الـــ subquery عبارة عن كيوري الذي يكتب داخل كيوري اخر لكي يشير ويربط على شكل شبكة من الكيوريات queries.حيث ان هذا الكيوري subquerry يشير الى ان الكيوري الخارجي الذي يتنفذ اخر وهو المطلوب يسمى الكيوري الاساسي main query .واما الكيوري الذي يكون داخل الكيوري الاساسي يسمى الكيوري الفرعي او inner query .فاي كيوري يكتب داخل الكيوري الاساسي main query يسمى بكشل عام الـــــــــــ subquery .اما بالنسبة للتنفيذ في هذا الكيوري subquery فانه يتم اولا التنفيذ في inner query اي الكيوري الفرعي الذي داخل الكيوري الاساسي.ومن ثم يحدث التنفيذ في الكيوري الاساسي outer query او main query .فاذا كان لدينا شبكة من الكيوريات مرتبطة مع بعضها البعض او متداخلة اي كيوري داخل كيوري فيتم التفيذ فيها وفقا لكل كيوري داخل الاخر حتى يصل الى الكيوري الاساسي ومن ثم يعرض كل المطلوب وسوف نرى ذلك ان شاء الله... النوع الاول : single row-single colان هذا النوع من ال subquery يتم عمله والتنفيذ على صف واحد وعمود واحد ..حيث يكون الصف المسترجع من الكيوري فقط واحد وليس كثير ... كما ان العمود المطلوب في الشرط هو واحد ..سنرى ذلك مدعموما بالامثلة .كتابة الــــ subquery بعد جملة الـــــ where clause الـــ subquery سوف يكتب بعد جملة where clause وهذه هي الحالة الاولى من حالات الــ subquery التي يكتب فيها .لدينا اولا ماهي الصيغة العامة syntax select ...... from table1 where exp_operator (select ........ from table 2where condition ); ملاحظة :1- المخرجات في inner query الكيوري الفرعي الذي داخل الكيوري الاساسي ابدا لن يعرض الاعمدة التي قدمنا بطلبها .2- المخرجات في inner query سوف تعطى الى الكيوري الاساسي main query او outer query للمقارنة المعتمدة على الشرط .3- المخرجات في outer query او main query سوف تظهر لانها هي المطلوبة .لدينا المثال الاول:قم بعرض ename,job,sal,deptno للموظف الذي لديه اكبر راتب من كل الموظفين الاخرين.. select ename,job,sal,deptno from emp where sal = (select max(sal) from emp);[/b][/size] [size=5][b] المخرجات سوف تكون كالاتي : ENAME JOB SAL DEPTNO---------- --------- ------ ------KING PRESIDENT 5000 10 المثال الثاني :قم بعرض ename,job,sal,deptno للموظفين الذين راتبهم يكون اقل من معدل الرواتب لكل الموظفين .. select ename,job,sal,deptno from emp where sal<(select avg(sal) from emp); سوف تكون المخرجات كالاتي : ENAME JOB SAL DEPTNO---------- --------- ------ ------SMITH CLERK 800 20ALLEN SALESMAN 1600 30WARD SALESMAN 1250 30MARTIN SALESMAN 1250 30TURNER SALESMAN 1500 30ADAMS CLERK 1100 20JAMES CLERK 950 30MILLER CLERK 1300 10 المثال الثالث:قم بعرض ename,job,sal,deptno للموظفين الذي يعملون كنفس الوظيفة... مثل وظيفة scott select ename,job,sal,deptno from emp where job=(select job from emp where ename='SCOTT'); سوف تكون المخرجات كالاتي : ENAME JOB SAL DEPTNO---------- --------- ------ ------SCOTT ANALYST 3000 20FORD ANALYST 3000 20 المثال الرابع :قم بعرض ENAME,job,sal,deptno للموظفين الذين اقل من معدل رواتب الموظفين العاملين في الدائرة 30 select ename,job,sal,deptno from emp where sal <(select avg(sal) from emp where deptno=30); سوف تكون المخرجات كالاتي : ENAME JOB SAL DEPTNO---------- --------- ------ ------SMITH CLERK 800 20WARD SALESMAN 1250 30MARTIN SALESMAN 1250 30TURNER SALESMAN 1500 30ADAMS CLERK 1100 20JAMES CLERK 950 30MILLER CLERK 1300 10 المثال الخامس :قم بعرض ename,job,sal,deptno للموظفين الذي يعملون كنفس وظيفة SCOTT وتكون رواتبهم اكثر من راتب SMITH select ename,job,sal,deptno from emp where job=(select job from emp where ename='SCOTT')and sal>( select sal from emp where ename='SMITH'); سوف تكون المخرجات كالاتي : ENAME JOB SAL DEPTNO---------- --------- ------ ------SCOTT ANALYST 3000 20FORD ANALYST 3000 20 المثال السادس:قم بعرض ENAME,job,sal,deptno للموظف الذي راتبه يكون الثاني .. select ename,job,sal,deptno from emp where sal =(select max(sal) from emp where sal<(select max(sal) from emp)); سوف تكون المخرجات كالاتي: ENAME JOB SAL DEPTNO---------- --------- ------ ------SCOTT ANALYST 3000 20FORD ANALYST 3000 20 في الحقيقة ان الـــ subquery لديه الكثير من الامثلة يمكن ان تتخيل مثال في دغامك ومن ثم تحوله على شكل كيوريولو اعطينة الكثير من ذلك لما كفى ولما وسعه هذا المجال ... لكن الواحد يجب ان يتدرب ويصنع الاسئلة في دماغه ومن ثم يحولها على الواقع ويحلها بهذا ال subquery.التمرين الاول: قم بعرض ename,job,sal,deptno للموظف الذي راتبه ترتيتبه الثالث .التمرين الثاني :قم بعرض ename,job,sal,deptno للموظفين الذي يعملون في الدائرة accounting و sales .التمرين الثالث: قم بعرض ename,job,sal,deptno للموظفين يعملون كمدراء اي مدير للموظفين الاخرين .التمرين الرابع: قم بعرض dname ,deptno من جدول الاقسام حيث ان هذا القسم لايوجد به اي موظفين يعملون فيهالتمرين الخامس : قم بعرض ename,job,sal,deptno للموظفين الذين راتبهم هو اقل من اكبر راتب بشرط ان اكبر راتب يكون فقط في ادائرة sales.التمرين السادس: قم بعرض ename,job,sal,deptno للموظفين الذي يستلمون اقل راتب في كل دائرة.ان شاء الله يكون الشرح وافي وواضح ..اراكم ان شاء الله في الدرس القادم لاتنسوني من دعائكم اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 26 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 26 فبراير 2013 1-select ename,job,sal,deptnofrom empwhere sal=(select max(sal) from emp where sal<(select max(sal) from emp where sal<(select max(sal) from emp)));2-select ename,job,sal,EMP.deptno,DNAMEfrom emp ,DEPTwhere DEPT.DEPTNO=EMP.DEPTNO AND DNAME IN(select UPPER(dname) from DEPTwhere upper(dname) in('ACCOUNTING','SALES'));3-select ename,job,sal,deptnofrom emp where EMPNO IN(select MGR from EMP);4-select Dname,deptnofrom DEPTwhere DEPTNO IN(select DEPTNO from EMP WHERE ENAME IS NULL);5-select Ename,JOB,SAL,deptnofrom EMPwhere SAL< (select MAX(SAL) from EMP WHERE DEPTNO IN(SELECT DEPTNO FROM DEPTWHERE DNAME LIKE 'SALES'));6-select Ename,JOB,SAL,deptnofrom EMPwhere SAL IN (select MIN(SAL) from EMP GROUP BY DEPTNO); اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wael topar بتاريخ: 26 فبراير 2013 تقديم بلاغ مشاركة بتاريخ: 26 فبراير 2013 الله يباركلك ياباشا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 27 فبراير 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 27 فبراير 2013 الدرس الثاني عشر اخذنا البارحة الدرس الاول في الـــ subquery وتناولنا فيه كيف يعمل على single row-single col باستخدام جملة where clause .اليوم ان شاء الله في هذه الجلسة سوف تناول ايضا فيها كيف يتم العمل على single row-single col باستخدام جملة having clause .كيفية كتابة subquery بواسطة جملة having clauseان جملة having clause و جملة where clause يتم عملهما على فلترة الشرط .. لكن ماهو الاختلاف بينهما .ان الاختلاف فيما بينهما ان جملة where clause تهتم فقط بلفترة الشروط التي تتعامل مع صف واحد اي ترجع فقط صف فردي .لكن ان جملة having clause تهتم بلفترة الشروط التي تتعامل مع مجموعة من الصفوف وبالاخص مع الدوال التجميعية مثل (max,min,sum,avg,count).سنرى ذلك ان شاء الله مدعموما بتلك الامثلة .ملاحظة: عندما نتستخدم جملة having clause فانه من الضروري ان نتسخدم معها group by col_name.,ولكن من الممكن ان نتسخدم group by col_name من دون ان نتسخدم having clauseلدينا المثال الاول: قم بعرض avg(sal),count (sal) لكل الموظفين الذين يكون معدل رواتبهم يساوي معدل رواتب الموظفين الذي يعملون في الدائرة 30. select avg(sal) as avgsal,count(sal) as countsal from emp group by deptno having avg(sal)=(select avg(sal) from emp where deptno=30); سوف تكون المخرجات كالاتي: AVGSAL COUNTSAL---------- ----------1566.66667 6 حيث نرى ان المعدل لديه اعداد عشرية كثير فيمكن ان نتسخدم الدالة round حتى تقوم بالتقريب الى اقرب مائة سوف يكون الكود كالاتي : select round(avg(sal)) as avgsal,count(sal) as countsal from emp group by deptno having avg(sal)=(select avg(sal) from emp where deptno=30); سوف تكون المخرجات كالاتي: AVGSAL COUNTSAL---------- ---------- 1567 6 المثال الثاني:قم بعرض max(sal) ,deptno للموظفين الذين يكون معدل رواتبهم اقل من اكبر راتب . select deptno,max(sal) from emp group by deptno having avg(sal)<(select max(sal) from emp );[/b][/size] [size=5][b] سوف تكون المخرجات كالاتي: DEPTNO MAX(SAL)------- ---------- 30 2850 20 3000 10 5000 المثال الثالث: قم بعرض مجموع كل الموظفين و رقم القسم deptno حيث ان المجموع لكل الموظفين اكبر من مجموع الموظفين الذي يعملون في الدائرة 10 select deptno,count(*) from emp group by deptno having count(*)>(select count(*) from emp where deptno=10);[/size][/b] [b][size=5] سوف تكون المخرجات كالاتي: DEPTNO COUNT(*)---------- ---------- 30 6 20 5 المثال الرابع:قم بعرض معدل الرواتب واكبر راتب ورقم القسم حيث ان المعدل الكلي يكون اقل من مجموع كل الرواتب للموظفين. select max(sal),count(*),deptno,round(avg(sal)) from emp group by deptno having avg(sal)<(select sum(sal) from emp);[/size][/b] [b][size=5] سوف تكون المخرجات كالاتي: MAX(SAL) COUNT(*) DEPTNO ROUND(AVG(SAL))--------- ---------- ---------- --------------- 2850 6 30 1567 3000 5 20 2175 5000 3 10 2917 اعتقد بان هذه الامثلة كافية لكن الشي الذي يهمنا فيها ان جملة having clause لا تاتي الا مع الدوالة التجميعية واذا وجدتجملة having clause فلابد ان تكتب معها group by col_name .ايضا اضافة الى ان اذا وضعنا اي دالة تجمعية بعد جملة select فان هذه الدالة التجميعية لايمكن ان تتوافق مع اي عمود عادي في نفس التعبير expression فاذا وضعنا مثلا max(sal) بعد جملة select ووضعنا ايضا deptno معها ولم نضع deptno بعد جملة group by فسوف يرجع لنا خطأ.اضافة اذا وضعنا دالة تجمعية مع مثلا الاسم ورقم القسم حيث ان رقم القسم استخدم بعد جملة group by ولكن الاسم لم نستخدمها بعدها فسوف يعطيلنا خطأ لان الدالة التجمعية موجود في الــ expression مع الاسم وهذا لايمكن ان يصح وسوف يعطي لنا خطأ . لكن في حالة وضعنا الاسموالرقم بعد جملة group by فهذا لا اشكال فيه ... اذا نستتنج من هذا ان اي عمود لايعمل مع الدوال التجميعة الا في حالة وضعه بعد جملة group byارجو ان تكون قد وصلت الفكرة.تمرين: قم بعرض المعدل للرواتب ورقم القسم حيث يكون كل راتب اكبر من 2000 في كل قسم وحيث ان المعدل يكون يساوياكبر معدل شرطا ان يكون الراتب كما ذكرت في كل دائرة اكبر من 2000 . اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.