mysql在子查询中使用自定义变量和条件语句实现函数效果的查询语句
前言
mysql
语法简单,但也正因如此,在检索稍微复杂的数据时,有时可能需要连续的子查询的嵌套以及表连接的组合应用,其逻辑上的循环嵌套远不如通过中间变量来存储易于理解。但一般情况下,我们倾向于通过一个分号来输出一次查询结果,而不是保存为视图进行二次查询。这样的情况下,对于不是特别复杂的检索逻辑我们可以尽量通过自定义变量来存储值,达到编程语言中的函数效果,而不是完全依靠where
子句进行一箩筐的添加条件让机器思考,这样既易于编写又提升了速度。
自定义变量和条件语句语法规则
自定义变量规则
@变量名:=固定值 | 函数调用 | 条件语句 别名
mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop; # 初始化变量
mysql> SELECT * FROM shop WHERE price=@min_price OR price=@max_price; # 引用变量
条件语句
在非funtion
和procedure
的一般查询语法中,sql
中的条件语句和高级编程语言中的条件语句用法上有所不同,sql
中的if
更像一个函数,而不是代表一个语句,但也有和编程语言中相差不大的条件语句,比如case
。简单介绍一下3种在一般条件语句中的用法,不做更深的理解。不深究的原因可以看下例题思路解析部分。
IF( expr1 , True_expr , False_expr ) # expr1为真返回True_expr, 假则返回False_expr
IFNULL( expr1 , Null_expr ) # expr1的值不为空仍返回该值, 值为空则返回Null_expr
case when 条件1 then 结果1
when 条件2 then 结果2
else 结果N
end
例题简介
Leetcode 180:编写一个 SQL