الانتقال إلى المحتوى
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.

شرح بسيط عن Subquery ( Exist & Not Exist)

Featured Replies

بتاريخ:

السلام عليكم و رحمة الله و بركاته

 

ممكن شرح مع مثال للخصائص التالية مع SUBQUERY

 

EXIST , NOT EXIST

 

 

بتاريخ:

SUBQUERY
select
col1,
col2,
(select col3 from table2 b where b.id=a.f_id )col3--subquery
from table1 a ;

exists
select * from table1 a where exists (select 1 from table2 where a.id=b.f_id and col3='yes');

not exists
select * from table1 a where not exists (select 1 from table2 where a.id=b.f_id);
بتاريخ:
  • كاتب الموضوع

متشكر جدا جداً 

بتاريخ:

ببساطة

exists هي دالة function  تعيد قيمة منطقية صح أو خطأ.

مثلا هل فلان موجود الجواب يكون إما نعم أو لا

 

مثال من جدول employees كما يلي:

هناك موظف رقمه 201 اريد أن أعلم هل هو موجود ضمن قائمة الأسماء التي تأخذ راتب أعلى من 10000 دولار ؟ إذا كان كذلك أعطني اسمه الكامل رقم هاتفه وبريده الالكتروني.

طبعا يمكن تنفيذ الاستعلام باستخدام in لكن  سننفذ بالاستعلام كالتالي:

select e.first_name || ' ' || e.last_name, e.email, e.phone_number
  from employees e
 where e.employee_id = 201
   and exists (select *
          from employees s
         where s.salary >= 10000
           and e.employee_id = s.employee_id)

لاحظ ما يلي في الاستعلام السابق:

هناك ربط داخلي بين نتائج الاستعلام الخارجي ونتائج الاستعلام الداخلي عن طريق الشرط 

e.employee_id = s.employee_id

 

ملاحظة أخرى عند استخدام الدالة exists فإن الاستعلام الداخلي لن يهمنا سوى لمعرفة الجواب المنطقي بوجود الموظف المطلوب أو عدم وجوده ضمن قائمة الموظفين الذين يتقاضون راتب أعلى (أو يساوي) 10000 ولن يهمنا هنا نتيجة الاستعلام الداخلي

لذلك نفس الاستعلام السابق قد تراه حقيقة بالشكل التالي:

select e.first_name || ' ' || e.last_name, e.email, e.phone_number
  from employees e
 where e.employee_id = 201
   and exists (select 1
          from employees s
         where s.salary >= 10000
           and e.employee_id = s.employee_id)

وناتج الاستعلام لا يتغير.

لكن حقيقة ما قمنا بعمله هنا أننا خففنا على السيرفر الذي تعمل عليه قواعد البيانات، لأنه لم يعد مطالب بالرد بكمية البيانات الكبيرة كجواب للاستعلام الداخلي بل الخرج يكون اي قيمة ثابتة وهنا وضعت أنا القيمة 1 لأنه في الحالتين كما قلت لاتهمنا قيم الخرج للأستعلام الداخلي بل جواب الدالة exists

 

 

قد يأتي أحد ويقول لماذا كل هذا التعقيد، استطيع الحصول على نفس النتيجة لكن باستخدام in  بدلا من الدالة exists

الجواب هناك أفضلية للدالة exists على استخدام in 

أولا من حيث الأداء exists أسرع من in، سترى الفرق بشكل واضح في حال كانت البيانات ضخمة 

ثانيا لو كنت بحاجة لتنفيذ أمر معاكس فهناك أفضلية كبيرة لاستخدام not exists بدلا من استخدام not in

لأننا نعلم خطورة استخدام not in فلو أعاد الاستعلام الداخلي اي قيمة null

فستكون النتيجة كلها مضروبة

لكن استخدام الدالة not exists ستحمينا من هذه الحالة.

 

وهذه أسباب قد تجعل مدير قواعد البيانات DBA يقوم بتغيير الاستعلام في تطبيقك، ويقد يفرضه عليك إن كان متمكن مما يقوم به.

 

 

 

 

بتاريخ:

أخي سامر .. انت رائع

زادك الله علما وجزاك كل خير

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

الله يفتح عليك يا اخ سامر شرح وافي و رائع 

 

شكراً ليكم كلكم كنت محتاجها جداً

بتاريخ:

على الرحب والسعة

أنا أقلكم علما، والله يفتح علينا جميعا من علمه وكرمه.

  • بعد 2 سنة...
بتاريخ:

well done thank u so much 

تم تعديل بواسطة abduallah alshaibani

بتاريخ:

اذا في شروحات عن exists في insert , update , delete 

 

افيــــــدونا

  • بعد 5 أسابيع...
بتاريخ:

معلش يا هندسة يعني انت قصد حضرتك ان Exists مبتبصش على حاجة فى الكويري التاني غير على الWhere condition بس صح كده ولا انا غلطان 

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

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

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

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

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

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.