子查询和分组查询

一、子查询

什么是子查询?

一个查询语句里面嵌套一个查询。外层的叫做符查询,内层里面嵌套的叫做子查询。

语法:

select  ....... from 表名 where 字段 比较运算符 (子查询);

#其中,在查询过程中,先执行子查询部分,求出子查询部分的值,再执行整个父查询,返回最后的结果。

注意:将子查询和比较运算符联合使用时,必须保证子查询返回的值只有一个,否则比较运算符必须用 IN。

使用 IN 关键字可以使父查询匹配子查询返回多个单字段值,也就是可以返回多个值。

示例:


#使用IN子查询
SELECT studentNo,studentName FROM student
WHERE studentNo IN (
	SELECT studentNo FROM result WHERE subjectNo=(
	SELECT subjectNo FROM `subject`
	WHERE subjectName ='Logic Java'
)AND examDate =(
	SELECT  MAX(examDate) FROM result 
	WHERE subjectNo=(
	SELECT subjectNo FROM `subject`
	WHERE subjectName ='Logic Java'
	)
   )
);

二、分组查询

1.使用group by 分组查询:

示例:

#使用group by 子句实现查询
select subjectNo,avg(studentResult) as 课程平均成绩
from result
group by subjectNo;

多列分组查询:

#统计每个学期的男,女人数
select count(*) as 人数,gradeId AS 年级,sex as 性别 
from  student 
group by grade ,sex
order by grade;

注意:在使用group by分组查询时,在select 后面的列的是限制的,一般允许如下:

  • group by 子句后的列
  • 聚合函数计算出的列

2.使用HAVING 子句进行分则查询

#使用having子句对分组后的数据进行筛选
select count(*) as 人数,gradeId AS 年级 from student 
group by gradeId
having  count(*) >3;

#注意:having 子句必须是写在分组后面的

使用子句查询的顺序:

where > group by > having > order by > limit ;

如下所示:

#分组查询
select 列  from 表 where 分组前条件
group by 分组列 having 分组后条件
order by 排序列
limit 分页;

猜你喜欢

转载自blog.csdn.net/JAVA52Lin/article/details/84111820