MySQLday03(JSON类型,算术运算符,比较运算符,逻辑运算符,位运算符,运算符的优先级,字符串函数,数值函数,日期和时间函数,流程函数,JSON函数,窗口函数)

JSON类型

  JSON是js中的一种数据交换格式。

  JSON类型比字符串类型有如下优点:

    JSON数据类型会自动的校验是否为JSON格式,如果不是JSON格式数据则会报错。

    MySQL中内置了JSON数据类型的一些函数,可以方便的提取各类数据,可以修改特定制。

    优化的存储格式,存储在JSON列中的JSON数据类型被转换成内部的存储格式,允许快速读取。

  JSON支持的数据类型:NUMBER,STRING,BOLLEAN,NULL,ARRAY,OBJECT共六种,可以是这六种的任意组合。

  BOOLEAN:true/false

  NULL:null

  字符串和日期类型:用双引号

  ARRAY:用括号()引起来

  OBJECT:KV,要用大括号{}引起来

 注意:JSON大小写敏感,常见的null,true,false必须是小写才合适。

 

算术运算符

  MySQL中支持的算术运算符:

    +:加法

    -:减法

    *:乘法

    /,DIV:除法(取商)

    %,MOD:取模(取余)

 注意:在除法运算或者取模运算时,当除数为0,将是非法除数,返回结果为null;

 

比较运算符

  “=”运算符:用于比较运算符两侧的操作数是否相等,相等则为1,否则为0,注意:null不能用与“=”比较。

  

  “<>”运算符:和“=”相反, 如果两侧操作数不相等为1,相等则为0。同样null不能用于“<>”比较。

  

  “<=>”运算符:和“=”类似,在操作数相等时为1,不相等为0,可以用于null比较

   

”<”运算符:当左侧操作数小于右侧操作数时,其返回值为1,否则其值为0。

“<=”运算符:当左侧操作数小于等于右侧操作数时,其返回值为1,否则返回值为0。

“>”运算符:当左侧操作数大于右侧操作数时,其返回值为1,否则返回值为0。

”>=”运算符:当左侧操作大于等于右侧操作数时,其返回值为1,否则返回值为0。

“between”运算符:使用格式“ x between a and b”,当x大于等于a且小于等于b时,返回1,否则为0。

”IN“运算符使用的格式为”a IN(value1,value2...)“,当a的值存在于列表中时,则整个比较表达式返回的值为1,否则返回0。

”IS NULL“运算符的使用格式为”a IS NULL“,当a的值为NULL,则返回值为1,否则返回值为0。

”IS  NOT NULL“运算符的使用格式为”a IS NOT NULL“,当a的值为不为NULL,则返回值为1,否则返回值为0。

”LIKE“运算符的使用格式为”a LIKE %123%“,当a中含有字符串”123“时,则返回值为1,否则返回值0。

”REGEXP“运算符的使用格式为”str REGEXP str_pat“,当字符串中含有str_pat相匹配的字符串,则返回值为1,否则返回0。

逻辑运算符

  MySQL支持的逻辑运算符:

  “NOT”或“!”表示逻辑非

  “AND”或“&”表示逻辑与

  “OR”或“||”表示逻辑或

  “XOR”表示逻辑异或

  

位运算符

  MySQL中支持的位运算符:

  “&”:位于,对多个操作数的二进制位做逻辑与操作。

“!” 位或:对多个操作数的二进制位做逻辑或操作。

“^” 位异或:对操作数的二进制位做异或操作 。

“~” 位取反:对操作数的二进制位NOT操作。

“>>” 位右移:对左操作数向右移动右操作数指定的位数

“<<” 位左移:对左操作数向左移动右操作烽指定的位数

运算符的优先级

  

字符串函数

   

   

   

   

   

   

   

   

   

数值函数

  

          

日期和时间函数

    

   

   

   

  

  

   

流程函数

  

   

   

  

  select ename,deptno, case deptno when 10 then '10号部门' when 20 then '20号部门' else '不是10也不是20号部门' end '部门' from emp;

  

JSON函数

  

   

  

json_doc:表示json数据

path 表示key   $.name

val :值

  在mysql是可以创建变量:  set @变量名 = 值;

  

   

  注意:json_contains()中的第二个参数,如果是数字,则需要''来包裹,如果是字符,必须要'“”'来包裹!

      

   

  

  

   

   

窗口函数

  • ROW_NUMBER()
    • row_number()后面的over是关键字,用来指定函数执行的窗口范围,如果后面什么都不写,则意味着窗口包含所有行,窗口:函数在所有行上进行计算;如果不为空,则支持以下4种语法:
      • window_name:给窗口指定一个别名,如果SQL中涉及的窗口较多,采用别名则更清晰易读;
      • partition子句:窗口按照哪些字段进行分组,窗口函数在不同的分组上分别执行;
      • order by子句:按照哪些字段进行排序,窗口函数将按照排序后的记录顺序进行编号,既可以和partition子句配合使用,也可以单独使用;
      • frame子句:frame是当前分区的一个子集,子句用来定义子集的规则,通常用来作为滑动窗口使用。
        • 基于行
        • 基于范围

  

  • RANK()/DENSE_RANK()
    • rank()/dense_rank()这两个函数与row_number()非常类似,只是在出现重复值时处理逻辑有所不同。 

   

  • PERCENT_RANK()/CUME_DIST()
    • percent_rank()和cume_dist()这两个函数都是计算数据分布的函数,percent_rank()和之前的rank()函数相关,每行按照以下公式进行计算:
      • (rank-1)/(rows-1),其中,rank为rank()函数产生的序号,rows为当前窗口的记录总行数
    • 相比percent_rank(),cume_dist()函数的应用场景更多,它的作用是分组内小于等于rank值的行数/分组内的总行数(统计大于等于当前订单金额的订单数,占总订单数的比例)。 

   

原文地址:https://www.cnblogs.com/heureuxl/p/13556111.html