تداخل استعلام ضمن استعلام آخر أو في تعبير باستخدام استعلام فرعي

قد تريد أحيانًا استخدام نتائج الاستعلام كحقل في استعلام آخر، أو كمعيار لحقل استعلام. على سبيل المثال، افترض أنك تريد معرفة الفاصل الزمني بين طلبات شراء كل منتج من منتجاتك. لإنشاء استعلام يقوم بتوضيح الفاصل الزمني هذا، يلزمك المقارنة بين كل تاريخ لطلب شراء وتواريخ طلبات الشراء الأخرى لهذا المنتج. تتطلب أيضًا عملية المقارنة بين تواريخ طلبات الشراء هذه وجود استعلام. يمكنك تداخل هذا الاستعلام ضمن الاستعلام الرئيسي باستخدام استعلام فرعي.

تستطيع كتابة استعلام فرعي في تعبير أو في جملة لغة الاستعلامات المركبة (SQL) الموجودة في طريقة عرض SQL.

في هذه المقالة

استخدام نتائج استعلام كحقل في استعلام آخر

استخدام استعلام فرعي كمعيار لحقل استعلام

الكلمات الأساسية الشائعة لـ SQL التي يمكنك استخدامها مع استعلام فرعي

استخدام نتائج استعلام كحقل في استعلام آخر

يمكنك استخدام استعلام فرعي اسم مستعار (SQL) لحقل. استخدم استعلام فرعي كاسم مستعار لحقل عندما تريد استخدام نتائج الاستعلام الفرعي كحقل في الاستعلام الرئيسي.

ملاحظة: لا يمكن لاستعلام فرعي تقوم باستخدامه كاسم مستعار لحقل إرجاع أكثر من حقل واحد.

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

على سبيل المثال، قم بالرجوع إلى المثال الذي كنت تريد فيه معرفة الفاصل الزمني بين طلبات الشراء الخاصة بكل منتج من منتجاتك. لتحديد الفاصل الزمني هذا، يلزمك المقارنة بين كل تاريخ لطلب شراء وتواريخ طلبات الشراء الأخرى لهذا المنتج. يمكنك إنشاء استعلام يقوم بتوضيح هذه المعلومات باستخدام قالب قاعدة البيانات Northwind.

شرح كيفية إعداد Northwind

  1. من القائمة ملف، انقر فوق جديد.

  2. ضمن القوالب المتوفرة، انقر فوق نماذج القوالب.

  3. انقر فوق Northwind، ثم فوق إنشاء.

  4. اتبع الإرشادات الموجودة في الصفحة Northwind Traders (في علامة تبويب الكائن شاشة بدء التشغيل) لفتح قاعدة البيانات، ثم قم بإغلاق النافذة "مربع حوار تسجيل الدخول".

  1. ضمن علامة التبويب إنشاء، في المجموعة استعلامات، انقر فوق تصميم الاستعلام.

  2. في مربع الحوار إظهار جدول، انقر فوق علامة التبويب استعلامات، ثم انقر نقرًا مزدوجًا فوق طلبات المنتج.

  3. أغلق مربع الحوار إظهار جدول.

  4. انقر نقرًا مزدوجًا فوق الحقل معرف المنتج ثم فوق الحقل تاريخ الطلب لإضافتهما إلى شبكة تصميم الاستعلام.

  5. في الصف فرز الخاص بعمود الشبكة معرف المنتج، حدد تصاعدي.

  6. في الصف فرز الخاص بعمود الشبكة تاريخ الطلب، حدد تنازلي.

  7. في العمود الثالث من الشبكة، انقر بزر الماوس الأيمن فوق صف الحقل، ثم انقر فوق تكبير/تصغير من القائمة المختصرة.

  8. في مربع الحوار تكبير/تصغير، اكتب التعبير التالي أو قم بلصقه:

    ‎Prior Date: (SELECT‎ ‎MAX(‎‎[Order Date])‎ 
    ‎FROM [Product Orders] AS [Old Orders]‎
    ‎WHERE [Old Orders]‎‎.[‎‎Order Date] < [Product Orders].[Order Date]‎
    ‎AND [Old Orders]‎‎.[‎‎Product ID] = [Product Orders].[Product ID])‎

يعتبر هذا التعبير الاستعلام الفرعي. بالنسبة لكل صف، يقوم الاستعلام الفرعي بتحديد أحدث تاريخ طلب والذي يعتبر أقدم من تاريخ الطلب المقترن بالفعل بالصف. لاحظ طريقة استخدام الكلمة الأساسية AS لإنشاء اسم مستعار لجدول، وذلك لكي تتمكن من مقارنة القيم الموجودة في الاستعلام الفرعي بالقيم الموجودة في الصف الحالي للاستعلام الرئيسي.

  1. في العمود الرابع من الشبكة، في صف الحقل، اكتب التعبير التالي:

    Interval: [Order Date]-[Prior Date]‎

يقوم هذا التعبير بحساب الفاصل الزمني بين كل تاريخ طلب وتاريخ الطلب السابق له لهذا المنتج، وذلك باستخدام القيمة للتاريخ السابق الذي تم تحديده باستخدام استعلام فرعي.

  1. في علامة التبويب تصميم، في المجموعة نتائج، انقر فوق تشغيل.

    1. يقوم الاستعلام بتشغيل وعرض قائمة بأسماء المنتجات وتواريخ الطلبات وتواريخ الطلبات السابقة، علاوةً على الفاصل الزمني بين تواريخ الطلبات. يتم فرز النتائج أولاً حسب "معرّف المنتج" (بترتيب تصاعدي)، ثم حسب "تاريخ الطلب" (بترتيب تنازلي).

    2. ملاحظة: بما أن "معرّف المنتج" يعتبر حقل بحث، فإن Access يعرض بشكلٍ افتراضي قيم البحث (في هذه الحالة، اسم المنتج)، وذلك بدلاً من "معرّفات المنتجات" الفعلية. وعلى الرغم من أن ذلك يؤدي إلى تغيير القيم التي تظهر، فإنه لا يؤدي إلى تغيير ترتيب الفرز.

  2. قم بإغلاق قاعدة البيانات Northwind.

أعلى الصفحة

استخدام استعلام فرعي كمعيار لحقل استعلام

يمكنك استخدام استعلام فرعي كـمعايير حقل. استخدم استعلام فرعي كمعيار حقل عندما تريد استخدام نتائج الاستعلام الفرعي لتحديد القيم التي يعرضها الحقل.

