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

本文详细介绍了SQL子查询的概念及其在复杂查询中的应用,包括单行子查询和多行子查询。通过实例展示了如何使用子查询来获取低于60分或高于60分的学生信息,解释了all、any和in的关键字用法。对于多行子查询,解释了它们在不同比较运算符下的行为规则。
摘要由CSDN通过智能技术生成

今天我们继续给大家介绍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多行子查询

其实,这种查询方式是单行子查询,一旦返回结果多与一行,就会查询失败,如下所示:
在这里插入图片描述
那么如果我们想查询大于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);

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

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远是少年啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值