一.单表查询
1.查询全体学生的学号和姓名
select Sno,Sname
from Student;
2.查询全体学生的详细信息
select* from student;
3.查询全体学生的学生姓名及其出生年份
select Sname,2016 - Sage birth //换了个名字
from student;
4.查询了选修了课程的学生号
select distinct Sno from SC;//distinct是为了消去重复元组,因为有学生不止选了一门课
5.查询计算机系全体学生的名单
select Sname
from Student
where Sdept = 'CS';
6.查询所有年龄在20岁以下的学生姓名
select Sname
from student
where Sage < 20;
7.查询年龄在20-30岁之间的学生的姓名
select Sname
from student
where Sage between 20 and 30;
/*如果是不在,则改为
*where Sage not between 20 and 30;
*/
字符匹配
谓词like用于进行字符串的匹配,其一般语法格式为
[not] like '<匹配串>' [escape '<换码字符>']
8.查询所有姓刘的学生的姓名、性别
select Sname,Ssex
from Student
where Sname like '刘%';
9.查询姓欧阳且名字只有三个汉字的学生姓名
select Sname
from student
where Sname like '欧阳%__';//一个汉字占两个字符
10.查询选修了DB_design课程的学生的姓名
select Sname
from student
where Sname like 'DB\_design' escape '\';
带空值的查询
11.查询所有有成绩的学生的学号和课程名
select Sno,Sname
from SC,Cno
where Grade is not null;
多重条件查询
12.查询计算机系年龄在20岁以下的学生的姓名
select Sname
from student
where Sdept = 'CS' and Sage < 20;
Order by子句
13.查询选修了3号课程的学生的学号及成绩,查询结果按分数的降序排列
select Sno,Grade
from SC
where Cno = '3'
order by Grade desc;
14.查询全体学生的情况,查询结果按所在系的系号升序排列,同一系的学生按年龄降序排列
select*
from student
order by Sdept,Sage desc;
聚集函数
- count([distinct|all] *) 统计元组个数
- count([distinct|all]<列名>) 统计一列中值的个数
- sum([distinct|all]<列名>)计算一列值的总和
- avg([distinct]|all<列名>)计算一列值的平均值
- max([distinct]|all<列名>)求一列值的最大值
- min([distinct]|all<列名>)求一列值的最小值
15.查询学生总人数
select count(*)
from student;
16.计算1号课程的学生平均成绩
select avg(grade)
from SC
where Cno = '1';
17.查询学生2014213000选修课程的总学分数
select sum(Ccredit)
from SC,Course
where Sno = '2014213000' and Course.Sno = SC.Sno;
group by子句
group by子句将查询结果按某一列或多列的值分组,值相等的为一组。
18.求各个课程号及其相应的选课人数
select Sno
from SC
group by Cno;
19.查询选修了3门以上课程的学生学号
select Sno
from SC
group by Cno
having count(*) > 3;