با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره آموزش کامل SQL را دنبال می کنند. در بخش های قبلی شما را با مفهوم NULL در مقادیر فیلدها، آشنا کردیم. مقادیر NULL به فیلدهایی اختصاص می یابد که در زمان درج داده ها در جدول، برای آن فیلدها، مقداری در نظر نگرفته باشیم. همچنین در ادامه ی همان آموزش، به توابعی از جمله ISNULL برای تست NULL بودن مقادیر فیلدها، اشاره کردیم. حال در این مبحث، قصد داریم شما را با توابع بیشتری برای مدیریت مقادیر NULL آشنا کنیم. که در ادامه ی آموزش آشنایی با توابع NULL در SQL و بررسی توابع ()IFNULL() , ISNULL() , COALESCE و ()NVL خواهیم پرداخت .
در این قسمت، به بخشی از رکوردهای دو جدول که در مثال های این آموزش، از آنها، استفاده خواهیم کرد، اشاره می کنیم.
بخشی از رکوردهای جدول “Products” :
P_Id | ProductName | UnitPrice | UnitsInStock | UnitsOnOrder |
---|---|---|---|---|
۱ | Jarlsberg | ۱۰٫۴۵ | ۱۶ | ۱۵ |
۲ | Mascarpone | ۳۲٫۵۶ | ۲۳ | |
۳ | Gorgonzola | ۱۵٫۶۷ | ۹ | ۲۰ |
فرض کنید که مقدار دهی به فیلد UnitsOnOrder اختیاری بوده و ممکن است حاوی مقادیر NULL باشد.
به مثال زیر، توجه کنید:
1 2 | SELECT ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder) FROM Products; |
در مثال فوق، اگر هر کدام از مقادیر فلید UnitsOnOrder مقدار NULL داشته باشد، نتیجه نیز NULL خواهد بود!
در ادامه به راه حل این مشکل پرداخته ایم:
تابع() IFNULL در بانک اطلاعاتی MySQL ، به شما اجازه می دهد، در صورتیکه مقدار NULL وجود دارد آن را با مقدار دیگری جایگزین کنید:
1 2 | SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0)) FROM Products |
همچنین می توانید از تابع ()COALESCE نیز، بصورت زیر استفاده کنید:
1 2 | SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0)) FROM Products |
تابع ()ISNULL در بانک اطلاعاتی SQL Server، به شما اجازه می دهد، در صورتیکه مقدار NULL وجود دارد آن را با مقدار دیگری جایگزین کنید:
1 2 | SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0)) FROM Products |
تابع ()ISNULL در بانک اطلاعاتی Access، به شما اجازه می دهد، در صورتیکه مقدار NULL وجود دارد آن را با مقدار دیگری جایگزین کنید:
1 2 | SELECT ProductName, UnitPrice * (UnitsInStock + IIF(IsNull(UnitsOnOrder), 0, UnitsOnOrder)) FROM Products |
تابع ()NVL در بانک اطلاعاتی Oracle،به شما اجازه می دهد، در صورتیکه مقدار NULL وجود دارد آن را با مقدار دیگری جایگزین کنید:
1 2 | SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder, 0)) FROM Products |
زمانیکه شما روی مقادیر دو یا چند فیلد با دستورات SQL، عملیاتی مانند جمع را انجام دهید، اگر فقط یکی از فیلدها NULL باشد، نتیجه نیز، NULL خواهد بود. در بخش آشنایی با توابع NULL در SQL ، ما راه حل این مشکل را با استفاده از توابع NULL، در بانک ها اطلاعاتی مختلف، بررسی کردیم.
امیدواریم که مباحث آموزش فوق، به اندازه کافی برای شما مفید بوده باشد.