Querying

منطق سه ارزشی چیست؟

آیا می دانستید که ارزش شرط های WHERE، HAVING و ON در SQL یا درست است، یا نادرست و یا نامشخص؟ بله SQL برای ارزیابی تمامی شرط ها از منطق سه ارزشی استفاده می کند.

در SQL، مقادیر خالی یا گم شده را با NULL نشان می دهیم. یعنی اگر شما رکوردی را اینسرت کنید ولی برای فیلد خاصی، مقداری را مشخص نکنید مقدار آن فیلد با NULL نمایش داده می شود. به طور مثال در جدول Person.Person بسیاری از افراد دارای نام میانی نیستند. بنابراین نام میانی آن ها NULL می باشد. حال اگر بخواهیم کویری ای بنویسیم که این افراد را نمایش دهد، چه کنیم؟

این کویری را در نظر بگیرید:

SELECT 
	*
FROM
	Person.Person
WHERE
	MiddleName = NULL	

کویری بالا بر خلاف تصور ما، هیچ رکوردی را بر نمی گرداند. در صورتی که بیش از 8000 رکورد در این جدول، شامل افرادی است که نام میانی ندارند. علت چیست؟

ما عادت کرده ایم که عبارت های منطقی را به دسته های درست و نادرست ارزیابی کنیم. اما در دنیای ریاضیات، منطق های چند ارزشی وجود دارند که ارزیابی یک گزاره را در بیش از این دو دسته قرار می دهند. منطق سه ارزشی یکی از منطق های چند ارزشی است که دارای سه ارزش درست، نادرست و نامشخص است.

مقادیر NULL

مقادیر NULL
NULL Value

در SQL، مقدار NULL نماینده مقادیر خالی یا گمشده می باشد. این که بخواهیم هنگام مقایسه یک مقدار مشخص یا یک مقدار NULL به ارزش درست یا نادرست برسیم کار غیر ممکنی است. این جاست که منطق سه ارزشی به میدان می آید. SQL برای پشتیبانی از مقادیر NULL در ارزیابی گزاره ها، از منطق سه ارزشی استفاده می کند.

ارزش تمام گزاره های زیر نامشص می باشد:

NULL = 1
NULL <> 1
NULL > 1
NULL = NULL

برای همین SQL از گزاره IS NULL برای یافتن مقادیر NULL استفاده می کند.

SELECT 
	*
FROM
	Person.Person
WHERE
	MiddleName IS NULL	

در قسمت های مختلف یک دستور SELECT، امکان فیلتر کردن و انتخاب مقادیر، رکورد ها یا گروه ها بر اساس یک شرط خاص فراهم می شود. شما این شرط ها را در دستورات CASE، ON، WHERE و HAVING مشاهده می کنید. تمامی گزاره ها در SQL امکان ترکیب شدن و ساخت یک گزاره منطقی بزرگتر را دارا هستند. برای این منظور از دستورات AND، OR و NOT استفاده می کنیم.

اما گزاره های ترکیبی، که هر کدام می توانند درست، نادرست یا نامشخص باشند؛ چگونه ارزیابی می شوند:

منطق دو ارزشی VS منطق سه ارزشی

منطق کلاسیک دو ارزشی یا منطق سه ارزشی
منطق کلاسیک دو ارزشی یا منطق سه ارزشی

بگذارید در ابتدا منطق دو ارزشی کلاسیک را مرور بکنیم.

جدول ارزشی این منطق به شکل زیر می باشد (T= TRUE, F = FALSE):

p OR qp AND qp = qqp
TTTTT
TFFFT
TFFTF
FFTFF
جدول حقایق منطق دو ارزشی
NOT pp
FT
TF
منفی کردن در منطق دو ارزشی

در منطق سه ارزشی جداول فوق به صورت زیر تغییر می کنند:

(T= TRUE, F = FALSE, U = UNKNOWN):

p OR qp AND qp = qqp
TTTTT
TFFFT
TUUUT
TFFTF
FFTFF
UFUUF
TUUTU
UFUFU
UUUUU
جدول حقایق منطق سه ارزشی
NOT pp
FT
TF
UU
منفی کردن در منطق سه ارزشی

و اما نکته آخر

در تمامی شرط های موجود در کویری (CASE، ON، WHERE و HAVING) تنها گزاره هایی که مقدارشان با درست (TRUE) ارزیابی می شوند انتخاب شده و نادرست ها (FALSE) و نامشخص ها (UNKNOWN) حذف می شوند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید

بستن
دکمه بازگشت به بالا
بستن
بستن