Re: Implementation of boolean types.
Date: Fri, 15 Jul 2005 05:45:23 GMT
Message-ID: <T3IBe.8231$8f7.4833_at_newsread1.news.pas.earthlink.net>
-CELKO- wrote:
> NULL is not a logical value and UNKNOWN is. Look up the truth tables
> in any SQL book.
>
> Q: Now what is the first and most important rule of NULLs?
> A: NULLs propagate in computations!
>
> That means we should have these rules for Boolean types:
>
> NULL AND TRUE = NULL
> NULL AND FALSE = NULL
> NULL AND NULL = NULL
>
> NULL OR TRUE = NULL
> NULL OR FALSE = NULL
> NULL OR NULL = NULL
>
> NOT NULL= NULL -- valid but really weird looking, unh?
Hmmm...the 3VL truth tables I was taught looked like this (with ? meaning null - I hope you're looking at fixed width fonts):
AND T ? F
T T ? F
? ? ? F
F F F F
OR T ? F
T T T T
? T ? ?
F T ? F
x NOT x
T F
? ?
F T
This would make your rules for NULL AND FALSE and for NULL OR TRUE incorrect:
NULL AND FALSE = FALSE
(because regardless of whether TRUE or FALSE is substituted for null, the result will then be false) NULL OR TRUE = TRUE (because, regardless of whether TRUE or FALSE is substituted for null, the overall result will then be TRUE)
> However, in 3VL we have these rules
>
> UNKNOWN AND TRUE = UNKNOWN
> UNKNOWN AND FALSE = FALSE <== opps! not the same as NULL
> UNKNOWN AND UNKNOWN = UNKNOWN
If your initial statement was accurate, then yes; my understanding is
that looks the same as the corrected table.
> UNKNOWN OR TRUE = TRUE <== opps! not the same as NULL
> UNKNOWN OR FALSE = UNKNOWN
> UNKNOWN OR UNKNOWN = UNKNOWN
Ditto.
> NOT UNKNOWN = UNKNOWN
>
> So, which of the three values does a NULL map to?
Apparently, NULL == UNKNOWN, under the premises I was taught.
> The results of
> logical expressions now depend on the order of execution and
> substitution of UNNOWN and NULL
Where did I make a mistake in my analysis?
-- Jonathan Leffler #include <disclaimer.h> Email: jleffler_at_earthlink.net, jleffler_at_us.ibm.com Guardian of DBD::Informix v2005.01 -- http://dbi.perl.org/Received on Fri Jul 15 2005 - 07:45:23 CEST