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

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

صورة
- - - - -

سؤال في عمل جملة sql


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

#1 almujtaba

almujtaba

    عضو

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

تاريخ المشاركة 03 May 2005 - 08:41 AM

عندما يكون عندي جدولين الاول فيها بيانات الموظفين والاخر بيانات رواتب الموظفين بحيث يحتوي الاول على رقم الموظف والثاني على رقم الموظف(مفتاح اجنبي من الجدول الاول) وتاريخ الحصول على الراتب.
السؤال كيف استطيع اخراج جميع الموظفين من الجدول الاول مع تاريخ الحصول على الراتب مع العلم ان بعض الموظفين غير موجود في جدول رواتب الموظفين لكن اريده ان يخرج بقيمة لا شيء(يعني اذا كان مسجل 3 موظفين في الجدول و2 فقط منهم مسجل في الجدول الثاني اريد ان يخرج لي ثلاث موظفين المسجلين وغير المسجلين في الجدول الثاني وتكون قيمة الغير مسجلين لا شيء).
مع الشكر الجزيل.

#2 Osama Soliman

Osama Soliman

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,611 مشاركة
  • الاسم الأول:Osama
  • اسم العائلة:Soliman
  • البـلـد: Country Flag
  • المنصب الحالي:Oracle Technical Consultant - Asfour Crystal International

تاريخ المشاركة 04 May 2005 - 02:52 AM

يمكن اخى استخدام Outer Join
وهو يعنى عرض البيانات من احدى الجدول بالكامل حتى لو تكن لها مقابل (مفتاح) فى الجدول الاخر.

بفرض ان اسم الجدول الاول Employees وبه بيانات الموظفين
employee_id, name, hire_date
والجدول الثانى به تفاصيل الراتب واسمه Emp_sal وبه
employee_id , pay_date, salary

يمكن كتابة الجملة كما يلى
Select e.employee_id, e.name, s.salary, s.pay_date
from employees e, emp_sal s
where e.employee_id = s.employee_id(+);


فاضافة (+) فى جانب جدول المرتبات يعنى ظهور جيمع السجلات من الجدول على الجانب الاخر (يعنى الموظفين)

مع تحياتى
اسامه سليمان
القاهرة

وقل رب زدنى علماً
Osama M. Soliman
Oracle Certified Professional
Oracle Technical Consultant

 Asfour Crystal International
Cairo - Egypt
Osama.Soliman@hotmail.com
Osama.Soliman@asfourcystal.com


#3 almujtaba

almujtaba

    عضو

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

تاريخ المشاركة 04 May 2005 - 11:44 AM

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

#4 Osama Soliman

Osama Soliman

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,611 مشاركة
  • الاسم الأول:Osama
  • اسم العائلة:Soliman
  • البـلـد: Country Flag
  • المنصب الحالي:Oracle Technical Consultant - Asfour Crystal International

تاريخ المشاركة 05 May 2005 - 10:08 PM

اخى الكريم /almujtaba
لوضع صفر مكان الموظف الغير مسجل بجدول الرواتب فى تاريخ معين يمكن استخدام دالة NVL
والتى تعمل على اعادة قيمة معينة كبديل للقيم الفارغة Nulls

وبالتالى تصبح الجملة

Select e.employee_id, e.name, NVL(s.salary,0), s.pay_date
from employees e, emp_sal s
where e.employee_id = s.employee_id(+);


مع تحياتى
اسامه سليمان
القاهرة

وقل رب زدنى علماً
Osama M. Soliman
Oracle Certified Professional
Oracle Technical Consultant

 Asfour Crystal International
Cairo - Egypt
Osama.Soliman@hotmail.com
Osama.Soliman@asfourcystal.com


#5 almujtaba

almujtaba

    عضو

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

تاريخ المشاركة 07 May 2005 - 08:28 AM

شكرا اسامة على تفاعلك ووفقك الله لما يحب ويرضاه