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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

مطلوب المساعدة فى امر select من 3 جداول


12 رد (ردود) على هذا الموضوع

#1 Ahmed Omran

Ahmed Omran

    عضو

  • الأعضــاء
  • 19 مشاركة

تاريخ المشاركة 09 September 2007 - 03:07 PM

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

او مورد )و الجدول التالت فية رقم العنصر الموجود في الجدول الاول و فية رقم العميل و رقم

المورد و السعر
و المطلوب عايز اعمل جملة سليكت يظهر لي اسم العنصر و اسم المورد و اسم العميل و السعر


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

ارجو الرد سريعا من فضلكم
جزاكم الله خيرا
أحمد عمران
aomran2002@yahoo.com
aomran2002@hotmail.com

#2 nhamzehn

nhamzehn

    مشترك

  • الأعضــاء
  • 187 مشاركة
  • الاهتمامات:المطالعة

تاريخ المشاركة 10 September 2007 - 09:52 AM

لو فرضنا انه جدول العناصر اسمه elements وفيه
ENO
ENAME
وجدول الأشخاص اسمه persons وفيه
PNO
PNAME
والجدول الثالث اسمه elem_pers وفيه
ENO رقم العنصر
CNO رقم العميل(Customer)
SNO رقم المورد(Supplier)
PRICE السعر

فتكون جملة ال select كالتالي:
select   e.ename , c.pname as "customer", s.pname as "supplier", ep.price
from elem_pers ep , elements e , persons c , persons s
where ep.eno = e.eno and ep.cno = c.pno and ep.sno = s.pno


يعني ببساطة انت راح تتخيل انه في عندك جدولين بدلا من جدول واحد
مرة بتنظر لجدول الأشخاص على انه جدول العملاء ومرة بتنظر لجدول الأشخاص انه جدول الموزعين.

وهي جمل بناء الجداول للتجريب
create table elements (eno number(5) primary key , ename varchar2(20));

create table persons (pno number(5) primary key , pname varchar2(20));

create table elem_pers (eno number(5) references elements(eno) ,
cno number(5) references persons(pno) ,
sno number(5) references persons(pno) ,
price number (10,3));


وبالنسبة للمشلكة الثانية غير خصائص التلفون
data type : number
وبهيك بتجبر المستخدم عاى ادخال رقم بدون ما تغلب حالك بالكود ولما تتخزن اوراكل بتحولها ل char بدون اي كود
سبحان الله وبحمده سبحان الله العظيم

اللهم لك الحمد والشكر كما ينبغي لجلال وجهك وعظيم سلطانك

#3 Ahmed Omran

Ahmed Omran

    عضو

  • الأعضــاء
  • 19 مشاركة

تاريخ المشاركة 10 September 2007 - 10:44 AM

انا متشكر جدا لحضرتك جزاك الله خيرا

#4 Ahmed Omran

Ahmed Omran

    عضو

  • الأعضــاء
  • 19 مشاركة

تاريخ المشاركة 10 September 2007 - 12:57 PM

للاسف يا باشا مشتغلتش
مشيت ورا الاكواد اللي كتبتها بالضبط و عملت insert لداتا وهمية و لما كتب جملة السليكت مشتغلتش
create table elements (eno number(5) primary key , ename varchar2(20));

create table persons (pno number(5) primary key , pname varchar2(20));

create table elem_pers (eno number(5) references elements(eno) ,
cno number(5) references persons(pno) ,
sno number(5) references persons(pno) ,
price number (10,3));

insert into elements values (1 ,'heater');
insert into elements values (2 ,'air condition');

insert into persons values (1 ,'ahmed supp');
insert into persons values (2 ,'ahmed customer');

insert into elem_pers values (1 ,1 ,null ,400);
insert into elem_pers values (2 ,null ,2 ,1000);

select e.ename , c.pname as "customer", s.pname as "supplier", ep.price
from elem_pers ep , elements e , persons c , persons s
where ep.eno = e.eno and ep.cno = c.pno and ep.sno = s.pno

#5 nhamzehn

nhamzehn

    مشترك

  • الأعضــاء
  • 187 مشاركة
  • الاهتمامات:المطالعة

تاريخ المشاركة 10 September 2007 - 01:19 PM

مشتغلتش يا باشا لأنه انت بتخلي رقم المورد null او حتى رقم العميل
وعشان تشتغل معك مية بالمية لازم تغير في الjoin بحيث انك تضيف (+) عند جدول الأشخاص لتصبح الجملة كالتالي:


select e.ename , c.pname as "customer", s.pname as "supplier", ep.price
from elem_pers ep , elements e , persons c , persons s
where ep.eno = e.eno and ep.cno = c.pno(+) and ep.sno= s.pno(+)
[/sq]

[sql]select e.ename , c.pname as "customer", s.pname as "supplier", ep.price
from elem_pers ep , elements e , persons c , persons s
where ep.eno = e.eno and ep.cno = c.pno(+) and ep.sno= s.pno(+)

سبحان الله وبحمده سبحان الله العظيم

اللهم لك الحمد والشكر كما ينبغي لجلال وجهك وعظيم سلطانك

#6 nhamzehn

nhamzehn

    مشترك

  • الأعضــاء
  • 187 مشاركة
  • الاهتمامات:المطالعة

تاريخ المشاركة 10 September 2007 - 01:36 PM

طريقة ثانية:
select e.ename , c.pname as "customer",  null as "supplier", ep.price
from elem_pers ep , elements e , persons c
where ep.eno = e.eno and ep.cno = c.pno
union
select e.ename , null , s.pname as "supplier", ep.price
from elem_pers ep , elements e , persons s
where ep.eno = e.eno and ep.sno= s.pno;

سبحان الله وبحمده سبحان الله العظيم

اللهم لك الحمد والشكر كما ينبغي لجلال وجهك وعظيم سلطانك

#7 Ahmed Omran

Ahmed Omran

    عضو

  • الأعضــاء
  • 19 مشاركة

تاريخ المشاركة 10 September 2007 - 01:51 PM

الف شكر يا اخي
بس كنت عايز افهم موضوع ال( + ) ده
لاني اول مرة اشوف حاجه زي كده ياريت لو مفيهاش قلة ذوق تشرحها لي

حاجه كمان في المشكلة التانية بتاعه رقم التليفون حضرتك قلت اني اخلي نوع الداتا number طب لو عايز ادخل رقم موبايل بيبدأ ب صفر يكون ازاي ؟
انا تقلت عليك انا عارف سامحني

#8 nhamzehn

nhamzehn

    مشترك

  • الأعضــاء
  • 187 مشاركة
  • الاهتمامات:المطالعة

تاريخ المشاركة 10 September 2007 - 02:46 PM

بالعكس أخ أحمد ما فيها قلة ذوق بالعكس احنا بنتعاون وبنساعد بعض وان شاء الله نظل هيك على طول

وانا ان شاء الله غداً راح احضرلك شرح صغير عن الربط ومن ضمنها ال (+) وراح ابعثلك كود
يمنع المستخدم من ادخال أحرف في خانة التلفون

انا كنت حاب أجاوبك اليوم بس للأسف مشغول شوي وان شاء الله غداً بكون الشرح جاهز

أخوك حمزة
سبحان الله وبحمده سبحان الله العظيم

اللهم لك الحمد والشكر كما ينبغي لجلال وجهك وعظيم سلطانك

#9 Ahmed Omran

Ahmed Omran

    عضو

  • الأعضــاء
  • 19 مشاركة

تاريخ المشاركة 10 September 2007 - 05:59 PM

بارك الله فيك يا أخ حمزة و جزاك الله خير

#10 asd202

asd202

    عضو نشط

  • الأعضــاء
  • 405 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 10 September 2007 - 09:59 PM

بالنسبة للمشلة التانية
ممن تخلية char
وتزود
check in(1,2,3,4,5,6,7,8,9,0,/)
begin

for i in REVERSE 1..100000

loop

message('اللهم ارحمنا');

end loop;

end;

#11 nhamzehn

nhamzehn

    مشترك

  • الأعضــاء
  • 187 مشاركة
  • الاهتمامات:المطالعة

تاريخ المشاركة 11 September 2007 - 09:52 AM

أخ أحمد بالنسبة لموضوع ال join هو ببساطة كالتالي:
لو انا طلبت منك تحضر اسماء الموظفين واسماء الأقسام اللي بشتغلوا فيها راح الجملة تكون كالتالي:
select e.ename , d.dname from emp e , dept d where e.deptno = d.deptno;

لو فرضنا انه عندي موظف غير تابع لأي دائرة او انه يوجد دائرة لا ينتمي اليها اي موظف واريد ان يظهروا في الإستعلام فأن الجملة السابقة لن تفي بالغرض لأنّ النتيجة ستكون فقط الموظفين الذين لديهم أقسام وهذا يسمى equi join أو inner join او simple join

لو طلب منك ان تحضر اسماء الموظفين واسماء أقسامهم بمن فيهم الذي ليس له دائرة فتكون الجملة كالتالي
select e.ename , d.dname from emp e , dept d where e.deptno = d.deptno(+)

ولو طلب منك ان تحضر اسماء الموظفين واسماء أقسامهم بمن فيه الأقسام التي لا يوجد فيها اي موظف فتكون الجملة
select e.ename , d.dname from emp e , dept d where e.deptno(+) = d.deptno

وهذا يسمى outer join

وان شاء الله تكون الفكرة وصلت وانصحك بقراءة فصل ال join من كتاب الاوراكل فهو بسيييييييييييط جداً
واي خدمة ثانية انا جاهز
سبحان الله وبحمده سبحان الله العظيم

اللهم لك الحمد والشكر كما ينبغي لجلال وجهك وعظيم سلطانك

#12 Ahmed Omran

Ahmed Omran

    عضو

  • الأعضــاء
  • 19 مشاركة

تاريخ المشاركة 11 September 2007 - 11:26 AM

شكرا يا باشا جزاك الله كل خير

#13 nhamzehn

nhamzehn

    مشترك

  • الأعضــاء
  • 187 مشاركة
  • الاهتمامات:المطالعة

تاريخ المشاركة 11 September 2007 - 02:05 PM

بالنسبة للمشكلة الثانية بتقدر تحلها زي ما قال أخونا asd202 وتعمل الشرط كالتالي
alter table emp add constraint emp_tel_ck check (tel between '0000000' and '9999999')

سبحان الله وبحمده سبحان الله العظيم

اللهم لك الحمد والشكر كما ينبغي لجلال وجهك وعظيم سلطانك