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

不渴望力量的哈士奇 2022-08-06 10:03:01 阅读数:92

Python数据库开发实战数据
万叶集
隐约雷鸣,阴霾天空。
但盼风雨来,能留你在此。


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


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


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


  • 在 “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");


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");


EXISTS 关键字SQL示例


版权声明:本文为[不渴望力量的哈士奇]所创,转载请带上原文链接,感谢。 https://huskypower.blog.csdn.net/article/details/126187536