• 基础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

    七、结语

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

  • 相关阅读:
    一文了解微分段应用场景与实现机制
    Linux系统远程访问另一台Windows系统的解决方案
    腾讯混元助手使用指南
    今日ac题
    前端工程化知识系列(5)
    K8s开发环境搭建
    Codeforces 167B 状态设置的优化
    FT2004(D2000)开发实战之在线开发OpenCV实例
    使用 React 和 Tensorflow.js进行自定义对象检测
    Arm64 linux Virtual memory分析
  • 原文地址:https://blog.csdn.net/Alita233_/article/details/127623553