首页 > 代码库 > 数据库原理-数据单表查询
数据库原理-数据单表查询
格式:select [all|distinct] <目标列表达式>,[目标列]...
from <表名或视图名>[,<表名或视图名>|(seslect 语句)[as]<别名>]
[where <条件名>]
[group by<列名1>[having <条件表达式>]]
[order by<列名1>[asc|desc]]
单表查询
选择表中的若干列
1.查询全部列
2.查询经过计算的列
选择表中的若干元组
1.取消取值重复的行
select distinct sno from sc //去掉表中重复的行必须制定短语distinct,如果没有指定,缺省值为all
2.查询满足条件的元组
- 比较大小
- 确定范围
查找年龄在20-23岁(包括20和23岁)之间的学生的姓名,系别
select sname,sdept from student where age between 20 and 23
查找年龄不在20-23岁(包括20和23岁)之间的学生的姓名,系别
select sname,sdept from student where age not between 20 and 23
- 确定集合
select sname,sex from student where sdept in(‘is‘,‘math‘)//谓词in 用来查找属性值属于指定集
select sname,sex from student where sdept not in(‘is‘,‘math‘)//谓词in 用来查找属性值属于指定集
- 字符匹配
格式:like ‘匹配串‘
匹配串既可以是一个完整的字符串,也可以含有通配符%和_
%(百分号)代表任意长度(可以为0)的字符串
_(下横线)代表任意单个字符
查询学号为001的学生的信息
select * from student where sno=‘001‘ //匹配串中不含通配符时,可以用=代替like,用!=或>,<代替not like
查找所有姓刘的学生的信息
select * from student where sname like ‘刘%‘
查询姓张且全名为3个汉字的学生的姓名
select sname from student where sname like ‘张_ _ _ _‘ //一个汉字占两个字符的位置
- 空值查询
select sno,cno from sc where grade is null //注意,这里的is不能用等号=代替
- 多重条件查询
and 和 or可以连结多个查询条件,and的优先级高于or,用户可以用括号改变优先级
查询计算机系年龄在20岁以下的学生的姓名
select sname from student where sdept=‘cs‘ and age<20
order by
select sno,grade from sc where cno=‘3‘ order by grade desc
对于空值,升序排列,含空值的元组将最后显示;降序排列,含空值的元组将最先显示
聚集函数
如果指定distinct,计算时取消重复值,默认为all,表示不取消重复值
查询学生总人数
select count * from student
查询选修了课程的学生人数
select count(distinct sno) from sc
计算1号课程的学生平均成绩
select avg(grade) from sc where cno=‘1‘
查询选修1号课程的学生最高分数
select max(grade) from sc where cno=‘1‘
group by 字句
数据库原理-数据单表查询