12.4逻辑运算符
逻辑运算符用来判断表达式的真假。逻辑运算符的返回结果只有1和0。如果表达式是真,结果返回1。如果表达式是假,结果返回0。逻辑运算符又称为布尔运算符。MySQL 中支持四种逻辑运算符。这四种逻辑运算符分别是与、或、非和异或。下面是4种逻辑运 算符的符号、名称,如下表所示。
符号 | 名称 | 符号 | 名称 |
---|---|---|---|
&&或者AND | 与 | !或者NOT | 非 |
||或者OR | 或 | XOR | 异或 |
下面分别对表中的逻辑运算符进行讲解。
1.与运算
“&&”或者AND表示与运算。所有操作数不为0且不为空值(NULL)时,结果返回1;存在任何一个操作数为0时,结果返回0;存在一个操作数为NULL且没有操作数为0时,结果返回NULL。与运算符“&&”可以有多个操作数同时进行与运算,其基本形式为 “ x1 && x2 &&... && xn ”。
【示例12-16】下面是使用“&&”的例子。
mysql> SELECT -1 && 2 && 3,0 && 3, 0 && NULL ,3 && NULL ; +-------------+--------+-----------+-----------+ |-1 && 2 && 3 | 0 && 3 | 0 && NULL | 3 && NULL | +-------------+--------+-----------+-----------+ | 1 | 0 | 0 | NULL | +-------------+--------+-----------+-----------+ 1row in set(0.00 sec)
结果显示,“-1 && 2 && 3”中没有值为0和NULL,所以结果返回1; “0 &&3 ”和 “ 0 && NULL”中存在操作数为0,所以结果返回0; “3 && NULL”中存在操作数为NULL且没有没有操作数为0,所以结果返回NULL。
与运算符AND可以有多个操作数同时进行与运算,其基本形式为 xl AND x2AND... AND xn。但是多操作数与AND之间要用空格隔开。
【示例12-17】下面是使用“AND”的例子。
mysql> SELECT -1 AND 2 AND 3,0 AND 3,0 AND NULL,3 AND NULL; +----------------+---------+------------+------------+ | -1 AND 2 AND 3 | 0 AND 3 | 0 AND NULL | 3 AND NULL | +----------------+---------+------------+------------+ | 1 | 0 | 0 | NULL | +----------------+---------+------------+------------+ 1 row in set (0.00 sec)
结果显示,“-1 AND 2 AND 3”中没有值为0和NULL,所以结果返回1; “0 AND 3” 和“0 AND NULL”中存在操作数为0,所以结果返回0; “3 AND NULL”中存在操作数 SNULL,且没有操作数为0,所以结果返回NULL
注意:只要与运算中存在操作数为0,则运算结果一定为0。如“3&&-1&&NULL&&0” 中,尽管表达式中包含NULL和负数,但是结果由操作数0最终决定。如果操作数都是非0数,而且不包含NULL,那么结果返回1。如“-1&&-2&&-3&&0.3” 中,尽管操作数包括负数和小数,结果依然是1。因为与运算时,负数和大于0 的数都等价与1。
2.或运算
“||”或者0R表示或运算。所有操作数中存在任何一个操作数不为非0的数字时,结果返回1;如果操作数中不包含非0的数字,但包含NULL时,结果返回NULL如果操作数中只有0时,结果返回0。或运算符“||”可以有多个操作数同时进行或运算,其基本 形式为 “xl||x2||...||xn”。
【示例12-18】下面是使用“||”的例子。
mysql> SELECT 1||-1||NULL||0, 3||NULL, 0||NULL, NULL||NULL, 0||0; +------------------+----------+------------+------------+------+ | 1||-1|| NULL||0 | 3||NULL | 0 || NULL | NULL||NULL | 0||0 | +------------------+----------+------------+------------+------+ | 1 | 1 | NULL | NULL | 0 | +-------+----------+----------+------------+------------+------+ 1 row in set (0.00 sec)
结果显示,“1||-1||NULL||0”中尽管包含NULL和0,由于其中也包含1和-1这两个非 0的数字,所以结果返回1; “3||NULL”中包含数字3,所以结果也返回1; “0||NULL”中 只包含0和NULL,所以结果返回NULL “NULL||NULL”中只包含NULL,所以结果返回NULL;“0||0”中只有数字0,所以结果返回0。
或运算符OR可以有多个操作数同时进行或运算,其基本形式为xl OR x2 OR...OR xn。
【示例12-19】下面是使用“OR”的例子。
mysql> SELECT 1 OR-1 OR NULL OR 0, 3 OR NULL, 0 OR NULL, NULL OR NULL, 0 OR 0; +--------------------+-----------+------------+--------------+-------+ | 1 OR-1 OR NULL OR | 3 OR NULL | 0 OR NULL | NULL OR NULL | OR 0 | +--------------------+-----------+------------+--------------+-------+ | 1 | 1 | NULL | NULL | 0 | +--------------------+-----------+------------+--------------+-------+ 1 row in set (0.00 sec)
结果与上一个例子的结果是一样的。
3. 非运算
“!”或者NOT表示非运算。通过非运算,将返回与操作数相反的结果。如果操作数是非0的数字,结果返回0;如果操作数是0,结果返回1;如果操作数是NULL结果返 回NULL。或运算符“!”只能有一个操作数进行非运算,其基本形式为“!xl”。
【示例12-20】下面是使用“!”的例子
mysql> SELECT !1, !0.3, !-3, !0, !NULL; +----+------+-----+----+-------+ | !1 | !0.3 | !-3 | !0 | !NULL | +----+------+-----+----+-------+ | 0 | 0 | 0 | 1 | NULL | +----+------+-----+----+-------+ 1 row in set (0.00 sec)
因为1、0.3和-3都是非0的数字,所以结果返回0;操作数是0时,返回结果为1; 操作数是NULL时,返回结果为NULL或运算符NOT只能有一个操作数进行非运算,其基本形式为NOT xl。
【示例12-21】下面是使用NOT的例子。
mysql> SELECT NOT 1, NOT 0.3, NOT -3, NOT 0, NOT NULL; +-------+---------+--------+-------+----------+ | NOT 1 | NOT 0.3 | NOT -3 | NOT 0 | NOT NULL | +-------+---------+--------+-------+----------+ | 0 | 0 | 0 | 1 | NULL | +-------+---------+--------+-------+----------+ 1 row in set (0.00 sec)
结果与使用“!”的是一样的。
4.异或运算
XOR表示异或运算。异或运算符XOR的基本形式为“xl XOR x2”。只要其中任何一 个操作数为见NULL时,结果返回NULL;如果x1和x2都是非0的数字或者都是0时,结果返回0;如果x1和x2中一个是非0,另一个是0时,结果返回1。
【示例12-22】下面是使用“XOR”的例子。
mysql> SELECT NULL XOR 1, NULL XOR 0, 3 XOR 1,1 XOR 0, 0 XOR 0, 3 XOR 2 XOR 0 XOR 1; +------------+------------+---------+---------+---------+---------------------+ | NULL XOR 1 | NULL XOR 0 | 3 XOR 1 | 1 XOR 0 | 0 XOR 0 | 3 XOR 2 XOR 0 XOR 1 | +------------+------------+---------+---------+---------+---------------------+ | NULL | NULL | 0 | 1 | 0 | 1 | +------------+------------+---------+---------+---------+---------------------+ 1 row in set (0.00 sec)
因为“NULL XOR 1”和“NULL XOR O”中包含了NULL所以返回结果是NULL;“3 XOR 1”两个操作数都是非0的数字,结果返回0; “1 XOR 0”中一个是非0数字,一个是0,所以结果返回1; “0 XOR 0”中的操作数都是0,所以结果返回0; “3 XOR 2 XOR O XOR 1”中有多个操作数,计算时是从左到右依次计算的。先将“3 XOR 2”计算出来,将计算结果与0再进行计算,依次类推。
说明:MySQL中进行异或运算时,所有大于-1小于1的数字都被视为逻辑0,其他数字被视为逻辑1。如果两个操作数同为逻辑0,或者同为逻辑1时,结果返回0。 即逻辑相同时,返回0。如果两个操作数一个是逻辑0,另一个是逻辑1,结果返 回1。即逻辑不同时,返回1。“0.3 XOR 3.3”返回的结果是1。因为0.3属于逻辑0, 3.3属于逻辑1。