Subqueries
- الاستعلامات الفرعية
الاستعلامات الفرعية (Subqueries) هي جزء قوي ومرن من لغة SQL تسمح لك بدمج استعلامات SQL داخل استعلامات أخرى. تُعرف أيضًا باسم الاستعلامات المتداخلة (Nested Queries). تستخدم الاستعلامات الفرعية لاستخلاص البيانات بناءً على نتائج استعلام آخر، مما يجعلها أداة أساسية للتحليل المعقد للبيانات. هذا المقال مخصص للمبتدئين ويهدف إلى شرح مفهوم الاستعلامات الفرعية بطريقة واضحة وشاملة، مع أمثلة عملية وتطبيقات مختلفة.
ما هي الاستعلامات الفرعية؟
ببساطة، الاستعلام الفرعي هو استعلام SQL مكتوب داخل استعلام SQL آخر. يتم تنفيذ الاستعلام الفرعي أولاً، وتُستخدم نتائجه بواسطة الاستعلام الخارجي. يمكن أن تظهر الاستعلامات الفرعية في أجزاء مختلفة من الاستعلام الخارجي، مثل:
- عبارة WHERE: لتصفية البيانات بناءً على نتائج الاستعلام الفرعي.
- عبارة SELECT: لإرجاع قيم محسوبة من الاستعلام الفرعي.
- عبارة FROM: لإنشاء جدول مشتق من نتائج الاستعلام الفرعي (يُعرف باسم جدول فرعي).
- عبارة HAVING: لتصفية المجموعات بناءً على نتائج الاستعلام الفرعي.
أنواع الاستعلامات الفرعية
هناك عدة أنواع من الاستعلامات الفرعية، ويمكن تصنيفها بناءً على طريقة إرجاعها للنتائج:
- الاستعلامات الفرعية ذات القيمة المفردة (Single-Row Subqueries): ترجع صفًا واحدًا فقط. يمكن استخدامها مع عوامل المقارنة مثل `=`, `>`, `<`, `>=`, `<=`, و `<>`.
- الاستعلامات الفرعية ذات الصفوف المتعددة (Multiple-Row Subqueries): ترجع صفوفًا متعددة. يجب استخدامها مع عوامل المقارنة مثل `IN`, `NOT IN`, `ANY`, `SOME`, و `ALL`.
- الاستعلامات الفرعية المترابطة (Correlated Subqueries): تعتمد على قيم من الاستعلام الخارجي. يتم تنفيذها مرة واحدة لكل صف في الاستعلام الخارجي.
- الاستعلامات الفرعية غير المترابطة (Non-Correlated Subqueries): لا تعتمد على قيم من الاستعلام الخارجي. يتم تنفيذها مرة واحدة فقط، ويتم استخدام نتائجها في الاستعلام الخارجي.
أمثلة عملية
لنفترض أن لدينا جدولين: `customers` و `orders`.
customer_name | city | | أحمد | الرياض | | محمد | جدة | | علي | الدمام | | فاطمة | الرياض | |
customer_id | order_date | amount | | 1 | 2023-10-26 | 100 | | 2 | 2023-10-27 | 200 | | 1 | 2023-10-28 | 150 | | 3 | 2023-10-29 | 300 | | 2 | 2023-10-30 | 250 | |
مثال 1: استعلام فرعي ذو قيمة مفردة في عبارة WHERE
لإيجاد أسماء العملاء الذين لديهم أكبر طلب:
```sql SELECT customer_name FROM customers WHERE customer_id = (SELECT customer_id FROM orders ORDER BY amount DESC LIMIT 1); ```
هذا الاستعلام الفرعي `(SELECT customer_id FROM orders ORDER BY amount DESC LIMIT 1)` يرجع `customer_id` الخاص بأعلى طلب. ثم يستخدم الاستعلام الخارجي هذا الـ `customer_id` لاسترداد اسم العميل المقابل من جدول `customers`.
مثال 2: استعلام فرعي ذو صفوف متعددة في عبارة WHERE مع IN
لإيجاد أسماء العملاء الذين قاموا بتقديم طلبات:
```sql SELECT customer_name FROM customers WHERE customer_id IN (SELECT customer_id FROM orders); ```
هذا الاستعلام الفرعي `(SELECT customer_id FROM orders)` يرجع جميع `customer_id` الموجودين في جدول `orders`. ثم يستخدم الاستعلام الخارجي `IN` للتحقق مما إذا كان `customer_id` الخاص بكل عميل موجودًا في قائمة `customer_id` التي تم إرجاعها بواسطة الاستعلام الفرعي.
مثال 3: استعلام فرعي مترابط
لإيجاد أسماء العملاء الذين لديهم متوسط قيمة طلب أكبر من 200:
```sql SELECT customer_name FROM customers c WHERE EXISTS (
SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id GROUP BY o.customer_id HAVING AVG(o.amount) > 200
); ```
هذا الاستعلام الفرعي مترابط لأنه يستخدم `c.customer_id` من الاستعلام الخارجي. يتم تنفيذ الاستعلام الفرعي لكل صف في جدول `customers`، ويتحقق مما إذا كان متوسط قيمة طلب العميل أكبر من 200.
مثال 4: استعلام فرعي في عبارة SELECT
لإيجاد اسم العميل ومتوسط قيمة طلبه:
```sql SELECT
c.customer_name, (SELECT AVG(amount) FROM orders WHERE customer_id = c.customer_id) AS average_order_amount
FROM customers c; ```
هذا الاستعلام الفرعي `(SELECT AVG(amount) FROM orders WHERE customer_id = c.customer_id)` يحسب متوسط قيمة الطلب لكل عميل. ثم يعرض الاستعلام الخارجي اسم العميل ومتوسط قيمة طلبه.
استخدام الاستعلامات الفرعية في الخيارات الثنائية (Binary Options)
على الرغم من أن الاستعلامات الفرعية لا تُستخدم مباشرة في تداول الخيارات_الثنائية، إلا أن مبادئها يمكن تطبيقها في تحليل البيانات المتعلقة بالسوق. يمكن استخدام SQL والاستعلامات الفرعية لتحليل بيانات التداول التاريخية، وتحديد الاتجاهات، وإنشاء استراتيجيات تداول.
- **تحليل حجم التداول:** يمكن استخدام الاستعلامات الفرعية لتحليل حجم التداول في فترات زمنية مختلفة وتحديد الأنماط. على سبيل المثال، يمكن تحديد الأيام التي يكون فيها حجم التداول أعلى من المتوسط. ([تحليل_حجم_التداول])
- **تحديد الاتجاهات:** يمكن استخدام الاستعلامات الفرعية لتحديد الاتجاهات في أسعار الأصول. على سبيل المثال، يمكن تحديد الأيام التي يكون فيها سعر الإغلاق أعلى من سعر الافتتاح بشكل مستمر. ([الاتجاهات])
- **إنشاء استراتيجيات تداول:** يمكن استخدام الاستعلامات الفرعية لإنشاء استراتيجيات تداول بناءً على بيانات تاريخية. على سبيل المثال، يمكن إنشاء استراتيجية تداول تعتمد على تقاطع المتوسطات المتحركة. ([استراتيجيات_التداول])
استراتيجيات ذات صلة: استراتيجية_60_ثانية، استراتيجية_تداول_الشموع_اليابانية، استراتيجية_الارتداد، استراتيجية_الاختراق، استراتيجية_الرينجو، استراتيجية_المتوسطات_المتحركة، استراتيجية_بولينجر_باند، استراتيجية_RSI، استراتيجية_MACD، استراتيجية_فيوناتشي.
مؤشرات ذات صلة: مؤشر_RSI، مؤشر_MACD، مؤشر_بولينجر_باند، مؤشر_فيوناتشي، مؤشر_Stochastic.
تحليل فني: التحليل_الفني، أنماط_الشموع_اليابانية، خطوط_الاتجاه، مستويات_الدعم_والمقاومة.
أفضل الممارسات لاستخدام الاستعلامات الفرعية
- **الوضوح:** اكتب استعلامات فرعية واضحة وسهلة الفهم. استخدم أسماء مستعارة (Aliases) لتبسيط الاستعلام.
- **الأداء:** يمكن أن تؤثر الاستعلامات الفرعية على أداء الاستعلام. حاول تجنب الاستعلامات الفرعية المعقدة واستخدم بدائل مثل `JOIN` إذا كان ذلك ممكنًا.
- **التبسيط:** إذا كان الاستعلام الفرعي بسيطًا، ففكر في إعادة كتابته باستخدام `JOIN` لتحسين الأداء.
- **الفهرسة:** تأكد من أن الجداول المستخدمة في الاستعلامات الفرعية مفهرسة بشكل صحيح لتحسين الأداء.
بدائل للاستعلامات الفرعية
في بعض الحالات، يمكن استبدال الاستعلامات الفرعية بـ:
- JOIN: يمكن استخدام `JOIN` لدمج البيانات من جداول متعددة بدلاً من استخدام استعلام فرعي.
- Common Table Expressions (CTEs): تُعد CTEs طريقة لتعريف استعلام فرعي مؤقت يمكن استخدامه عدة مرات في الاستعلام الخارجي. ([Common Table Expressions])
- Views: تُعد Views استعلامات مخزنة يمكن استخدامها مثل الجداول. ([Views])
الخلاصة
الاستعلامات الفرعية هي أداة قوية ومرنة في SQL تسمح لك بإجراء تحليل معقد للبيانات. من خلال فهم أنواع الاستعلامات الفرعية المختلفة وكيفية استخدامها، يمكنك كتابة استعلامات أكثر فعالية وكفاءة. على الرغم من أنها لا تستخدم مباشرة في تداول الخيارات_الثنائية، إلا أن مبادئها يمكن تطبيقها في تحليل بيانات السوق وتطوير استراتيجيات تداول. تذكر دائمًا التركيز على الوضوح والأداء عند كتابة الاستعلامات الفرعية. استخدم الأدوات المتاحة مثل `JOIN` و CTEs و Views لتبسيط استعلاماتك وتحسين أدائها.
مواضيع ذات صلة: SQL، البيانات_العلاقاتية، JOIN، Common Table Expressions، Views، عبارات_SQL، أوامر_SQL، دالة_COUNT، دالة_AVG، دالة_SUM.
ابدأ التداول الآن
سجّل في IQ Option (الحد الأدنى للإيداع 10 دولار) افتح حساباً في Pocket Option (الحد الأدنى للإيداع 5 دولار)
انضم إلى مجتمعنا
اشترك في قناة Telegram الخاصة بنا @strategybin لتصلك: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات اتجاهات السوق ✓ مواد تعليمية للمبتدئين