على سبيل المثال، افترض أنك تريد مراجعة قائمة طلبات تمت معالجتها من قِبل موظفين لا يعملون كمندوبي مبيعات. لإنشاء هذه القائمة، يلزمك مقارنة معرّف الموظف لكل طلب بقائمة معرّفات الموظفين الذين لا يعملون كمندوبي مبيعات. ولإنشاء هذه القائمة واستخدامها كمعيار حقل، استخدم استعلام فرعي كما هو موضح في الإجراء السابق:

  1. افتح Northwind 2007.accdb وقم بتمكين محتوياتها.

  2. أغلق نموذج تسجيل الدخول.

  3. في علامة التبويب إنشاء، في المجموعة خيارات أخرى، انقر فوق تصميم الاستعلام.

  4. في مربع الحوار إظهار جدول، ضمن علامة التبويب جداول، انقر نقرًا مزدوجًا فوق الطلبات ثم فوق الموظفون.

  5. أغلق مربع الحوار إظهار جدول.

  6. في جدول "الطلبات"، انقر نقرًا مزدوجًا فوق الحقل معرف الموظف، ثم فوق الحقل معرف الطلب، ثم فوق الحقل تاريخ الطلب لإضافتها إلى شبكة تصميم الاستعلام. في جدول "الموظفون"، انقر نقرًا مزدوجًا فوق الحقل المسمى الوظيفي لإضافته إلى شبكة التصميم.

  7. انقر بزر الماوس الأيمن فوق صف المعايير الخاص بالعمود Employee ID، ثم انقر فوق تكبير/تصغير من القائمة المختصرة.

  8. في المربع تكبير/تصغير، اكتب التعبير التالي أو قم بلصقه:

    ‎IN (SELECT [ID] FROM [Employees]‎ 
    ‎WHERE [Job Title‎]<‎>'Sales Representative')‎

    هذا هو الاستعلام الفرعي. فهو يقوم بتحديد كافة معرّفات الموظفين عندما لا يكون المسمى الوظيفي للموظف هو "مندوب مبيعات"، ويقوم بتوفير مجموعة النتائج هذه للاستعلام الرئيسي. يقوم الاستعلام الرئيسي بعد ذلك بالتحقق من وجود معرّفات الموظفين الخاصة بجدول "الطلبات" في مجموعة النتائج.

  9. في علامة التبويب تصميم، في المجموعة نتائج، انقر فوق تشغيل.

    يتم تشغيل الاستعلام، وتقوم نتائج الاستعلام بإظهار قائمة الطلبات التي تمت معالجتها من قِبل الموظفين الذين لا يعملون كمندوبي مبيعات.

أعلى الصفحة

الكلمات الأساسية الشائعة لـ SQL التي يمكنك استخدامها مع استعلام فرعي

توجد العديد من الكلمات الأساسية لـ SQL التي يمكنك استخدامها مع استعلام فرعي:

ملاحظة: لا تعتبر هذه القائمة شاملة. يمكنك استخدام أية كلمة أساسية صحيحة لـ SQL في استعلام فرعي، مع استبعاد الكلمات الأساسية الخاصة بتعريف البيانات.

  • ALL    استخدم ALL في عبارة WHERE لاسترداد الصفوف التي تفي بالشروط وذلك عند مقارنتها بكل صف يتم إرجاعه بواسطة الاستعلام الفرعي.

على سبيل المثال، افترض أنك تقوم بتحليل بيانات طالب في كلية ما. يجب أن يحتفظ الطلاب بالحد الأدنى من متوسط الدرجات (GPA)، الذي يختلف من مجال اختصاص لآخر. يتم تخزين مجالات الاختصاص والحد الأدنى من متوسط الدرجات (GPAs) الخاص بها في جدول يسمى "مجالات الاختصاص"، كما يتم تخزين معلومات الطلاب المتعلقة بها في جدول يسمى "سجلات_الطلاب".

لمشاهدة قائمة بمجالات الاختصاص (والحد الأدنى من متوسط الدرجات الخاص بها) التي يتجاوز فيها كل طالب الحد الأدنى من متوسط الدرجات لمجال الاختصاص، يمكنك استخدام الاستعلام التالي:

