当前位置: 首页 > news >正文

mysql--多表查询

一、联合查询

  1. 作用:合并结果集就是把两个select语句的查询结果合并到一起!

  2. 合并结果集有两种方式:

UNION:合并并去除重复记录,例如:SELECT * FROM t1 UNION SELECT * FROM t2;  

UNION  ALL:合并但不去除重复记录,例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2。

案例1,UNION

select * from emp where deptno=30
union
select * from emp where job='SALESMAN';

查询结果会去重:

案例2,UNION  ALL

select * from emp where deptno=30
union all
select * from emp where job='SALESMAN';

查询结果不会去重: 

注意:

如果多条查询语句查询出来的结果,字段数量不一致,在进行union/union all联合查询时,将会报错。  

mysql实现交集效果:通过子查询

create table emp_clerk as select * from emp where job='CLERK';

create table emp_30 as select * from emp where deptno=30;

select *  from emp_clerk where empno in(
    select empno from emp_30
    );

查询结果:

 差集:

存在与30部门表中的数据, 但是不存在于文员表的记录

select * from emp_30 where empno not in(
    select empno from emp_clerk
    );

查询结果:

二、表连接查询

多张表之间进行两两连接,两张表的每条记录都相互连接一次,连接查询会产生笛卡尔积

笛卡尔积  tb_class:4条数据  tb_student:1  总记录 4*1=4条

select  *   from  tb_class,tb_student;

查询结果: 

数据太多,无法从中找到我们需要的数据,那么就要从笛卡尔积筛选需要的数据,添加条件

内连接,外连接:都连接条件,从笛卡尔积结果集筛选

(一)内连接

  1. [inner] join  A内连接B  查询结果集中记录  满足条件才显示
  2. A的记录一定有一条与B对应

标准sql语法:  select   *   /  列..  from  表1  [innner] join  表2
                        on  连接条件;      推荐
非sql标准语法: select * /  列..  from  表1  表2 where 连接条件;

(二)外连接

外连接的特点:让某些表的数据数据全部显示,不管是否满足条件

1.左外连接

SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;

join  左边(前面)的表全部显示   left  [outer]  join  


举例:

查询部门以及员工信息, 所有部门都显示

select * from  dept d  left join emp1 e
    on e.deptno = d.deptno;

2.右外连接 

SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ;

join  右边(前面)的表全部显示  right  [outer]  join   


举例: 

查询部门以及员工信息, 所有部门都显示

select * from emp1 e right join dept d
    on e.deptno = d.deptno;

3.全外连接

两张表的数据全部显示   full  outer   join(MYSQL不支持它的写法


mysql全连接: 把左外连接  联合(并集)  右外连接

select  *  from  emp1  e  left  join  dept  d

      on  e.deptno =  d.depton

union

select  *  from  emp1  e  right  join  dept  d

      on  e.deptno =  d.depton

去重关键字 distinct 

distinct 列名,列名2...   多个列组合去重

select distinct dname from emp e join dept d
on e.deptno = d.deptno;

三、自连接

自己连接自己

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ;

案例1:

列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称

1.找表: emp  e1  emp  e2  dept  d

2.找条件:受雇日期早于直接上级的  连接条件  e1.mgr=e2.empno 

                 emp  e1=dept  d连接条件:e1.deptno=d,deptno

3.找编号、姓名、部门


select e1.empno,e1.ename,d.dname from emp e1 join dept d
on e1.deptno=d.deptno
join emp e2
on e1.mgr=e2.empno and e1.hiredate < e2.hiredate;

结果:

案例2:

 列出所有员工的姓名及其直接上级的姓名

select e.ename,w.ename

from emp e join emp w on e.empno=w.mgr;

结果:

四、子查询 

     子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了。

语法:

SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 );

子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT 的任何一个。

分类:

子查询出现的位置:

  • where后,作为条件的一部分;

  • from后,作为被查询的一条表;

  • SELECT之后 ,作为被查询的一列;

当子查询出现在where后作为条件时,还可以使用如下关键字:

  • any

  • all


查询员工的信息,以及他的部门信息,以及该部门的人数 count(1)

  1. 找表:  emp dept
  2. 找条件: 表连接条件
  3. 找列:  员工的信息,以及他的部门信息,以及该部门的人数
  4. 子查询作为表使用, 一定要给子查询取别名

select  e.*,d.*,num from emp e join  dept d
on  e.deptno = d.deptno
join  (select deptno,count(1) num from  emp group by  deptno) t
on  e.deptno = t.deptno;


 配合子查询使用的关键字  

  1. any /some 子查询返回列表中,有任意一个满足即可
  2. all 子查询返回列表的所有值都必须满足

> any(select 子查询)    > 最小值
< any(select 子查询)    < 最大值

