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

تبسيط الاستعلامات، الكلمة المفتاحية WITH

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

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

SELECT * FROM table1
WHERE col2 IN (
	SELECT col1 FROM table2
	WHERE col3 + col2 > 3 AND col5 LIKE '%test%' AND col6 IN (
		SELECT col5 FROM table3
		WHERE col1 AND col3 OR col2
	)
)

لتسهيل الأمر، يمكننا استخدام الكلمة المفتاحية WITH query_name AS (...). وتسمح لنا بحفظ استعلام باسم معين واستخدامه أينما نريد:

WITH query1 AS (
	SELECT col5 FROM table3
	WHERE col1 AND col3 OR col2
), query2 AS (
	SELECT col1 FROM table2
	WHERE col3 + col2 > 3 AND col5 LIKE '%test%' AND col6 IN query1
)
SELECT * FROM table1
WHERE col2 IN (SELECT col1 FROM query2) AND col4 IN (SELECT col5 FROM query1)

قمنا هنا بإعادة استخدام query1 في query2 وفي الاستعلام الرئيسي (main).

challenge icon

التحدي

سهل

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

  • <strong>devices_specs</strong>: <strong>device_id</strong>, <strong>width</strong>, <strong>height</strong>, <strong>num_features</strong>, <strong>opinion</strong>
  • <strong>devices_score</strong>: <strong>device_id</strong>, <strong>score</strong>

اكتب استعلامًا يقوم بما يلي:

  1. أولاً، تحديد "large devices" (الأجهزة التي يكون فيها width أكبر من 200)
  2. ثم حساب متوسط التقييم لهذه الأجهزة الكبيرة. سمِّ هذا العمود average_score

استخدم عبارة WITH لحل هذه المشكلة.

جرّب بنفسك

-- الخطوة 1: سمِّ مجموعة نتائج مؤقتة تحتفظ فقط بالأجهزة التي تهتم بها
WITH large_devices AS (
    SELECT ____
    FROM devices_specs
    WHERE ____
)
-- الخطوة 2: أعد استخدام مجموعة النتائج المؤقتة تلك داخل الاستعلام الرئيسي
SELECT ____ AS average_score
FROM devices_score
WHERE device_id IN (____);
quiz iconاختبر نفسك

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

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

تدرّب بنفسك: Playground لـ SQL