分组查询
将查询结果按照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可以省略