深入浅出MySQL学习记录

Sql简介

DDL语句
数据定义语言,对数据库内部的对象进行创建、修改、删除等操作,更多地由数据库管理员使用。
DML语句
对表内数据操作,插入、更新、删除、查询
DCL语句
权限语句

记录

多表更新
用在:根据一个表的字段,动态更新另一个表的字段
update emp a, dept b
set a.sal=a.sal*b.deptno, b.deptname=a.ename
where a.deptno = b.deptno

查询去重
select distinct deptno from emp

聚合
select [field*] func _name from tbl where cond group by field- with rollup having where_cond
func_nanme: sum、count、max、min
with rollup:是否对分类聚合后的结果进行再次汇总
having:对分类后的结果再次进行条件过滤
having和where的区别:having是在聚合前做过滤,where是在聚合后做过滤,尽可能在聚合前做过滤。
MySQL中count(1),count(*),count(某字段)等用法联系和区别

统计各个部门的人数
select deptno, count(1) from emp group by deptno
统计各个部门的人数和总人数
select deptno, count(1) from emp group by deptno with rollup
with rollup:在分组统计数据的基础上再进行统计汇总,用于得到group by的汇总信息

子查询
关键字:in、not in、=、!=、exists、not exists
select * from emp where deptno in (select deptno from dept)
子查询和表连接的相互转换
select emp.* from emp, dept where emp.deptno = detp.deptno (内连接)

左外连接
select ename, deptname
from emp left join dept on emp.deptno = dept.deptno

联合(union、union all)
union all:将结果集直接合并到一起
union:将union all的结果再进行一次distinct,去重
将两个表的数据按照一定查询条件查询出来后,将结果合并到一起显示
select * from t1
union*
select * from t2
union*
select * from t3
… …
将两个表的部门编号集合显示出来
emp的编号:1、2、3、4
dept的编号:1、2、5
select deptno from emp union all select deptno from dept
展示:1、2、3、4、1、2、5
select deptno from emp union all select deptno from dept
展示:1、2、3、4、5

基本类型

日期和时间
DATE:2023-01-06
TIME:17:41:23
DATETIME:2023-01-06 17:41:23
TIMESTAMP:unix秒数,默认值:CURRENT_TIMESTAMP(插入null值就会填充为当前时间,如果有多列该类型的字段,则后续字段默认为0)
YEAR:年

TIMESTAMP的坑
和时区强相关,插入日期时,先转换为本地时区再存放;读取时,需要转换为本地时区后显示,导致两个不同时区看到同一个日期的值不一样;
时间范围只能到2038年

DATETIME不会有该问题

SET和ENUM
枚举和集合

附录-count(1)

从执行结果来看
count(*):所有行进行统计,包括NULL行
count(1):所有行进行统计,包括NULL行
count(column):对column中非Null进行统计

从执行效率上看
MySQL会对count()做优化。
(1)如果列为主键,count(列名)效率优于count(1)
(2)如果列不为主键,count(1)效率优于count(列名)
(3)如果表中存在主键,count(主键列名)效率最优
(4)如果表中只有一列,则count(
)效率最优
(5)如果表有多列,且不存在主键,则count(1)效率优于count(*)

count(1)原理
count(1),其实就是计算一共有多少符合条件的行。
1并不是表示第一个字段,而是表示一个固定值。

count()原理
count(
),执行时会把星号翻译成字段的具体名字,效果也是一样的。
不过多了一个翻译的动作,比固定值的方式效率稍微低一些。
参考链接:https://blog.csdn.net/weixin_43899069/article/details/120507754

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值