数据查询(一)

一.单表查询

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; 
posted @ 2016-05-31 21:12  larryking  阅读(1535)  评论(0编辑  收藏  举报