مقدار NULL در جدول

هر ستون جدول می تواند یکی از انواع داده sql را در خود ذخیره کند. NULL یکی از این انواع است که به مقدارهای صفر و فضای خالی (space) متفاوت است زیر عدد صفر و فضای خالی، هر دو فضایی را اشغال می کنند ولی مقدار NULL هیچ فضایی را اشغال نمی کند.

مقدار NULL در پایگاه داده های رابطه ای، به عدم وجود مقدار برای ستون در سطر مورد نظر اشاره دارد. به طور مثال در زمان ایجاد جدول employees ستون age را برای نگهداری سن کارمند ایجاد کرده ایم. این ستون مقادیر عدد صحیح را در خود نگه می دارد ولی اجباری نیست که حتما آنرا با مقداری پر کنیم، پس می توانیم آنرا اصطلاحا Nullable تعیین کنیم.

در حالتی که ستونی Nullable باشد، اگر مقداری برای آن در سطر مورد نظر تعیین نشود، مقدار Null برای آن ستون در نظر گرفته می شود که به این معنی است که فعلا این ستون مقدار دهی نشده است. پس NULL نه عدد صفر است و نه فضای خالی، بلکه اشاره به عدم وجود مقدار دارد. در مطالب بعدی توضیح داده ایم که چگونه سطرهایی را پیدا کنیم که یک ستون خاص آن داری مقدار NULL باشد. به طور مثال تمامی کارمندهایی که فاقد شماره تلفن همراه هستند را پیدا کنیم.

بنابراین اگر توسط دستور INSERT برای ستونی که اصطلاحا به صورت Not Null است، مقداری تعیین نشود، یک خطا نشان داده خواهد شد ولی برای ستونی که به صورت Nullable است مقداری تعیین نشود، مشکلی پیش نمی آید.

فرض کنید می خواهید عملگر جمع را بر روی دو ستون salary (حقوق) و commission_pct را انجام دهید ولی چون این دو ستون Nullable هستند پس ممکن است برای هر سطر یکی از این دو ستون مقدار NULL داشته باشد، آیا در این حالت می توان عملیات جمع را انجام داد؟

پاسخ به این سوال قاعدتا خیر است زیر بر روی دو مقدار عددی و NULL نمی توان عملگر جمع را اجرا کرد ولی اوراکل تابعی به نام NVL (مخفف ) دارد که از طریق آن می توانیم مقدار NULL را به مقدار دیگری تبدیل کنیم. چون در اینجا می خواهیم جمع انجام دهیم، پس بهتر است توسط تابع NVL مقدار NULL را به عدد صفر نگاشت دهیم. به طور مثال کوئری زیر باعث می شود تا در خروجی مقدار NULL مربوط به ستون commission_pct به عدد صفر تبدیل شود.

تابع NVL دو ورودی را دریافت می کند. ورودی دوم مقداری است که با مقدار ورودی اول جایگزین می شود. نکته مهمی که وجود دارد این است که نوع دو ورودی باید یکسان باشد. به طور مثال در کدستور بالا نوع ستون commission_pct نوع عدد صحیح است، پس ورودی دوم نیز باید عدد صیحیح باشد.

کلید خارجی و ستون Nullable

در مطالب قبلی در مورد کلید اصلی و کلید خارجی و ایجاد روابط میان جدول ها صحبت کرده ایم. به طور میان جدول های employees و departments یک رابطه یک به چند وجود دارد و به این معنی است که هر کارمند عضو یک دپارتمان است و هر دپارتمان نیز چندین کارمند را دارد. بنابراین در جدول employees ستون department_id کلید خارجی است که به یک سطر از جدول departments اشاره می کند. همچنین جدول departments دارای یک ستون به نام department_id است که به نقش کلید خارجی در جدول departments ایفا می کند. اولین چیزی که باید به آن دقت کنید این است که ستون department_id که در جدول employees کلید خارجی است، نمی تواند مقداری خارج از مقادیر مربوط به جدول departments را داشته باشد.

به عبارت ستون کلید خارجی department_id در جدول employees تنها می تواند همان مقداری را داشته باشد که جز مقادیر درج شده برای ستون department_id در جدول departments باشد. بنابراین اگر مقداری غیر معتبر را برای ستون کلید خارجی تعیین کنید، یک خطا رخ خواهد داد، زیرا از اوراکل می خواهیم به چیزی در جدول departments اشاره کند که اصلا وجود ندارد. آیا ستون کلید اصلی می تواند مقدار NULL داشته باشد؟ پاسخ این سوال خیر است زیرا کلید اصلی ستونی است که حتما باید یک مقدار را داشته باشد.