MySQL中的SQL高级语句[二]

使用语言 MySQL

使用工具 Navicat Premium 16

代码能力快速提升小方法,看完代码自己敲一遍,十分有用

  • 拖动表名到查询文件中就可以直接把名字拉进来
  • 以下是使用脚本方法,也可以直接进行修改
  • 中括号,就代表可写可不写 
  • 有些地方的代码有点多,可以在网页按住Ctrl键加鼠标滚轮放大观看

目录

1.MySQL必要技能

2.IN/NOT IN子查询

2.1 in子查询 

2.1.1 in子查询基本概念

2.1.2 in子查询示例

2.2 not in子查询 

2.2.1 not in子查询示例 

2.2.2 注意

3. exists/not exists子查询 

3.1 exists基本概念 

3.2 exists示例 

3.3 not exists示例 

3.4 exists与in的区别 

 4.子查询总结

4.1 子查询知识回顾

4.1.1 编写子查询语句注意事项

4.1.2 在select子句中的子查询 

4.1.3 在from子句中的子查询 

4.2 选择关键字

5.多表联查 

5.1 内连接示例

5.2 内连接示例2 

5.3 左连接/右连接 

5.3.1 左连接

5.3.2 右连接 


1.MySQL必要技能

  • 增删改查语句
  • 子查询(in/not in)
  • 多表联查 

并且要知道group by是可以去重的,having可以添加分组条件; 

2.IN/NOT IN子查询

2.1 in子查询 

2.1.1 in子查询基本概念

in关键字用于父查询匹配子查询返回的多个字段值。 

"Subquery returns more than 1 row"这个出错,代表子查询返回了多于1行的结果。
在使用比较运算符时,要求子查询只能返回1条或空的记录。也就是说,在MySQL中,当子查询跟随在<、>、=、>=、<=、!=之后时,子查询的返回结果不能是多条记录;否则将会出现错误。出现了这样的问题时,就需要使用in关键字了,将比较运算符切换为"in"即可
in的作用是限制条件的筛选范围,而且in后面的子查询可以返回多条记录。 

2.1.2 in子查询示例

 运行结果如下:

通过阅读以上代码,可以看到这条SQL语句包含5层子查询嵌套,其中有两个子查询是in子查询。使用in子查询的条件就是,在开发过程中,如果判断结果集可能为多条数据,则使用in子查询能够避免语句执行错误。

该代码拆分之后就是这样的,条件就是依次把上面的查询填入子查询而已,不过如果是这么多表的查询,不建议使用子查询(会被骂),推荐使用多表联查;

2.2 not in子查询 

in子查询将结果集中多条数据作为匹配条件,在实际开发过程中,还存在匹配结果集以外的数据的情况。这种查询的实现只需在in关键字前加上表示否定的not即可,也就是not in子查询。 

2.2.1 not in子查询示例 

运行结果如下: 

这个就是在最近一次开具"血脂、血糖检查"这项检查的科室以外科室看过病的所有病人; 

2.2.2 注意

这个就是在最近一次开具"血脂、血糖检查"这项检查的科室看过病的病人之外的所有输出出来。因此,在编写SQL语句时一定要注意语句的逻辑。 

3. exists/not exists子查询 

3.1 exists基本概念 

我们使用SQL语句创建数据库或数据表时使用了exists关键字,用它来判断数据库或数据表是否存在,以决定是否执行创建数据库或数据表的操作。实际上exists和not exists关键字也可以用于子查询。
在执行create或drop语句前,exists语句判断该数据库对象是否已经存在,exists的返回值是true或false,根据exists的返回值决定是否执行数据库操作语句。exists的另一种是在where语句作为子查询使用,语法格式如下:

  • select .... from 表名 exists(子查询);

exists在where子句中作为子查询使用时,若子查询的查询结果中有数据,则exists子查询的结果为true,其外层查询语句会被执行。若子查询的查询结果中没有数据,则exists子查询的结果为false,其外层查询语句不会被执行。 

3.2 exists示例 

运行结果

