天天看点

MySQL数据库SQL之高级查询

分组用法
select gender from students group by gender;
group_concat(字段名)根据分组结果,使用group_concat()来放置每一个分组中某字段的集合
select gender,group_concat(name) from students group by gender;
select gender,group_concat(age) from students group by gender;
聚合函数在和group by结合使用的时候 统计的对象是每一个分组。
select gender,avg(age) from students group by gender;
select gender,count(*) from students group by gender;
having 条件表达式:用来过滤分组结果,having作用和where类似,但having只能用于group by 而where是用来过滤表数据
select gender,count(*) from students group by gender having count(*)>2;
with rollup的作用是:在最后新增一行,来记录当前表中该字段对应的操作结果,一般是汇总结果。
select gender,count(*) from students group by gender with rollup;
连接  当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集进行汇总显示。
内连接查询:查询的结果为两个表匹配到的数据
右(外)连接查询:查询的结果为两个表匹配到的数据和右表特有的数据,对于左表中不存在的数据使用
左(外)连接查询:查询的结果为两个表匹配到的数据和左表特有的数据,对于右表中不存在的数据使用
select * from students inner join classes on students.cls_id = classes.id;
select s.name,c.name from students as s inner join classes as c on s.cls_id = c.id;
自连接 当需要将多张"表"的相关数据汇总一个结果集中, 并且多张"表"的数据来自于同一张表
需要对表起多个不同的别名才能进行自连接查询
select b.* from base as b
inner join base as c on c.cc=b.bb
where c.cc='xxx';
子查询
子查询是嵌入到主查询中 子查询是辅助主查询的,要么充当条件,要么充当数据源
select * from students where age > (select avg(age) from students);
SQL语句的完整格式 
SELECT select_expr [,select_expr,...] [      
      FROM tb_name
      [JOIN 表名]
      [ON 连接条件] 
      [WHERE 条件判断]
      [GROUP BY {col_name | postion} [ASC | DESC], ...] 
      [HAVING WHERE 条件判断]
      [ORDER BY {col_name|expr|postion} [ASC | DESC], ...]
      [ LIMIT {[offset,]rowcount | row_count OFFSET offset}]
]


           

继续阅读