数据库··By/蜜汁炒酸奶

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

前言

这个系列属于个人学习网易云课堂MySQL数据库工程师微专业的相关课程过程中的笔记,本篇为其“MySQL数据库对象与应用”中的MySQL数据类型相关笔记。 所有笔记可能不定期更新,发布时不一定为最终版。 netease_mysql_feng.png

正文

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

预览
Loading comments...
0 条评论

暂无数据

example
预览