> all(select 子查询)   > 最大值
< all(select 子查询)   < 最小值

 案例1:

查询薪水比30部门任意一个小的员工信息

select * from emp where sal < any(select sal from emp where deptno = 30 );

 案例2:

查询薪水比30部门所有人薪水都高的员工

select * from emp where sal > all(select sal from emp where deptno = 30);

 

相关文章:

mysql--多表查询

一、联合查询 作用&#xff1a;合并结果集就是把两个select语句的查询结果合并到一起&#xff01; 合并结果集有两种方式&#xff1a; UNION&#xff1a;合并并去除重复记录&#xff0c;例如&#xff1a;SELECT * FROM t1 UNION SELECT * FROM t2&#xff1b; UNION ALL&a…...

RHCE-Web-nginx http实验和nginx https实验

一、web服务器简介 &#xff08;1&#xff09;什么是www www 是 world wide web 的缩写&#xff0c;也就是全球信息广播的意思。通常说的上网就是使用 www 来查询用户 所需要的信息。 www 可以结合文字、图形、影像以及声音等多媒体&#xff0c;并通过可以让鼠标单击超链接的…...

少儿编程学习现状洞察:青少年编程教育需求与学习频率分析

随着少儿编程教育的逐渐普及&#xff0c;越来越多的家庭开始关注孩子在编程学习中的表现。根据最新数据&#xff0c;90%的少儿编程学员保持每周至少一节课的学习频率&#xff0c;而95%的编程课程都安排在周末。特别是在8岁、10岁、12岁及15岁以上的年龄层次&#xff0c;孩子的学…...

接口集成、快速对接-阿里身份证实名认证接口

身份证实名认证接口现已被应用在联网的各种业务场景中&#xff0c;如电商、在线教育、银行等等&#xff0c;下面以电商平台为例&#xff0c;列举翔云身份证实名认证接口在电商平台中的具体应用和优势。 电商平台的出现方便了人们的生活&#xff0c;进行电商的实名认证有助于提高…...

HTTP、WebSocket、gRPC 或 WebRTC:各种协议的区别

在为您的应用程序选择通信协议时&#xff0c;有很多不同的选择。 本文将了解四种流行的解决方案&#xff1a;HTTP、WebSocket、gRPC 和 WebRTC。 我们将通过深入学习其背后原理、最佳用途及其优缺点来探索每个协议。 通信方式在不断改进&#xff1a;变得更快、更方便、更可靠&…...

Unity3D学习FPS游戏(8)装弹和弹夹UI显示

前言&#xff1a;实现了武器的基本发射功能&#xff0c;但是我们弹夹数量是有限&#xff0c;之前并没有做装弹和弹夹显示的功能。本篇实现装弹和弹夹显示。 装弹和弹夹UI显示 装弹目标思路和实现 弹夹UI显示目标弹夹UI的思路和实现UI代码的思路和实现 武器控制的完整代码效果补…...

Android 托管 Github Action 发布 Github Packages ,实现 Mvn 免费自动化托管

自从多年前 JCenter 关闭服务之后&#xff0c;GSY 项目版本就一直发布在 Jitpack 上&#xff0c;如今每个月也都有大概 10w 左右下载&#xff0c;但是近年来时不时就会出现历史版本丢失的问题&#xff0c;而且有时候还不是某个具体版本丢失&#xff0c;而是版本里的某几个依赖突…...

火山引擎VeDI数据服务平台:在电商场景中,如何解决API编排问题?

01 平台介绍 数据服务平台可以在保证服务高可靠性和高安全性的同时&#xff0c;为各业务线搭建数据服务统一出口&#xff0c;促进数据共享&#xff0c;为数据和应用之间建立了一座“沟通桥梁”。 同时&#xff0c;解决数据理解困难、异构、重复建设、审计运维困难等问题&#x…...

【每日C/C++问题】

一、 结构体和联合体有什么区别&#xff1f;能否在声明过程当中缺省名字&#xff1f;&#xff08;需要写清楚使用方法&#xff09; 结构体的各个成员占用不同的内存空间&#xff0c;总大小是所有成员大小之和&#xff08;结构体字节对齐&#xff09;&#xff1a; typedef str…...

layaair做帧动画,等待一秒之后移动坐标,坐标位置明明相同,执行的时候却会抖动。

如下图&#xff1a;我将1秒后面的位置与0秒的坐标位置设置为一样&#xff0c;然后再第二秒的时候再设置位置移动。也就是想实现这个效果&#xff0c;小狗先停在这里一秒&#xff0c;然后再开始行走。现在的问题是停在这里依然抖动一下&#xff0c;也就是根本就停不住。还是会变…...

SAP分包业务中能否应用后继物料?