‎SELECT [Major], [‎Min_GPA] 
‎FROM [Majors]‎
‎WHERE [‎Min_GPA‎] < ALL‎
‎(SELECT [GPA] FROM [‎Student_Records]
‎WHERE [‎Student_Records].[‎Major]=[Majors].[Major]);‎
  • ANY    استخدم ANY في عبارة WHERE لاسترداد الصفوف التي تفي بالشروط وذلك عند مقارنتها بصف واحد على الأقل من الصفوف التي يتم إرجاعها بواسطة الاستعلام الفرعي.

    على سبيل المثال، افترض أنك تقوم بتحليل بيانات طالب في كلية ما. يجب أن يحتفظ الطلاب بالحد الأدنى من متوسط الدرجات (GPA)، الذي يختلف من مجال اختصاص لآخر. ويتم تخزين مجالات الاختصاص والحد الأدنى من متوسط الدرجات (GPAs) الخاص بها في جدول يسمى "مجالات الاختصاص"، كما يتم تخزين معلومات الطلاب المتعلقة بها في جدول يسمى "سجلات_الطلاب".

    لمشاهدة قائمة بمجالات الاختصاص (والحد الأدنى من متوسط الدرجات الخاص بها) التي لا يحقق فيها كل طالب الحد الأدنى من متوسط الدرجات لمجال الاختصاص، يمكنك استخدام الاستعلام التالي:

    ‎SELECT [Major], [‎Min_GPA] 
    ‎FROM [Majors]‎
    ‎WHERE [‎Min_GPA‎] > ANY‎
    ‎(SELECT [GPA] FROM [‎Student_Records]
    ‎WHERE [‎Student_Records].[‎Major]=[Majors].[Major]);‎

    ملاحظة: يمكنك أيضًا استخدام الكلمة الأساسية SOME لنفس الغرض؛ تعتبر الكلمة الأساسية SOME مترادفة مع ANY.

  • EXISTS    استخدم EXISTS في عبارة WHERE لتشير إلى أنه يجب أن يقوم الاستعلام الفرعي بإرجاع صف واحد على الأقل. يمكنك أيضًا تقديم NOT على EXISTS لتشير إلى أنه لا يجب أن يقوم الاستعلام الفرعي بإرجاع أي صفوف.

    على سبيل المثال، يقوم الاستعلام التالي بإرجاع قائمة للمنتجات التي تم العثور عليها في طلب موجود واحد على الأقل:

    SELECT *‎
    ‎FROM [Products]‎
    WHERE EXISTS
    ‎(SELECT * FROM [Order Details]‎
    ‎WHERE [Order Details]‎.[‎Product ID]=[Products].[ID]);‎

    باستخدام NOT EXISTS، يقوم الاستعلام بإرجاع قائمة للمنتجات التي لم يتم العثور عليها في طلب موجود واحد على الأقل:

    SELECT *‎
    ‎FROM [Products]‎
    WHERE NOT EXISTS
    ‎(SELECT * FROM [Order Details]‎
    ‎WHERE [Order Details]‎.[‎Product ID]=[Products].[ID]);‎
  • IN    استخدم IN في عبارة WHERE للتحقق من أن القيمة الموجودة في الصف الحالي للاستعلام الرئيسي هي جزء من المجموعة التي قام الاستعلام الفرعي بإرجاعها. يمكنك أيضًا تقديم NOT على IN للتحقق من أن القيمة الموجودة في الصف الحالي للاستعلام الرئيسي ليست جزءًا من المجموعة التي قام الاستعلام الفرعي بإرجاعها.

    على سبيل المثال، يقوم الاستعلام التالي بإرجاع قائمة الطلبات (المُتضمنة تواريخ الطلبات) التي تمت معالجتها من قِبل الموظفين الذين لا يعملون كمندوبي مبيعات.

    SELECT [Order ID], [Order Date]‎
    ‎FROM [Orders]‎
    ‎WHERE [Employee ID] IN‎
    ‎(SELECT [ID] FROM [Employees]‎
    ‎WHERE [Job Title‎]<‎>'Sales Representative');‎

    باستخدام NOT IN، يمكنك كتابة نفس الاستعلام بهذه الطريقة:

    ‎SELECT [Order ID], [Order Date]‎
    ‎FROM [Orders]‎
    ‎WHERE [Employee ID] NOT IN‎
    ‎(SELECT [ID] FROM [Employees]‎
    ‎WHERE [Job Title‎]=‎'Sales Representative');‎

أعلى الصفحة

توسيع المهارات
استكشاف التدريب
الحصول على الميزات الجديدة أولاً
الانضمام إلى Office Insider

هل كانت المعلومات مفيدة؟

نشكرك على ملاحظاتك!

شكراً لك على الملاحظات! يبدو أنه من المفيد إيصالك بأحد وكلاء دعم Office لدينا.

×