SQL语句详解(三)——SQL子查询

今天我们继续给大家介绍MySQL相关知识,本文主要内容是SQL语句中select子查询相关知识。

一、SQL子查询简介

SQL子查询是指以一个select查询的结果作为另一个select查询的条件来进行查询。结果作为其他select查询条件的select查询称为SQL子查询。注意,SQL子查询不仅仅可以作为其他select查询的条件,还可以作为insert插入和delete删除的条件。SQL子查询常常用于比较复杂的查询操作中,且要查询的条件和字段通常不在一个表内。例如:查询成绩低于60的学生的名字,如果学生的成绩和名字不在一个表内,就可以使用SQL子查询。SQL子查询根据查询的结果,可以分为SQL单行子查询和多行子查询。所谓单行子查询,就是指子查询的结果只有一个,所谓多行子查询,就是指子查询的结果可以有多个。

二、SQL单行子查询

SQL子查询语法结构很简单,只需要把子查询的SQL语句用括号括起来,并且作为其他查询语句的条件即可,例如:student表存储了学生的基本信息,grade表存储了学生的成绩信息,student表中的id和现在要查询成绩低于60的学生的名字,可以执行以下SQL语句:

select name from student where id =(select Sid from grade where score <60);

执行结果如下:
SQL语句详解(三)——SQL子查询_第1张图片

三、SQL多行子查询

其实,这种查询方式是单行子查询,一旦返回结果多与一行,就会查询失败,如下所示:
在这里插入图片描述
那么如果我们想查询大于60分的学生该怎样查询呢?这就需要用到多行子查询,多行子查询其实就是在单行子查询的基础上,添加了一些关键字,比如all、any和in。all表示和所有的查询结果相比,any表示和查询结果的任意一个相比,in表示等于列表中的任何一个。比如,在上例中,要查询大于60分的学生,就应该使用any,SQL语句示例如下:

select name from student where id =any(select Sid from grade where score >60);

或者是

select name from student where id in(select Sid from grade where score >60);

查询结果如下:
SQL语句详解(三)——SQL子查询_第2张图片
其实,in和any的区别在于是否有比较运算符。in不需要使用比较运算符,而any需要使用比较运算符。
至于all,也需要使用比较运算符,all使用的结果与子查询的查询个数和比较运算符相关,规则如下:
1、等于
如果子查询结果有多个不同的结果,则匹配结果为空;如果查询结果有多个结果,但是这些结果都相同,则匹配该结果。
2、小于
表示要匹配小于子查询结果最小值。
3、大于
表示要匹配大于子查询结果最大值。
4、不等于
表示要匹配子查询结果中没有的。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

你可能感兴趣的:(MySQL,sql,mysql,数据库,子查询,运维)