SELECT 1 UNION SELECT null UNION SELECT !1
的含义是什么?是选择空集的意思?
业精于勤,荒于嬉;行成于思,毁于随。
先說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 | +------+
先說UNION,是用於將多個不同的select語句執行的結果合併到一個結果集並返回,參考官方文件。明白了這一點,此語句可以拆分為3個不同的select語句:
再說這種SELECT語句的寫法,可以先看下官方的說明,SELECT語句除了至少包含一條select_expr外,其它部分都可以省略,也就是說這種寫法首先是合法的(SELECT can also be used to retrieve rows computed without reference to any table.)。那麼有什麼作用呢?簡單的說,你可以理解這個時候MySQL是一個計算器,搭配MySQL提供的函數,可以用來做各種計算,執行成功後回返回最終的計算結果。舉例: