معاملات المقارنة مع نتائج الاستعلام الفرعي
تستخدم المعاملات SOME
و ANY
و ALL
بهدف المقارنة مع القيم الناتجة (لعمودٍ واحدٍ) عن أحد الاستعلامات الفرعية، وستُذكر تباعًا.
معامل ANY
إذ تعيد المقارنة قيمة TRUE
في حال تطابق التعبير مع قيمة أيّ من السجلات الناتجة عن الاستعلام الفرعي وقيمة FALSE
في حال عدم وجود أي نتيجة مطابقة.
معامل SOME
إذ تعيد المقارنة قيمة TRUE
في حال وجود بعض القيم في السجلات الناتجة عن الاستعلام الفرعي والمطابقة لقيمة التعبير الذي تُقارن معه، وهي بهذا مماثلة لنتيجة المعامل ANY.
معامل ALL
إذ تعيد المقارنة قيمة TRUE
في حال تطابق التعبير مع كل قيمة موجودة في السجلات الناتجة عن الاستعلام الفرعي وقيمة FALSE
في حال عدم وجود نتيجة مخالفة واحدة على الأقل.
مثال
ليكن الجدولان الآتيان موجودان في قاعدة البيانات:
الجدول الأول boys
: والذي يعبّر عن أداء الفتيان في أحد الامتحانات
Mark | Name | StudentID |
---|---|---|
97 | Mohammad | 127 |
59 | Hasan | 128 |
72 | Ayham | 129 |
63 | Kareem | 130 |
88 | Yamen | 131 |
76 | Ahmad | 132 |
الجدول الثاني girls
: والذي يعبّر عن أداء الفتيات في نفس الامتحان السابق
Mark | Name | StudentID |
---|---|---|
76 | Sarah | 133 |
82 | Rama | 134 |
95 | Zeina | 135 |
99 | Aalaa | 136 |
63 | Farah | 137 |
79 | Aya | 138 |
إن تنفيذ الاستعلام الآتي:
SELECT Name, Mark FROM girls WHERE mark = ANY (SELECT mark FROM boys);
سيعرض الاسم والنتيجة للفتيات اللواتي حصلن على علامات متماثلة مع أيّ من العلامات الناتجة عن الاستعلام الفرعي (علامات السجلات الموجودة في جدول الفتيان)، لتظهر النتيجة الآتية:
Mark | Name |
---|---|
76 | Sarah |
63 | Farah |
وإن تنفيذ الاستعلام الآتي:
SELECT Name, Mark FROM girls WHERE mark > ALL (SELECT mark FROM boys);
سيعرض الاسم والنتيجة للطالبة التي حصلت على العلامة الأعلى من كافة العلامات الناتجة عن الاستعلام الفرعي (علامات السجلات الموجودة في جدول الفتيان)، لتظهر النتيجة الآتية:
Mark | Name |
---|---|
99 | Aalaa |
التوافقية
SQLServer | SQLite | Oracle | PostgreSQL | MySQL |
---|---|---|---|---|
نعم | لا | نعم | نعم | نعم |
تمكن الاستفادة من المعامل IN
في محرك SQLite لأنه لا يدعم المعاملات السابقة.