sql 基础知识
1. sql 变量定义与赋值
-
Sql 语句中,直接在
SELECT
使用@
定义一个变量,如:[@a](https://my.oschina.net/a8856225a)
。 -
使用
:=
来给变量赋值,:[@a](https://my.oschina.net/a8856225a):=123
,则变量a的值为123。SELECT @a := id FROM table_a
SELECT @a := 1 FROM table_a
-
同时定义多个变量,需要在子语句中定义
SELECT @a := 1 FROM table_a,(SELECT @b := 2,@c := 3) as rcrcia
-
例子
根据子查询结果,将主查询结果进行排序
# 使用 find_in_set 查询ID排序位置 select id, find_in_set(id, @rank) `rank` from user, # 声明定义变量 赋值为 子查询结果 结果为 "3,1,31" (SELECT @rank := (SELECT group_concat(content_id) as content_id FROM `collect_records` WHERE user_id = 1 order by creation_time desc)) as indexRank # 查询符合子查询结果的数据 where find_in_set(id, @rank) > 0 # 根据排序值排序 order by `rank`;
2.sql if 表达式
if(A,B,C)
表示,如果A
条件成立,那么执行B,否则执行C
@abc := if(2>1,100,200)
> @abc = 100
3.sql case...when...then
-
CASE 后面不带表达式
CASE WHEN expression THEN 操作1 WHEN expression THEN 操作2 ....... ELSE 操作n END
-
CASE 后面带表达式,此时WHEN 后面的则是该表达式可能的值
CASE expression WHEN 值1 THEN 操作1 WHEN 值2 THEN 操作2 ....... ELSE 操作n END
注:自上而下,凡是走了其中一个when或者是走了else了,其他的都不再走了。
4. group_concat()
请注意,该函数有拼接字符串最大长度限制。并且,与 limit
不能共存。