الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

بتاريخ:

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

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

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


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

ارجو الرد سريعا من فضلكم
جزاكم الله خيرا
أحمد عمران
[email protected]
[email protected]

بتاريخ:

لو فرضنا انه جدول العناصر اسمه 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 بدون اي كود

بتاريخ:
  • كاتب الموضوع

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

بتاريخ:
  • كاتب الموضوع

للاسف يا باشا مشتغلتش
مشيت ورا الاكواد اللي كتبتها بالضبط و عملت 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

بتاريخ:

مشتغلتش يا باشا لأنه انت بتخلي رقم المورد 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(+)

بتاريخ:

طريقة ثانية:

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;

بتاريخ:
  • كاتب الموضوع

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

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

بتاريخ:

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

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

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

أخوك حمزة

بتاريخ:
  • كاتب الموضوع

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

بتاريخ:

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

بتاريخ:

أخ أحمد بالنسبة لموضوع ال 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 من كتاب الاوراكل فهو بسيييييييييييط جداً
واي خدمة ثانية انا جاهز

بتاريخ:
  • كاتب الموضوع

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

بتاريخ:

بالنسبة للمشكلة الثانية بتقدر تحلها زي ما قال أخونا asd202 وتعمل الشرط كالتالي

alter table emp add constraint emp_tel_ck check (tel between '0000000' and '9999999')

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.