[ MySQL ] — 复合查询和内外连接的使用

news2024/9/28 19:20:48

目录

复合查询

多表查询

自连接

子查询

 单行子查询

多行子查询

多列子查询

在from子句中使用子查询 

合并查询

 union

 union all

表的内连接和外连接

 内连接

 外连接 

  左外连接

  右外连接 


 

复合查询

多表查询

实际开发中往往数据来自不同的表,所以需要多表查询。

这里还是用之前的公司管理系统做演示,这里有三张表EMP、DEPT、SALGRADE。

显示雇员名、雇员工资以及所在部门的名字,因为前面的数据来自EMP和DEPT表,因此要联合查询。

把两张表直接联合查询,就像下图一样,一个员工会匹配多条部门信息,但是我们实际并不想要这种。

 我们只要员工表中deptno和部门表中的deptno匹配即可

 显示部门号为10的部门名,员工名和工资

 显示各个员工的姓名,工资,及工资级别

自连接

自连接是指在同一张表连接查询

如下图:

使用:

显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号--empno)

子查询的方式

多表查询的方式 (自查询)

子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。

 单行子查询

        返回一行记录的子查询。

使用:

显示SMITH同一部门的员工

多行子查询

        返回多行记录的子查询

  • in关键字;判断列信息 是否包含在in()之内的

查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的。

  •  all关键字;列信息与 all() 里的所有内容进行比较

显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号。

  •  any关键字;列信息 与any() 中的任意一个比较,如:大于其中任意一个就返回真 

显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)

多列子查询

        单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。

使用:

查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人

在from子句中使用子查询 

        子查询语句出现在from子句中,相当于是把一个子查询的结果当做一个临时表使用。

使用:

显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资。

查找每个部门工资最高的人的姓名、工资、部门、最高工资 。

 显示每个部门的信息(部门名,编号,地址)和人员数量。

解决多表问题的本质:想办法将多表转换为单表,所以MySQL中所有的select问题都可以转换成单表问题。

合并查询

        在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。这个用的比较少。

 union

        该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。

使用:

将工资大于2500或职位是MANAGER的人找出来

 union all

        该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

使用:

将工资大于25000或职位是MANAGER的人找出来 

两条语句要查询的列不对等会报错。

表的内连接和外连接

        表的连接分为内连接和外连接。

 内连接

        内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,前面的查询都是内连接,也是在开发过程中使用的最多的连接查询。

语法:

select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

使用:

显示SMITH的名字和部门名称

 外连接 

        外连接分为左外连接和右外连接。

  左外连接

        联合查询中让 左侧的表 完全显示 就说是左外连接。

使用:

现有两张表

查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来。

 

  右外连接 

        联合查询中让 右侧的表 完全显示 就说是右外连接。

语法:

select 字段 from 表名1 right join 表名2 on 连接条件;

使用:

对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要
显示出来

列出部门名称和这些部门的员工信息,同时列出没有员工的部门

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

opencv进阶14-Harris角点检测-cv2.cornerHarris

类似于人的眼睛和大脑,OpenCV可以检测图像的主要特征并将这 些特征提取到所谓的图像描述符中。然后,可以将这些特征作为数据 库,支持基于图像的搜索。此外,我们可以使用关键点将图像拼接起 来,组成更大的图像。&#x…

云上社群系统部分接口设计详解与测试

目录 一、项目简介 1. 使用统一返回格式+全局错误信息定义处理前后端交互时的返回结果 2.使用ControllerAdviceExceptionHandler实现全局异常处理 3.使用拦截器实现用户登录校验 4. 使用MybatisGeneratorConfig生成常的增删改查方法 5. …

SVF——C/C++指针分析/(数据)依赖分析框架

这篇文章包括: SVF介绍SVF源码解读SVF优势与不足如何扩展改进 文章包括一些个人观点,若觉得有误请留言纠正,感谢🙏 在这篇文章之前强烈推荐看我公众号之前推的一篇文章:CG0’2011 “Flow-sensitive pointer analysis f…

追踪工时和控制成本 如何选对工具

研发工作中的工时管理软件是一种用于追踪、记录和分析团队成员在项目中所花费的工作时间的工具。它有助于组织、监控和优化研发项目的进展,确保资源得到有效利用,项目按时完成,并提供数据支持用于决策制定和资源规划。 能够记录团队成员的工…

高忆管理:“降息”了!1年期下调10个基点,5年期为何“按兵不动”?有何影响?

1年期LPR利率年内再度下调,5年期以上LPR利率按兵不动。 8月21日,新一期借款商场报价利率(LPR)公布。其间,1年期借款商场报价利率(LPR)报3.45%,上月为3.55%;5年期以上LPR报…

5种做法实现table表格中的斜线表头效果(HTML+CSS+JS+Canvas+SVG)

table表格,这个东西大家肯定都不陌生,代码中我们时常都能碰到,那么给table加一个斜线的表头有时是很有必要的,但是到底该怎么实现这种效果呢? 我总结了以下几种方法: 1、最最最简单的做法 直接去找公司的…

