网易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
除特别注明外,本站所有文章均为 Windcoder网 原创,转载请注明出处来自: wangyimysqlweizhuanyexuexibijiwu-sqlyuyanjinjie

No Data