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

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

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

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

ملاحظة: لا تنطبق هذه المقاله علي تطبيقات Access – نوع جديده ل# قاعده البيانات تصميم مع Access و# نشرها عبر الانترنت. راجع انشاء تطبيق Access ل# الحصول علي مزيد من المعلومات.

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

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

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

الكلمات الأساسية الشائعة لـ 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 وقم بتمكين محتواها.

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

  3. من علامة التبويب إنشاء، في المجموعة غير ذلك، انقر فوق تصميم الاستعلام.

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

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

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

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

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

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

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

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

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

أعلى الصفحة

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

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

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

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

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

    لمشاهدة قائمة بمجالات الاختصاص (والحد الأدنى لمتوسط الدرجات (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) الخاص بها في جدول يسمى "مجالات الاختصاص"، كما يتم تخزين معلومات الطلاب ذات الصلة في جدول يسمى "سجلات_الطلاب".

    لمشاهدة قائمة بمجالات الاختصاص (والحد الأدنى لمتوسط الدرجات (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 لدينا.

×