SQL语句–mysql高级查询[关联查询|多表查询](连接查询、子查询、联合查询、图解说明几种常见的连接[联合]查询)

SQL语句–mysql高级查询[关联查询|多表查询](连接查询、子查询、联合查询、图解说明几种常见的连接[联合]查询)一 常用的高级查询语句连接查询 如果条件和结果分布于多张表 使用多表连接 子查询 如果最终结果在一张表中 优先选择子查询 再考虑连接查询 嵌套查询 将一个查询结果作为另一个查询条件或组成部分的查询 联合查询 全连接 联合查询 并集去交集等 将两个结果集联合到一起的查询 应用 连接查询和子查询配合使用 数据量较大时连接查询较慢 先过滤再连接 子查询嵌套层次较大也影响性能 s

一、常用的高级查询语句

  • 连接查询:(如果条件和结果分布于多张表,使用多表连接)
  • 子查询:(如果最终结果在一张表中,优先选择子查询,再考虑连接查询)嵌套查询,将一个查询结果作为另一个查询条件或组成部分的查询
  • 联合查询:全连接[联合查询]、并集去交集等,将两个结果集联合到一起的查询
  • 应用:连接查询和子查询配合使用。数据量较大时连接查询较慢(先过滤再连接);子查询嵌套层次较大也影响性能。
#sql_高级查询 -- 2.1 连接查询 -- 笛卡尔积(没有加筛选条件的内连接) #> 多张表中记录组合所有可能有序对集合(如:A表有n行,B表m行,结果为n*m行) -- 内连接 #> 多张表均匹配的记录连接并展示在结果集 #> 无主从表之分,与连接顺序无关 # 查询所有雇员及其部门信息 select * from emp,dept where emp.deptno = dept.deptno; select * from emp inner join dept on emp.deptno = dept.deptno; select * from emp inner join dept using(deptno); #字段名称必须一致,会自动去除重复列 -- 自然连接 #> 自然连接都是等值连接 #> 表中字段名称相等的字段进行连接,会自动去重重复列 select * from emp natural join dept; -- 外连接 #> 以驱动表为依据,依次在匹配表中进行记录匹配,如果匹配则连接并展示在结果集中,否则以null填充 #> 有主从表之分,与连接顺序有关。 #> left/right [outer] join ... on... select * from emp LEFT JOIN dept on emp.deptno = dept.deptno;#emp为主表,dept为从表 select * from emp right JOIN dept on emp.deptno = dept.deptno;#dept为主表,emp为从表 -- 自连接 #> 以本身为镜像进行连接(自身连接自身) # 查询员工及其领导的名称 select e1.ename '名称',e2.ename '领导' from emp e1,emp e2 where e1.mgr = e2.empno -- 2.2 子查询 #> 嵌套查询,将一个查询结果作为另一个查询条件或组成部分的查询 -- 单行子查询 #查询工资大于7788号员工的所有员工信息 select * from emp where sal >(select sal from emp where empno =7788); -- 多行子查询 # 返回多值可以使用any或all来修饰。 # =any相当于in,<any小于最大值,>any大于最小值; # <>all相当于not in,>all大于最大值,<all小于最小值。 #查询超过所在部门平均工资的员工信息 select * from emp e1 where sal > (select avg(sal) from emp e2 where e1.deptno = e2.deptno); #查询薪水大于2000的部门名称 select dname from dept d where deptno in (select deptno from emp e where sal > 2000); #或 select dname from dept d where EXISTS (select * from emp e where sal > 2000 and d.deptno=e.deptno); #in和exists的区别 # in先执行子查询,在执行主查询,返回的值作为主查询的查询条件。 # exists子查询不返回具体结果,返回true值出现在结果集,否则不出现;exists先执行主查询,再交给子查询进行匹配。 -- 2.3 联合查询 #> union: 并集,所有的内容都查询,重复的显示一次 #> union all: 并集,所有的内容都显示,包括重复的 select * from emp where deptno = 20 union select * from emp where sal <=2000

二、图解说明几种常见的连接[联合]查询

2.1、左连接

SQL语句--mysql高级查询[关联查询|多表查询](连接查询、子查询、联合查询、图解说明几种常见的连接[联合]查询)

select * from emp t1 LEFT JOIN dept t2 ON t1.deptno = t2.deptno; #emp为主表,dept为从表

2.2、右连接

SQL语句--mysql高级查询[关联查询|多表查询](连接查询、子查询、联合查询、图解说明几种常见的连接[联合]查询)

select * from emp right join dept on emp.deptno = dept.deptno; #dept为主表,emp为从表

2.3、内连接

两表关联,保留两表中交集的记录。

SQL语句--mysql高级查询[关联查询|多表查询](连接查询、子查询、联合查询、图解说明几种常见的连接[联合]查询)

select * from emp inner join dept on emp.deptno = dept.deptno;

select * from emp,dept where emp.deptno = dept.deptno;

