1 / 15

الاستعلامات الفرعية ( Subqueries )

الاستعلامات الفرعية ( Subqueries ). الاستعلامات الفرعية ( Subqueries ). ماهي الاستعلامات الفرعية؟ الاستعلام الفرعي عبارة عن استعلام طبيعي مضمن داخل استعلام آخر. يمكن للاستعلام الفرعي أن يتواجد في جزء . WHERE جزء . HAVING جزء .SELECT دائما الاستعلام الفرعي يكون بداخل أقواس ().

pillan
Download Presentation

الاستعلامات الفرعية ( Subqueries )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. الاستعلامات الفرعية(Subqueries)

  2. الاستعلامات الفرعية (Subqueries) • ماهي الاستعلامات الفرعية؟ الاستعلام الفرعي عبارة عن استعلام طبيعي مضمن داخل استعلام آخر. • يمكن للاستعلام الفرعي أن يتواجد في • جزء .WHERE • جزء .HAVING • جزء .SELECT • دائما الاستعلام الفرعي يكون بداخل أقواس (). • أنواع الاستعلامات الفرعية: 1- “scalar subquery” : تعيد عمود واحد تقاطع صف واحد أي تعيد قيمة واحدة فقط. 2- ”row subquery“ : تعيد مجموعة من الأعمدة تقاطع صف واحد. 3- ”table subquery“ : تعيد عمود واحد أو أكثر تقاطع مجموعة صفوف.

  3. الاستعلامات الفرعية (Subqueries) • مثال: • STAFF (sno, fname, lname, position, sex, DOB, salary, bno) • BRANCH (bno, street, city, postcode) المطلوب إيجاد أرقام وأسماء ومراتب كل الموظفين الذين يعملون في الفرع الموجود في شارع ‘163 Main St’. • الحل: SELECT sno, fname, lname, position FROM staff WHERE bno = (SELECT bno FROM branch WHERE street = ‘163 Main St’);

  4. الاستعلامات الفرعية (Subqueries) • مثال: • STAFF (sno, fname, lname, position, sex, DOB, salary, bno) المطلوب إيجاد أرقام و أسماء والمراتب الوظيفية والرواتب للموظفين الذين رواتبهم أعلى من المتوسط. • الحل: SELECT sno, fname, lname, position, salary – (SELECT avg(salary) FROM staff ) AS sal_diff FROM staff WHERE salary > ( SELECT avg(salary) FROM staff );

  5. الاستعلامات الفرعية (Subqueries) • غالبا جملة (GROUP BY)لا تستخدم في الاستعلامات الفرعية. • عادة الأعمدة في جملة الـ SELECT التي تستخدم في الاستعلامات الفرعية تكون تابعة للجدول في جزء الـ FROM الخاص بالاستعلام الفرعي, ولكن توجد حالات تكون الأعمدة في الاستعلام الفرعي تابعة للجدول الموجود في الاستعلام الرئيسي الذي يتضمن الاستعلام الفرعي وفي هذه الحالة يسمى الاستعلام الفرعي بـ ” correlated subquery“. • إذا كان لدينا استعلام وكان يجب علينا أن نقارن فيه استعلام فرعي بشيء آخر فإنه يجب أن نضع الاستعلام الفرعي في جهة اليمين للمقارنة.

  6. الاستعلامات الفرعية (Subqueries) • إذا كان العائد من الاستعلام الفرعي قيمة واحدة فقط فإننا نستخدم معه أدوات المقارنة (> , < , = , =< , => , <>) . • إذا كان العائد أكثر من قيمة واحدة فإننا نستخدم معه (ANY,ALL,IN) إضاففة إلى أدوات المقارنة ماعدا (IN) لا نستخدم معها أدوات مقارنة.

  7. استخدام (IN) في الاستعلامات الفرعية • مثال: - PROPERTYFORRENT (pno, street, area, city, pcode, type, rooms, rent, sno) - STAFF (sno, fname, lname, position, sex, DOB, salary, bno) - BRANCH (bno, street, city, postcode) المطلوب إيجاد كل العقارات التي يتابعها الموظفون الذين يعملون في الفرع الذي يقع في شارع ‘163 Main St’. • الحل: SELECT pno, street, area, city, pcode, type, rooms, rent FROM property_for_rent WHERE sno IN (SELECT sno FROM staff WHERE bno = (SELECT bno FROM branch WHERE street = ‘163 MainSt’));

  8. استخدام (ANY/ ALL) في الاستعلامات الفرعية • مثال: • STAFF (sno, fname, lname, position, sex, DOB, salary, bno) المطلوب استرجاع بعض البيانات للموظف الذي راتبه أعلى من كل رواتب الموظفين في الفرع رقم .B3 • الحل: SELECT sno, fname, lname, position, salary FROM staff WHERE salary > ALL (SELECT salary FROM staff WHERE bno = ‘B3’);

  9. استخدام (ANY/ ALL) في الاستعلامات الفرعية Sno LName position salary FName SL21 John White Manager 30000

  10. استخدام (ANY/ ALL) في الاستعلامات الفرعية * يمكننا كتابة SOME بدل ANY أو ANY بدل SOME لأنه لهما نفس المعنى. • مثال: • STAFF (sno, fname, lname, position, sex, DOB, salary, bno) المطلوب استرجاع بعض البيانات للموظف الذي راتبه أعلى من على الأقل راتب موظف واحد في الفرع رقم .B3 • الحل: SELECT sno, fname, lname, position, salary FROM staff WHERE salary > SOME (SELECT salary FROM staff WHERE bno = ‘B3’);

  11. استخدام (ANY/ ALL) في الاستعلامات الفرعية sno LName position salary FName SL21 John White Manager 30000 SG14 David Ford 18000 Supervisor SG5 Susan Brand 24000 Manager

  12. استخدام (EXIST/ NOT EXIST) • EXISTتعيد ”TRUE“ إذا ظهر ناتج من الاستعلام حتى لو كان صف واحد , وتعيد ”FALSE“ إذا لم يوجد هناك ناتج. • مثال: • STAFF (sno, fname, lname, position, sex, DOB, salary, bno) • BRANCH (bno, street, city, postcode) المطلوب إيجاد كل الموظفين الذين يعملون في فروع لندن. SELECT sno, fname, lname, position FROM staff s WHERE EXISTS (SELECT * FROM branch b WHERE s.bno = b.bno AND city =‘London’);

  13. استخدام (UNION) • عندما نستخدم (UNION) في الاستعلامات فإننا نستخدمها لأجل الدمج وإجراء عملية اتحاد بين استعلامين مختلفين. • مثال: - PROPERTYFORRENT (pno, street, area, city, pcode, type, rooms, rent, sno) - STAFF (sno, fname, lname, position, sex, DOB, salary, bno) -BRANCH (bno, street, city, postcode) المطلوب إيجاد كل المدن التي توجد بها فروع أو توجد بها عقارات. • الحل: SELECT city FROM branch) UNION (SELECT city FROM propertyforrent);

  14. استخدام (INTERSECT) • تستخدم (INTERSECT) في الاستعلامات لإيجاد حل مشترك بين ناتج استعلامين مختلفين. • مثال:“من العلاقات في الشريحة السابقة“ المطلوب إيجاد مدن تحتوي على فروع وعقارات معا. • الحل: (SELECT city FROM branch) INTERSECT (SELECT city FROM propertyforrent); ------------------------------------------------------- SELECT DISTINCT b.city FROM branch b, propertyforrent p WHERE b.city=p.city; ------------------------------------------------------- SELECT DISTINCT city FROM branch b WHERE EXISTS (SELECT * FROM propertyforrent p WHERE p.city = b.city);

  15. استخدام (EXCEPT) • EXCEPTتستخدم لاستثناء نتيجة معينة. • مثال: - PROPERTYFORRENT (pno, street, area, city, pcode, type, rooms, rent, sno) - STAFF (sno, fname, lname, position, sex, DOB, salary, bno) - BRANCH (bno, street, city, postcode) المطلوب إيجاد كل المدن التي توجد فيها فروع لكن لا توجد فيها عقارات للإيجار. • الحل: (SELECT city FROM branch) EXCEPT (SELECT city FROM propertyforrent); ----------------------------------------------------- SELECT DISTINCT city FROM branch WHERE city NOT IN (SELECT city FROM propertyforrent); ----------------------------------------------------- SELECT DISTINCT city FROM branch b WHERE NOT EXISTS (SELECT * FROM propertyforrent p WHERE p.city = b.city);

More Related