数据查询市数据库的核心操作
单表查询
-
选择表中的若干列
查询表中的部分或者全部列即关系代数的投影运算
(1)指定列查询
语句select 【内容】 from 【表】;
例如查询学生的学号、姓名
select sno,sname from student;
(2)查询全部列
语句:语句select * from 【表】;
案例查询全体学生的记录
select * from student;
(3)查询经过计算的值
案例:查询学生出生时间
时间2014 表中数据age
select 2014-age from student; -
选择表中的若干元组
(1)消除取值重复的行
两个本来不相同的元组在投影到指定某列以后,可能会出现相同的行,可以用distinct消除
案例:查询选修课程的学号
select distinct sno from student;
如果没有指定,那就默认表中存在重复行;
(2)查找满足条件的元组
查询满足条件的元组通过where语句实现
查询中常用到的字符:<,>,=,!=,!<,!>,<=,>=,between and,notbetween and,in not in,like,not like,is null, is not null,and ,or。
案例:查询全体计算机的学生
select sname from student where s=‘cs’; -
order by子句
在使用order by 对结果可以升序(asc)或者desc降序,如果不添加其中一个,就默认升序
案例:select sno,grade from sc where cno=‘3’ order by grade desc; -
聚集函数
count() 统计元组个数
count(distinct/all[列名])统计列表中的个数
sum(distinct/all【列名】)计算总和
avg(distinct/all【列名】)计算均值
max(distinct/all【列名】)找最大值
min(distinct/all【列名】)最小值
distinct计算时不出现重复的值。如果不指定就不取消重复值
案例:查询学生总人数
select count()from student;
查询选秀了课程的学生人数
select count(distinct sno) from sc; -
group by
group by将查询结果分组。
案例:求各个课程号以及相应的选课人数
select sno count(sno)from sc group by cno;
group by 不可跟where连用,所以用having
案例:求选修课程大于3的学号
select sno from sc group by sno having count(*)>3;