MySQL_MySQL子查询概述以及where后子查询

查询测试表结构内容如下:

员工表(部分),employees:

 

MySQL子查询概述

子查询

含义:出现在其他语句中的select语句,称为子查询或者是内查询。
    外部的查询语句,称为主查询或者是外查询。

分类:
    按照查询出现的位置
          select 后面:
                     仅仅支持标量子查询

          from 后面:
                     支持表子查询

          where或者是having后面:
                     支持标量子查询
                     支持列子查询
                     支持行子查询
   
          exists后面(称为相关子查询):
                    支持表子查询
   
     按照结果集的行列数不同:
          标量子查询   (结果集只有一行一列)
          列子查询     (结果集只有一列多行)
          行子查询     (结果集只有一行多列)
          表子查询     (结果集为多行多列)
  

where后面的标量子查询

一、where或者是having后面

1.标量子查询(单行子查询)

2.列子查询(多行子查询)

3.行子查询(多行多列)

特点:
①:子查询放在小括号以内
②:子查询一般放置在条件的右侧
③:标量子查询,一般搭配着当行操作符使用,常见的单行操作符有:> , < , >= , <= , = , <>
   列子查询,一般搭配着多行操作符使用,常见的多行操作符有: in, any/some, all
④:子查询的执行都是优先于主查询执行的,主查询的条件用到了子查询的结果。

-----标量子查询,结果为一个一行一列的记录-----

使用测试1:查询比指定字段的相关记录,如:查询工资比Abel高的相关记录

①:先查询Abel的相关工资记录

②:查询员工的信息,并满足salary > ①的结果

使用测试2:返回job_id与141号员工相同,salary比143号员工多的员工 姓名,job_id 和工资

①查询141号员工的job_id

②查询143号员工的salary

③查询员工的姓名,job_id 和工资,要求job_id=①并且salary>②

-----非法使用标量子查询-----

情况1:查询的结果不是一个标量子查询,而是一个列子查询,这一个时候匹配当行操作符'>',‘<’等,这一个时候报错。如:

情况2:结果是一个空值情况。不能够达到我们的预期效果

 

where后面的列子查询(多行查询)

要实现多行子查询,就需要使用多行比较操作符,常见的多行操作符如下:

in / not in :  等于列表中的任意一个
any / some  :  和子查询返回的某一个值比较
all         :  和子查询返回的所有值比较

使用举例:
a = in (10,20,30); 只要a的值是10或20或30即视为满足条件。
a > any(10,20,30); 只要a的值大于10或者大于20或者大于30即视为满足条件。该条件可以使用min替换
a > all(10,20,30); 满足a的值大于10且大于20且大于30即视为满足条件。

使用测试1: 返回location_id是1400或1700的部门中的所有员工姓名

①查询location_id是1400或1700的部门编号

②查询员工姓名,要求部门号是①列表中的某一个

使用测试2:返回其它工种中比job_id为‘IT_PROG’工种任一工资低的员工的员工号、姓名、job_id 以及salary

①查询job_id为‘IT_PROG’部门任一工资

②查询员工号、姓名、job_id 以及salary,salary<(①)的任意一个 (使用any,的时候也可以使用其他来代替)

where后面的行子查询(一行/多行 多列查询)

使用测试:查询员工编号最小并且工资最高的员工信息

①查询最小的员工编号

②查询最高工资

③查询员工编号最小并且工资最高的员工信息

直接使用行子查询实现:直接可以进行括号里面的内容和值进行匹配,然后再进行查询

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

魔笛手7

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

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

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

打赏作者

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

抵扣说明:

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

余额充值