【MySQL】 复合查询 | 内外连接

news2024/11/20 20:28:05

文章目录

  • 1. 复合查询
    • 多表笛卡尔积
    • 自连接
    • 在where子句使用子查询
      • 单行子查询
      • 多行子查询
        • in关键字
        • all关键字
        • any关键字
      • 多列子查询
    • 在from子句中使用子查询
    • 合并查询
      • union
      • union all
  • 2. 内连接
  • 3. 外连接
    • 左外连接
    • 右外连接

1. 复合查询

多表笛卡尔积

显示雇员名、雇员工资以及所在部门的名字

由于员工 信息属于 emp表 而所在部门名字属于 dept表
数据来自不同的表,所以需要进行多表查询


表示从 emp (员工表) 和dept (部门表) 中获取信息


分别用emp员工的信息 与 dept 部门表的信息 做 穷举 组合
就称 两张表 进行笛卡尔积
就把两张表 变成了 一张表 ,就可以进行单表查询


如 smith 本来是20号部门的,把10号部门的信息传过来 是没有意义的


输入 select * from emp,dept where emp.deptno =dept.deptno;
把对应的部门号 与部门信息 匹配上


输入 select ename ,sal,dname from emp,dept where emp.deptno =dept.deptno;
就可以显示雇员名、雇员工资以及所在部门的名字

自连接

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


将同一张表单纯的写两次,是不可以一起查询的


可以把同一张表的表名通过重命名的方式 分别 进行不同命名 即可

把对同一张表 进行笛卡尔积的 行为 叫做 自连接


显示员工FORD的上级领导的编号和姓名

先找 员工FORD 和领导编号 ,与员工表有关
再通过领导的编号,找领导信息,也是与员工表有关
所以就需要借助 自连接


输入 select e2.ename ,e2.empno from emp e1,emp e2 where e1.ename=‘FORD’ and e1.mgr=e2.empno;
通过第一张表emp中的 员工FORD, 找到对应的领导编号,正好对应第二张emp表的员工编号
所以设置 e1.mgr =e2.empno

这样就可以 通过员工FORD 找到 对应的 领导 的名字和编号

在where子句使用子查询

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

单行子查询

返回一行记录的子查询

查看emp表 的员工信息


想要查看工资最高的员工的名字和工作岗位
首先 要找到 最高工资,但是发现这样写是不可以的

子查询: 在 一条sql内部 再执行 select查询
先执行内部的sql语句,再执行外部的sql语句


先找到 最高工资 ,再通过最高工资找到对应这个人的名字和工作信息


多行子查询

返回多行记录的子查询

in关键字

用来进行判断一个对应的列值是否在一个集合当中
若在集合中,则为查找成功


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

首先要找到10号部门的工作岗位


再通过in关键字,只有工作种类在 10号部门的工作岗位的集合中 ,才能返回


使用and 关键字 ,同时也不包含10号部门的人的信息


all关键字

表示所有人


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

先取到 30号部门的所有员工对应的工资
加入 distinct 去除重复的工资


all (select distinct sal from emp where deptno=30) 表示大于 30号部门的所有员工的薪资


any关键字

表示比任意一个高


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

先取到 30号部门的所有员工对应的工资
加入 distinct 去除重复的工资


any(select distinct sal from emp where deptno=30) 表示大于 30号部门的任意员工的薪资


多列子查询

多列子查询 是指 返回多个列数据的子查询语句


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

首先要找到SMITH对应的部门和岗位


因为要比较的是 两个条件 部门和岗位
而mysql 支持 圆括号 直接写两列
将SMITH 对应的部门和岗位作为筛选条件


还需添加条件 ename <> ‘SMITH’ 不能为SMITH员工本身


在from子句中使用子查询

在查询语句在from子句中,把一个子查询当作一个临时表使用


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

首先找到每个部门的平均工资
通过group by 将各个部门分开,再获取对应的每个部门的平均工资


select deptno,avg(sal) from emp group by deptno 整体操作所形成的数据 看作一张表,并重命名为 tmp,与emp表 做 笛卡尔积


寻找到emp表的部门号 与 tmp表的部门号 相同的 数据 才是合适的,所以加上 emp.deptno=tmp.deptno


select deptno,avg(sal) myavg from emp group by deptno
为了不让其在后面比较起冲突,所以 将avg(sal) 重命名为 myavg
再添加 emp.sal > tmp.myavg 筛选条件,显示每个高于自己部门平均工资的员工信息


合并查询

为了合并多个select的执行结果,可以使用集合符 unionunion all


union

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


select * from emp where sal>2500 即工资大于2500 的人的信息


select * from emp where job=‘MANAGER’ 即工作岗位为 manager的人的信息


发现两者使用重合信息存在的,所以可以使用 union

使用 union ,会自动去除 两者 重合部分的 重复数据


union all

在union的基础上,不会去除重复部分的重复数据

重复的数据会被保留


