MYSQL数据查询 多表查询

分组查询

将查询结果按照1个或者多个字段进行分组,字段值相同的为一组:

select sex from students group by sex; 

对name和gender同时分组:

select name,genser from employee group by gender,name;

group by + group_concat()可以作为一个输出字段来使用,表示分组之后来放置每一组的某字段的值的集合

在一组里面所有男性名字和女性名字:

select sex,group_concat(name) from xuesheng group by sex;

group by +聚合函数

查看男女平均年龄:

select sex,group_concat(age),avg(age) from xuesheng group by sex;

为什么要拆分表?

避免大量冗余的数据出现

合并结果集(就是把两个select语句的查询结果合并到一起)

union(合并时去重)

union all(合并时不去重)

select * from 表1 union select * from 表2;

select * from 表1 union all select * from 表2;

注意:被合并的结果集:列数列类型必须相同

去除笛卡尔集现象:主外键保持一致

select * from students,score,course where student.id=score.sid and score.cid=course.id;

连接方式:内连接、外连接、自然连接

内连接:等值连接、非等值连接、自连接、多表连接

外连接:左外连接(左连接)、右外链接(右连接)

内连接写法

select * from students st inner join score sc on st.id=sc.sid;

注意:ON后面只写主外键,如果还有条件直接在后面写where

select st.id,st.name,sc.score from students st inner join score sc on st.id=sc.sid where sc.score>60 and st.age>10;

左外连接、右外链接:

左外连接就是左边表数据全部查询出来,右边表只查询满足条件的

右外连接就是右边表数据全部查询出来,左边标志查询满足条件的

select * from students st left outer join score sc on st.id=sc.sid;

select * from students st right outer join score sc on st.id=sc.sid;

其中outer可以省略

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容