1.单表查询
◆限制显示结果
·使用limit限制显示的行数,分页函数limit m,n,从m+1行开始显示n条记录
例:查询选修课程成绩排在前5的学生的学号和成绩。
select sno,score from SC order by score desc limit 5;
limit 1,3 零是第一条
◆汇总数据(聚集函数)
5个聚集函数 count、avg、sum、min和max
(1)count
·统计元组个数:COUNT(*)
统计一列中值的个数:COUNT(DISTINCTIALL]<列名>)
例:查询学生总人数。
SELECT COUNT(*) FROM Student; as 给字段名
例:查询选修课程的学生人数·
SELECT COUNT(
DISTINCT
Sno) FROM SC;
去重,根据学号统计
例:计算01号课程的学生平均成绩、最高分和最低分。
SELECT avg(score),max (score),min(score) FROM SC WHERE Cno='01':
如何汇总每门课程的成绩?
◆分组统计
(1)group by
例:查询各课程的课程号及平均分
SELECT Cno,avg(Score) FROM SC GROUP BY Cno;
例:查询各课程的课程号及选课人数·
SELECT
Cno,COUNT(Sno)
FROM SC GROUP BY Cno;
计数
(2)having分组以后设条件
分组后,如果要按条件筛选某些组,需要用having子句,不能用where。
例:查询各选课人数超过3人的课程号。
select Cno,count(Sno) from sc group by cno having count(sno)>=3;
多表
连接查询(关联插叙)
例:查询每个学生及其选修课程的情况
SELECT Student.*,SC.* #表前缀 .
FROM
Student,SC
WHERE Student.Sno =SC.Sno;
自然链接
Select Student.sno,sname,ssex,sage,sclass,scol,cno,score
from Student,
SC
where Student.sno=SC.sno; #注意:两个表都有的字段要加表名前缀。
where Student.sno=SC.sno and score>=90;
例:查询每个学生的学号、姓名、选修的课程名及成绩
select Student.sno,sname,cname,score
from Student,SC,course
where Student.sno=SC.sno and course.cno=SC.cno;
自链接插叙(与自己的副本链接 ,有别名)
◆外连接查询
两张表在连接查询时,要求输出一张表的所有元组,而另一张表只输出满足条件的元组。
例:查询所有学生的基本情况和选课情况。
Select Student.sno,sname,ssex,sage,sclass,scol,cno,score
from Student left outer join SC on(student.sno=sc.sno);
左连接left outer join:输出左边关系中所有的元组
右连接right outer join:输出右边关系中所有的元组
子查询
(1)不相关的子查询
【例】查询和李四(条件)在同一个班的学生的信息。
select from Student
where sclass=(select sclass from Student where sname='李四');
子查询先查哪个班
再来父亲查询