当前课程知识点:数据库概论 >  第三章 结构化查询语言SQL >  3.5 复杂SQL查询操作2 >  复杂SQL查询操作2

返回《数据库概论》慕课在线视频课程列表

复杂SQL查询操作2在线视频

复杂SQL查询操作2

下一节:4.1 数据完整性

返回《数据库概论》慕课在线视频列表

复杂SQL查询操作2课程教案、知识点、字幕

各位同学大家好

我是来自云南大学软件学院的张璇

我们在前面介绍过

我们可以在SQL命令中使用函数

下面

我们先介绍非常常用的聚合函数

它们是COUNT

MAX

MIN

SUM and AVG

这里的DISTINCT

和ALL我们前面解释过

下面我们在举例过程中会进一步解释

我们来举几个简单的例子

首先

假设我们要查询学生的总人数

本质上

是查询学生表S的所有的记录个数

于是就需要用到count这个函数

这么写SQL命令

Select count括弧星号from S

这里是统计学生表的所有记录个数

也就是学生总数了

而如果要查询选修了课程的学生人数

就应该统计成绩表SC

但注意

一个学生可以选修多门课程

这里我们需要增加

dinstinct的这个限制

统计不重复的学生人数

SQL命令这么写

Select count括弧distinct s#

在这里把所有的学生选取出来

但是去掉重复的

from SC

从SC表里面选取

最后

我们再试试计算C3号课程的

学生的平均成绩

用AVG这个函数

从成绩表中把课程号为c3 的课程成绩

选取出来进行平均值运算

所以

Select后面呢我们写上

AVG括弧grade求平均值

其他和前面都是一样的

这里

我们是对一门课程统计平均成绩

如果我们需要对所有课程

进行平均成绩的统计

where条件不指定就可以了

但是不写where条件

就变成对所有课程求平均成绩

那也不行

怎么办呢

这里

我们可以使用一个新的子句

GROUP BY

帮助我们进行分组

GROUP BY子句

将查询结果按一列或多列值进行分组

值相等的即为一列

如果要查询各门课程的选课人数

这么写SQL命令

Select C#逗号count括弧distinct s#

这里呢是按照c#

来相应的统计相应的学生人数

from后面是SC

最后呢group by c#

这里呢按照课程号c#分组

也就是每一门课程呢我们用count

统计学生个数

这样就可以列出所有课程的选课人数了

那么如果我们进一步限定条件

仅把选课人数超过一定人数的课程查询出来

这时候我们要再增加一个子句

要用HAVING子句

这里

我们如果要查询

选课人数超过3人的课程的课程号

和相应的选课人数

这么写

前面Select是一样的

from是一样的

GROUP BY 是一样的

不过要加入HAVING

HAVING后面呢写

count括弧s#大于3

也就是说这里

是学生人数大于3的我们就把它选取出来

在这里我们注意了

这里因为条件使用了聚合函数count

不能用where子句

这也就是为什么我们会增加

HAVING子句的原因

也就是说

Where子句应用于表中的单个条件

HAVING子句通常用于分组查询

并且放在GROUP BY子句之后

HAVING子句中的查询条件

只能是包含在GROUP BY子句中的列

或者聚合函数

所以大家需要区分好

where和having分别如何

使用设置条件

最后

在使用函数进行查询时

我们还可以使用一个新的子句

COMPUTE

生成一个独立的结果

这个独立的结果以附加行的形式返回

比如说

我们查询每门课程的选课情况

和所有课程的总平均分

这个查询由两个部分构成

一个部分是查询选课情况

另一部分是所有课程的平均分

所有课程平均分没有办法

和选课数据放在同一张数据表

因此

这里用COMPUTE

独立的返回这个值

所以SQL命令这么写

Select后面我们不说了

就是课程号

学号

成绩

from成绩表SC

增加一个compute

后面写上所有课程的

平均成绩的一个运算函数

avg括弧grade

那么在这里呢

我们就独立的通过compute

查询出所有课程的平均成绩

并且独立显示

最后

我们还有几个可用的SQL子句介绍给大家

第一个是ORDER BY子句

ORDER BY子句可以用来对查询结果

按照一个或多个列的升序或降序形式排列

缺省排序顺序为升序

比如说

我们要查询

选修了C3课程的学生的学号和成绩

这里要求查询结果按分数降序排列

那么

在这里我们在语句最后要写一个

order by grade加上DESC

是表示降序排列

前面SELECT

FROM和WHERE用来从成绩表中

把选修了c3课程的学生学号

成绩查询出来

由于查询结果要按照成绩分数的降序排列

高分在前

那么

就用order by将grade

进行一个降序排列就可以了

如果要按照成绩分数升序排列

那么order by后面直接写grade

因为默认方式是升序排列的

下面再看一下

如果Where条件是指定一个条件范围

我们可以使用谓词

BETWEEN …AND…

或者NOT BETWEEN …AND

用来它来进行一个查找属性范围值

在指定范围内的数据

比如说

如果我们要查询

入学年龄在17至20之间的学生的姓名

系和入学年龄

那么我们在Where条件里面这么写

把age写成

between 17 and 20就可以了

在接下来我们看看

如果我们的查询条件不是明确的

比如说

我们要找姓欧阳

并且全名为三个汉字的学生的姓名

