AM Pro
11-13-2007, 09:50 AM
السلام عليكم ورحمة الله
سيتم طرح الجواب بعد يومين .
-----------------------------
أنشئ View يعرض اسم موظف -- اسم مدير ه-- اسم قسم مديره -- درجة المدير .
----------------------------
ملاحظة !!
-------
كل View يجب أن لا تحتوي أكثر من عنصرين .
---------------------------
AM Pro
11-15-2007, 05:24 PM
[b]السلام عليكم ورحمة الله وبركاته
هذا هو جواب السؤال .
أرجو أن تتأكدوا من هذا الجواب وإن كان هناك خطأ ما أرجو التنبيه .
وشكرا لكم .
create or replace view vw1 as select ee.ename EmpName, e.ename MgrName , e.deptno deptnum , e.sal
from emp e , emp ee
where ee.mgr=e.empno(+)
/
create or replace view vw2 as select d.dname , e.ename MgrName from dept d , emp e
where
e.deptno(+) = d.deptno
AND
e.deptno = d.deptno
/
create or replace view vw3 as select s.grade , e.ename MgrName from salgrade s , emp e
where e.sal Between s.losal(+) AND s.hisal(+)
/
create or replace view vw4 as select v1.EmpName , v1.MgrName , v2.dname , v3.grade
from vw1 v1 , vw2 v2 , vw3 v3
where
v1.MgrName = v2.MgrName
AND
v2.MgrName = v3.MgrName
/
select * from vw4 ;
Golden man
11-15-2007, 11:20 PM
شكرا لك صديقي
حل جميل
أما عن حلي فهو هنا :
create or replace view V1 as
select e1.ename EmpName,e2.ename MgrName from emp e1,emp e2
where e1.mgr = e2.empno;
create or replace view V2 as
select ename,grade MgrGrade from salgrade,emp
where sal between losal and hisal;
create or replace view V3 as
select ename,dname MgrDname from emp e,dept d
where d.deptno = e.deptno;
create or replace view V4 as
select EmpName,MgrName,MgrDname ,MgrGrade from V1,V2,V3
where (V1.MgrName = V2.ename and V1.MgrName = V3.ename);
select * from V4;
و لكن أذكر أن الأستاذ أعطانا أكثر من سؤال : السؤال الثاني :
المطلوب عرض اسم القسم - مجموع المعاشات - عدد الموظفين - x1 - x2 :
حيث x1 : إذا كان مجموع المعاشات للقسم الحالي يساوي أكبر مجموع معاشات يضع في x1 = true و إلا false
x2 : إذا كان عدد الموظفين للقسم الحالي يساوي أكبر عدد للموظفين يضع في x2 = true و إلا false
و طبعا بنفس الشروط للسؤال السابق عن طريق views
و الحل هو :
create or replace view V1 as
select dname,sum(sal) Sum from emp e,dept d
where d.deptno = e.deptno
group by dname;
create or replace view V2 as
select dname,count(*) Count from emp e,dept d
where d.deptno = e.deptno
group by dname;
create or replace view V3 as
select max(sum(sal)) MaxSal from emp
group by deptno;
create or replace view V4 as
select max(count(*)) MaxCount from emp
group by deptno;
create or replace view V5 as
select decode(Sum , MaxSal , 'true','false')X1 , dname from V1,V3;
create or replace view V6 as
select decode(Count , MaxCount , 'true','false') X2 , dname from V2,V4;
create or replace view V7 as
select V1.Dname,Sum,Count,X1,X2 from V1,V2,V5,V6
where V1.dname = V2.dname and V1.dname = V5.dname and V1.dname = V6.dname ;
select * from V7;
AM Pro
11-17-2007, 12:16 PM
السلام عليكم ورحمة الله
السؤال الثالث ...
----------------------------------------------------------------------
عرض --- اسم الموظف --- اسم القسم --- مجموع المعاشات
----------------------------------------------------------------------
أرجوا من لديه وظيفة في الفئة الثانية والثالثة طرحها ضمن هذا الموضوع لكي تعم الفائدة .
والجواب سيطرح بعد يومين .
أتمنى لكم النجاح والتوفيق .