تخطي إلى المحتوى الرئيسي
الدعم
تسجيل الدخول باستخدام حساب Microsoft
تسجيل الدخول أو إنشاء حساب.
مرحباً،
تحديد استخدام حساب مختلف!
لديك حسابات متعددة
اختر الحساب الذي تريد تسجيل الدخول باستخدامه.

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

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

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

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

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

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

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

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

  1. في علامة تبويب ملف، انقر فوق جديد.

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

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

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

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

  6. انقر فوق علامة التبويب استعلامات ، ثم انقر نقرا مزدوجا فوق طلبات المنتجات.

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

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

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

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

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

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

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

    Interval: [Order Date]-[Prior Date]

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

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

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

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

  14. أغلق قاعدة بيانات Northwind.

أعلى الصفحة

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

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

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

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

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

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

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

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

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

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

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

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

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

    يتم تشغيل الاستعلام، وتظهر نتائج الاستعلام قائمة بالأوامر التي تمت معالجتها من قبل الموظفين الذين ليسوا ممثلين للمبيعات.

أعلى الصفحة

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

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

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

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

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

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

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

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

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

    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 للإشارة إلى أن الاستعلام الفرعي يجب أن يرجع صفا واحدا على الأقل. يمكنك أيضا preface EXISTS مع NOT، للإشارة إلى أن الاستعلام الفرعي يجب ألا يرجع أي صفوف.

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

    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 في عبارة WHERE للتحقق من أن قيمة في الصف الحالي من الاستعلام الرئيسي هي جزء من المجموعة التي يرجعها الاستعلام الفرعي. يمكنك أيضا تمهيد IN مع NOT، للتحقق من أن قيمة في الصف الحالي من الاستعلام الرئيسي ليست جزءا من المجموعة التي يرجعها الاستعلام الفرعي.

    على سبيل المثال، يقوم الاستعلام التالي بإرجاع قائمة الطلبات (مع تواريخ الطلبات) التي تمت معالجتها من قبل الموظفين الذين ليسوا ممثلين للمبيعات:

    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 وخدماتها. سيتمكن مسؤول تكنولوجيا المعلومات لديك من جمع هذه البيانات. بيان الخصوصية.

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

×