ما الذي يعنيه NULL فعليًا
قيمة غير معروفة، وليست صفرًا ولا فارغة
ما الذي يعنيه NULL فعليًا درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
تعرّف إلى NULL
تستخدم SQL القيمة NULL للتعبير عن «لا أعرف». وهي ليست صفرًا، ولا سلسلة فارغة، وليست false — بل تمثّل غياب قيمة.
عندما لا تكون قيمة العمود معروفة، تخزّن قاعدة البيانات NULL فيه. ويُعدّ فهم سلوك NULL من أهم الخطوات لكتابة استعلامات صحيحة.
-- A customers table where some phone numbers are unknown
SELECT id, name, phone
FROM customers;
-- id | name | phone
-- ---+---------+------------
-- 1 | Alice | 555-0101
-- 2 | Bob | NULL <- phone unknown
-- 3 | Carol | NULLNULL ليست صفرًا
من الأخطاء الشائعة التعامل مع NULL مثل الرقم 0. فهما مختلفان تمامًا.
0قيمة معروفة: صفر.- تعني
NULLأن القيمة مفقودة أو غير معروفة.
إذا كان رصيد الحساب 0، فهذا يعني أن العميل لا يملك مالًا. أما إذا كان NULL، فنحن ببساطة لا نعرف الرصيد بعد.
SELECT id, balance
FROM accounts;
-- id | balance
-- ---+--------
-- 1 | 0 <- known: empty wallet
-- 2 | NULL <- unknown: not recorded yetNULL ليست سلسلة فارغة
تختلف NULL أيضًا عن السلسلة الفارغة '' في أعمدة النصوص.
''سلسلة طولها صفر — وهي قيمة معروفة وموجودة.- تعني
NULLأنه لم تُقدَّم أي سلسلة أصلًا.
يمكنك تخزين ملاحظة فارغة عن قصد، أو ترك الملاحظة غائبة تمامًا. وتميّز SQL بين الحالتين.
SELECT id, note, length(note) AS note_len
FROM tickets;
-- id | note | note_len
-- ---+------+----------
-- 1 | '' | 0 <- empty but present
-- 2 | NULL | NULL <- absent; length is also unknownالمنطق ثلاثي القيم
للمنطق المعتاد نتيجتان: true وfalse. وتضيف SQL نتيجة ثالثة: unknown.
تُنتج أي مقارنة تتضمن NULL القيمة unknown، لأنك لا تستطيع المقارنة مع قيمة لا تملكها. ويُسمّى هذا المنطق ثلاثي القيم.
-- Each comparison with NULL returns UNKNOWN, not true/false
SELECT
NULL = 5 AS eq, -- unknown
NULL <> 5 AS neq, -- unknown
NULL = NULL AS self_eq, -- unknown (!)
NULL > 0 AS gt; -- unknownNULL = NULL ليست True
القاعدة الأكثر إثارة للدهشة هي أن NULL = NULL ليست true، بل تُقيَّم إلى unknown.
لماذا؟ إذا كانت القيمتان غير معروفتين، فلا يمكنك القول إنهما متساويتان — فقد تكونان أي شيء. وللتحقق مما إذا كانت قيمة ما هي NULL، يجب استخدام IS NULL بدلًا من =.
-- Wrong: never returns rows, because NULL = NULL is unknown
SELECT * FROM customers WHERE phone = NULL;
-- Right: use IS NULL
SELECT * FROM customers WHERE phone IS NULL;WHERE تُبقي الصفوف TRUE فقط
تُبقي عبارة WHERE الصف فقط عندما يكون شرطها true. أما الصفوف التي يكون شرطها false أو unknown فتُستبعد.
ولهذا تؤدي التصفية على عمود NULL باستخدام = إلى إزالة صفوف قد تتوقع رؤيتها من دون تنبيه.
-- Bob and Carol have NULL phones, so phone = '555-0101'
-- is UNKNOWN for them and they are excluded.
SELECT name
FROM customers
WHERE phone = '555-0101';
-- Returns only Aliceينتشر NULL عبر العمليات الحسابية
إن NULL مُعدٍ في التعبيرات. فتكاد أي عملية حسابية أو نصية تتضمن NULL أن تنتج NULL.
إذا كنت لا تعرف أحد المدخلات، فلا يمكنك معرفة النتيجة أيضًا.
SELECT
10 + NULL AS sum, -- NULL
100 * NULL AS prod, -- NULL
NULL / 2 AS div, -- NULL
'Hi ' || NULL AS greet; -- NULL (string concat)من أين تأتي قيم NULL
تظهر قيم NULL في عدة حالات شائعة:
- عملية
INSERTتحذف عمودًا يقبل NULL. - عملية ضم خارجي لا تجد صفًا مطابقًا في أحد الجانبين.
- تجميع على صفر من الصفوف، مثل أن تُعيد
SUMلمجموعة فارغة القيمةNULL.
يساعدك معرفة المصدر على تحديد طريقة التعامل معها.
-- Omitting phone inserts NULL automatically
INSERT INTO customers (id, name) VALUES (4, 'Dan');
SELECT id, name, phone FROM customers WHERE id = 4;
-- 4 | Dan | NULLمنع NULL باستخدام NOT NULL
إذا كان ينبغي أن يحتوي العمود على قيمة دائمًا، فصرّح عنه باستخدام NOT NULL. عندها ترفض قاعدة البيانات أي صف يحاول تركه فارغًا.
تُعدّ هذه طريقة قوية للحفاظ على نظافة بياناتك وتجنب المفاجآت المرتبطة بـ NULL لاحقًا.
CREATE TABLE users (
id integer PRIMARY KEY,
email text NOT NULL, -- must always be provided
bio text -- nullable: optional
);
-- This fails: email cannot be NULL
INSERT INTO users (id, bio) VALUES (1, 'hi');NULL مع DISTINCT وGROUP BY
هناك موضع واحد تتعامل فيه SQL مع قيم NULL على أنها متساوية: التجميع وإزالة التكرارات.
في DISTINCT وGROUP BY، تُجمع جميع قيم NULL في مجموعة واحدة، رغم أن NULL = NULL تكون unknown في المواضع الأخرى. وتحافظ هذه الحالة الخاصة على فائدة التجميع.
SELECT phone, count(*)
FROM customers
GROUP BY phone;
-- phone | count
-- ---------+------
-- 555-0101 | 1
-- NULL | 2 <- all NULLs grouped togetherمراجعة النموذج الذهني
احتفظ بهذه القواعد في ذهنك كلما رأيت NULL:
- تعني NULL قيمة غير معروفة، وليست صفرًا أو قيمة فارغة.
- تُنتج المقارنات مع NULL القيمة unknown — استخدم
IS NULL/IS NOT NULL. - تُبقي
WHEREالصفوف true فقط. - تنتج العمليات الحسابية مع NULL القيمة NULL.
- يتعامل التجميع مع قيم NULL كمجموعة واحدة.
-- The two correct NULL tests
SELECT name FROM customers WHERE phone IS NULL;
SELECT name FROM customers WHERE phone IS NOT NULL;تحقق سريع
إلى ماذا يُقيَّم التعبير NULL = NULL في SQL القياسية؟
مراجعة
أصبحت تفهم الآن ماهية NULL حقًا: فهي علامة تشير إلى قيمة مفقودة أو غير معروفة، وتختلف عن 0 و''.
رأيت المنطق ثلاثي القيم في SQL، ولماذا لا تنجح = NULL مطلقًا، وكيف ينتشر NULL عبر العمليات الحسابية، وكيف تستبعد WHERE الصفوف غير المعروفة. بعد ذلك، ستتعلم الطريقة الصحيحة لاختبار قيم NULL باستخدام IS NULL وIS NOT NULL.
-- Remember the golden rule
SELECT * FROM customers WHERE phone IS NULL; -- correct
-- SELECT * FROM customers WHERE phone = NULL; -- always empty!الأسئلة الشائعة
هل درس «ما الذي يعنيه NULL فعليًا» مجاني؟
نعم — نص درس «ما الذي يعنيه NULL فعليًا» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «ما الذي يعنيه NULL فعليًا»؟
قيمة غير معروفة، وليست صفرًا ولا فارغة تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «ما الذي يعنيه NULL فعليًا»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ما الذي يعنيه NULL فعليًا
- IS NULL وIS NOT NULL
- COALESCE وNULLIF
- قيم NULL في التجميعات والضم