Mysql的多表连接

文章目录

  • 表连接
    • 1. 表连接的分类
    • 2.内连接简介
    • 3.外连接简介
      • (1)左连接和右连接
    • 4.子查询简介
      • (1)子查询是一种查询中嵌套查询的语句
      • (2)子查询的分类

表连接

1. 表连接的分类

(1)表连接分为两种:内连接和外连接。
(2)内连接是结果集中只保留符合连接条件的记录。
(3)外连接是不管符不符合连接条件,记录都要保留在结果接种。

2.内连接简介

select … from 表1
[inner] join 表2 on 条件
[inner] join 表3 on 条件

内连接的多种语法形式
select … from 表1 join 表2 on 连接条件;
select … from 表1 join 表2 where 连接条件;
select … from 表1,表2 where 连接条件;

#查询每名员工的信息
select e.empno,e.ename,d.dname
from t_emp e join t_dept d on e.deptno=d.deptno;
select e.empno,e.ename,d.dname
from t_emp e join t_dept d where e.deptno=d.deptno;
select e.empno,e.ename,d.dname
from t_emp e , t_dept d where e.deptno=d.deptno;
#查询每名员工的工号、姓名、部门名称、底薪、职位、工资等级?
select e.empno,e.ename,d.dname,e.sal,s.grade
from t_emp e join t_dept d on e.deptno=d.deptno
join t_salgrade s on e.sal between s.losal and s.hisal;

tips:内连接的数据表中不一定必须有同名字段,只要字段之间符合逻辑关系就可以

#查询与scott相同部门的员工都有谁?
select e2.ename
from t_emp e1 join t_emp e2 on e1.deptno=e2.deptno
where e1.ename = "scott" and e2.ename!="scott";
#查询底薪超过公司平均底薪的员工信息?
select e.empno,e.ename,e.sal
from t_emp e join 
(select avg(sal) avg from t_emp) t
on e.sal>=t.avg;#查询research部门的人数、最高底薪、最低底薪、平均底薪、平均工龄?
select count(*),max(e.sal),min(e.sal),avg(e.sal),
avg(datediff(now(),e.hiredate)/365)
from t_emp e join t_dept d on e.deptno=d.deptno
where d.name="research"select floor(28.9)
select ceil(1.1)

floor() 强制舍去
ceil() 强制进位

#查询每种职业的最高工资,最低工资,平均工资,最高工资等级和最低工资等级?
select e.job,max(e.sal+ifnull(e.comm,0)),
min(e.sal+ifnull(e.comm,0)),
avg(e.sal+ifnull(e.comm,0)),
max(s.grade),min(s.grade)
from t_emp e join t_salgrade s
on (e.sal+ifnull(e.comm,0)) between s.losal and s.hisal
group by e.job;#查询每个底薪超过部门平均底薪的员工信息
select e.empno,e.ename,e.sal
from t_emp e join
(select deptno,avg(sal) as avg from t_emp group by deptno) t 
on e.deptno=t.deptno and e.sal>t.avg;

3.外连接简介

外连接与内连接的区别在于,除了符合条件的记录之外,结果集中还会保留不符合条件的记录。

select e.empno,e.ename,dname
from t_emp e left join t_dept d
on e.deptno = d.deptno;

(1)左连接和右连接

左外连接就是保留左表所有的记录,与右表做连接。如右表有符合条件的记录就与左表连接。如果右表没有符合条件的记录,就用null与左表相连。右外连接也是如此。

select e.empno,ename,d.name
from t_dept d right join t_emp e
on e.deptno=d.deptno;

UNION关键字可以将多个查询语句的结果集进行合并
(查询语句) UNION (查询语句)UNION (查询语句)…

(
select d.name,count(e.deptno)
from t_dept d left join t_emp e
on d.deptno = e.deptno
group by d.deptno
)
UNION
(select d.dname,count(*)
from t_dept d right join t_emp e
on d.deptno = e.deptno
group by d.deptno);
#查询每名员工的编号、姓名、部门、月薪、工资等级、工龄、上司编号、上司姓名、上司部门?
select e.empno,ename,d.dname,e.sal+ifnull(e.comm,0),s.grade,floor(datediff(now(),e.hiredate)/365),t.empno as mgrno,t.name as mname,t.dname as mdnamefrom t_emp e left join t_dept d on e.deptno =d.deptnoleft join t_salgrade s on e.sal between s.losal and s.hisalleft join (selet e1.empno,e1.ename,d1.namefrom t_emp e1 join t_dept d1on e1.deptno = d1.deptno) t on e.mgr=t.empno;

