0Pricing
Coding Interview Prep · درس

ترتيب تنفيذ الاستعلام المنطقي

سبب تنفيذ FROM قبل SELECT وكيف تساعد معرفة ترتيب التنفيذ الحقيقي في الإجابة عن عشرات الأسئلة الخادعة

ترتيب تنفيذ الاستعلام المنطقي درس مجاني في Coding Interview Prep على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Coding Interview Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Coding Interview Prep 4 دروس في المجموع.

السؤال الذي يفتح الباب لعشرات الأسئلة الأخرى

يسأل القائمون على المقابلات: «بأي ترتيب يُنفذ الاستعلام فعليًا؟» لأن الإجابة تفسر أمورًا كثيرة: لماذا يفشل اسم مستعار في SELECT عند استخدامه في WHERE، ولماذا لا يستطيع WHERE تصفية ناتج تجميعي، وغير ذلك.

الترتيب المكتوب مقابل الترتيب المنطقي

أنتم تكتبون الاستعلام بدءًا من SELECT، لكن المحرك ينفذه بدءًا من FROM. وهذا الاختلاف، مع تقييم SELECT في وقت متأخر تقريبًا، يسبب معظم الالتباس.

الترتيب المنطقي الكامل

الترتيب المنطقي الكامل هو: FROM، ثم WHERE، ثم GROUP BY، ثم HAVING، ثم SELECT، ثم DISTINCT، ثم ORDER BY، وأخيرًا LIMIT. وكل حالة مربكة أدناه تنتج مباشرةً من هذه القائمة.

لماذا يُنفذ FROM أولًا

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

SELECT e.name, d.name AS dept
FROM employees e
JOIN departments d ON d.id = e.department_id
WHERE e.salary > 50000;

خطأ شائع: لا يمكن استخدام الاسم المستعار في WHERE

أكثر النتائج التي يُسأل عنها شيوعًا هي أن اسم SELECT المستعار لا يمكن استخدامه في WHERE، لأن WHERE يُنفذ قبل SELECT. يوضح الكود أدناه الخطأ وإصلاحه: تكرار التعبير.

-- FAILS: alias 'annual' unknown in WHERE
SELECT salary * 12 AS annual
FROM employees
WHERE annual > 600000;

-- FIX: repeat the expression
SELECT salary * 12 AS annual
FROM employees
WHERE salary * 12 > 600000;

خطأ شائع: لا يستطيع WHERE رؤية النواتج التجميعية

يُنفذ WHERE قبل التجميع، لذلك لا يستطيع رؤية النواتج التجميعية مثل COUNT(). ولهذا نستخدم HAVING: إذ يصفي WHERE الصفوف، بينما يصفي HAVING المجموعات بعد التجميع.

-- WHERE cannot use COUNT(*)
SELECT department, COUNT(*) AS headcount
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;

لماذا يستطيع ORDER BY استخدام الأسماء المستعارة

والعكس صحيح: يُنفذ ORDER BY بعد SELECT، لذلك يستطيع استخدام الأسماء المستعارة في SELECT. الاسم المستعار نفسه، لكن التوقيت مختلف؛ ولهذا يعمل هنا ولا يعمل في WHERE.

SELECT name, salary * 12 AS annual
FROM employees
ORDER BY annual DESC;

موضع DISTINCT

يُنفذ DISTINCT بعد SELECT وقبل ORDER BY. وبما أنه يزيل التكرار اعتمادًا على أعمدة الناتج، فلا يمكنكم الترتيب إلا وفق شيء بقي ضمن قائمة SELECT.

-- ERROR in many engines:
-- ORDER BY column not in the DISTINCT select list
SELECT DISTINCT department
FROM employees
ORDER BY hire_date;

تتبّع تطبيقي لاستعلام كامل

لنتتبع استعلامًا فعليًا عبر الخطوات: يقرأ FROM الصفوف، ويصفي WHERE الصفوف، ويقسم GROUP BY الصفوف إلى مجموعات، ويُبقي HAVING على مجموعات محددة، ويحسب SELECT النتائج، ويرتب ORDER BY، ثم يقتطع LIMIT الناتج.

SELECT customer_id, SUM(amount) AS total
FROM orders
WHERE status = 'paid'
GROUP BY customer_id
HAVING SUM(amount) > 1000
ORDER BY total DESC
LIMIT 10;

التنفيذ المنطقي مقابل الفعلي

ومن التفاصيل التي تثير الإعجاب في المقابلات أن هذا هو الترتيب المنطقي الذي يحدد صحة النتيجة. وقد تختلف الخطة الفعلية التي يختارها المُحسّن، ما دامت تنتج الصفوف نفسها.

وسيلة لتذكّر الترتيب

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

تحقق سريع

طبّقوا ترتيب التنفيذ لاكتشاف الخطأ.

مراجعة

مراجعة: الترتيب المنطقي هو FROM، ثم WHERE، ثم GROUP BY، ثم HAVING، ثم SELECT، ثم DISTINCT، ثم ORDER BY، ثم LIMIT. يُنفذ WHERE قبل SELECT، لذلك لا تعمل الأسماء المستعارة معه؛ أما ORDER BY فيُنفذ بعده، فتعمل معه الأسماء المستعارة.

الأسئلة الشائعة

هل درس «ترتيب تنفيذ الاستعلام المنطقي» مجاني؟

نعم — نص درس «ترتيب تنفيذ الاستعلام المنطقي» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Coding Interview Prep، انتقل إلى CoddyKit PRO. تتضمن دورة Coding Interview Prep 4 دروس في المجموع.

ماذا ستتعلم في «ترتيب تنفيذ الاستعلام المنطقي»؟

سبب تنفيذ FROM قبل SELECT وكيف تساعد معرفة ترتيب التنفيذ الحقيقي في الإجابة عن عشرات الأسئلة الخادعة تتمرن على Coding Interview Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Coding Interview Prep؟

لا تُشترط خبرة سابقة. Coding Interview Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «ترتيب تنفيذ الاستعلام المنطقي»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Coding Interview Prep هذا؟

نعم. كل درس في Coding Interview Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ما هي SQL ولماذا يسأل عنها مسؤولو المقابلات؟
  2. ترتيب تنفيذ الاستعلام المنطقي
  3. المفاتيح الأساسية والخارجية والقيود
  4. قراءة مخطط قاعدة البيانات تحت الضغط
← العودة إلى Coding Interview Prep