这时候

在where子句里面

可以使用like谓词

并且加上通配符百分号

或者下划线表示一个模糊匹配的字符

百分号表示任意多个字符

下划线表示任意一个字符

于是

要找姓欧阳且全名为三个汉字的学生的姓名

那么在SQL命令里面

where后面是这样写的

sname LIKE 单引号引起来

欧阳下划线

也就是

学生姓名sname前两个字符是欧阳

最后一个字符是任意字符的

而如果

我们要查询所有叫某某琦的学生的姓名

学号和性别

那么可以这么写

在where后面sname LIKE

这里的单引号引起来里边呢

百分号表示可以代表多个字符

最后一个字是琦就可以了

那么就表示

学生姓名前面什么字符我们不管

只管最后一个字符是琦就可以了

最后

我们介绍一下涉及空值NULL的查询

如果我们要查询缺少成绩的学生的学号

和相应的课程号

也就是在成绩表中要查询出成绩grade

为空的学生和对应的课程

这时候

我们在写关于空值的查询的时候

where条件是

grade IS NULL

这里的is

不能用等号来代替因为是和空值进行比较

而如果我们要查询

所有有成绩的学生学号和课程号

那么在where后面的grade是写

IS NOT NULL

就是成绩不为空的

就是有成绩的学生那么我们把它返回出来

以上

我们介绍了如何在SQL中使用函数

主要介绍了经常使用的聚合函数

并且伴随着聚合函数的使用

我们介绍了group by子句

having子句

compute子句

它们分别用来完成分组

指定聚合函数条件和统计会总的功能

最后

我们还介绍了一些常见的SQL命令子句

包括排序用order by

设置条件范围用between...and...

模糊查询用like

和设计空值null的查询

到此为止

我们介绍完了SQL语言的基本概念

结构成分

语法形式

并用一些示例

给大家讲解了SQL语言的使用

不过

使用SQL语言进行数据操作时

我们并没有把所有的结果展示给大家

目的是请大家自己

到一个数据库管理系统中进行尝试

看看会得到什么样的结果

加深学习印象

同时

也保证你能写出正确的SQL命令

SQL语言介绍完了

谢谢大家

数据库概论课程列表:

导论

-数据库概述

--Video

-导论--数据库概述

第一章 数据库基础

-1.1 数据库基础

--Video

-第一章 数据库基础--1.1 数据库基础

第二章 关系运算

-2.1 CAP数据库

--CAP数据库

-第二章 关系运算--2.1 CAP数据库

-2.2 自然关系运算1

-- 自然关系运算1

-第二章 关系运算--2.2 自然关系运算1

-2.3 自然关系运算2

--自然关系运算2

-第二章 关系运算--2.3 自然关系运算2

第三章 结构化查询语言SQL

-3.1 SQL概述

-- SQL概述

-3.1 SQL概述--作业

-3.2 数据定义DDL

--数据定义DDL

-3.2 数据定义DDL--作业

-3.3 SQL数据更新DML

--SQL数据更新DML

-3.3 SQL数据更新DML--作业

-3.4 复杂SQL查询操作1

--复杂SQL查询操作1

-第三章 结构化查询语言SQL--3.4 复杂SQL查询操作1

-3.5 复杂SQL查询操作2

--复杂SQL查询操作2

-第三章 结构化查询语言SQL--3.5 复杂SQL查询操作2

第四章 数据库完整性、视图与安全性

-4.1 数据完整性

--4.1 数据完整性

-4.1 数据完整性--作业

-4.2 完整性约束

--完整性约束

-4.2 完整性约束--作业

-4.3 外键约束

--外键约束

-4.3 外键约束--作业

-4.4 触发器

--触发器

-4.4 触发器--作业

-4.5 视图

--视图

-4.5 视图--作业

-4.6 安全性

--安全性

-4.6 安全性--作业

第五章 索引

-5.1 索引

--Video

-5.2 B+树索引

--Video

第六章 规范化理论

-6.1 函数依赖

--Video

-6.2 Armstrong公理

--Video

-6.3 无损分解

--Video

-6.4 范式举例

--Video

-6.5 三种范式

--Video

-6.5 三种范式--作业

第七章 实体关系模型

-7.1-E-R模型概述

--E-R模型概述

-7.2 E-R模型详解

--Video

-7.3 E-R模型的拓展

--Video

-7.4 E-R模型实例分析

--Video

第八章 事务处理

-8.1 事务的ACID性质介绍

--ACID介绍

-8.1 事务的ACID性质介绍--作业

-8.2 事务经历

--事务经历

-8.2 事务经历--作业

-8.3 可串行化调度和前趋图

--可串行化调度和前趋图

-8.3 可串行化调度和前趋图--作业

-8.4 两阶段封锁

--两段锁协议

-8.4 两阶段封锁--作业

-8.5 隔离级别

--隔离级别

-8.5 隔离级别--作业

-8.6 事务恢复

--事务恢复

-8.6 事务恢复--作业

第九章 数据库应用与开发

-9.1 数据库使用介绍

--数据库使用介绍

-9.2 Java访问数据库

--Java访问数据库

-9.2 Java访问数据库--作业

第十章 其他数据库技术概述

-10.1 数据库新技术概述

--Video

复杂SQL查询操作2笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。