外连接的注意事项
内连接只保留符合条件的记录,所以查询条件写在on子句和where子句中的效果是相同的。但是外连接里,条件写在where子句里,不符合条件的记录是会被过滤掉,而不是保留下来。

4.子查询简介

(1)子查询是一种查询中嵌套查询的语句

#查询底薪超过公司平均底薪的员工的信息
select empno,ename,sal
from t_emp
where sal>=(select avg(sal) from t_emp);

(2)子查询的分类

子查询可以写在三个地方:where子句、from子句、select子句,但是只有from子句子查询最可取

  • where子查询
    • where子查询最简单,最容易理解,但是却效率很低的子查询
#查询底薪超过公司平均底薪的员工的信息
select empno,ename,sal
from t_emp
where sal>=(select avg(sal) from t_emp);
  • from子查询
    • 这种子查询只会执行一次,所以查询效率很高
select e.empno,e.ename,e.sal,t.avg
from t_emp e join(select deptno,avg(sal) as avgfrom t_emp group by deptno) t
on e.deptno=t.deptno and e.sal>=t.avg;
  • select 子查询
    • 这种子查询每输出一条记录的时候都要执行一次,查询效率很低。
select e.empno,e.ename,
(select dname from t_dept where deptno = e.deptno)
from t_emp e;
  • 单行子查询和多行子查询
    • 单行子查询的结果集之后一条记录,多行子查询结果集有多行记录。
    • 多行子查询只能出现在where子句和from子句中。
#子查询查询ford和martin两个人的同事
select ename from t_emp
where deptno in
(select deptno from t_emp where ename in("ford","margin"))
  • where 子句中的多行子查询
    • where 子句中,可以使用in,all,any,exists关键字来处理多行表达式结果集的条件判断
      all 所有 any 任一
#查询比ford和martin底薪都搞的员工信息
select ename from t_emp
where sal > all
(select sal from t_emp
where ename in("martin","ford"));
  • exists关键字
    • exists关键字是把原来在子查询之外的条件判断,写到了子查询里面。
    • select … from 表名 where [not] exists(子查询);
#查询工资等级是3级或4级的员工信息
select empno,ename,sal
from t_emp
where exists(
select grade from t_salgrade
where sal between losal and hisal
and grade in(3,4)
);

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

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

相关文章

SpringBoot+WebSocket

SpringBootWebSocket 1.导入依赖&#xff1a; -- Spring Boot 2.x 使用 javax.websocket-- Spring Boot 3.x 使用 jakarta.websocket<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId&g…

Flink系列之:窗口关联

Flink系列之&#xff1a;窗口关联 一、窗口关联二、INNER/LEFT/RIGHT/FULL OUTER三、SEMI四、ANTI五、限制 一、窗口关联 适用于流、批窗口关联就是增加时间维度到关联条件中。在此过程中&#xff0c;窗口关联将两个流中在同一窗口且符合 join 条件的元素 join 起来。窗口关联…

国产Apple Find My认证芯片哪里找,伦茨科技ST17H6x芯片可以帮到您

深圳市伦茨科技有限公司&#xff08;以下简称“伦茨科技”&#xff09;发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家&#xff0c;该平台提供可通过Apple Find My认证的Apple查找&#xff08;Find My&#xff09;功能集成解决方案。…

Python基础-循环

第三章 循环 3.1、循环介绍 有条件的重复做相似的事情Python中循环分为while 和for 3.2、while循环的使用 格式&#xff1a; while 条件&#xff1a; 循环体 while 循环的三个必要元素 while 关键字循环条件循环体 构造循环要想的四件事 初始状态循环条件要重复做的事情循…

Python----进程执行带有参数的任务

1. 进程执行带有参数的任务的介绍 前面我们使用进程执行的任务是没有参数的&#xff0c;假如我们使用进程执行的任务带有参数&#xff0c;如何给函数传参呢? Process类执行任务并给任务传参数有两种方式: args 表示以元组的方式给执行任务传参kwargs 表示以字典方式给执行任…

使用java获取nvidia显卡信息

前言 AI开发通常使用到GPU&#xff0c;但通常使用的是python、c等语言&#xff0c;java用的则非常少。这也导致了java在gpu相关的库比较少。现在的需求是要获取nvidia显卡的使用情况&#xff0c;如剩余显存。这里给出两种较简单的解决方案。 基于nivdia-smi工具 显卡是硬件&a…

算法(1)——双指针

双指针 我们常见的双指针的形式有两种&#xff0c;一种是对撞指针&#xff0c;一种是快慢指针&#xff01; 对撞指针&#xff1a;一般用于顺序结构中&#xff0c;也称左右指针。 1、对撞指针从两端向中间移动。一个指针从最左端开始&#xff0c;另一个从最右端开始&#xff0c…

2024年【起重机司机(限门式起重机)】考试题库及起重机司机(限门式起重机)模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 起重机司机(限门式起重机)考试题库考前必练&#xff01;安全生产模拟考试一点通每个月更新起重机司机(限门式起重机)模拟考试题题目及答案&#xff01;多做几遍&#xff0c;其实通过起重机司机(限门式起重机)复审模拟…

21 3GPP中 5G NR高速列车通信标准化

文章目录 信道模型实验——物理层设计相关元素μ(与子载波间隔有关)设计参考信号(DMRS) 本文提出初始接入、移动性管理、线性小区设计等高层技术。描述3GPP采用HST场景的评估参数&#xff0c;阐释了HST应用的物理层技术&#xff0c;包括数字通信和参考信号设计&#xff0c;链路…

互联网中的商品超卖问题及其解决方案:Java中Redis结合UUID的应用

前言 在设计商品下单和库存扣减&#xff0c;你一定遇到过这样的问题&#xff0c;库存扣减为0了&#xff0c;可是消费者还能下单&#xff0c;并将订单信息保存到了数据库里&#xff0c;针对商品超卖问题&#xff0c;作此篇以解决。 随着互联网商业的飞速发展&#xff0c;商品超…

移动云捐赠三款开源项目,加速新一代基础软件生态繁荣

随着云计算、大数据、人工智能等新领域新信息技术的发展&#xff0c;我国基础软件的自主可控极大程度地影响着产业链上下游的多样性和技术创新的发展空间。移动云作为中国移动涉云业务的主入口&#xff0c;一直坚持共享开源价值&#xff0c;积极推动中国开源软件生态的繁荣发展…

SpringData JPA 整合Springboot

1.导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0…

7-1 单身狗(PTA - 数据结构)

由于这道题在留的作业中&#xff0c;排序和查找都有&#xff0c;所以我先写这道题&#xff08;图的先放放&#xff09; “单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人&#xff0c;以便给予特殊关爱。 输入格式&#xff1a; 输入第一行…

域架构下的功能安全思考

来源&#xff1a;联合电子 随着整车电子电气架构的发展&#xff0c;功能域控架构向整车集中式区域控制演进。新的区域控制架构下&#xff0c;车身控制模块(BCM)&#xff0c;整车控制单元&#xff08;VCU&#xff09;&#xff0c;热管理系统&#xff08;TMS&#xff09;和动力底…

PySide6 Tutorials (三)鼠标移动控件及其位置更新

问题描述 在graphicview中拖拽控件从A位置到B位置&#xff0c;但是从B位置再次拖拽控件的时候&#xff0c;控件依旧从A位置出发&#xff0c;与鼠标不处于同一位置。 解决方案 网上搜了一圈都是收费文章&#xff0c;什么时候开源精神都已经被xxxx用来中间商赚差价了嘛&#x…

python实现贪吃蛇游戏

文章目录 1、项目说明2、项目预览3、开发必备4、贪吃蛇代码实现4.1、窗口和基本参数实现4.2、绘制背景4.3、绘制墙壁4.4、绘制贪吃蛇4.5、绘制食物4.6、实现长度信息显示4.7、定义游戏暂停界面4.8、定义贪吃蛇死亡界面4.9、实现贪吃蛇碰撞效果4.10、实现添加食物功能4.11、实现…

String详解

String str new String&#xff08;“123”&#xff09;&#xff0c;和 String str “123” 区别 String str new String&#xff08;"123"&#xff09;;String str "123" ; new是创建对象&#xff0c;在堆中存储&#xff0c;非new 是在栈用的常量池中…

vuex--未完

一、 简介 vue3.0以上&#xff0c;本文是3.0 vue2.0 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库&#xff08;全局管理&#xff0c;相当于一个全局变量&#xff0c;所有页面共享&#xff09;。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则…

elementui中的el-table,当使用fixed属性时,table主体会遮挡住滚动条的大半部分,导致很难选中。

情况&#xff1a; 解决&#xff1a; el-table加个类&#xff0c;这里取为class"table" 然后是样式部分&#xff1a; <style scoped lang"scss"> ::v-deep.table {// 滚动条高度调整::-webkit-scrollbar {height: 15px;}// pointer-events 的基本信…

处理HTTP响应状态码和错误处理

在Web开发的世界里&#xff0c;HTTP响应状态码和错误处理是不可或缺的一部分。它们就像是道路上的交通信号灯&#xff0c;指导着我们前进的方向&#xff0c;确保我们的应用程序能够正常运行。 HTTP响应状态码是Web服务器返回给客户端的数字代码&#xff0c;用于表示请求的处理…