معاملات المقارنة مع نتائج الاستعلام الفرعي

من موسوعة حسوب
< SQL
مراجعة 15:38، 28 يناير 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات) (استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

تستخدم المعاملات 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 لأنه لا يدعم المعاملات السابقة.

مصادر