在 where子句中使用子查询(一)

news2024/11/13 12:10:44

目录

子查询返回单行单列

查询公司工资最低的员工信息

查找公司雇佣最早的员工信息

子查询返回单行多列

查询与 ALLEN 工资相同,职位相同的所有员工信息

子查询返回多行单列

IN 操作

查询职位是“MANAGER”的所有员工的薪水 


Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645

where子句主要是进行数据的筛选。通过分析可以发现,单行单列、多行单列、单行多列都可以在 where子句中出现

子查询返回单行单列

查询公司工资最低的员工信息

SQL> set linesize 250
SQL> select *
  2  from emp;

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80            800                    20
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30
      7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30
      7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20
      7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30
      7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10
      7839 KING                 PRESIDENT                     17-11月-81           5000                    10
      7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30
      7900 JAMES                CLERK                    7698 03-12月-81            950                    30
      7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20
      7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10
      8989 HELLO

可以看出,最低工资是 800,但是不可能直接使用 80 这个数据

因为这个数据需要统计出来,而要想知道这个内容,可以利用 min() 函数

SQL> select min(sal)
  2  from emp;

  MIN(SAL)
----------
       800

第二步:以上的查询会返回单行单列的数据,本质就是一个数值

如果现在给了数值,就可以直接 利用 where子句筛选所需要的数据行

SQL> select * from emp
  2  where sal=(select min(sal) from emp);

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80            800                    20

查找公司雇佣最早的员工信息

雇佣最早的员工一定是雇佣日期最小的,那么使用 min() 函数完成

SQL> select min(hiredate)
  2  from emp;

MIN(HIREDATE)
--------------
17-12月-80

以上的查询会返回单行单列的数据,所以可以直接在 where子句中使用

SQL> select *
  2  from emp
  3  where hiredate=(select min(hiredate) from emp);

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80            800                    20

子查询返回单行多列

查询与 ALLEN 工资相同,职位相同的所有员工信息

现在需要同时比较工资与职位,首先应该查询到 ALLEM的工资与职位 

SQL> select sal,job
  2  from emp
  3  where ename='ALLEN';

       SAL JOB
---------- ------------------
      1600 SALESMAN

此时返回了单行两列的数据信息,而要进行比较的时候需要同时满足

SQL> select * from emp
  2  where (sal,job)=(select sal,job from emp where ename='ALLEN');

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30

子查询返回多行单列

如果说子查询返回了多行单列的数据,实质上就相当于告诉用户一个数据的操作范围

而如果要想 进行范围的判断

在 WHERE 子句里面主要提供 3 个运算符: IN、ANY、ALL

IN 操作

IN 操作指的是内容在指定的范围内

查询职位是“MANAGER”的所有员工的薪水 

SQL> select sal
  2  from emp
  3  where job='MANAGER';

       SAL
----------
      2975
      2850
      2450

 返回的值是多行单列的记录,可以发现职位是“MANAGER”的,

员工的薪水有 3 种: 2975,2850和 2450。

再来看下面这个查询语句

SQL> select * from emp
  2  where sal in(select sal from emp where job='MANAGER');

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7566 JONES                MANAGER                  7839 02-4月 -81           2975                    20
      7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                    30
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                    10

对 IN 操作还可以使用 NOT IN 进行,指的是内容不在指定的范围内

SQL> select * from emp
  2  where sal not in(select sal from emp where job='MANAGER');

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300         30
      7844 TURNER               SALESMAN                 7698 08-9月 -81           1500          0         30
      7839 KING                 PRESIDENT                     17-11月-81           5000                    10
      7900 JAMES                CLERK                    7698 03-12月-81            950                    30
      7934 MILLER               CLERK                    7782 23-1月 -82           1300                    10
      7902 FORD                 ANALYST                  7566 03-12月-81           3000                    20
      7369 SMITH                CLERK                    7902 17-12月-80            800                    20
      7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500         30
      7654 MARTIN               SALESMAN                 7698 28-9月 -81           1250       1400         30

在讲解 NOT IN 操作的时候曾经说过一个问题,不能够为 null,这一概念在此处照样适用

SQL> select * from emp
  2  where comm not in(select comm from emp);

未选定行

主要原因就是因为在子查询“ (SELECT comm FROM emp) ”中出现了 null

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1468118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Xcode中App图标和APP名称的修改

修改图标 选择Assets文件 ——> 点击Applcon 换App图标 修改名称 点击项目名 ——> General ——> Display Name

华清远见作业第四十二天——Qt(第四天)

思维导图&#xff1a; 编程&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTextToSpeech> //语音播报类 QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public Q…

内核解读之内存管理(6)address_space建立文件索引结点inode和页page、虚拟地址空间vma的映射

内存管理和文件系统总会交织在一起&#xff0c;所以我们今天聊的内容和文件系统有关。 上一节的struct page结构体中&#xff0c;我们看到了一个成员struct address_space*。很明显是用于建立page和address_space的关联。 它是代表某个地址空间吗&#xff1f;实际上不是的&am…

华为OD机试真题-执行时长-2023年OD统一考试(C卷)---Python3-开源

题目&#xff1a; 考察内容&#xff1a; if for math.ceil()向上取整 代码&#xff1a; """ 题目分析&#xff1a;输入&#xff1a; int 1次最多执行的任务个数 int 数组长度 list 任务数组--表示任务个数 输出&#xff1a; 执行完所有任务最小时间 eg: 3…

C语言-指针详解速成

1.指针是什么 C语言指针是一种特殊的变量&#xff0c;用于存储内存地址。它可以指向其他变量或者其他数据结构&#xff0c;通过指针可以直接访问或修改存储在指定地址的值。指针可以帮助我们在程序中动态地分配和释放内存&#xff0c;以及进行复杂的数据操作。在C语言中&#…

