إسقاط الأعمدة ومشكلات التسمية المستعارة
سبب عدم إمكانية الإشارة إلى اسم مستعار في SELECT داخل WHERE، وكيف يختبر مسؤولو المقابلات نطاق الاسم المستعار
إسقاط الأعمدة ومشكلات التسمية المستعارة درس مجاني في SQL Interview Prep على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Interview Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Interview Prep 4 دروس في المجموع.
الإسقاط: اختيار أعمدتكم
يُسمى اختيار الأعمدة التي يعيدها الاستعلام الإسقاط — وهذا ما تفعلونه في كل مرة تكتبون فيها SELECT. اذكروا الأعمدة صراحةً في الكود الفعلي، واحتفظوا باستخدام SELECT * للاستكشاف السريع.
SELECT id, first_name, email
FROM employees;لماذا لا يحب القائمون على المقابلات SELECT *
لماذا لا يحب القائمون على المقابلات استخدام SELECT * في كود التطبيقات؟ لأنه هش، إذ قد يتغير ترتيب الأعمدة، ويهدر عرض النطاق الترددي، ويضعف الاستفادة من الفهارس، ويخفي ما تحتاجون إليه فعلًا. اذكروا أعمدتكم. 👍
تسمية عمود مستعارًا باستخدام AS
يعيد الاسم المستعار تسمية العمود في الناتج. استخدموا AS للوضوح؛ فهو مفيد خصوصًا مع الأعمدة المحسوبة، إذ يمنح تعبيرات معقدة مثل salary * 12 عنوانًا واضحًا وسهل القراءة.
SELECT first_name AS name,
salary * 12 AS annual_salary
FROM employees;وضع مسافات في الأسماء المستعارة باستخدام علامات الاقتباس
إذا احتوى الاسم المستعار على مسافات أو كان كلمة محجوزة، فيجب وضعه بين علامات اقتباس. والطريقة القياسية القابلة للنقل بين الأنظمة هي استخدام علامات الاقتباس المزدوجة. نصيحة: التزموا بأسماء بنمط snake_case، وتجنبوا وضع علامات الاقتباس تمامًا.
SELECT salary AS "Annual Pay"
FROM employees;المشكلة الكبرى: نطاق الاسم المستعار في WHERE
إليكم الخطأ الأكثر ورودًا في الاختبارات: تعرّفون اسمًا مستعارًا في SELECT، ثم تصفون النتائج باستخدامه في WHERE، فيفشل الاستعلام. يُنفذ WHERE قبل SELECT، ولذلك لا يكون الاسم المستعار موجودًا بعد.
-- This raises an error
SELECT salary * 12 AS annual_salary
FROM employees
WHERE annual_salary > 100000;السبب: ترتيب التنفيذ المنطقي
يكمن الحل في معرفة الترتيب المنطقي لعبارات SQL: FROM ثم WHERE ثم GROUP BY ثم HAVING ثم SELECT ثم ORDER BY. تأتي SELECT في مرحلة متأخرة، لذلك لا يمكن للعبارات السابقة رؤية الأسماء المستعارة التي تعرّفها.
الحل الأول: تكرار التعبير
أكثر الحلول قابلية للنقل بسيط: ما عليك سوى تكرار التعبير في WHERE بدلًا من استخدام الاسم المستعار. قد يكون ذلك مطولًا قليلًا، لكنه يعمل في كل قاعدة بيانات وفي كل مرة.
SELECT salary * 12 AS annual_salary
FROM employees
WHERE salary * 12 > 100000;الحل الثاني: تغليف الاستعلام باستعلام فرعي أو CTE
إذا بدا تكرار تعبير طويل غير أنيق، فاحسبه أولًا داخل استعلام فرعي أو CTE. هناك يصبح الاسم المستعار عمودًا حقيقيًا، ولذلك يمكن لـ WHERE في الاستعلام الخارجي تصفيته.
SELECT *
FROM (
SELECT first_name, salary * 12 AS annual_salary
FROM employees
) t
WHERE annual_salary > 100000;أين يُسمح باستخدام الأسماء المستعارة: ORDER BY
الخبر الجيد هو أن ORDER BY يمكنه استخدام اسم مستعار من SELECT، لأنه يُنفَّذ بعد SELECT. لذلك لا تستطيع WHERE وGROUP BY وHAVING رؤية الأسماء المستعارة، بينما تستطيع ORDER BY ذلك.
SELECT first_name, salary * 12 AS annual_salary
FROM employees
ORDER BY annual_salary DESC;اختلافات اللهجات التي يجدر ذكرها
يجدر ذكر ما يلي: تسمح MySQL باستخدام الأسماء المستعارة في GROUP BY وHAVING بمرونة أكبر، بينما تلتزم Postgres وSQL Server بالمعيار. ابدأ بالاستدلال من الترتيب المنطقي، ثم اذكر الاستثناء.
الأسماء المستعارة للجداول مقابل الأسماء المستعارة للأعمدة
لا تخلط بينهما. يعمل الاسم المستعار للجدول على اختصار اسم الجدول، ويكون مرئيًا في كل مكان، حتى في WHERE. أما الاسم المستعار للعمود فيعيد تسمية المخرجات ولا يكون مرئيًا فيها، وهذا هو العكس تمامًا.
SELECT e.first_name, e.salary AS pay
FROM employees AS e
WHERE e.salary > 50000;اختبار سريع
اختبر المشكلة الأساسية.
مراجعة
مراجعة: فضّل تحديد الأعمدة صراحةً بدلًا من SELECT *، واستخدم AS عند إنشاء الأسماء المستعارة. يكون الاسم المستعار في SELECT غير مرئي في WHERE وGROUP BY وHAVING، لكنه يعمل في ORDER BY. أصلح المشكلة بتكرار التعبير أو باستخدام CTE.
الأسئلة الشائعة
هل درس «إسقاط الأعمدة ومشكلات التسمية المستعارة» مجاني؟
نعم — نص درس «إسقاط الأعمدة ومشكلات التسمية المستعارة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Interview Prep، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Interview Prep 4 دروس في المجموع.
ماذا ستتعلم في «إسقاط الأعمدة ومشكلات التسمية المستعارة»؟
سبب عدم إمكانية الإشارة إلى اسم مستعار في SELECT داخل WHERE، وكيف يختبر مسؤولو المقابلات نطاق الاسم المستعار تتمرن على SQL Interview Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Interview Prep؟
لا تُشترط خبرة سابقة. SQL Interview Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «إسقاط الأعمدة ومشكلات التسمية المستعارة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Interview Prep هذا؟
نعم. كل درس في SQL Interview Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إسقاط الأعمدة ومشكلات التسمية المستعارة
- الأعمدة المحسوبة وأسبقية التعبيرات
- DISTINCT مقابل GROUP BY للتفرّد
- تعبيرات CASE في SELECT