数据库系统原理实验作业五:单表查询

一,选择表中的若干列

1.查询经过计算的值

[例3.19]查全体学生的姓名及出生年份。

-- 2021减去年龄就是出生日期
SELECT Sname,2021-Sage
FROM Student;

执行结果
在这里插入图片描述

2.查询经过计算的值,小写字母表示系名

【例3.20】查询全体学生的姓名

--小写 LOWER(),'Year of Birth:'可以方便阅读
SELECT Sname,'Year of Birth:',2021-Sage,LOWER(Sdept)
FROM Student

执行结果
在这里插入图片描述

3.使用列别名改变查询结果的列标题

SELECT Sname NAME,'Year of Birth:' BIRTH ,2021-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT
FROM Student

执行结果:会有别名标题可读性好
在这里插入图片描述

二,选择表中的若干元组

查询条件谓词
比较=,<,>,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符
确定范围BETWEEN AND,NOT BETWEEN AND
确定集合IN,NOT IN
字符匹配LIKE,NOT LIKE
空 值IS NULL,IS NOT NULL(注意:= NULL是错误表达方式)
多重条件(逻辑运算)AND,OR,NOT

1.消除取值重复的行

【例3.21】查询选修课程的学生学号

 -- SELECT (ALL) Sno  FROM SC;没有指定DISTINCT关键词 ,则缺省ALL
SELECT DISTINCT Sno 
FROM SC;

没有指定DISTINCT关键词或使用ALL
在这里插入图片描述

使用DISTINCT执行结果
在这里插入图片描述

2.比较大小

【例3.22】查询计算机科学系全体学生的名单

SELECT Sname
FROM Student
WHERE Sdept='CS'

【例3.23】查询所有年龄在20岁以下的血红色呢个姓名及其年龄。


SELECT Sname,Sage
FROM Student
WHERE Sage<20

【例3.24】查询考试成绩有不及格的学生的学号

SELECT DISTINCT Sno
FROM SC
WHERE Grade<60

3.确定范围

【例3.25】查询年龄在20~23(包括20岁和23岁)之间的学生的姓名,系别和年龄

SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23

执行结果
在这里插入图片描述

【例3.26】查询年龄不在在20~23(包括20岁和23岁)之间的学生的姓名,系别和年龄

SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23

执行结果
在这里插入图片描述

【例3.27】查询计算机科学系(cs),数学系(ma)和信息系(is)血红色呢个的姓名和性别。

SELECT Sname,Ssex
FROM Student
WHERE Sdept IN ('CS','MA','IS')

执行结果
在这里插入图片描述
【例3.28】查询不是计算机科学系(cs),数学系(ma)和信息系(is)血红色呢个的姓名和性别。

SELECT Sname,Ssex
FROM Student
WHERE Sdept NOT IN ('CS','MA','IS')

4.字符匹配

[NOT] LIKE ‘<匹配串>’[ESCAPE‘<换吗字符>’]
<匹配串>可以是一个完整的字符串,也可以含有通配符%和 _
%代表任意长度(长度可以为0)的字符串
代表任意单个字符
数据库字符集为ASCII时,一个汉字需要两个

数据库字符集为 GBK 时,一个汉字需要一个_

匹配串为固定字符串

【例3.29】查询学号为2015121的学生的详细情况

SELECT *
FROM Student
WHERE Sno LIKE '201215121'
--等价于
--SELECT*
--FROM Student
--WHERE Sno='201215121' 

在这里插入图片描述

匹配串为含通配符的字符串

[例3.30] 查询所有姓刘学生的姓名、学号和性别。

SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE'刘%'

在这里插入图片描述
[例3.31] 查询姓"欧阳"且全名为三个汉字的学生的姓名。

我这里数据库字符集为 GBK 一个_就可以查

SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE'欧阳_'

在这里插入图片描述
[例3.32] 查询名字中第2个字为"阳"字的学生的姓名和学号。

SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE '_阳%'

在这里插入图片描述

[例3.33] 查询所有不姓刘的学生姓名、学号和性别。

SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname NOT LIKE '刘%'

在这里插入图片描述
使用换码字符将通配符转义为普通字符

[例3.34] 查询DB_Design课程的课程号和学分。

SELECT Cno,Ccredit
FROM Course
WHERE Cname LIKE 'DB\_Design' ESCAPE'\'

在这里插入图片描述

[例3.35] 查询以"DB_"开头,且倒数第3个字符为 i的课程的
详细情况。

SELECT *
FROM Course
WHERE Cname LIKE 'DB\_%I__' ESCAPE'\'

在这里插入图片描述

5.涉及空值的查询

[例3.36] 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。

SELECT Sno,Cno
FROM sc
WHERE Grade IS NULL

我这里都是有成绩的所以查询为空

[例3.37] 查所有有成绩的学生学号和课程号。

SELECT Sno,Cno
FROM SC
WHERE Grade IS NOT NULL

在这里插入图片描述

6.多重条件查询

逻辑运算符:AND和 OR来连接多个查询条件
1.AND的优先级高于OR
2.可以用括号改变优先级

[例3.38] 查询计算机系年龄在20岁以下的学生姓名。

SELECT Sname
FROM Student
WHERE Sdept='CS' AND Sage<20

在这里插入图片描述

改写[例3.27]
[例3.27] 查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别。

SELECT Sname,Ssex
FROM Student
WHERE Sdept='CS' OR Sdept='MA' OR Sdept='IS'

在这里插入图片描述

三,ORDER BY子句

ORDER BY
可以按一个或多个属性列排序
升序:ASC;降序:DESC;缺省值为ASC
对于空值,排序时显示的次序由具体系统实现来决定

[例3.39]查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。

SELECT Sno,Grade
FROM SC
WHERE Cno='3'
ORDER BY Grade DESC

在这里插入图片描述

[例3.40]查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。

SELECT *
FROM Student
ORDER BY Sdept,Sage DESC

在这里插入图片描述

四,聚集函数

◼ 统计元组个数 COUNT(*)
◼ 统计一列中值的个数 COUNT([DISTINCT|ALL] <列名>)
◼ 计算一列值的总和 SUM([DISTINCT|ALL] <列名>)
◼ 计算一列值的平均值 AVG([DISTINCT|ALL] <列名>)
◼ 求一列中的最大值和最小值
MAX([DISTINCT|ALL] <列名>)
MIN([DISTINCT|ALL] <列名>)

[例3.41] 查询学生总人数。

SELECT COUNT(*)
FROM Student

[例3.42] 查询选修了课程的学生人数。

SELECT COUNT(DISTINCT Sno)
FROM SC

在这里插入图片描述

[例3.43] 计算1号课程的学生平均成绩

SELECT AVG(Grade)
FROM SC
WHERE Cno='1'

在这里插入图片描述

[例3.44] 查询选修1号课程的学生最高分数。

SELECT MAX(Grade)
FROM SC
WHERE Cno='1'

在这里插入图片描述

[例3.45 ] 查询学生201215012选修课程的总学分数。

SELECT SUM(Ccredit)
FROM SC,Course
WHERE Sno='201215121' AND 
SC.Cno=Course.Cno

在这里插入图片描述

[例3.46] 求各个课程号及相应的选课人数。

SELECT Cno,COUNT(Sno) 选课人数
FROM SC
GROUP BY Cno

在这里插入图片描述

[例3.47] 查询选修了2门以上课程的学生学号。

SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>=2

在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值