【Java程序设计】【C00288】基于Springboot的篮球竞赛预约平台(有论文)

基于Springboot的篮球竞赛预约平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的篮球竞赛预约平台 本系统分为前台功能模块、管理员功能模块以及用户功能模块。 前台功能模块&#xff1a;用户进入到平台首页&a…

CSDN付费阅读需要哪些条件?

文章目录 前言一、博客等级要求二、原力等级要求结束语 前言 hello&#xff0c;大家好&#xff01;我是BoBo仔吖&#xff0c;祝大家元宵节快乐呀~ csdn是一个善良的网站&#xff0c;它提供了各种功能空间&#xff0c;比如InsCode运行代码&#xff0c;还有鼓舞大家努力发文的勋…

全能代码生成器,自动生成前后端代码、生成项目框架、生成JavaBean、生成数据库文档、自动化部署项目(TableGo v8.4.0)

TableGo_20240224 v8.4.0 正式版发布&#xff0c;此次版本累计更新如下&#xff1a; 1、TableGo专属LOGO上线 2、生成数据库文档ER图新增备注字段名的生成配置 3、生成自定义文件功能新增临时参数配置&#xff0c;用于使用临时数据生成自定义文件 4、新增基于Excel数据生成…

【算法与数据结构】127、LeetCode单词接龙

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;示例1为例&#xff0c;hit到达cog的路线不止一条&#xff0c;如何找到最短是关键。广度优先搜索是一圈…

汪峰哭晕在厕所-《实现领域驱动设计》中译本评点-第2章(1)

相关链接 DDD领域驱动设计批评文集>> 《实现领域驱动设计》的翻译错误>> [答疑]《实现领域驱动设计》的译者其实没错?&#xff08;一&#xff09;>> [答疑]《实现领域驱动设计》的译者其实没错?&#xff08;二&#xff09;>> 十多年前&#xff0…

设计一个 shell 命令行程序

目录 实现 shell 主要思路 代码&#xff08;Linux&#xff09;系统 实现 shell 主要思路 1、要知道一个 shell 进程在运行起来都会在命令行呈现什么&#xff0c;如图是Xshell 登录成功后的界面&#xff1a;所以第一步要做的就是打印命令行提示符。 Xshell 命令行提示符的组…

人工智能_普通服务器CPU_安装清华开源人工智能AI大模型ChatGlm-6B_003---人工智能工作笔记0098

前面的环境安装差不多了,这里我没有安装git,因为我认为用不到,好下面去下载算法: 首先是算法下载: https://codeload.github.com/THUDM/ChatGLM-6B/zip/refs/heads/main 算法的下载连接是这里: 可以看到下载以后得到这个ChatGLM-6B-main这个算法压缩包 然后我们再去: 然后…

Linux配置Maven环境变量

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

探究全链路压力测试的含义与重要性

全链路压力测试是指对整个应用系统的各个环节或组件进行压力测试&#xff0c;以模拟实际生产环境中的用户负载和流量&#xff0c;评估系统在高负载条件下的性能表现。 1. 全链路压力测试的含义 全链路压力测试涉及系统的所有组件和环节&#xff0c;包括前端用户界面、应用服务器…

Java多线程并发学习

一、Java 中用到的线程调度 1. 抢占式调度&#xff1a; 抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制&#xff0c;系统控制指的是在系统某种运行机制下&#xff0c;可能每条线程都分同样的执行时间片&#xff0c;也可能是某些线程执行的时间片较长&#xff0…

智胜未来,新时代IT技术人风口攻略-第七版(弃稿)

文章目录 前言鸿蒙生态科普调研人员画像角色先行结论 - 市场下的增量蛋糕高校助力鸿蒙 - 掀起鸿蒙教育热潮高校鸿蒙课程开设占比 - 巨大需求背后是矛盾冲突教研力量并非唯一原因 - 看重教学成果复用与效率 企业布局规划 - 多元市场前瞻视野全盘接纳仍需一段时间 - 积极正向的一…

神经网络系列---计算图基本原理

文章目录 计算图符号微分符号微分的步骤示例符号微分在计算图中的使用总结 数值微分前向差分法中心差分法数值微分的使用注意事项总结 自动微分1. 基本原理2. 主要类型3. 计算图4. 应用5. 工具和库6. 优点和缺点 计算图1. **计算图的建立**2. **前向传播**3. **反向传播**4. **…

IT廉连看——C语言——循环语句

IT廉连看——C语言——循环语句 循环语句分为三种&#xff1a; while for do while 一、while循环 我们已经掌握了&#xff0c;if语句&#xff1a; if(条件)语句; 当条件满足的情况下&#xff0c;if语句后的语句执行&#xff0c;否则不执行。 但是这个语句只会执行一次…

调度和管制机制

目录 1 调度机制 分组按优先级排队 公平排队 FQ (Fair Queuing) 加权公平排队 WFQ (Weighted Fair Queuing) WFQ 与 FIFO 的比较 2 管制机制 漏桶管制器 (leaky bucket policer) 3 漏桶机制与加权公平排队相结合 调度和管制机制是使互联网能够提供服务质量的重要措施。…

K线实战分析系列之三:吞没形态

K线实战分析系列之三&#xff1a;吞没形态 一、吞没形态二、看涨吞没形态三、看跌吞没形态四、吞没形态判别标准 一、吞没形态 两根或两根以上的K线形成的组合形态&#xff0c;吞没形态就是一种主要的反转形态。 这个形态由两根K线组成&#xff0c;前短后长&#xff0c;一阴一…