sql 基础知识

百般思念 提交于 2020-02-27 06:45:57

sql 基础知识

不要极至最求一条sql语句搞定一切,可合理拆分为多条语句

1. sql 变量定义与赋值

  1. Sql 语句中,直接在SELECT使用@定义一个变量,如:@a

  2. 使用:=来给变量赋值,:@a:=123,则变量a的值为123。

    SELECT @a := id FROM table_a
    
  3. 同时定义多个变量,需要在子语句中定义

    SELECT @a := 1 FROM table_a,(SELECT @b := 2,@c := 3) as rcrcia
    
  4. 例子

    根据子查询结果,将主查询结果进行排序

    # 使用 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

  1. CASE 后面不带表达式

    CASE WHEN expression THEN 操作1
    
         WHEN expression THEN 操作2
    
         .......
    
         ELSE 操作n
    
    END
    
    
  2. CASE 后面带表达式,此时WHEN 后面的则是该表达式可能的值

    CASE expression
    
    WHEN  值1 THEN  操作1
    
    WHEN  值2 THEN  操作2
    
         .......
    
        ELSE 操作n
    
    END 
    
    

注:自上而下,凡是走了其中一个when或者是走了else了,其他的都不再走了。

4. group_concat()

请注意,该函数有拼接字符串最大长度限制。并且,与 limit不能共存。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!