2. 内连接

内连接 是指 使用where子句对两种表形式的笛卡尔积 进行筛选


语法:
select 字段 from 表1 inner join 表2 on 连接条件 and 连接条件;


显示SMITH的名字和部门名称

筛选条件为 emp.deptno=dept.deptno and ename=‘SMITH’
表示 两张表的 对应 部门号 要相同 ,同时 名字为 SMITH

3. 外连接

左外连接

左侧表完全显示 右侧的表按条件拼接(条件满足拼接,条件不满足拼NULL)


语法:
select 字段名 from 表名1 left join 表名2 on 连接条件

相对于内连接的语法,外连接语法只是把inner 替换成了 left


创建一张表 stu ,内部包含 id 和 name


向stu表中 插入对应的数据 ,并 将其显示出来


再次创建一张成绩表 exam ,内部 包含id 和grade


向exam表中 插入对应的数据,并将其显示出来


发现stu 学生表中 有四名同学,而exam成绩表中 只有三个成绩
而且成绩表中有一个 不存在的id值为11 的学生


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

由于有些学生是没有成绩的,就导致两张表中的id 匹配不上
若只拿id 做内连接,就只有 id值为 1 2 的信息能够显示


为了保证所有学生的信息都显示,所以使用 左外连接

右外连接

左侧的表按条件拼接(条件满足拼接,条件不满足拼NULL) 右侧表完全显示


语法:
select 字段 from 表名1 right join 表名2 on 连接条件


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

stu 学生表中 有四名同学,而exam成绩表中 只有三个成绩
而且成绩表中有一个 不存在的id值为11 的学生


此时右侧exam表的三个id值 全部显示出来了
左侧stu表 由于只有两个id值与exam表中的id值对应,所以只显示2个,剩下显示为NULL

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

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

相关文章

基于Electron27+React18+ArcoDesign客户端后台管理EXE

基于electron27.xreact18搭建电脑端exe后台管理系统模板 electron-react-admin 基于electron27整合vite.jsreact18搭建桌面端后台管理程序解决方案。 前几天有分享electron27react18创建跨平台应用实践&#xff0c;大家感兴趣可以去看看。 https://blog.csdn.net/yanxinyun1990…

Unit1_1:分治问题之时间复杂度求解

文章目录 背景递归树法案例一案例二局限性 代入法/替代法主方法&#xff08;重点&#xff09; 背景 当碰到形如 T ( n ) a T ( ⌈ n b ⌉ ) O ( n d ) T(n)aT(\lceil \frac{n}{b} \rceil)O(n^d) T(n)aT(⌈bn​⌉)O(nd)的递推式&#xff0c;本质上就是将问题转化为规模更小的…

【MySQL数据库】初识MySQL数据库、安装MySQL

文章目录 前言一、什么是 MySQL&#xff1f;二、MySQL 的强大之处三、Ubuntu安装MySQL步骤 1: 更新包列表步骤 2: 安装 MySQL步骤 3: 启动 MySQL 服务步骤 4: 验证 MySQL 安装步骤 5: 确保 MySQL 安全性 总结 前言 在今天的数字化世界中&#xff0c;数据是企业和个人的重要资产…

BUUCTF qr 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 这是一个二维码&#xff0c;谁用谁知道&#xff01; 密文&#xff1a; 下载附件&#xff0c;得到一张二维码图片。 解题思路&#xff1a; 1、这是一道签到题&#xff0c;扫描二维码得到flag。 flag&#xff1a;…

Java进阶(List)——面试时List常见问题解读 结合源码分析

前言 List、Set、HashMap作为Java中常用的集合&#xff0c;需要深入认识其原理和特性。 本篇博客介绍常见的关于Java中List集合的面试问题&#xff0c;结合源码分析题目背后的知识点。 其他相关的List的文章合集如下&#xff1a; 手动实现ArrayList & 源码的初步理解分析…

【计算机网络】三次握手 四次挥手

目录 1.三次握手 2.四次挥手 3.总结 三次握手和四次挥手是有连接特有的。三次握手&#xff0c;四次挥手指的是TCP有连接特点的中的步骤。建立连接(三次握手)&#xff0c;断开连接(四次挥手)。建立连接操作一般都是客户端主动发起&#xff0c;断开连接操作客户端和服务器都可…

最短路径:迪杰斯特拉算法

简介 英文名Dijkstra 作用&#xff1a;找到路中指定起点到指定终点的带权最短路径 核心步骤 1&#xff09;确定起点&#xff0c;终点 2&#xff09;从未走过的点中选取从起点到权值最小点作为中心点 3&#xff09;如果满足 起点到中心点权值 中心点到指定其他点的权值 < 起…

3 tensorflow构建的模型详解

上一篇&#xff1a;2 用TensorFlow构建一个简单的神经网络-CSDN博客 1、神经网络概念 接上一篇&#xff0c;用tensorflow写了一个猜测西瓜价格的简单模型&#xff0c;理解代码前先了解下什么是神经网络。 下面是百度AI对神经网络的解释&#xff1a; 这里不赘述太多概念相关的…

