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

هام: تمت ترجمة هذه المقالة ترجمة آلية، راجع إقرار إخلاء المسؤولية. يرجى الاطلاع على النسخة الإنجليزية من هذه المقالة. هنا للرجوع إليها.

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

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

في هذا المقال

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

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

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

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

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

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

يمكنك استخدام اسم مستعار ل# حقل استعلام فرعي ل# عرض القيم التي تعتمد علي القيم الاخري في الصف الحالي، غير ممكنه دون استخدام استعلام فرعي. علي سبيل المثال، ابلاغنا العوده الي المثال المكان الذي تريد رؤيه الفاصل الزمني بين الاوامر ل# كل المنتجات. ل# تحديد هذه الفتره الزمنيه، انت ب# حاجه الي المقارنه بين تاريخ كل طلب الي تواريخ الطلبات الاخري ل# ذلك المنتج. يمكنك انشاء استعلام يعرض هذه المعلومات ب# استخدام قالب Northwind 2007.

أرني كيف يمكن إعداد قاعدة بيانات Northwind 2007

  1. انقر فوق زر Microsoft Office‏ صورة زر Office ، ثم انقر فوق جديد.

  2. في الجزء الأيسر، وبالتحديد أسفل فئات القوالب، انقر فوق القوالب المحلية.

  3. أسفل القوالب المحلية، انقر فوق Northwind 2007، ثم انقر فوق إنشاء.

  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 لإنشاء اسم مستعار لجدول، وذلك لكي تتمكن من مقارنة القيم الموجودة في الاستعلام الفرعي بالقيم الموجودة في الصف الحالي للاستعلام الرئيسي.

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

Interval: [Order Date]-[Prior Date]

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

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

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

    ملاحظة: بما أن "معرّف المنتج" يعتبر حقل بحث، فإن 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');

أعلى الصفحة

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

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

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

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

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

×