数据库系统概论|第三章:关系数据库标准语言SQL—课程笔记3

前言

数据查询是数据库的核心操作。SQL提供了SELECT语句进行数据查询,该语句具有灵活的使用方式和丰富的功能。有关数据查询的相关代码语句将会在本文被逐一介绍,我们最先来介绍单表查询,顾名思义,就是仅仅涉及一个表的查询。

注:本文中所涉及的数据库前文中已经介绍(指路:数据库系统概论|第三章:关系数据库标准语言SQL---课程笔记1

一、查询表中的若干列【投影运算】

本部分语句较为简单,可分为以下三种:

R 复制代码
SELECT Sno,Sname
FROM Student

上述代码的意思便为++在Student这个基本表中仅仅查询Sno,Sname两个属性所在列。++

R 复制代码
SELECT *
FROM Student

SELECT Sno,Sname,Ssex,Sage,Sdept
FROM Student

上述两段代码的含义一样,均是查询Student表中的所有列,用**[*]**可以进行代替。

接下来我们来介绍如何查询经过计算的值

R 复制代码
SELECT *,LEFT(Sno,4)+'年入校' AS EnterYear
FROM Student

上述代码中,首先运用LEFT 函数,其作用为保留某字符串从左侧开始的X个字符,其次还运用到了AS 关键字,其作用为将计算结果作为新属性EnterYear生成。那么,上述代码的含义为++查询Student表中的所有列,并把Sno列仅从左侧开始保留四位并在后面加上"年入校"文本,然后将计算结果作为新属性EnterYear生成新的一列。++

二、查询表中的若干元组【选择运算】

1.消除取值重复的行

R 复制代码
SELECT DISTINCT Sno
FROM SC

简单理解,在SC表中Sno属性具有重复值,而加入DISTINCT 关键字之后,每一个重复值仅出现一次。

2.查询满足条件的元组

查询满足条件的元组通过WHERE 子句实现,其代码语句十分经典固定,三段式**{SELECT...FROM...WHERE...}**,常用的查询条件如下表所示:

接下来进行每一种类的逐一介绍。

①比较大小

R 复制代码
SELECT Sname 
FROM Student
WHERE Sdept='CS' 

上述代码的含义为++查询Student表中的Sname这一列,将满足Sdept为'CS'的学生选择出来。++

R 复制代码
SELECT Sname, Sage 
FROM Student
WHERE Sage < 20

上述代码的含义为++查询Student表中的Sname,Sage这两列,将满足Sage<20的学生选择出来。++

②确定范围

R 复制代码
SELECT Sname, Sdept, Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23 

上述代码的含义为++查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。++

③确定集合

R 复制代码
SELECT Sname, Ssex
FROM Student
WHERE Sdept IN ('IS', 'MA', 'CS')

上述代码的含义为**++查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。++**

④字符匹配

这一部分较为复杂,先来介绍两种通配符:

  • %(百分号) :包含零个或更多字符的任意字符串。
  • _(下划线):任何单个字符。

通过通配符的引入,同时利用LIKE关键字,可以实现更多的查询,尤其是对模糊信息的查询(比如只记得某个学生的名字而忘记了姓氏,又或者只记得名字中的某几个字,而并不确定全部)

R 复制代码
SELECT Sname, Sno, Ssex
FROM Student
WHERE Sname LIKE '刘%'

上述代码的含义为**++查询所有刘姓同学的姓名、学号和性别。(此处仅运用%而不用_的原因其实很好解释,无法确定刘姓同学的名字总长度,而_仅可代表一个字符,那么这个时候并不适用)++**

R 复制代码
SELECT Sname, Sno
FROM Student
WHERE Sname LIKE '_阳%'

上述代码的含义为**++查询所有名字第二个字是阳的同学的姓名和学号。(这个例子非常好的展示了_仅代表一个字符,%代表任意多个字符)++**

⑤涉及空值的查询

R 复制代码
SELECT Sno, Cno
FROM SC
WHERE Grade IS NOT NULL

上述代码的含义为**++查询所有具有成绩的同学(即Grade属性不为空)的姓名和学号。(这里的IS不能用等号代替)++**

⑥多重条件查询

把前面①~⑤牢牢把握,然后再利用逻辑连接符进行连接,即可得到相关的查询语句。

R 复制代码
SELECT Sname
FROM Student
WHERE Sdept= 'CS' AND Sage < 20

上述代码的含义为**++查询所有专业为"CS"且年龄小于20的同学的姓名。++**

三、聚集函数

SQL提供了许多聚集函数,如下所示:

聚集函数的使用也便利某些查询,下面来看代码示例:

R 复制代码
SELECT COUNT(*)
FROM Student

上述代码的含义为**++查询学生总人数。++**

R 复制代码
SELECT MAX(Grade)
FROM SC
WHER Cno= '1'

上述代码的含义为**++计算1号课程的最高成绩。++**

R 复制代码
SELECT COUNT(*), AVG(CONVERT(float,Sage)) 
FROM Student
WHERE Sdept = 'CS'

上述代码较为复杂,其中CONVERT为类型准换函数,将年龄由原来的int型转换为float型,方便进行平均值计算。上述代码的含义为**++计算'CS'系的学生人数以及平均年龄(平均年龄保留小数)。++**

相关推荐
断春风7 分钟前
如何避免 MySQL 死锁?——从原理到实战的系统性解决方案
数据库·mysql
闲人编程8 分钟前
基础设施即代码(IaC)工具比较:Pulumi vs Terraform
java·数据库·terraform·iac·codecapsule·pulumi
北岛寒沫9 分钟前
北京大学国家发展研究院 经济学辅修 经济学原理课程笔记(第九课 公共产品与公共资源)
经验分享·笔记
QQ_216962909615 分钟前
Spring Boot大学生社团管理平台 【部署教程+可完整运行源码+数据库】
java·数据库·spring boot·微信小程序
Vizio<19 分钟前
STM32HAL库开发笔记-STM32CubeMX点灯
笔记·stm32·嵌入式硬件
玉成22620 分钟前
MySQL两表之间数据迁移由于字段排序规则设置的不一样导致失败
数据库·mysql
找方案24 分钟前
hello-agents 学习笔记:智能体发展史 —— 从符号逻辑到 AI 协作的进化之旅
人工智能·笔记·学习·智能体·hello-agents
skywalk816327 分钟前
Auto-Coder用Qwen3-Coder-30B-A3B-Instruct模型写一个学习汉字的项目
人工智能·学习·auto-coder
MarkHD27 分钟前
智能体在车联网中的应用:一份详尽到每日的100天学习路线图
学习
软件技术NINI28 分钟前
如何学习前端
前端·学习