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

相关推荐
happymaker06263 分钟前
web前端学习日记——DAY04
前端·学习
Oueii23 分钟前
Django全栈开发入门:构建一个博客系统
jvm·数据库·python
未来龙皇小蓝1 小时前
【MySQL-索引调优】11:Group by相关概念
数据库·mysql·性能优化
2401_831824961 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python
njidf1 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
twc8291 小时前
大模型生成 QA Pairs 提升 RAG 应用测试效率的实践
服务器·数据库·人工智能·windows·rag·大模型测试
@我漫长的孤独流浪1 小时前
Python编程核心知识点速览
开发语言·数据库·python
2401_851272991 小时前
实战:用Python分析某电商销售数据
jvm·数据库·python
枕布响丸辣1 小时前
MySQL 从入门到精通:完整操作手册与实战指南
数据库·mysql
电商API&Tina2 小时前
【电商API接口】开发者一站式电商API接入说明
大数据·数据库·人工智能·云计算·json