select * from emp inner join dept using(deptno); #字段名称必须一致,会自动去除重复列–>特例

select * from emp natural join dept; #也叫自然连接、等值连接,两表中有相同字段时的等值连接–>特例

2.4、左表独有

两表关联,查询左表独有的数据。

SQL语句--mysql高级查询[关联查询|多表查询](连接查询、子查询、联合查询、图解说明几种常见的连接[联合]查询)

select * from emp t1 LEFT JOIN dept t2 ON t1.deptno = t2.deptno where t2.deptno is null; 

2.5、右表独有

两表关联,查询右表独有的数据。

SQL语句--mysql高级查询[关联查询|多表查询](连接查询、子查询、联合查询、图解说明几种常见的连接[联合]查询)

select * from emp t1 right join dept t2 on t1.deptno = t2.deptno where t1.deptno is null;

 

2.6、全连接[联合查询]

两表关联,查询它们的所有记录。

SQL语句--mysql高级查询[关联查询|多表查询](连接查询、子查询、联合查询、图解说明几种常见的连接[联合]查询)

oracle里面有full join,但是在mysql中没有full join。我们可以使用union (左连接+右连接,去除重复)。

2.7、并集去交集

两表关联,取并集然后去交集。

SQL语句--mysql高级查询[关联查询|多表查询](连接查询、子查询、联合查询、图解说明几种常见的连接[联合]查询)

select * from emp t1 LEFT JOIN dept t2 ON t1.deptno = t2.deptno where t2.deptno is null union select* from emp t1 right join dept t2 on t1.deptno = t2.deptno where t1.deptno is null; 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230707.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月7日 上午11:01
下一篇 2026年2月7日 上午11:22


相关推荐

  • DSP效果器调音教程_DSP控制器

    DSP效果器调音教程_DSP控制器1)DSP输出给5V的电路(如D/A),无需加任何缓冲电路,可以直接连接。3)的JTAG口的信号也必须为3.3V,否则有可能损坏DSP。dsp教程24。为什么要片内RAM大的DSP效率高?目前DSP发展的片内存储器RAM越来越大,要设计高效的DSP系统,就应该选择片内RAM较大的DSP。片内RAM同片外存储器相比,有以下优点:1)片内RAM的速度较快,可以保证DSP无等待运行。2)对于C2000…

    2025年8月27日
    12
  • 国内“龙虾/Claw“机器人产品汇总【AI生成】

    国内“龙虾/Claw“机器人产品汇总【AI生成】

    2026年3月12日
    3
  • 控制台打印vue实例

    控制台打印vue实例前言 Vue 项目运行后会把各个组件的数据挂载到对应的 dom 上根组件 app 上获取实例首先 app vue 会挂载到 id 为 app 的 div 上边打印这个 divconsole dir document querySelecto app 查看控制台 发现存在一个键 vue 其实 app vue 对应的实例就是这个 vue 对象打印这个对象 console dir document querySelecto app

    2026年3月26日
    1
  • java数独解法[通俗易懂]

    java数独解法[通俗易懂]玩了好久的数独,前几天突发奇想写一个解法,看了好多文章和源码,像回溯法和唯一解法,都不太理解其思路,于是就自己动手写了一个,效率还算可以,有优化的空间,但是懒得优化了。整体的解法思路就是列出每个空格的备选数,然后逐一尝试,可谓是最笨的解法了,分享给大家图个乐,还希望大佬看到了可以指点一下里面的不足之处。同样因为懒,就没做成web应用,一个main方法自己跑着玩了就。代码里面包含了1-5级的数独…

    2025年8月22日
    4
  • Swift之使用KeyPaths创建自定义查询函数

    Swift之使用KeyPaths创建自定义查询函数一 前言作为一个相当严格 静态编译的语言 Swift 可能不会在语法自定义方面提供许多渠道 但这实际上确正好相反 通过如何在 Swift 中自定义操作符 Swift 中 KeyPaths 的能力 函数 结果构建器等功能 我们有很多机会为特定用例进行调整 Swift 的语法 当然 无可争议的是 任何类型的语法定制都应小心谨慎地 因为如果不小心 非标准语法也可能很容易成为混乱的源泉 但是 在某些情况下 权衡可能是值得的 并且可以易于制作类似 DSL 这种可以帮助我们使代码更清晰的语法 二 否定布尔值的

    2026年3月17日
    2
  • 计算矩阵幂次的一般性方法

    计算矩阵幂次的一般性方法初学线性代数时 对于计算矩阵幂次 是采用所谓找规律的方法 这种方法其实非常不科学 因为这样能计算的都是特别特殊的矩阵 对于一般性的矩阵 这种方法没有意义 而且所谓的找规律 只是简单的计算矩阵乘法 是命题人凑给你的 并不能看到问题的本质 下面介绍一些一般性的方法一 rank A 1 的矩阵 且能够分解为列向量乘行向量的形式 二 可对角化的矩阵需要对角化矩阵

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号