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