前言
数据查询是数据库的核心操作。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'系的学生人数以及平均年龄(平均年龄保留小数)。++**