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

相关推荐
woshilys2 小时前
mysql 删除表等待
数据库·mysql
SEO-狼术2 小时前
dbForge Documenter for Oracle Crack
数据库·oracle
limnade2 小时前
MySQL中动态生成SQL语句去掉所有字段的空格
sql·mysql
极限实验室3 小时前
如何使用 Grafana 连接 Easyearch
数据库
尖枫5083 小时前
学习笔记:金融经济学 第1讲
笔记·学习·金融
文or野3 小时前
MySQL 在 CentOS 7 环境安装完整步骤
数据库·mysql·adb
牧羊狼的狼3 小时前
主键索引和唯一索引的区别
数据库·sql·oracle
Justice link3 小时前
部署redis cluster
数据库·redis·缓存
会飞的土拨鼠呀3 小时前
SQL Server AlwaysOn (SQL 查询数据详解及监控用途)
数据库
Acxymy3 小时前
MySQL学习笔记十九
笔记·学习