安防监控项目---CGI接口的移植和使用

文章目录 前言一、CGI二、CGI的具体移植步骤2.1 cgi源码下载2.2 搭建交叉编译环境2.3 注意事项 三、测试结果总结 前言 书接上期&#xff0c;上期与大家分享的是boa服务器的移植&#xff0c;那么几天要和大家介绍的呢是一款接口&#xff0c;哈哈哈&#xff0c;用起来也是有点难…

vue使用百度富文本

&#x1f525;博客主页&#xff1a; 破浪前进 &#x1f516;系列专栏&#xff1a; Vue、React、PHP ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 1、下载UEditor 链接已放到文章中了 2、上传到项目目录中 一般上传到public下&#xff0c;方便到时候打包进去&#xff0c;以免…

骨传导耳机怎么佩戴,骨传导蓝牙耳机什么牌子好用

市面上的传统耳机一直以来都存在一些问题&#xff0c;比如长时间佩戴会导致耳朵不适&#xff0c;或者声音过大可能会伤害到耳膜。但是&#xff0c;现在有一种独特的耳机正在迅速走红&#xff0c;它被称为骨传导耳机&#xff0c;而骨传导耳机是怎么佩戴的呢&#xff0c;它在佩戴…

Ionic 7 版本发布 - 免费开源、超受欢迎的移动应用开发 UI 工具包,主题优雅且完美支持 Vue.js

Ionic 是一款优秀的移动 UI 框架&#xff0c;迭代也很快&#xff0c;现在也支持了 Vue&#xff0c;是时候向大家推荐用来开发 APP 了。 Ionic 全称是 Ionic Framework&#xff0c;是一个功能强大的开源 UI 工具库&#xff0c;用来帮助前端开发者构建跨平台的移动应用。 Ionic …

干洗店小程序上门洗鞋店管理软件功能介绍;

干洗店小程序上门洗鞋店管理软件功能介绍&#xff1b; 营销工具-洗鞋店管理软件多渠道玩法&#xff0c;拓客留客 支付-会员管理系统多种支付方式&#xff0c;灵活经营 ​ ​提供洗鞋店管理软件服务&#xff0c;实现会员精细化运营 会员档案-洗鞋店管理软件记录会员的全方位信…

Pytorch 猫狗识别案例

猫狗识别数据集https://download.csdn.net/download/Victor_Li_/88483483?spm=1001.2014.3001.5501 训练集图片路径 测试集图片路径 训练代码如下 import torch import torchvision import matplotlib.pyplot as plt import torchvision.models as models import torch.nn a…

IntelliJ IDEA 安装mybaits当前运行sql日志插件在线与离线安装方法

先安装好idear 去网上找找这个安装包下载下来&#xff0c;注意版本要完全一致&#xff01; 比如&#xff1a; https://www.onlinedown.net/soft/1233409.htm手动安装离线插件方法举例 提前下载好插件的安装包 可以去网上下载这个安装包 搜索离线安装包的资源&#xff0c;包…

【文末送书】AI时代数据的重要性

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

亚马逊美国加拿大电动移动设备合规标准是什么?如何办理?

亚马逊美国站电动移动设备合规标准是什么&#xff1f; 加拿大站电动移动设备合规标准 办理流程&#xff1a; 1.填写申请表 2.提供产品的资料&#xff08;说明书&#xff0c;电路原理图&#xff0c;如是多个型号的&#xff0c;提供型号差异列表&#xff09; 3.寄样 4.测试 …

电商生态圈:跨境电商的商业合作新模式

随着数字化浪潮的不断崛起&#xff0c;电子商务行业正经历着前所未有的革命性变革。在这个变革的过程中&#xff0c;跨境电商已经成为全球贸易的推动力量。然而&#xff0c;跨境电商并非孤立存在&#xff0c;而是在日益扩大的电商生态圈内蓬勃发展。本文将探讨跨境电商的商业合…

AT8548 双通道有刷直流电机驱动芯片的作用

AT8548为玩具、打印机和其它机电应用提供一种双通道电机驱动方案。亿胜盈科AT8548内置两路H桥驱动&#xff0c;可以驱动两个直流有刷电机&#xff0c;或者通过输出并接驱动一个直流有刷电机&#xff0c;或者一个双J步进电机&#xff0c;或者螺线管及其它感性负载。 亿胜盈科AT8…

计算机考研 | 2011年 | 计算机组成原理真题

文章目录 【计算机组成原理2011年真题43题-11分】【第一步&#xff1a;信息提取】【第二步&#xff1a;具体解答】 【计算机组成原理2011年真题44题-12分】【第一步&#xff1a;信息提取】【第二步&#xff1a;具体解答】 【计算机组成原理2011年真题43题-11分】 &#xff08;1…