近期物流用户在工作中遇到新的问题。在分包业务中的原材料后继&#xff08;物料主数据设定非连续标识及后继物料&#xff09;不成功问题。对于未知应用&#xff0c;需要先研究期可行性&#xff0c;与问题或故障不同&#xff0c;如果系统本身就不支持&#xff0c;再多分析测试也…...

【数据结构】二叉树——判断是否为完全二叉树

一、思路 有完全二叉树的解释 我们想要判断二叉树是否为完全二叉树 我们可以用队列来实现 我们先将根节点入队列 再将根节点出队列&#xff0c;判断取出节点是否为空、 若不为空将该节点的左右节点入队列 左右节点为空也入队列 若为空则停止入队列 然后判断队列中是否有 NUL…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发十. 多线程控制帧率。循环播放,QT connect 细节,

在前面&#xff0c;我们总结一下前面的代码。 在 FactoryModeForAVFrameShowSDL 构造函数中 init SDL。 通过 QT timerevent机制&#xff0c;通过startTimer(10);每隔10ms&#xff0c;就会调用timerEvent事件。 在timerEvent事件中&#xff0c;真正的去 读取数据&#xff0c…...

近百万奖金!2024 Web3.0 创新大赛重磅来袭!

10月30日&#xff0c;中国互联网协会与香港Web3.0协会共同组织举办的2024 Web3.0 创新大赛在上海举行启动会&#xff0c;宣布大赛正式在DataFountain竞赛平台&#xff08;简称DF平台&#xff0c;http://www.datafountain.cn&#xff09;启动上线。 大赛面向社会各界征集参赛团队…...

gRPC 一种现代、开源、高性能的远程过程调用 (RPC) 可以在任何地方运行的框架

背景介绍 gRPC 是一种现代开源高性能远程过程调用 &#xff08;RPC&#xff09; 可以在任何环境中运行的框架。它可以有效地连接服务 在数据中心内和数据中心之间&#xff0c;具有对负载平衡、跟踪、 运行状况检查和身份验证。它也适用于最后一英里 分布式计算&#xff0c;用于…...

cmake系列-怎么构建不同的C++程序目标文件(可执行程序、动态库、静态库)

目录 生成可执行程序生成动态库生成静态库 我们编写的C代码不仅仅只是为了生成可执行程序&#xff0c;有的时候可能是为了生成动态库或者静态库&#xff0c;那么如果用cmake来构建的话&#xff0c;应该怎么做呢&#xff0c;怎么指定是生成可执行程序&#xff0c;还是生成动态库…...

使用ffmpeg和mediamtx模拟多通道rtsp相机

首先下载ffmpeg&#xff0c;在windows系统上直接下载可执行文件&#xff0c;并配置环境变量即可在命令行当中调用执行。 下载地址&#xff1a; https://ffmpeg.org/再在github上下载mediamtx搭建rtsp服务器&#xff0c;使用ffmpeg将码流推流到rtsp服务器。 下载地址&#xff1…...

windows系统类似于linux的nohup命令后台启动jar服务

一、首先新建一个后缀名为.bat文件 二、将jar包放在与jar包同一个路径下 三、编写.bat文件 echo off start javaw -Xms512m -Xmx1024m -XX:PermSize256m -XX:MaxPermSize512m -XX:MaxNewSize512m -jar xxxxx-22900.jar >> StartupLog.log 2>&1 & exit 四…...

2024 Rust现代实用教程 流程控制与函数

文章目录 一、if流程控制与match模式匹配1.流程控制2. IF流程控制3.match 表达式 二、循环与break continue以及与迭代的区别1.Rust中的循环Loops2.break && continue3.迭代4.循环与迭代的不同 三、函数基础与Copy值参数传递1.函数的基础知识2.Copy by value 四、函数值…...

stm32入门教程--USART外设 超详细!!!

目录 简介 什么是UART&#xff1f; 什么是USART&#xff1f; 简介 USART&#xff08;Universal Synchron /Asynchronous Receiver /Transmitter&#xff09;通用同步/异步收发器 1、USART是STM32内部集成的硬件外设&#xff0c;可根据数据寄存器的一个字节数据自动生成数据帧…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...

DAY 45 超大力王爱学Python

来自超大力王的友情提示&#xff1a;在用tensordoard的时候一定一定要用绝对位置&#xff0c;例如&#xff1a;tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾&#xff1a; tensorboard的发展历史和原理tens…...

Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用

Linux 内存管理调试分析&#xff1a;ftrace、perf、crash 的系统化使用 Linux 内核内存管理是构成整个内核性能和系统稳定性的基础&#xff0c;但这一子系统结构复杂&#xff0c;常常有设置失败、性能展示不良、OOM 杀进程等问题。要分析这些问题&#xff0c;需要一套工具化、…...