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

جملة SELECT في SQLite: استعلام الأعمدة والصفوف

كيف تعمل جملة SELECT في SQLite — اختيار الأعمدة، حساب التعابير، تسمية النتائج بـ AS، والمنطق الذي تقوم عليه كل استعلام تكتبه.

تحتوي هذه الصفحة على محررات قابلة للتشغيل — حرّر، شغّل، وشاهد النتيجة فوراً.

استعلام SELECT لقراءة الصفوف من الجدول

أي سؤال تطرحه على قاعدة بيانات SQLite يبدأ بكلمة SELECT. ببساطة أنت تقول لها: أعطني هذه الأعمدة، من هذا الجدول، للصفوف التي تحقق هذه الشروط. في هذا الدرس سنركّز على أول جزئين فقط — الأعمدة والجدول. أما التصفية (الفلترة) فلها درس مستقل لاحقًا.

وإليك أبسط صيغة ممكنة لاستعلام SELECT:

SELECT * تعني "كل الأعمدة"، وFROM products تحدّد اسم الجدول. النتيجة هي صفّ واحد لكل سجل، مع الأعمدة الأربعة كاملة. الفاصلة المنقوطة تُعلن نهاية الجملة.

هذه هي الصيغة العامة باختصار: SELECT <columns> FROM <table>;.

اختيار أعمدة محددة في sqlite

استخدام * مريح وأنت تستكشف البيانات، لكن في الكود الحقيقي يُفضَّل دائماً تسمية الأعمدة التي تهمّك فعلاً:

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

لماذا يُفضَّل هذا الأسلوب على SELECT *؟ لسببين. أولاً، تنتقل بيانات أقل (سواء عبر الشبكة أو من ملف قاعدة البيانات)، وهذا فرق مهم حين تكبر الجداول وتكثر أعمدتها. ثانياً، يبقى استعلامك ثابتاً لو أضاف أحدهم عموداً جديداً للجدول الشهر القادم. أما SELECT * فيبدأ بهدوء بإرجاع أعمدة إضافية، وقد يكسر هذا شيفرة التطبيق التي تعتمد على ترتيب الأعمدة عند قراءة الصفوف.

جملة SELECT في sqlite لا تجلب فقط، بل تحسب أيضاً

ليس شرطاً أن تكون عناصر قائمة SELECT أسماءَ أعمدةٍ خام. يمكن أن تكون أي تعبير: عمليات حسابية، استدعاءات دوال، دمج نصوص، أو حتى قيم ثابتة. وستقوم sqlite بتقييم هذا التعبير لكل صف على حدة.

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

بل يمكنك استخدام SELECT بدون جملة FROM أصلًا، وتتعامل مع SQLite كأنها آلة حاسبة:

صفٌّ واحد بثلاثة أعمدة. مفيد لاختبار ما تفعله أيّ صياغة قبل إدراجها داخل استعلام حقيقي.

تسمية الأعمدة باستخدام AS في sqlite

عند حساب قيمة عمود ما، يختار SQLite اسمًا افتراضيًّا له، وغالبًا ما يكون التعبير نفسه مثل price * stock. هذا الاسم قبيح وغير ثابت. لذلك أعطِ العمود اسمًا واضحًا عبر AS:

الاسم المستعار (alias) هو الاسم الذي يظهر للعمود في نتيجة الاستعلام. هذا يفرق معك من ناحية وضوح القراءة عند تصفّح النتائج، ويفرق أكثر في الكود الذي يقرأ القيم بحسب اسم العمود (row["inventory_value"] بدل row[1]).

كلمة AS اختيارية — يعني price * stock inventory_value تشتغل بنفس الطريقة — لكن الأفضل تكتبها صراحة. النية تصير أوضح، وتتفادى إرباك القارئ الذي قد يظن أن الفاصلة الناقصة هي اسم مستعار.

تسمية الجدول باسم مستعار أيضًا

