mysql数据库2----复杂sql命令

mysql数据库2—复杂sql语法

1.case when用法

场景:当我们需要将数据库中查询到的字段值,转换成其他值的时候,就需要使用CASE-WHEN函数。类似:Java中的switch-case语句。
分类:Case具有两种格式。简单Case函数和Case搜索函数。

1.简单Case函数

(1)语法格式

case 列名
    when   条件值1   then  选择项1
    when   条件值2    then  选项2.......
    else     默认值
end

(2)例子

SELECT
CASE pay_way 
    WHEN 1 THEN '支付宝支付'
    WHEN 2 THEN '微信支付'
    WHEN 3 THEN '银联支付'
    ELSE '其他支付'
END payWay  <!-- 把查询出的列名转成:payWay -->
FROM order;
2.Case搜索函数

(1)语法格式

case      
when  列名 = 条件值1   then  选项1    
when  列名 = 条件值2   then  选项2.......    
else  默认值 
end

(2)例子

UPDATE employee      
SET salary =      
CASE   
    WHEN level = '1' THEN salary * 1.8      
    WHEN level = '2' THEN salary * 1.5      
    WHEN level = '3' THEN salary * 1.2      
    ELSE salary * 1.1      
END

2.group by … having用法

1.查询SQL表中某个字段的重复数据
sql1:SELECT user_name,COUNT(*) AS count FROM user_info GROUP BY user_name HAVING count > 1;

sql2:SELECT user_name FROM user_info GROUP BY user_name HAVING COUNT(1) > 1;

sql3:SELECT * FROM user_info WHERE user_name IN (SELECT user_name FROM user_info GROUP BY user_name HAVING COUNT(1) > 1);

PS:
1.HAVING是分组(GROUP BY)后的筛选条件,分组后的数据组内再筛选;WHERE 则是在分组前筛选。
2.WHERE 子句中不能使用聚集函数(类似count),而 HAVING 子句中可以,所以在集合函数中加上了 HAVING 来起到测试查询结果是否符合条件的作用。即 HAVING 子句的适用场景是可以使用聚合函数。
3.使用了group by 之后,就要求select后面的字段包含在group by 或聚合函数里面。所以要查询出某个字段重复的全部数据,用sql3

3.if 语句用法

定义:判断第一个参数为true还是false,来决定取第二个参数值还是第三个参数值

1.语法:IF(expr1,expr2,expr3)
如果 expr1 是TRUE,则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值
2.例子:
select *,if(sex=1,"男","女") as sex from user where sex != ""

4.ifnull语句用法

定义:判断字段是否为null,为null就返回特定值,不为null也返回特定值

1.语法:IFNULL(expr1,expr2)
假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串
2.例子:
select IFNULL(sex,1) from user 

5.datediff 函数

定义:返回两个日期之间的天数

1.语法:DATEDIFF(date1,date2)
2.例子:SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDate
PS:
1.date1 和 date2 参数是合法的日期或日期/时间表达式。
2.计算是date1 - date2

6.date_format 函数

定义:用于以不同的格式显示日期/时间数据

1.语法:DATE_FORMAT(date,format)
2.例子:select date_format(now(),'%Y-%m-%d %H:%i:%S') AS startDate   得到结果:2021-12-20 20:02:18
PS:
1.date 参数是合法的日期。format 规定日期/时间的输出格式。

可以使用的格式有:

格式意义
%a缩写星期名
%b缩写月名
%c月,数值
%D带有英文前缀的月中的天
%d月的天,数值(00-31)
%e月的天,数值(0-31)
%f微秒
%H小时 (00-23)
%h小时 (01-12)
%I小时 (01-12)
%i分钟,数值(00-59)
%j年的天 (001-366)
%k小时 (0-23)
%l小时 (1-12)
%M月名
%m月,数值(00-12)
%pAM 或 PM
%r时间,12-小时(hh:mm:ss AM 或 PM)
%S秒(00-59)
%s秒(00-59)
%T时间, 24-小时 (hh:mm:ss)
%U周 (00-53) 星期日是一周的第一天
%u周 (00-53) 星期一是一周的第一天
%V周 (01-53) 星期日是一周的第一天,与 %X 使用
%v周 (01-53) 星期一是一周的第一天,与 %x 使用
%W星期名
%w周的天 (0=星期日, 6=星期六)
%X年,其中的星期日是周的第一天,4 位,与 %V 使用
%x年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y年,4 位
%y年,2 位
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值