• 基础DQL(数据查询)—— 子查询(含实例)


    本专栏收录了数据库的知识点,而基础DQL系列文章将对每种查询都单独写一篇文章,提供给有需要的小伙伴参考,本专栏地址可以戳下面链接查看

    🎈 数据库知识点总结(持续更新中):【数据库知识点

    🔑 数据库相关练习题(持续更新中):【数据库练习题

    🔥 一个提供给Java学习者的专栏:【拼图小游戏(Java)

    一、前言

    本文将讲述多表查询中的子查询,也是一个难点

    二、概述

    • SQL语句中嵌套的SELECT语句,被称为嵌套查询,又称子查询
    • 子查询的外部语句可以是 INSERT / UPDATE / DELETE / SELECT 中任何一个
    • 根据子查询的不同结果,可分为:表量子查询(子查询结果为单个值)/ 列子查询(子查询结果为一列)/ 行子查询(查询结果为一行)/ 表子查询(子查询结果为多行多列 )

    三、标量子查询

    1.概述

    子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式

    2.常用操作符

    • =,<>,>,>=,<,<=

    3.实例

    查询"销售部"的所有员工信息

    思路

    • 查询"销售部"部门ID
    SELECT id FROM Dept WHERE Name = '销售部';
    
    • 1
    • 根据销售部部门ID,查询员工信息
    SELECT * FROM emp WHERE Dept_id = 4;
    
    • 1

    完整语句

    SELECT * FROM emp WHERE Dept_id = (SELECT id FROM Dept WHERE Name = '销售部');
    
    • 1

    四、列子查询

    1.概述

    子查询返回的结果是一列(可以是多行)

    2.常用操作符

    • IN、NOT IN、ANY、SOME、ALL
    操作符描述
    IN在指定集合之内,多选一
    NOT IN不在指定集合范围只能
    ANY子查询返回列表中,有任意一个满足即可
    SOME与ANY等同,使用 SOME的地方都可以使用ANY
    ALL子查询返回列表的所有值都必须满足

    3.实例

    查询比财务部所有人工资都高的员工信息

    思路

    • 查询财务部部门ID
    SELECT id FROM Dept WHERE Name = '财务部'
    
    • 1
    • 查询财务部人员工资
    SELECT Salary FROM emp WHERE Dept_id = ( SELECT id FROM Dept WHERE Name = '财务部');
    
    • 1
    • 比财务部所有人工资都高的员工信息

    完整语句

    SELECT * FROM emp WHERE Salary > ALL(SELECT Salary FROM emp 
    WHERE Dept_id = ( SELECT id FROM Dept WHERE Name = '财务部'));
    
    • 1
    • 2

    五、行子查询

    1.概述

    子查询返回的结果是一行(可以是多列)

    2.常用操作符

    • =、<>、IN、NOT IN

    3.实例

    查找与"张三"的薪资及其直属领导相同的员工信息

    思路

    • 查找与"张三"的薪资与直属领导
    SELECT Salary,managerid FROM emp WHERE name = '张无忌';
    
    • 1
    • 查询与"张三"的薪资及直属领导相同的员工信息

    完整语句

    SELECT * FROM emp (Salary,managerid) = (SELECT Salary,managerid FROM emp WHERE name = '张无忌')
    
    • 1

    六、表子查询

    1.概述

    子查询返回结果是多行多列

    2.常用操作符

    • IN

    3.实例

    查找与"张三"、"李四"的薪资与直属领导相同的员工信息

    思路同上

    完整语句

    SELECT * FROM emp (Salary,managerid) = (SELECT Salary,managerid FROM emp WHERE name = '张三' OR name = '李四')
    
    • 1

    七、结语

    如果有任何的问题欢迎在评论区留言

  • 相关阅读:
    【RabbitMQ】RabbitMQ 消息的堆积问题 —— 使用惰性队列解决消息的堆积问题
    【Unity】线性代数基础:矩阵、矩阵乘法、转置矩阵、逆矩阵、正交矩阵等
    将每个Excel文件的数据量统一减少至120000行
    【实习】Mockito + JUnit5 单元测试学习
    【Python深入学习】- 书籍推荐|数据结构和算法介绍|内建集合数据类型
    【数据库系统概论】第一章数据库绪论
    在类库中使用ASP.NET Core API
    C语言 指针进阶
    IGBT厂商扩产,APS生产排产帮助企业充分利用设备产能
    Oracle GRID管理环境下 不建议禁用OS认证
  • 原文地址:https://blog.csdn.net/Alita233_/article/details/127623553