Mysql_Note3

1.where和having的区别

1.1总结

优点缺点
where先筛选数据再关联,执行效率高不能用分组中的计算函数进行筛选
having先连接后筛选,在最后的结果集中进行筛选,执行效率低可以使用分组中的计算函数进行筛选

1.2思考题

  1. HAVING 后面的条件,必须是包含分组中的计算函数的条件,你觉得对吗?为什么?
HAVING后面的条件,必须是包含分组中计算函数的条件。这种说法是有道理的,主要是考虑到查询的效率。因为如果不是分组中的计算函数的条件,那么这个条件应该可以用WHERE而不是用HAVING,查询的效率就不高了

2.聚合函数

2.1总结

函数名含义
sum指定字段求和
avg平均值
max最大值
min最小值
left(str,n)表示返回字符串str最左边的n个字符
count(*)统计一共有多少条记录
count(字段)统计有多少个不为空的字段

2.2思考题

1, 如果用户想要查询一下,在商品信息表中,到底是哪种商品的商品名称有重复,分别重复了几次,该如何查询呢

select goodsname,count(*), from demo.goodsmaster group by goodsname

2.count(*) ,count(1) ,count(列名),这3者的区别

count(*) 意思是统计表中所有的行
count(1) 意思是统计表的行数
count(列名)意思是统计表中列名字段不为NULL的数量

count(*),count(1)稍微高效一些,
如果字段是主键,count(字段)count(*),count(1)更快些,否者反之

3.时间函数

3.1获取日期时间数据中部分信息的函数

-- 语法:从日期时间数据“date”中抽取“type”指定的部分
EXTRACT(type FROM date)
-- 示例
EXTRACT(HOUR FROM b.transdate)

函数含义
YEAR(date)获取 date 中的年
MONTH(date)获取 date 中的月
DAY(date)获取 date 中的日
HOUR(date)获取 date 中的小时
MINUTE(date)获取 date 中的分
SECOND(date)获取 date 中的秒

3.2计算日期时间的函数

--语法
DATE_ADD(date, INTERVAL 表达式 type--示例
DATE_ADD('2020-12-10', INTERVAL - 1 YEAR);
-- 语法:表示获取日期时间“date”所在月份的最后一天的日期
LAST_DAY(date-- 示例,今天是 2020 年 12 月 10 日,获取 2019 年 11月30日
DATE_ADD(LAST_DAY(DATE_ADD(DATE_ADD('2020-12-10', INTERVAL - 1 YEAR),INTERVAL - 1 MONTH)),INTERVAL 1 DAY)

3.3 其他日期时间函数

函数含义
CURDATE()获取当前的日期,日期格式为“YYYY-MM-DD”
DAYOFWEEK(date1)获取日期“date”是周几,1 表示周日,2 表示周一,7 表示周六
DATE_FORMAT(date1,格式)它表示将日期时间“date”按照指定格式显示,DATE_FORMAT(“2020-12-01 13:25:50”,“%T”),%T表示24 小时制
DATEDIFF(date1,date2)计算两个时间相隔的天数
-- case语法
CASE 表达式 WHEN1 THEN 表达式1 [ WHEN2 THEN 表达式2] ELSE 表达式m END

--示例
CASE DAYOFWEEK(CURDATE()) - 1 WHEN 0 THEN 7 ELSE DAYOFWEEK(CURDATE()) - 1 END AS 周几

3.4思考题

1.假如用户想查一下今天是星期几(不能用数值,要用英文显示)你可以写一个简单的查询语句吗?

select date_format(curdate(),'%W ');

2.复杂系统,使用时间函数时,要注意时钟同步

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值