محتويات الدورة

SQLite / الأساسي: المحرك المضمّن والبيانات الصحيحة / الدرس 4

SELECT و NULL والترتيب والحدود

حوّل سؤال العمل إلى نتيجة SQLite متوقعة بأعمدة وشروط صريحة ومنطق غياب وترتيب كامل.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • توقع سلوك الشرط ثلاثي القيم.
  • استخدام LIMIT بترتيب حتمي.
  • اختيار شروط نص وتاريخ واضحة.

حدد صف الخرج وحقوله

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

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

المجهول ليس خطأً ولا صفراً

تشير NULL إلى المفقود. تعيد مقارنتها العادية غالباً NULL، أي الحالة المنطقية المجهولة، ولا تحتفظ WHERE إلا بالصحيح. استخدم IS NULL أو IS NOT NULL للسؤال عن الغياب. يستبعد amount <> 0 المجهول والصفر لأن المجهول ليس صحيحاً؛ وأضف فرعاً صريحاً إن شمله السؤال.

يعرض النص المبالغ المعروفة المقبولة ثم معرف المفقود، ويميز الصفر قصداً. تفيد COALESCE لبديل عرض مبرر، لكن وضعها في شرط أو تجميع يغير السؤال. تتأثر NOT IN خاصة إذا تضمنت المقارنة NULL، وغالباً توضح NOT EXISTS المرتبطة اختبار الغياب أكثر.

sql تمييز المجهول من الصفر المقاس
CREATE TABLE reading(id INTEGER PRIMARY KEY, amount REAL);
INSERT INTO reading VALUES(1,NULL),(2,0.0),(3,10.0),(4,20.0);
SELECT id FROM reading WHERE amount<>0 ORDER BY id;
SELECT id FROM reading WHERE amount IS NULL ORDER BY id;
الناتج المتوقع
id
3
4

id
1

يحقق 3 و 4 عدم المساواة، ويجد فحص الغياب 1 وحده، بينما 2 صفر معروف.

اختر صفحة أولى ذات معنى

تحد LIMIT العدد ولا تحدد الأول دون ORDER BY. ليس ترتيب الإدراج المرصود أو rowid أوفهرس عقد عرض. رتب وفق معيار العمل وأضف فاصلاً فريداً لاختيار ثابت الحجم. يختار المثال أعلى درجتين ويرتب المتساويتين بالمعرف.

يتحكم الاستعلام الخارجي في ترتيب العرض؛ ولا يضمن ترتيب عرض أو استعلام فرعي ترتيب المستدعي تلقائياً. تفيد OFFSET لصفحات بسيطة لكنها قد تتجاوز عملاً كبيراً وتزيحها تغييرات بين الطلبات. ستقارن الدروس اللاحقة متابعة المفتاح واللقطات، فالصفحات ليست تنسيقاً وحده.

sql اختيار مرتب ثابت الحجم
CREATE TABLE score(id INTEGER PRIMARY KEY, points INTEGER NOT NULL);
INSERT INTO score VALUES(1,40),(2,90),(3,90),(4,70);
SELECT id,points FROM score ORDER BY points DESC,id ASC LIMIT 2;
الناتج المتوقع
id|points
2|90
3|90

تُختار درجتا 90 ويأتي 2 قبل 3 بقاعدة تعادل ظاهرة لا افتراض تخزين.

اجعل المجال وتفسير النص صريحين

ترتبط AND أقوى من OR، فأظهر البدائل المجمعة بالأقواس. للمواعيد الموحدة يشمل المجال نصف المفتوح بدايته ويستبعد الحد التالي دون تخمين آخر جزء من الثانية. ينجح فرز تاريخ TEXT زمنياً بتمثيل قابل للفرز واصطلاح موحد فقط؛ وتفسد الصيغ أو المناطق المختلطة ذلك.

لـ LIKE محارف بدل وسلوك حالة خاص، وليست مطابقة Unicode شاملة. اربط القيمة واهرب محارف البدل عند طلب نمط حرفي. لا تقوم معلمة القيمة مقام اسم عمود أو اتجاه ترتيب. اختر البنية الديناميكية من قائمة ثابتة واربط القيم مستقلة عند حد التطبيق.

اختبر جدول المنطق وصفوف الحدود

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

وثق هل التقرير حي أو استخراج متسق وما قد يتغير بين الطلبات. اتبع قواعد الإصدار عند النقل بما فيها الألفة والترتيب اللغوي. يربط العقد الواضح وحدة المصدر والحقول والغياب والشروط والترتيب النهائي، فيستطيع قارئ تفسيره دون معرفة ترتيب التخزين العرضي.

الأخطاء الشائعة وإصلاحها

لم تعد مقارنة NULL صفوفاً.

لماذا يحدث؟
استُخدمت = NULL بدلاً من فحص الغياب.
كيف تصلحه؟
استخدم IS NULL أو IS NOT NULL.
كيف تتجنب تكراره؟
اختبر القيم المجهولة.

تغيرت نتيجة محدودة دون توقع.

لماذا يحدث؟
غاب الترتيب أو حل التعادل.
كيف تصلحه؟
حدد ORDER BY النهائي وفاصله المناسب.
كيف تتجنب تكراره؟
اختبر التعادل.

فاتت سجلات آخر اليوم.

لماذا يحدث؟
اعتُبر تاريخ النهاية شاملاً لكل أوقات اليوم.
كيف تصلحه؟
استخدم مجالاً نصف مفتوح وتمثيلاً موحداً.
كيف تتجنب تكراره؟
اختبر الحدين وما حولهما.

اختبر فهمك

1. أي مبالغ 10 و NULL و 30 تبقى مع amount<>10، وكيف تدرج الغائب إذا شمله السؤال؟

اعرض الحل المشروح

تبقى 30 فقط؛ فمقارنة NULL تنتج مجهولاً لا تحتفظ به WHERE. لإدراج الغياب أضف OR amount IS NULL بأقواس تلائم بقية الشروط. لا تستبدل المجهول صفراً لمجرد إجباره على المقارنة، لأن ذلك يغير تعريف القيمة والسؤال.

2. كيف تعيد أحدث ثلاثة أحداث إذا أمكن تعادل أوقاتها؟

اعرض الحل المشروح

رتب الوقت تنازلياً ثم معرف الحدث الفريد بقاعدة تعادل موثقة، واستخدم LIMIT 3. حافظ على تمثيل الوقت والمنطقة الزمنية باتساق. لا يغني فهرس تخزين عن الترتيب النهائي، ولا تعني نتيجة بدت مرتبة سابقاً أن الاستعلام يَعِد بترتيبها في التشغيل اللاحق.

أهم ما تعلمته

  • يُفحص الغياب بعمليات صريحة.
  • تحتاج LIMIT ترتيب عمل كاملاً.
  • التمثيل وحدود الشروط جزء من الصحة.

المراجع الرسمية