数据库 ·

网易MySQL微专业学习笔记(五)-SQL语言进阶

前言

这个系列属于个人学习网易云课堂MySQL数据库工程师微专业的相关课程过程中的笔记,本篇为其“MySQL数据库对象与应用”中的MySQL数据类型相关笔记。

所有笔记可能不定期更新,发布时不一定为最终版。

正文

ORDER BY 排序,默认升序
distinc 大表慎用
group by 分组
分组操作 显示字段包含分组字段及根据分组字段的聚合操作
select userid,count(*) from play_list group by userid having count(*)>2;

limit,offset

进行分页,从offset+1行开始,显示limit个数
select *from play_list where( createtime between 1 and 2) limit 10 offset 5;
offset为偏移量,不建议过大,如若offset 10000,数据库扫码10000行,从10001行开始

case when

实现类似编程语言的if else功能,可对sql的输出结果进行选择判断
select play_name, case when num is null then 0 else num end from paly_list;

连接-join

点连接、join连接、子查询
子查询:内层查询结果作为外层的比较条件。一般子查询都可以转换成连接,推荐使用连接。
子查询清晰方便,但性能上存在一定劣势,不利于mysql查询优化器优化。
连接主要通过嵌套循环的方式实行的,mysqly查询优化器会自行将小的作为外层表,大的作为内层表,但子查询是定死的。
left join 从坐标中返回所有的行,即使右表中没有匹配到行。
与left join对应的是right join关键字,会返回右表中所有的行,即使左表中没有匹配的行。
union
不同表中相同的字段聚合在一个结果集中返回。
默认去重,若不想去重,使用union all

DML进阶语法

多值插入:insert into table values(),()
覆盖插入:replace into tabke values()
忽略插入:insert ignore into table values()
查询插入:insert into table_a select*from table_b
覆盖、忽略插入,避免主键重复的的结果。
查询插入经常用于导表结构中。
insert主键重复则update;
insert into table tbl values (id,col1,col2) on duplicate key update col2=..;

连表update:

A表:id,age
B表:id,name,age
A表ID与b表id关联,
根据b表id更新a表id
update a,b set a.age = b.age where a.id = b.id;

连表删除

根据b表删除a表内容
根据b表name,删除a表中的字段
delete a from a,b where a.id = b.id and b.name = 'pw';

总结

select查询进阶语法
order by/distinct/group by having(聚合函数)/like(%前后缀)
连接语法
内连接、左连接、右连接、Union[all]
DML进阶语法
insert/连表update/连表delete

参与评论