在以上示例中,使用exists子查询来判断病人是否做过"血脂、血糖检查",若有,则exists子句返回true。在exists子句返回true后,外层查询继续执行。其中,病人的年龄在表中并没有直接给出,需要通过时间日期函数和算术函数计算得到。

3.3 not exists示例 

运行结果

这个不会进行查询,只会判断李思雨是否有检查过凝血五项,如果没有检查过就查询后添加数据;

3.4 exists与in的区别 

  • EXISTS 用于检查子查询是否返回结果,而 IN 用于比较主查询的列与子查询返回的结果集中的值。
  • EXISTS 更适合用于判断子查询是否为空,而 IN 更适合用于比较列与结果集中的值是否相等。
  • 性能方面,通常情况下 EXISTS 的性能可能比 IN 更好,尤其是当子查询返回的结果集很大时,因为 EXISTS 只需要判断是否存在匹配的行,而不需要返回所有匹配的值;(目前由于版本更新in和exists的速度已经差不多了,但是面试时还是要说exists比较快

 4.子查询总结

4.1 子查询知识回顾

当一个查询时另一个查询的条件时,被称为子查询。子查询可以使几个简单的查询语句构成功能强大的符合查询语句; 

4.1.1 编写子查询语句注意事项

  • 子查询语句必须放在"()"中
  • 子查询语句出现的位置很灵活 

4.1.2 在select子句中的子查询 

在select子句中进行子查询的语法格式如下: 

  • select (子查询) [as 列别名] from 表名;

4.1.3 在from子句中的子查询 

 在from子句中进行子查询的语法格式如下:

  • select * from (子查询) as 表别名;

在from子句中的子查询必须加as别名,别名可以任意取,没有特殊的要求;

4.2 选择关键字

  • 子查询返回单行数据时,比较条件中可以使用比较运算符
  • 子查询返回多行数据时,比较条件中需要使用in或者not in关键字
  • 当判断子查询是否有数据返回时,需要使用exists或not exists关键字。 

子查询的输出结果通常作为其外层子查询的数据源或用于数据判断匹配,而不能作为最外层selec子句的输出字段。 

实现同一个需求可以使用不同的方式,但是不同实现方式的效率是不同的。在数据量比较小的条件下,这种效率上的差距还不是很明显,但是当数据量很大,并且对执行时间要求较高时,差距会非常明显。因此,良好的开发习惯是代码调试成功后,进一步思考是否有更好的解决方法。 

5.多表联查 

多表联查在 MySQL 中通常通过使用 JOIN 子句来实现。有几种类型的 JOIN,包括 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN。下面是一个简单的例子,展示了如何在 MySQL 中执行多表联查: 

5.1 内连接示例

假设你有三个表:patient、prescription 和 checkitem。patient 表包含患者信息,prescription 表包含处方信息,checkitem 表包含检查项目信息。 

5.2 内连接示例2 

 运行结果

或者可以不写连接,直接在表列表写需要的表,然后在where中写上多表联查的条件即可 ;

5.3 左连接/右连接 

5.3.1 左连接

  • LEFT JOIN 会返回左边表(左表)中的所有行,即右边表(右表)中没有匹配的行。
  • 如果左表中的行在右表中没有匹配的行,则会在结果集中以 NULL 值显示右表中的列。

LEFT JOIN 语法如下:
SELECT 列列表
FROM 左表
LEFT JOIN 右表 ON 左表.列 = 右表.列; 

5.3.2 右连接 

  • RIGHT JOIN 与 LEFT JOIN 类似,但是它会返回右边表(右表)中的所有行,即左边表(左表)中没有匹配的行。
  • 如果右表中的行在左表中没有匹配的行,则会在结果集中以 NULL 值显示左表中的列。

RIGHT JOIN 语法如下:
SELECT 列列表
FROM 左表
RIGHT JOIN 右表 ON 左表.列 = 右表.列; 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Web】VS Code 插件

专栏文章索引&#xff1a;Web 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、安装步骤 二、插件 1.Chinese (Simplified) (简体中文) 2.open in browser 3.vscode-icons 4.Live Server 5.Live Server Preview 6.翻译(英汉词典) 一、安装步骤 点击 “扩…

竞技游戏新纪元:如何打造满足现代玩家需求的极致体验?

文章目录 一、现代玩家需求分析二、以玩家体验为核心的游戏设计三、个性化与定制化服务四、强化社交互动与社区建设五、持续更新与优化《游戏力&#xff1a;竞技游戏设计实战教程》亮点编辑推荐内容简介目录获取方式 随着科技的飞速发展和游戏产业的不断壮大&#xff0c;现代玩…

GitHub repository - Watch - Star - Fork - Follow

GitHub repository - Watch - Star - Fork - Follow References 眼睛图标旁边写着 Watch 字样。点击这个按钮就可以 Watch 该仓库&#xff0c;今后该仓库的更新信息会显示在用户的公开活动中。Star 旁边的数字表示给这个仓库添加 Star 的人数。这个数越高&#xff0c;代表该仓库…

【多线程】单例模式 | 饿汉模式 | 懒汉模式 | 指令重排序问题

文章目录 单例模式一、单例模式1.饿汉模式2.懒汉模式&#xff08;单线程&#xff09;3.懒汉模式&#xff08;多线程&#xff09;改进 4.指令重排序1.概念2.question:3.解决方法4总结&#xff1a; 单例模式 一、单例模式 单例&#xff0c;就是单个实例 在有些场景中&#xff0c…

MacOs 安装thrift-0.5.0

下载thrift-0.5.0.tar.gz https://archive.apache.org/dist/incubator/thrift/0.5.0-incubating/ 安装thrift 解压&#xff1a;tar -zvxf thrift-0.5.0.tar.gz 进入解压目录&#xff1a;cd thrift-0.5.0 编译命令&#xff1a;./configure --prefix/usr/local/ --with-boo…

深度学习知识点:卷积神经网络(CNN)

深度学习知识点&#xff1a;卷积神经网络&#xff08;CNN&#xff09; 前言卷积神经网络&#xff08;CNN&#xff09;卷积神经网络的结构Keras搭建CNN经典网络分类LeNetAlexNetAlexNet 对比LeNet 的优势&#xff1f; VGGVGG使用2个33卷积的优势在哪里&#xff1f;每层卷积是否只…

【行为型模式】观察者模式

一、观察者模式概述​ 软件系统其实有点类似观察者模式&#xff0c;目的&#xff1a;一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变&#xff0c;他们之间将产生联动。 观察者模式&#xff1a; 1.定义了对象之间一种一对多的依赖关系&#xff0c;让一个对象的…

说说你对集合的理解?常见的操作有哪些?

一、是什么 集合&#xff08;Set&#xff09;&#xff0c;指具有某种特定性质的事物的总体&#xff0c;里面的每一项内容称作元素 在数学中&#xff0c;我们经常会遇到集合的概念&#xff1a; 有限集合&#xff1a;例如一个班集所有的同学构成的集合无限集合&#xff1a;例如…

麒麟KOS删除鼠标右键新建菜单里不需要的选项

原文链接&#xff1a;麒麟KOS删除鼠标右键新建菜单里不需要的选项 Hello&#xff0c;大家好啊&#xff01;在日常使用麒麟KOS操作系统时&#xff0c;我们可能会发现鼠标右键新建菜单里包含了一些不常用或者不需要的选项。这不仅影响我们的使用效率&#xff0c;也让菜单显得杂乱…

【3DsMax+Pt】练习案例

目录 一、在3DsMax中展UV 二、在Substance 3D Painter中绘制贴图 一、在3DsMax中展UV 1. 首先创建如下模型 2. 选中如下三条边线作为接缝 重置剥 发现如下部分还没有展开 再选一条边作为接缝 再次拨开 拨开后的UV如下 二、在Substance 3D Painter中绘制贴图 1. 新建项目&am…

多乐空气处理设备有限公司现已加入2024第13届生物发酵展

参展企业介绍 为满足日益发展的中国大陆市场对环境的要求&#xff0c;更接近Zui终用户&#xff0c;多乐集团于2001年在上海松江设立了第一家生产基地。经过十数年来的高速发展&#xff0c;多乐以其精湛的加工工艺、yiliu的制造技术方面的优势&#xff0c;在对温度湿度有严格要…

DAY14|二叉树理论基础、递归遍历、迭代遍历、统一迭代

理论基础、递归遍历、迭代遍历、统一迭代 理论基础递归遍历迭代遍历前序中序后序 统一迭代 理论基础 今天的内容极其基础也极其重要&#xff0c;今天的不掌握好&#xff0c;之后一个半月都要坐大牢… 以前算法课上学的还行&#xff0c;可能还能记得一些&#xff08;希望&#…

ubuntu 使用conda 创建虚拟环境总是报HTTP错误,转换多个镜像源之后仍报错

最近在使用Ubuntu conda创建虚拟环境时&#xff0c;总是报Http错误&#xff0c;如下图所示&#xff1a; 开始&#xff0c;我以为是conda 镜像源的问题&#xff0c;但是尝试了好几个镜像源都不行&#xff0c;还是报各种各样的HTTP错误。后来查阅很多&#xff0c;总算解决了。解…

imx6ull官方源码linux内核移植

1.尝试官方源码 在正点原子给的资料里找到NXP官方原版linux源码&#xff0c;路径为&#xff1a; 1、例程源码->4、 NXP 官方 原版 Uboot和 Linux->linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2。复制并解压。 修改顶层Makefile 编译一下 make -j16 出现以下错误 修改 就…

【数据结构】树与二叉树、树与森林部分习题以及算法设计例题 2

目录 【数据结构】树与二叉树、树与森林部分习题以及算法设计例题一、交换二叉树每个结点的左右孩子Swap 函数&#xff08;先序遍历&#xff09;&#xff1a;Swap 函数&#xff08;中序遍历&#xff09; 不可行&#xff1a;Swap 函数&#xff08;后序遍历&#xff09;&#xff…

【开发篇】十三、JVM基础参数设置与垃圾回收器的选择

文章目录 1、-Xmx 和 –Xms2、-XX:MaxMetaspaceSize 和 –XX:MetaspaceSize3、-Xss4、不建议改的参数5、其他参数6、选择GC回收器的调试思路7、CMS的并发模式失败现象的解决8、调优案例 GC问题解决方式&#xff1a; 优化JVM基础参数&#xff0c;避免频繁Full GC减少对象的产生…

0基础如何入门编程?

0基础如何进入IT行业 &#xff1f; 前言 简介&#xff1a;对于没有任何相关背景知识的人来说&#xff0c;如何才能成功进入IT行业&#xff1f;是否有一些特定的方法或技巧可以帮助他们实现这一目标&#xff1f; 主要方法有如下几点建议提供给宝子们 目录 免费视频网课学习…

读书笔记之《如何精心设计提示词来精通ChatGPT》

《如何精心设计提示词来精通ChatGPT》这本书英文标题为&#xff1a;《The Art of Prompt Engineering with chatGPT》&#xff0c;于2023年出版。作者是Nathan Hunter 。 Nathan Hunter简介&#xff1a;ChatGPT培训的创始人。作为一名资深培训师和教学设计师&#xff0c;我在过…

Spring Cloud 集成 Redis 发布订阅

目录 前言步骤引入相关maven依赖添加相关配置 使用方法发布订阅发布一个消息 注意总结 前言 在当今的软件开发领域&#xff0c;分布式系统已经成为一种主流的架构模式&#xff0c;尤其是在处理大规模、高并发、高可用的业务场景时。然而&#xff0c;随着系统复杂性的增加&…

elementor和divi的对比,哪个更适合你,他们国产化替代方案

Elementor和Divi都是流行的WordPress页面构建器&#xff0c;它们各自具有一些独特的优点和缺点。现在有越来越多的应用服务商开发了自助建站工具&#xff0c;通过自助建站工具&#xff0c;我们可以轻松的创建一个看起来很专业的网站。但在眼花缭乱的软件产品面前&#xff0c;我…