day013--mysql中的子查询

目录

 一,前言

二,子查询的定义及书写格式

1,定义

 2,书写格式

三,子查询的分类

1,单行子查询和多行子查询

2,相关子查询和非相关子查询


 一,前言

相信大家还记得之前我们在学习分组时遗留下的一个问题,那就是如果我们像如下这样,知道了我们学生表中的智育分最高成绩是多少,我们想要查询所对应的学生是谁时,如果只是单纯的使用select和group  by关键字是无法实现我们的需求的,如下,有数据,但并不是正确的结果。

day013--mysql中的子查询_第1张图片

 这就是我们今天需要去了解并学习的内容,如下:

SELECT stu_name,stu_get2 AS "智育分成绩",MAX(stu_get2) AS "最高智育分"
FROM 20student WHERE stu_get2 = (
SELECT MAX(stu_get2) FROM 20student
);

day013--mysql中的子查询_第2张图片

day013--mysql中的子查询_第3张图片 现在我们就可以查询出来在学生表中最高智育分的人是谁。

二,子查询的定义及书写格式

1,定义

广义的子查询就是包含有子查询语句的sql语句,而狭义的子查询指的是包含在主查询中的子查询即小括号里面的查询语句,这么一说可能有点抽象,我们使用具体的表格来举例子:

现在我们依旧使用之前的查询语句并在上面进行标注,如下,

广义的子查询定义:

day013--mysql中的子查询_第4张图片

狭义的子查询定义:

day013--mysql中的子查询_第5张图片

在执行sql语句的过滤时,是先执行子查询,然后再给主查询使用。 

 2,书写格式

我们的子查询语句因为是嵌套在一个主查询的里面,因此我们需要使用一个小括号来将它们分开,并且推荐将我们的子查询语句写在我们的比较条件的右侧:

 子查询也像我们函数那样,有单行和多行之分,但是多行子查询不像多行函数那样返回的只是一条数据,而是多条数据。

三,子查询的分类

1,单行子查询和多行子查询

之前我们在广义的子查询定义那里知道了子查询也可以分为单行子查询和多行子查询。而我们判断的标准和角度则是从子查询返回的结果条数。如果返回单行数据的话为单行子查询,反之为多行子查询。就拿我们之前查的最大值的子查询来说,它返回的只有一行数据,因此就为单行子查询:

day013--mysql中的子查询_第6张图片

2,相关子查询和非相关子查询

如果我们要将子查询分为相关子查询和非相关子查询的话,那么的判断角度及依据是我们的子查询是否被执行多次,如上,子查询在查询出来最大的智育分后,我们的主查询再拿数据表中的stu_get2与这个最大值进行对比,并且这个最大值是一经查询出来就不会再改变的数值:

day013--mysql中的子查询_第7张图片

 因此上图中我们使用的子查询就是非相关子查询一种。

以上就是mysql中的子查询相关内容,有问题请在评论区留言。

你可能感兴趣的:(SQL(使用MySQL),sql,mysql,数据库)