تقدر كذلك تعطي الجدول نفسه اسمًا مستعارًا قصيرًا. الفائدة محدودة لما تشتغل على جدول واحد، لكن هذه العادة ترد لك بالأرباح بمجرد ما تبدأ بدمج الجداول عبر JOIN:

p صار اختصارًا للجدول products. الصيغة المنقّطة p.name توضّح بدقّة من أي جدول جاء العمود. مع جدول واحد، هذا مجرد كلام زائد، لكن عند ضمّ ثلاثة جداول معًا، يصبح الشيء الوحيد الذي يُبقي الاستعلام مفهومًا.

القيم الثابتة والحرفية في نتيجة الاستعلام

تقدر تخلط الأعمدة الحقيقية مع قيم ثابتة، وهذا مفيد لما تحتاج تضع علامة على الصفوف أو تملأ خانة بقيمة افتراضية:

كل صف هنا يأخذ نفس القيمة 'USD' ونفس الرقم 1. هذا الأسلوب مفيد جداً عندما تدمج نتائج عدة استعلامات باستخدام UNION، وتحتاج عموداً مميزاً يخبرك بمصدر كل صف.

كلمة عن NULL

بعض الأعمدة تكون فارغة، إما لأنه لم تُدخَل لها أي قيمة، أو لأن العمود ليس له قيمة افتراضية. وفي SQLite يُعبَّر عن "لا قيمة" بـ NULL، وتظهر NULL في نتائج SELECT إما كخانة فارغة أو ككلمة NULL صريحة، وذلك بحسب الأداة التي تستخدمها لعرض النتائج.

انظر إلى الصف الثاني. القيمة في price هي NULL، وبالتالي price * 2 تساوي NULL أيضاً — أي عملية حسابية تتضمن NULL ستُنتج NULL. هذه واحدة من أكثر الأمور التي تُربك المبتدئين في نتائج SQL، ولها صفحة مخصصة قريباً. يكفي الآن أن تتذكر أن NULL يَسري في التعابير كالعدوى.

خلاصة الدرس

  • الصيغة العامة لأي استعلام هي: SELECT <columns> FROM <table>;.
  • في الكود الحقيقي، اذكر الأعمدة صراحةً، واترك SELECT * للاستكشاف فقط.
  • قائمة SELECT تقبل أي تعبير، وليس فقط أسماء الأعمدة.
  • استخدم AS لإعطاء الأعمدة المحسوبة والجداول أسماء مستعارة واضحة.
  • القيمة NULL تنتشر عبر العمليات الحسابية — ضع ذلك في حسبانك عندما تبدو النتائج غريبة.

التالي: تصفية النتائج باستخدام WHERE

حتى الآن، كل استعلام يُرجع كل صفوف الجدول. جملة WHERE هي وسيلتك لتضييق النتائج — اختيار الصفوف حسب السعر، أو الاسم، أو التاريخ، أو أي تعبير تكون قيمته صحيحة أو خاطئة. وهذا موضوع الدرس القادم.

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

ما هي الصيغة الأساسية لجملة SELECT في SQLite؟

الصيغة هي: SELECT <الأعمدة> FROM <الجدول>;. الأعمدة يمكن أن تكون قائمة مفصولة بفواصل مثل SELECT name, email FROM users، أو علامة * لجلب كل الأعمدة، أو أي تعبير حسابي مثل price * quantity. أما FROM فتحدد الجدول الذي تقرأ منه، والفاصلة المنقوطة في النهاية تُنهي الجملة.

هل من المناسب استخدام SELECT * في SQLite؟

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

كيف أُغيّر اسم العمود في نتائج SELECT؟

استخدم AS لإعطاء العمود أو التعبير اسمًا بديلًا، مثل: SELECT price * quantity AS total FROM orders. الاسم البديل يصبح هو اسم العمود في النتيجة، وهذا مهم لقراءة المخرجات وللكود الذي يصل إلى النتائج باسم العمود. كلمة AS اختيارية لكن يُفضّل الإبقاء عليها لوضوح الكود.

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن