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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 指针初始化

    指针初始化引用:https://blog.csdn.net/qq_43574794/article/details/84864349https://baike.baidu.com/item/%E6%8C%8

    2022年7月3日
    25
  • Torando源码解析之XSRF防护的实现

    Torando源码解析之XSRF防护的实现Torando源码解析之XSRF防护的实现Torando源码解析之XSRF防护的实现Tornado开启XSRF防护的方法源码解析xsrf_form_html()是什么self.xsrf_token是什么Tornado开启XSRF防护的方法http://tornado-zh.readthedocs.io/zh/latest/guide/security.ht…

    2022年5月12日
    42
  • 【网络安全】ettercap详细使用

    【网络安全】ettercap详细使用ettercap 劫持一 什么是 ettercap 1 Ettercap 是一款用户用于远方控制的黑客工具 是非常主流的工具之一 简单的来说一下原理吧所有的物理机执行命令都是通过命令发送给 DNS 解析 DNS 解析命令后 发送给服务器 服务器再发给主机进行响应 图片来源 https image so com view q dns E8 A7 A3 E6 9E 90 E8 BF 87 E7 A8 8B amp src tab www amp correct dns E8 A7 A3 E6 9E 90

    2025年10月8日
    3
  • java定时器scheduled_spring定时任务注解

    java定时器scheduled_spring定时任务注解(本文仅供参考)使用spring@Scheduled注解执行定时任务:步骤:1.xmlns添加:http://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-3.1.xsdxmlns:task=”http://www.sprin…

    2025年12月3日
    5
  • elasticsearch集群安装插件滚动重启步骤「建议收藏」

    elasticsearch集群安装插件滚动重启步骤「建议收藏」elasticsearch集群安装插件滚动重启步骤1.先安装好插件(每个节点都要装,root用户执行)2.禁用分片分配。这可以防止Elasticsearch重新平衡(reblance)丢失的分片,可以按如下方式禁用分配3.为了提升集群恢复速度,尽可能先让数据刷盘.如果有任何挂起(pending状态)的索引操作,这个操作将会失败,但可以安全地多次重新执行.如果应用有数据写入最好先暂时停止数据写入4.重启节点确认是否已经加入集群5.重新启用分片分配,分片再平衡可能需要一些时间。等待群集恢复到green状态后再继

    2025年8月3日
    4
  • ZBrush中必须记住的常用快捷键

    ZBrush中必须记住的常用快捷键ZBrush是一款数字雕刻和绘画软件,它以强大的功能和直观的工作流程彻底改变了整个三维雕刻行业。强大的功能离不开便捷的操作,为此ZBrush提供了一系列常用操作快捷键,熟练掌握这些快捷键

    2022年8月2日
    7

发表回复

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

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