笔记:
聚集函数:count,any,max,sum;
注意:
1.当其遇到空值时,除count(*)外,都会跳过空值去处理非空值!
2.聚集函数只能用于select语句 和 group by 中的having字句
where和having的区分:
1.where用于分组前的筛选
2.having用于分组后的筛选
例:
6.查询选修两门及两门以上课程的学生学号
select sno from sc group by sno having count(*)>1;
3.group by的分组,前面不需要选择了才可以用于分组,不选择也是可以分组的
例:
9.查询成绩不及格的学生的不及格课程数目
select sno,count(*) from sc where grade<60 group by sno;
这里去掉前面的sno也可以查询。
创建表数据:
create table student
(
sno char(9) primary key,
sname char(20) unique,
ssex char(2),
sage smallint,
sdept char(20));
insert into student values('201920','李勇','男',20,'CS');
insert into student values('201921','王敏','女',22,'IS');
insert into student values('201922','刘晨','女',21,'CS');
insert into student values('201923','张立','男',19,'MAS');
insert into student values('201924','王德发','男',19,'IS');
insert into student values('201925','纪伯伦','男',21,'CS');
create table course(
cno char (4) primary key,
cname varchar (40),
cpno char (4),
ccredit smallint);
insert into course values('1','数据库',5,4);
insert into course values('2','高等数学',null,1);
insert into course values('3','Java程序设计',4,5);
insert into course values('4','C语言程序基础',2,3);
insert into course values('5','网页前端设计',null,4);
insert into course values('6','线性代数',1,2);
insert into course values('7','Javascript',2,2);
insert into course values('8','HTML前端开发',3,1);
create table sc(
sno char (9),
cno char (4),
grade smallint,
primary key(sno,cno),
foreign key(sno) references student (sno),
foreign key(cno) references course (cno));
insert into sc values('201921','1',96);
insert into sc values('201922','2',80);
insert into sc values('201923','2',90);
insert into sc values('201923','3',70);
insert into sc values('201922','4',50);
insert into sc values('201923','4',59);
insert into sc values('201921','5',70);
insert into sc values('201924','4',60);
insert into sc values('201924','7',98);
insert into sc values('201925','4',50);
insert into sc values('201925','8',96);
题目:
针对student、course、sc 三个表,写出实现下列查询的select语句:
1.查询计算机系学生的学号和姓名
2.查询选修了课程的学生学号
3.查询选修“C01” 课程的学生学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同则按学号的升序排列
4.查询每门课程的平均分
5.查询学校开设的课程总数
6.查询选修两门及两门以上课程的学生学号
7.查询年龄在20-22之间的男生的学号、姓名、系部
8.查询选修“C01”课程的学生人数
9.查询成绩不及格的学生的不及格课程数目
10.查询每门课程的最高分数
11.查询平均成绩高于90分的课程号
查询语句:
1.查询计算机系学生的学号和姓名
select sno,sname from student where sdept='CS';
2.查询选修了课程的学生学号
select distinct sno from sc;
3.查询选修“C01” 课程的学生学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同则按学号的升序排列
select sno,grade from sc where cno='C01' order by grade desc,sno;
4.查询每门课程的平均分
select cno,avg(grade) from sc group by cno;
5.查询学校开设的课程总数
select count(cno) from course ;
6.查询选修两门及两门以上课程的学生学号
select sno from sc group by sno having count(*)>1;
7.查询年龄在20-22之间的男生的学号、姓名、系部
select sno,sname,sdept from student where sage>20 and sage<22 and ssex='男';
或者:
select sno,sname,sdept from student where sag between 20 and 22 and ssex='男';
8.查询选修“C01”课程的学生人数
select count(*) from sc where cno='C01';
9.查询成绩不及格的学生的不及格课程数目
select sno,count(*) from sc where grade<60 group by sno;
10.查询每门课程的最高分数
select cno,max(grade) from sc group by cno;
11.查询平均成绩高于90分的课程号
select cno from sc group by cno having avg(grade)>90;
(仅供参考复习使用,如有错误请评论指正!)