mysql高级查询
Posted story
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql高级查询相关的知识,希望对你有一定的参考价值。
高级查询基本用法
一、exists和notexists子查询
1、exists子查询
select 。。。。from 表名 where exists(子查询);
2、not exsits 子查询
select 。。。。from 表名 where not exists(子查询);
二、子查询的注意事项
1)子查询语句可以嵌套在sql语句中任何表达式出现的位置。
在select语句中,子查询可以被嵌套在select语句的列,表,和查询条件中,即select子句、from子句、where子句、group by子句和having子句。
①子查询在select子句和from子句的使用语法。
select (子查询)from 表名;
子查询结果为单行单列,但不必指定列别名。
②子查询在from子句的使用语法。
select * from (子查询) As 表的别名;
注意:必须为表指定别名,一般返回多行多列数据记录,可以当做一张临时表。
三、分组查询
1、使用group by进行分组查询
①求各门课程学生的平均分:
select subjectNo ,avg(subjectresult)
from result
group by subjectNo;
②按照性别进行分组:
select count(*)AS人数,sex
from student
group by sex;
③查询每个年级的总人数
select count(*) AS年级人数,gradeId
from student
group by gradeId;
2、多列分组查询
统计每个年级的男女学生人数:
select grade AS年级,count(*) AS人数,sex AS性别
from student
group by grade,sex
order by grade;
3、使用having子句进行分组筛选
①查询年级总人数超过2人的年级
select count(*) AS人数,grade AS年级
from student
group by grade
having count(*)>2;
②查询平均分达到及格的课程信息
select subjectNo AS课程编号,avg(studentresult) AS平均分
from result
group by subject
having avg(student_result)>=60;
③查询每门课程及格总人数和及格学生的平均分
select count(*) AS总人数,avg(student_result)AS平均分,subjectNo AS课程
from result
where student_result>\'60\';
group by subjectNo ;
④查询每门课程及格人数而且及格平均分在80分以上的记录。
select count(*) AS 人数,avg(student_result)AS 平平均分,subjectNo AS课程
from result
where student_result>\'60\'
group by subjectNo
having avg(student_result)>80;
四、多表连接查询
1、多表连接的分类
①内连接查询
使用 inner join或者where子句来 连接两个表
(1)在where子句中指定连接条件
如:查询学生姓名和成绩
select student.name,result.student.result
from student,result
where student.studentNo=result.studentNo;
(2)在from子句中使用inner join 。。。on
如:查询学生姓名和成绩
select s.name,r.student_redult,r.studentNo
from student AS s
inner join result AS r on(s.studentNo=r.studentNo);
2、外连接查询
①左外链接查询
left join。。。on或者left outer join 。。。on
如:以学生表为主表,成绩表为从表
select s.name,r.student_redult,r.studentNo
from student AS s
left outer join result AS r
on(s.studentNo=r.studentNo);
2.由外连接查询
right join。。on或者right outer join。。on
如:以学生表为主表,成绩表为从表
select s.name,r.student_redult,r.studentNo
from student AS s
right outer join result AS r
on(s.studentNo=r.studentNo);
五、外连接和内连接的区别
http://www.cnblogs.com/Ewin/archive/2009/10/05/1578322.html
以上是关于mysql高级查询的主要内容,如果未能解决你的问题,请参考以下文章