• 〖Python 数据库开发实战 - MySQL篇㉓〗- 单行子查询与多行子查询语法规则


    万叶集
    🎉 隐约雷鸣,阴霾天空。 🎉
    🎉 但盼风雨来,能留你在此。 🎉


    前言
    ✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 🐶哈士奇🐶 ,一位致力于 TFS - 全栈 赋能的博主 ✌
    🏆 CSDN博客专家认证、新星计划第三季全栈赛道 MVP 、华为云享专家、阿里云专家博主 🏆
    📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
    💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬
    🔥 如果感觉博主的文章还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦


    专栏系列(点击解锁)学习路线(点击解锁)知识定位
    🔥Python全栈白皮书🔥 零基础入门篇 以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。
    语法进阶篇 主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。
    自动化办公篇 实现日常办公软件的自动化操作,节省时间、提高办公效率。
    自动化测试实战篇 从实战的角度出发,先人一步,快速转型测试开发工程师。
    数据库开发实战篇 掌握关系型与非关系数据库知识,提升数据库实战开发能力。
    爬虫入门与实战 更新中
    数据分析篇 更新中
    前端入门+flask 全栈篇 更新中
    django+vue全栈篇 更新中
    拓展-人工智能入门 更新中
    网络安全之路 踩坑篇 记录学习及演练过程中遇到的坑,便于后来居上者
    网安知识扫盲篇 三天打鱼,不深入了解原理,只会让你成为脚本小子。
    vulhub靶场漏洞复现 让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。
    shell编程篇 不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结]
    WEB漏洞攻防篇 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
    渗透工具使用集锦 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
    点点点工程师 测试神器 - Charles 软件测试数据包抓包分析神器
    测试神器 - Fiddler 一文学会 fiddle ,学不会倒立吃翔,稀得!
    测试神器 - Jmeter 不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。
    RobotFrameWork Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。
    Java实现UI自动化 文档写于2016年,Java实现的UI自动化,仍有借鉴意义。
    MonkeyRunner 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。

    在这里插入图片描述


    该章节我们继续来学习一下 “子查询” 的语法,在上一章节,我们是按照 “子查询” 的"子句" 来进行划分的分别有 “WHERE 子查询”,“FROM 子查询” 与 “SELECT 子查询” 。本章节我们将以子查询的结果集记录的数量来划分子查询,接下来一起来看一下吧。



    🐳 单行子查询 与 多行子查询


    • 单行子查询的结果集只有一条记录
    • 多行子查询结果集有多行记录
    • 二者的区别
      • 单行子查询可以出现在 “SELECT 子句”、“FROM 子句”、“WHERE 子句” 里面。
      • 多行子查询只能出现在 “FROM 子句”、“WHERE 子句” 里面。

    为什么多行子查询只能出现在 “FROM 子句”、“WHERE 子句” 里面?

    当一个子查询返回多行记录的时候,如果在 “FROM” 子句中,那是没有问题的。因为结果集会被当做是一张临时表语其他数据表做一个连接,所以子查询的结果是多少就无所谓了。

    如果多行记录出现在 “WHERE” 子句中,可以使用特殊的表达式符号来进行判断,下文会有详细介绍。

    但是如果多行结果出现在 “SELECT” 子句当中是万万不行的,因为 “SELECT” 子句的其他字段的一条记录无法与子查询的多条记录做合并。


    SQL 语句演示案例:

    利用子查询查找 "FORD" 和 "MARTIN" 两个人的同事。 (提示:使用多行子查询)

    SELECT ename, deptno
    FROM t_emp
    WHERE deptno IN
    	(SELECT deptno
    	FROM t_emp
    	WHERE ename IN("FORD", "MARTIN"))
    AND ename NOT IN ("FORD", "MARTIN");
    
    -- 先写一个 "SELECT" 子查询,得到 "FORD" 与 "MARTIN" 的所在部门的结果集
    -- 再将该所在部门的结果集,作为 "WHERE" 条件查询出所有属于该部门的员工
    -- 并利用  NOT IN 关键字,排除 "FORD" 与 "MARTIN" 
    -- 如此得到的就是 "FORD" 与 "MARTIN" 的所有同事的结果集
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12


    🐳 多行子查询运算符(关键字)


    • 在 “WHERE” 子句中,除了上面示例中使用的 “IN” 关键字之外。还可以使用 “ALL”、“ANY”、“EXISTS” 关键字来处理多行表达式结果集的条件判断。


    🐬 ALL 关键字SQL示例


    • 查询比 “FORD” 、 “MARTIN” 月薪都高的员工信息

    SQL 语句示例:

    SELECT ename, sal, deptno
    FROM t_emp
    WHERE sal >= ALL
    	(SELECT sal
    	FROM t_emp
    	WHERE ename IN("FORD", "MARTIN"))
    AND ename NOT IN ("FORD", "MARTIN");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7


    🐬 ANY 关键字SQL示例


    • 查询比 “FORD” 、 “MARTIN” 任意一位月薪要高的员工信息

    SQL 语句示例:

    SELECT ename, sal, deptno
    FROM t_emp
    WHERE sal >= ANY
    	(SELECT sal
    	FROM t_emp
    	WHERE ename IN("FORD", "MARTIN"))
    AND ename NOT IN ("FORD", "MARTIN");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7


    🐬 EXISTS 关键字SQL示例


    • “EXISTS” 关键字特别的不容易理解,简单的来说:原来在 “WHERE” 子句中,我们用 条件 与 子查询 的结果做的判断,想现在这个条件改到了 “EXISTS” 关键字的子查询里面了。

    语法如下:

    SELECT ...... FROM 表名 WHERE EXISTS (子查询);
    
    -- 可以看到在 "WHERE" 子句中没有了条件判断,条件判断被写在了 "EXISTS" 关键字后面的子查询
    -- "EXISTS" 关键字前面还可以使用 "NOT" 关键字,如此即是 "保留不符合 'EXISTS' 条件的结果"
    
    • 1
    • 2
    • 3
    • 4

    SQL 语句示例:(查询工资等级是 3级 或 4级 的员工信息)

    SELECT empno, ename, sal 
    FROM t_emp
    WHERE EXISTS(
    	SELECT * FROM t_salgrade
    	WHERE sal BETWEEN losal AND hisal	
    	AND grade IN (3, 4)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    正常情况下,使用 "表连接" 的方式效率是最高的,这里之所以使用 "子查询" 举例,是带有一种 "批判的意思" 存在,是要了解 "子查询" 这种语法。就事儿论事儿,在实际工作中如果发现有其他人使用 "子查询" 的方式实现真实环境的场景,可以去告知对方,应该使用高效率的 "表连接" 的方式。



  • 相关阅读:
    【算法练习Day22】 组合总和 III&&电话号码的字母组合
    英文诗歌数据-绘制英文词云图+英文本文分类(pytorch)
    pc端和移动端hover的冲突解决
    QT:工业软件开发的首选“
    read/write函数的应用
    关于Google身份验证器、基于时间的一次性密码 (TOTP)算法的初步了解
    [一篇读懂]C语言三讲:选择、循环
    迷茫了3年:做完这个测试项目,我终于决定辞职
    Multilinear Relationship Networks:多任务学习框架
    第6章-图
  • 原文地址:https://blog.csdn.net/weixin_42250835/article/details/126187536