数据库系统概论|第三章:关系数据库标准语言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'系的学生人数以及平均年龄(平均年龄保留小数)。++**

相关推荐
理智的煎蛋1 小时前
MySQL高可用架构:MHA
linux·数据库·mysql·架构·可用性测试
罗光记1 小时前
苹果内部 AI聊天机器人“Asa”曝光,为零售员工打造专属A
数据库·经验分享·百度·微信公众平台·新浪微博
二向箔reverse3 小时前
深度学习中的学习率优化策略详解
人工智能·深度学习·学习
悠哉悠哉愿意3 小时前
【机器学习学习笔记】线性回归实现与应用
笔记·学习·机器学习
li35743 小时前
从“内存操作”到“原子更新”:一次代码思维的跃迁
数据库·oracle
大筒木老辈子3 小时前
Linux笔记---计算机网络概述
linux·笔记·计算机网络
瀚高PG实验室3 小时前
执行select * from a where rownum<1;,数据库子进程崩溃,业务中断。
数据库·sql·瀚高数据库
小白考证进阶中3 小时前
终于赶在考试券过期前把Oracle OCP证书考下来了!
运维·数据库·oracle·dba·开闭原则·数据库管理员
DCTANT4 小时前
【报错记录】OpenGauss/磐维数据库连接报:org.postgresql.util.PSQLException: 致命错误: 账户被锁定
数据库·postgresql
KING BOB!!!4 小时前
Leetcode高频 SQL 50 题(基础版)题目记录
sql·mysql·算法·leetcode