单关系数据查询

单关系数据查询结构

数据查询是数据库中最常用的操作。SQL提供SELECT语句,用户通过查询操作可得到所需的信息
关系表的SELECT语句一般语法如下

1
2
3
4
5
6
SELECT [ALL|DISTINCT] <字段名> [AS 别名] [{,<字段名> [AS 别名]}]
FROM <表名或视图名> [[AS] 表别名]
[WHERE <检索条件>]
[GROUP BY <字段名> [HAVING <条件表达式>]]
[ORDER BY <字段名> [ASC|DESC]]
[LIMIT子句]

SELECT子句从列的角度进行投影操作,指定要在查询结果中显示的字段名。用户也可以用关键字AS为字段名指定别名
关键字ALL表示所有元组,关键字DISTINCT表示消除查询结果中的重复元组
FROM子句指定要查询的表明或视图名,如果有多个,应用逗号隔开
WHERE子句从行的角度进行选取操作,只有满足条件的元组才会出现在查询结果中
GROUP BY子句将查询结果按照其后的<字段名>的值进行分组
HAVING子句不能单据存在,必须跟在GROUP BY子句后面
ORDER BY子句用于对查询结果进行排序,ASC为升序,DESC为降序
LIMIT子句限制查询结果行数

无条件查询

无条件查询只包含SELECT……FROM……语句

查询表中指定字段名

例:查询student表中学生姓名
SELECT sname AS 学生姓名
FROM student;

查询表中全部字段名

例:查询student表中全部字段名
SELECT *
FROM student;

条件查询

条件查询需要用到WHERE子句指定查询条件
查询条件中,字段名与字段名之间,或字段名与常数之间,通常使用比较运算符连接
常用比较运算符如下

运算符 含义
=、>、<、>=、<=、!=、<> 比较大小
AND、OR、NOT 多重条件
BETWEEN AND、NOT BETWEEN AND 确定范围
IN、NOT IN 确定集合
LIKE、NOT LIKE 字符匹配
IS NULL、IS NOT NULL 空值

比较大小中!=<>表示不等于
多重条件中,AND可表示为&&OR可表示为||NOT可表示为!

比较大小

例:查询student表中已成年学生
SELECT *
FROM student
WHERE age>=18;

多重条件

例:查询student表中已成年且性别为女的学生
SELECT *
FROM student
WHERE age>=18 AND sex=”女”;

确定范围

例:查询student表中年龄段在18-20的学生
SELECT *
FROM student
WHERE age EBETWEEN 18 AND 20;

确定集合

例:查询student表中所学专业为计算机的学生
SELECT *
FROM student
WHERE major=”计算机”;

字符匹配

利用通配符,可以进行模糊查询
常用通配符如下

通配符 功能
% 代表0个或多个字符
_ 代表一个字符
[ ] 表示在某一范围的字符
[^] 表示不在某一范围的字符

例:查询student表中学号带有数字7的学生
SELECT *
FROM student
WHERE sno LIKE “%7%”;

空值

例:查询student表中未选定专业的学生
SELECT *
FROM student
WHERE major IS NULL;

聚合函数查询

SQL提供了许多使用的聚合函数,常用聚合函数如下

函数名称 功能
AVG 按列计算平均值
SUM 按列计算值的总和
MAX 求一列中的最大值
MIN 求一列中的最小值
COUNT 按列值统计个数

例:查询student表中年龄最小的学生
SELECT MIN(age)
FROM student;

分组查询

例:查询student表中已成年的学生,按性别分组
SELECT *
FROM student
WHERE age>=18
GROUP BY sex;

查询结果排序

例:查询student表中已成年的学生,按年龄大小降序排列
SELECT *
FROM student
WHERE age>=18
ORDER BY age DESC;

限制查询结果数量

例:查询student表中已成年的学生,按年龄大小降序排列,只显示前三人
SELECT *
FROM student
WHERE age>=18
ORDER BY age DESC
LIMIT 3;