电脑图纸怎么加密?图纸加密软件有哪些?

对于企业来说,图纸的重要性是不言而喻的,为了避免图纸泄露,我们需要将图纸加密保护。那么电脑图纸该怎么加密呢?下面我们就来看一下。 图纸加密会带来哪些好处? 保护企业利益 为图纸加密可以有效地保护知识产权&…

Openlayers 教程 - 以单位米为半径,绘制圆形图形要素

Openlayers 教程 - 以单位米为半径,绘制圆形图形要素 核心代码完整代码:在线示例 在以往的项目维护中,出现一个问题,使用最新高清底图发现,设置地图最大等级(21级)之后,地图虽然可以…

Steam搬砖项目:最长久稳定的副业!

项目应该大家都有听说话,但是细节问题,如何操作可能有些不是很清楚,今天在这里简单分享一下。 这个Steam搬砖项目主要赚钱汇率差和价值差,是一个细分领取的小项目。 不用引流,时间也是比较自由的,你可以兼…

vue 可拖拽可缩放 vue-draggable-resizable 组件常用总结

特征 没有依赖 使用可拖动,可调整大小或两者兼备定义用于调整大小的句柄限制大小和移动到父元素或自定义选择器将元素捕捉到自定义网格将拖动限制为垂直或水平轴保持纵横比启用触控功能使用自己的样式为句柄提供自己的样式 安装和基本用法 npm install --save vue-d…

【BASH】回顾与知识点梳理(三十七)

【BASH】回顾与知识点梳理 三十七 三十七. 基础系统设定与备份策略37.1 系统基本设定网络设定 (手动设定与 DHCP 自动取得)手动设定 IP 网络参数(nmcli)自动取得 IP 参数(dhcp)修改主机名(hostnamectl) 37.2 日期与时间设定时区的显示与设定时间的调整用 ntpdate 手动网络校时 …

Istio入门体验系列——基于Istio的灰度发布实践

导言:灰度发布是指在项目迭代的过程中用平滑过渡的方式进行发布。灰度发布可以保证整体系统的稳定性,在初始发布的时候就可以发现、调整问题,以保证其影响度。作为Istio体验系列的第一站,本文基于Istio的流量治理机制,…

MyBatis的基本入门及Idea搭建MyBatis坏境且如何实现简单的增删改查(CRUD)---详细介绍

一,MaBatis是什么? 首先是一个开源的Java持久化框架,它可以帮助开发人员简化数据库访问的过程并提供了一种将SQL语句与Java代码进行解耦的方式,使得开发人员可以更加灵活地进行数据库操作。 1.1 Mabatis 受欢迎的点 MyBatis不仅是…

玄而又玄——我亲历的三大总线

总线是计算机系统中的桥梁和公路。对于要学习计算机系统的人来说,如果不理解总线,那么很多认知就没办法落到实处,想不清两样东西是如何连接起来,数据是如何从一点到另一点的。 最近两三年,做了比较多的底层开发&#x…

Scratch 之 创作小技巧 -- 让触碰效果更丝滑

今天小技巧的主题是——丝滑 a.让触碰效果更丝滑 ——非线性放大 相信大家,做游戏时都会有一开始按键吧,把鼠标放上去,这个按键就会有相应的变化,如放大,作为初学者,这段的代码可能是这样↓ 虽然看起来挺…

解析大规模开发:提升企业级开发效率与质量,加速创新

在数字化转型的大环境下,越来越多的企业依赖软件来驱动业务和创新。然而,随着开发规模日益庞大,如何更好地提升研发效能,从而塑造更强大的竞争力,已然成为众多企业亟待解决的共同难题。 作为国内领先的DevSecOps提供商…

凉而不冷 柔而不弱 三菱重工海尔舒适风科技助您整夜安眠

古人云:安寝乃人生乐事。可随着夏天的到来,昼长夜短,家里的老人、儿童、父母都存在不同的入睡苦恼。对于儿童来说,空调温度调的太低容易踢被子着凉,温度调的高又怕孩子满头大汗;父母自身也会因为半夜帮孩子…

盛元广通高校实验室开放预约与综合管理系统LIMS

系统概述: 高校实验室涉及到的课程、老师、学生多,管理起来费时费力,盛元广通高校实验室开放预约与综合管理系统LIMS提供简单易用的账号管理、实验室管理、课程管理、实验项目管理、实验时间设定;为学生提供简单易用的自主实验选…

使用 NBAR(基于网络的应用程序识别) 进行应用流量分析

识别和分类网络应用程序是有效管理网络带宽的关键。通过对网络流量进行分类,管理员可以根据企业的需要可视化、组织和确定网络流量的优先级。通过识别和分类网络流量,网络管理员可以有效地应用 QoS 策略,从而实现优化的网络带宽性能。 什么是…

docker 安装oracle19c linux命令执行sql

docker安装oracle # 下载镜像 19.3.0.0.0 docker pull registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c # 创建文件 mkdir -p /home/mymount/oracle19c/oradata # 授权,不授权会导致后面安装失败 chmod 777 /home/mymount/oracle19c/oradatadocker run -d \ …