المعامل EXISTS

من موسوعة حسوب
< SQL

يستخدم المعامل EXISTS للتأكد من وجود سجلات ناتجة عن الاستعلام الفرعي المستخدم في الاستعلام الرئيسي.

مثال

إن كان في قاعدة البيانات الجدولان الآتيان:

الجدول الأول: جدول الطلاب students

RegDate CourseID LastName FirstName StudentID
‎07-JUL-2017‎ 0206 Najjar Rama 1147
‎08-NOV-2017‎ 0604 Kordi Jenan 1148
‎07-JUL-2017 0206 Bitar Rahaf 1149
‎20-AUG-2017 0607 Taweel Farah 1150
‎08-NOV-2017 0610 Arab Rami 1151
‎24-OCT-2017 0803 Akkad Aya 1152
‎08-NOV-2017 0504 Haddad Abed 1153
‎20-AUG-2017 0801 Fares Tasneem 1154
‎24-OCT-2017 0607 Hamsho Monther 1155
‎30-SEP-2017 0607 Abd Allah Hiba 1156

الجدول الثاني: جدول الدورات التدريبية courses

DepartmentID Lecturer Course CourseID
EN01 Dr. Reem Hadi English (Adv) 0204
EN01 Dr. Shadi Balid English (Int) 0206
EN02 Dr. Firas Abd English (TOEFL) 0211
IT01 Eng. Nasser Sharif Artificial Intelligence 0604
IT01 Eng. Amal Safi Networks 0607
IT01 Eng. Salem Najm ICDL 0610
IT02 Eng. Nasser Sharif SQL Programming 0703
IT02 Eng. Amal Safi FrontEnd Programming 0704
IT03 Mr. Maher Siraj Photoshop Design 0801
IT03 Ms. Nadia Taleb Illustrator Design 0802
IT03 Mr. Maher Siraj UI Design 0803

فإن الاستعلام الآتي:

SELECT Course
FROM courses
WHERE EXISTS 
  (SELECT * 
  FROM students 
  WHERE CourseID = courses.CourseID);

يعرض أسماء الدورات التدريبية التي يوجد فيها طالب أو أكثر دون أيّ من الدورات الخالية، أي تظهر الدورات الآتية:

Course
English (Int)
Artificial Intelligence
Networks
ICDL
Photoshop Design
UI Design

المعامل NOT EXISTS

يعمل بمهمة معاكسة للمعامل EXISTS أي للتأكد من عدم وجود سجلات ناتجة عن الاستعلام الفرعي المستخدم في الاستعلام الرئيسي.

مثال

إن تنفيذ الاستعلام الآتي:

SELECT Course
FROM courses
WHERE NOT EXISTS 
  (SELECT * 
  FROM students 
  WHERE CourseID = courses.CourseID);

سيعرِض أسماء الدورات التدريبية التي لم يُسجّل فيها أي طالب، لتظهر النتائج:

Course
English (Adv)‎
English (TOEFL)‎
SQL Programming
FrontEnd Programming
Illustrator Design

التوافقية

SQLServer SQLite Oracle PostgreSQL MySQL
نعم نعم نعم نعم نعم

مصادر