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

单表查询

  • 一,选择表中的若干列
    • 1.查询经过计算的值
    • 2.查询经过计算的值,小写字母表示系名
    • 3.使用列别名改变查询结果的列标题
  • 二,选择表中的若干元组
    • 1.消除取值重复的行
    • 2.比较大小
    • 3.确定范围
    • 4.字符匹配
    • 5.涉及空值的查询
    • 6.多重条件查询
  • 三,ORDER BY子句
  • 四,聚集函数

一,选择表中的若干列

1.查询经过计算的值

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

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

执行结果
数据库系统原理实验作业五:单表查询_第1张图片

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

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

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

执行结果
数据库系统原理实验作业五:单表查询_第2张图片

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

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

执行结果:会有别名标题可读性好
数据库系统原理实验作业五:单表查询_第3张图片

二,选择表中的若干元组

查询条件 谓词
比较 =,<,>,>=,<=,!=,<>,!>,!<;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
数据库系统原理实验作业五:单表查询_第4张图片

使用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

执行结果
数据库系统原理实验作业五:单表查询_第5张图片

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

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

执行结果
数据库系统原理实验作业五:单表查询_第6张图片
【例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 '刘%'

数据库系统原理实验作业五:单表查询_第7张图片
使用换码字符将通配符转义为普通字符

[例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

数据库系统原理实验作业五:单表查询_第8张图片

6.多重条件查询

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

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

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

数据库系统原理实验作业五:单表查询_第9张图片

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

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

数据库系统原理实验作业五:单表查询_第10张图片

三,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

数据库系统原理实验作业五:单表查询_第11张图片

四,聚集函数

◼ 统计元组个数 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

数据库系统原理实验作业五:单表查询_第12张图片

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

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

数据库系统原理实验作业五:单表查询_第13张图片

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

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

在这里插入图片描述

你可能感兴趣的:(数据库作业,sql,数据库)