• JAVA培训之连接查询之子查询


    子查询就是嵌套查询,即SELECT语句中包含SELECT语句,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了。
    子查询出现的位置:

    • Where子句中,作为条件存在;
    • from后,作为表存在(多行多列)。

    下面我们通过几个练习题来了解子查询,如下所示:
    (1)查询emp表中,工资最高的员工的详细信息,如图1-1所示:

    图1-1 查询员工信息
    图1-1中,查询语句是:select * from emp where sal=MAX(sal),看上去这条sql语句没有什么问题,但是执行的时候却报错了。原因是where子句后面不能使用聚合函数,为了解决这个问题,我们可以使用子查询。
    (2)首先查询出emp表中的最大工资,然后再查询工资等于最大工资的员工信息,如图1-2所示:
    图1-2 子查询
    图1-2中,查询语句是:select * from emp where sal=(select MAX(sal) from emp ),在where子句中嵌套了一个子查询语句。该子查询语句查询的是最大工资数。
    以上子查询的位置是在where子句中,下面我们来了解子查询的位置出现在from关键字后面的情况,如下所示:
    (3)查询30号部门的员工信息,如图1-3所示:
    图1-3 子查询
    在from后面使用子查询时,一定要为子查询指定别名,图1-3中,查询语句是:select * from (select * from emp where deptno=30) e,子查询的别名为e,可以理解为查询的结果就是一张表,然后再从这张表中查询信息。
    图1-2中,子查询语句的查询结果是单行单列,图1-3中的子查询语句的查询结果是多行多列。根据子查询的查询结果有以下分类:

    • 单行单列:这样的子查询通常用来做条件,如:select * from 表1 别名1 where 列1[=,>,<,>=,<=,!=] (select 列 from 表2 别名2 where 条件);
    • 多行单列:这样的子查询通常也用来做条件,如:select * from 表1 别名1 where 列1[in,all,any] (select 列 from 表2 别名2 where 条件);
    • 单行多列:这样的子查询通常也用来做条件,如:select * from 表1 别名1 where [列1,列2,…列n] in (select 列1,列2,…列n from 表2 别名2 where 条件);
    • 多行多列:这样的子查询通常作为要查询的表,即放在from关键词后面,如:select * from 表1 别名1,(select…) 别名2 where 条件。

    单行单列的子查询我们就不在演示,下面我们了解子查询的结果是多行单列的练习题,如下所示:
    (4)查询大于30部门所有员工工资的员工信息,包含30部门员工,如图1-4所示:

    图1-4 多行单列子查询
    图1-4的查询语句是:select * from emp where sal>all(select sal from emp where deptno=30),其中子查询语句:select * from emp where deptno =30的结果是30部门所有员工的工资,是一个多行单列的结果集,查询语句的含义是大于子查询结果集中的所有的工资值,all关键字就是所有的意思,那么只要员工的工资大于30部门员工的最大工资就符合查询条件。
    (5)查询大于30部门任意一个员工工资的员工信息,包含30部门员工,如图1-5所示:
    图1-5 多行单列子查询
    图1-5中查询语句是:select * from emp where sal>any(select sal from emp where deptno=30),子查询还是查询30部门的所有员工工资,where条件子句代表查询员工工资大于30部门员工的最小工资的员工信息,any表示任意一个。
    以上是多行单列的子查询,下面我们来了解单行多列的子查询,如下所示:
    (6)查询与名称为殷天正的员工的工作,部门以及工资相同的员工信息,如图1-6所示:
    图1-6 单行多列子查询
    图1-1中,查询语句是:select * from emp where (job,deptno,sal) in (select job,deptno,sal from emp where ename=’殷天正’),子查询是查询殷天正的工作,部门以及工资。where条件字句表示查询job,deptno以及sal同时与殷天正的工作,部门,工资相同的员工。
       当子查询的查询结果是多行多列时,我们就可以把它当成是一个表,将它放在from关键词后面,这里我们就不在进行演示。

  • 相关阅读:
    2022年湖北省中级工程师职称评审需要注意哪些问题呢?甘建二
    《嵌入式 – GD32开发实战指南》第13章 DAC
    【Midjourney入门教程3】写好prompt常用的参数
    STL教程6-deque、stack、queue、list容器
    用户画像知识点补充——多数据源
    【NI-DAQmx入门】NI-DAQmx之Python
    iOS TestFlight 使用详解
    关于多线程同步的一切:乱序执行和内存屏障
    【FNN回归预测】基于matlab粒子群优化前馈神经网络婚姻和离婚数据回归预测【含Matlab源码 2069期】
    Java基础
  • 原文地址:https://blog.csdn.net/Blue92120/article/details/128142128