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

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是严肃游戏,严肃游戏本地化的特点是什么?

“严肃游戏”是一种交互式数字体验&#xff0c;不仅用于娱乐&#xff0c;还用于教育、培训或解决问题。与主要关注乐趣和参与度的传统游戏不同&#xff0c;严肃游戏的目标不仅仅是娱乐&#xff0c;比如教授特定技能、模拟现实生活场景或提高对重要问题的认识。它们用于医疗保健…

ADI常规SHARC音频处理器性能对比

1、 ADSP-2156x:是基于SHARC+ DSP架构的单核32位/40位/64位浮点处理器,不仅具有灵活的音频连接性和性能可扩展性,还提供多个引脚兼容版本(400MHz至1GHz)和多种片内存储器选项,数据手册链接:https://www.analog.com/media/en/technical-documentation/data-sheets/adsp-2…

springboot 整合 抖音 移动应用 授权

后端开发&#xff0c;因为没有JavaSDK&#xff0c;maven依赖&#xff0c;用到的是API接口去调用 抖音API开发文档 开发前先申请好移动应用&#xff0c;抖音控制台-移动应用 之后还需要开通所有能开通的能力 拿到应用的 clientKey 和 clientSecret&#xff0c;就可以进入开发了 …

Python 三维图表绘制指南

Python 三维图表绘制指南 在数据可视化中&#xff0c;三维图表可以更直观地展示数据之间的关系&#xff0c;尤其是当数据具有多个维度时。Python 提供了多个库来绘制三维图表&#xff0c;其中最常用的就是 Matplotlib。本文将介绍如何使用 Matplotlib 绘制三维图表&#xff0c…

Node.js:Express 服务 路由

Node.js&#xff1a;Express 服务 & 路由 创建服务处理请求req对象 静态资源托管托管多个资源挂载路径前缀 路由模块化 Express是Node.js上的一个第三方框架&#xff0c;可以快速开发一个web框架。本质是一个包&#xff0c;可以通过npm直接下载。 创建服务 Express创建一…

计算机网络-以太网小结

前导码与帧开始分界符有什么区别? 前导码--解决帧同步/时钟同步问题 帧开始分界符-解决帧对界问题 集线器 集线器通过双绞线连接终端, 学校机房的里面就有集线器 这种方式仍然属于共享式以太网, 传播方式依然是广播 网桥: 工作特点: 1.如果转发表中存在数据接收方的端口信息…

学生成绩查询系统设计与实现

学生成绩查询系统设计与实现 1. 系统概述 学生成绩查询系统是一个基于PHP和SQL的Web应用程序&#xff0c;旨在为学校提供一个高效的学生成绩管理和查询平台。该系统可以帮助教师录入成绩、学生查询成绩、管理员管理用户和成绩数据&#xff0c;提高教育管理的效率和透明度。 2…

Rust 力扣 - 2653. 滑动子数组的美丽值

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们遍历长度为k的的窗口 因为数据范围比较小&#xff0c;所以我们可以通过计数排序找到窗口中第k小的数 如果小于0&#xff0c;则该窗口的美丽值为第k小的数如果大于等于0&#xff0c;则该窗口的美丽值为0 题…

VisualStudio远程编译调试linux_c++程序(二)

前章讲述了gdb相关&#xff0c;这章主要讲述用VisualStudio调试编译linux_c程序 1&#xff1a;环境 win10 VisualStudio 2022 Community ubuntu22.04 2:安装 1>vs安装时&#xff0c;勾选 使用c进行linux 和嵌入式开发 (这里以vs2022为例) OR VS安装好了&#xff0c; 选择工…

音视频听译:助力多维度沟通与发展的大门

在全球经济一体化的大背景下&#xff0c;企业之间的跨国合作愈发频繁。在商务会议、谈判和产品演示等活动中&#xff0c;语言的多样性成为了一大挑战。而音视频听译服务能够将不同语言的音频准确转换为目标语言文字&#xff0c;确保信息的精准传达&#xff0c;避免因语言障碍引…

