Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الاستعلامات الفرعية - الجزء الثاني

جزء من قسم الأساسيات في رحلة SQL على Coddy — الدرس 39 من 72.

هناك ثلاثة أنواع رئيسية من الاستعلامات الفرعية:

  1. الاستعلامات الفرعية القياسية (Scalar Subqueries) - تعيد قيمة واحدة (صف واحد، عمود واحد)
  2. الاستعلامات الفرعية للصفوف (Row Subqueries) - تعيد صفاً واحداً بأعمدة متعددة
  3. الاستعلامات الفرعية للجداول (Table Subqueries) - تعيد صفوفاً وأعمدة متعددة

على سبيل المثال، إليك بعض حالات الاستخدام لكل نوع من أنواع الاستعلامات الفرعية:

الاستعلام الفرعي القياسي (Scalar Subquery) - ابحث عن الموظفين الذين يتقاضون رواتب أعلى من متوسط الراتب:

SELECT name, salary
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
);

استعلام فرعي للصف - ابحث عن الموظف (أو الموظفين) الذين لديهم نفس القسم والراتب مثل Alice

SELECT name
FROM employees
WHERE (department, salary) = (
    SELECT department, salary
    FROM employees
    WHERE name = 'Alice'
);

الاستعلامات الفرعية للجداول - عرض الأقسام وعدد موظفيها

SELECT department, count
FROM (
    SELECT department, COUNT(*) as count
    FROM employees
    GROUP BY department
) as dept_counts;

لاحظ حالات الاستخدام:

  • Scalar - مقارنات بسيطة (>، <، =)
  • عندما تحتاج إلى مطابقة أعمدة متعددة
  • عندما تحتاج إلى الاستعلام من مجموعة نتائج
challenge icon

التحدي

سهل

الجداول والأعمدة المتاحة:

  • shop: price, quantity, category, list_date

أوجد الفئات (categories) التي يكون إجمالي الكمية (quantity) فيها أكبر من متوسط جميع الكميات في المتجر.

هام: يجب عليك استخدام استعلام فرعي (subquery) داخل جملة HAVING لحساب المتوسط. لا تستخدم قيمة ثابتة أو استعلاماً منفصلاً — يجب أن يقوم الاستعلام الفرعي بحساب AVG(quantity) من جدول shop مباشرة داخل HAVING.

خطوات الحل:

  1. أولاً، اكتب استعلاماً فرعياً يحسب متوسط جميع الكميات في المتجر: SELECT AVG(quantity) FROM shop
  2. بعد ذلك، لكل فئة، قم بجمع كمياتها ومقارنتها بهذا الاستعلام الفرعي باستخدام الكلمة المفتاحية HAVING

ورقة مرجعية

هناك ثلاثة أنواع رئيسية من الاستعلامات الفرعية (subqueries):

  1. الاستعلامات الفرعية القياسية (Scalar Subqueries) - تعيد قيمة واحدة (صف واحد، عمود واحد)
  2. استعلامات الصف الفرعية (Row Subqueries) - تعيد صفاً واحداً بأعمدة متعددة
  3. استعلامات الجدول الفرعية (Table Subqueries) - تعيد صفوفاً وأعمدة متعددة

الاستعلام الفرعي القياسي (Scalar Subquery) - مقارنات بسيطة (>, <, =):

SELECT name, salary
FROM employees
WHERE salary > (
    SELECT AVG(salary)
    FROM employees
);

استعلام الصف الفرعي (Row Subquery) - مطابقة أعمدة متعددة:

SELECT name
FROM employees
WHERE (department, salary) = (
    SELECT department, salary
    FROM employees
    WHERE name = 'Alice'
);

استعلام الجدول الفرعي (Table Subquery) - الاستعلام من مجموعة نتائج:

SELECT department, count
FROM (
    SELECT department, COUNT(*) as count
    FROM employees
    GROUP BY department
) as dept_counts;

جرّب بنفسك

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات