mysql - "SELECT 1 UNION SELECT null UNION SELECT !1"的含义
迷茫
迷茫 2017-04-17 11:18:27
0
1
913
SELECT 1 UNION SELECT null UNION SELECT !1

的含义是什么?是选择空集的意思?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

Antworte allen(1)
PHPzhong

先说UNION,是用于将多个不同的select语句执行的结果合并到一个结果集并返回,参考官方文档。明白了这一点,此语句可以拆分为3个不同的select语句:

SELECT 1; //直接返回字面量1的值
SELECT null; //返回null本身的“值”。NULL是mysql中的一个常量,表示“没有值”,不是空字符串或0,按道理其本身也不应该有一个具体的值,mysql只是返回这样一个字符串表示而已(总不能什么都没发生啊)
SELECT !1   //逻辑非,非真即假,mysql中使用数字值1、0代表true和false,可用“SELECT TRUE, FALSE;”验证

再说这种SELECT语句的写法,可以先看下官方的说明,SELECT语句除了至少包含一条select_expr外,其它部分都可以省略,也就是说这种写法首先是合法的(SELECT can also be used to retrieve rows computed without reference to any table.)。那么有什么作用呢?简单的说,你可以理解这个时候MySQL是一个计算器,搭配MySQL提供的函数,可以用来做各种计算,执行成功后回返回最终的计算结果。举例:

mysql> select 1+1; //加法
+-----+
| 1+1 |
+-----+
|   2 |
+-----+

mysql> select pow(2,3); //指数运算,2的3次方
+----------+
| pow(2,3) |
+----------+
|        8 |
+----------+

mysql> select !0;  //逻辑非
+----+
| !0 |
+----+
|  1 |
+----+

mysql> select 1 & 1;  //按位与
+-------+
| 1 & 1 |
+-------+
|     1 |
+-------+

mysql> set @a=10,@b=5;  //变量赋值后再运算
mysql> select @a+@b;
+-------+
| @a+@b |
+-------+
|    15 |
+-------+

//最后题主的语句
mysql> SELECT 1 UNION SELECT null UNION SELECT !1;
+------+
| 1    |
+------+
|    1 |
| NULL |
|    0 |
+------+
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!