基于MATLAB人脸检测的汽车疲劳驾驶检测

课题介绍 疲劳驾驶导致汽车交通事故逐年增加&#xff0c;为了提升驾车的安全性&#xff0c;需对驾驶员疲劳状态实时监测并及时提醒. 为了提高疲劳驾驶判断效率及准确率&#xff0c;本文运用Viola-Jones 框架特征矩阵进行人脸预判断&#xff1b;预判断过程中为了减少Haar 值计算…

论文阅读(三十二):EGNet: Edge Guidance Network for Salient Object Detection

文章目录 1.Introduction2.Related Works3.Salient Edge Guidance Network3.1Complementary information modeling3.1.1Progressive salient object features extraction3.1.2Non-local salient edge features extraction 3.2One-to-one guidance module 4.Experiments4.1Imple…

MySQL超大分页怎么优化处理?limit 1000000,10 和 limit 10区别?覆盖索引、面试题

1. limit 100000,10 和 limit 10区别 LIMIT 100000, 10&#xff1a; 这个语句的意思是&#xff0c;从查询结果中跳过前100000条记录&#xff0c;然后返回接下来的10条记录。这通常用于分页查询中&#xff0c;当你需要跳过大量的记录以获取后续的记录时。例如&#xff0c;如果你…

源码侦探:理解 numpy 中的 tile 方法

文章目录 pre &#xff1a;先来一张源码的切片1. 参数和基本定义&#xff1a;2. 将 reps 转换为元组&#xff1a;3. 提升数组维度&#xff1a;4. 特殊情况检查&#xff1a;5. 处理数组维度的不同情况&#xff1a;6. 计算输出数组的形状&#xff1a;7. 通过重复构造数组&#xf…

单链表OJ题(3):合并两个有序链表、链表分割、链表的回文结构

目录 一、合并两个有序链表 二、链表分割 三、链表的回文结构 u解题的总体思路&#xff1a; 合并两个有序链表&#xff1a;首先创建新链表的头节点&#xff08;哨兵位&#xff1a;本质上是占位子&#xff09;&#xff0c;为了减少一些判断情况&#xff0c;简化操作。然后我们…

Qt6 CMake 中引入 Qt Linguist 翻译功能

qt cmake 使用自带翻译工具配置步骤 创建Qt CMake 程序配置项目 CMake 及 代码使用流程最终CMake 如下最终工程链接为&#xff1a;参考 创建Qt CMake 程序 配置项目 CMake 及 代码 在CMake 中添加如下代码, 导入相关的翻译库 find_package(QT NAMES Qt6 Qt5 REQUIRED COMPON…

Android IPC机制(一)多进程模式

1. 什么是进程&#xff1f; 进程是操作系统分配资源&#xff08;如 CPU、内存等&#xff09;的基本单位。简单来说&#xff0c;进程是一个正在执行的程序的实例。每个进程都有自己的内存空间、数据栈和其他辅助数据&#xff0c;用于跟踪进程的执行状态。在 Android 中&#xff…

SQL,力扣题目1767,寻找没有被执行的任务对【递归】

一、力扣链接 LeetCode_1767 二、题目描述 表&#xff1a;Tasks ------------------------- | Column Name | Type | ------------------------- | task_id | int | | subtasks_count | int | ------------------------- task_id 具有唯一值的列。 ta…

《JVM第3课》运行时数据区

无痛快速学习入门JVM&#xff0c;欢迎订阅本免费专栏 运行时数据区结构图如下&#xff1a; 可分为 5 个区域&#xff0c;分别是方法区、堆区、虚拟机栈、本地方法栈、程序计数器。这里大概介绍一下各个模块的作用&#xff0c;会在后面的文章展开讲。 类加载子系统会把类信息…

[ 问题解决篇 ] 解决远程桌面安全登录框的问题

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…