Mysql 表间关联查询

内连接

  1. 语法: 表1 [inner] join 表2 on 条件 // inner可以省略
    说明: on 关联条件 表1–>驱动表, 表2–> 匹配表
  2. 执行过程: 遍历驱动表,在匹配表中匹配记录
  3. 等值连接时 (条件中使用’='): 表1,表2 位置可以交换, 驱动表在前,匹配表灾后
  4. 结果集特点:
    能够在两张表中找到的记录(满足条件/匹配上)会被保留, 找不到(不满足条件/匹配不上)的会被丢弃
  • 查询员工的姓名和其部门的名字
-- 表关联查询
select ename,dept_name, e.deptno -- 若字段在两张表中重名则需要指名是哪个表的字段(若不重名则不用指定)
from emp_lym e inner join dept_lym d on e.deptno=d.dept_id;

笛卡尔积:

  1. 不加where条件的连接,查询到的是笛卡尔积的结果。
  2. 检索结果的记录条数 = 第一张表的记录条数 x 第二张表的记录条数
-- 查询员工的姓名和其部门的名字 (其他写法)
-- 先笛卡尔积,再筛选
select ename,dept_name,e.deptno
from emp_lym e , dept_lym d
where e.deptno=d.dept_id;  -- 等价于 交叉连接(cross join)
-- 效率低

交叉连接 cross join

-- 查询员工的姓名和其部门的名字 (其他写法)
-- 交叉连接
select ename,dept_name,e.deptno
from emp_lym e(也叫'驱动表')  cross join dept_lym d(也叫'匹配表')
where e.deptno=d.dept_id;
  • 查询员工的姓名和其领导的名字
-- 分析 员工的leader字段等于领导的员工号
select e1.ename,e1.leader,e2.ename,e2.empno
from emp_lym e1 join emp_lym e2
on e1.leader=e2.empno;
  • 查询员工的姓名和其部门的名字,要求没有部门的员工也被查出来
-- 分析: 组合查询 查询的是全部员工 = 有部门的(内连接查询) + 没有部门的(基础查询)
-- 有部门的
select ename,dept_name
from emp_lym e , dept_lym d
where e.deptno=d.dept_id;
-- 没有部门的
select ename, "not dept"
from emp_lym
where depetno is  null;
-- 组合
select ename,dept_name
from emp_lym e , dept_lym d
where e.deptno=d.dept_id
UNION
select ename, "not dept"
from emp_lym
where deptno is not null;

内连接的结果集的中数据一定是在两张表中,能够找到的匹配记录 (忽略null);

外连接

语法: 严格区分,驱动表与匹配表(不能随意互换位置) 驱动表的数据会全部显示
左右外连接可以互换 但是必须明确那个表是驱动表

1)左外链接: 左边的表是驱动表

​ 语法:表1 left join 表2 on 条件

2)右外连接: 右边的表是驱动表

语法: 表1 right join 表2 on 条件

  • 查询员工的姓名和其部门的名字,要求没有部门的员工也被查出来
 -- 分析 查询全部的员工, 员工表中的数据全部出现在外连接的结果集中---->作为驱动表select ename,ifnull(dept_name,"no dept")from emp_lym e left outer join dept_lym don e.deptno=d.dept_id;
  • 查询员工姓名和其部门的名字,要求没有员工部门的也要被查处来
 -- 分析 查询全部的部门信息--->部门表为驱动表select ename,ifnull(dept_name,"no dept")from  dept_lym d left outer join emp_lym e on e.deptno=d.dept_id;
外连接特点:

​ 如果驱动报表在匹配表中找不到匹配记录,则匹配一行空值 ,但是保证驱动表中数据全部出现在外链接的结果集中
PS: 外连接的结果集=内连接的结果集+驱动表在匹配表中匹配不上的记录
需要查询全部数据,----> 外连接---->确定驱动表(那个表的数据需要全部出现在外连接的结果集中,就作为驱动表
注意: 不要关联不必要的表
​ 处理关联消耗资源,关联的表越多会导致性能下降
​ 处理同样的结果可能存在很多实现方式,寻找最优的
补充:

全外连接: ----mysql 不支持

语法: 表1 full join 表2 on 条件

  • 查询全部员工和全部部门
select empno,ename,d.deptno,dept_name
from emp_lym e full join -- mysql 不支持
dept_lym d
on e.deptno=d.deptno;

mysql 实现类似全外连接的方式

select empno,ename,d.dept_id,d.dept_name
from emp_lym e left join
dept_lym d
on e.deptno=d.dept_id
union
select empno,ename,d.dept_id,d.dept_name
from emp_lym e right join
dept_lym d
on e.deptno=d.dept_id;

mysql 表间关联查询相关推荐

  1. Oracle/MySQL数据库的表间关联查询_多表关联查询的SQL语句详解

    文章目录 内连接 inner join 示例 外连接 outer join left outer join 左外连接 示例 right outer join 右外连接 示例 full outer jo ...

  2. 全网最全的mysql表的关联查询(内连接,外连接)

    Mysql 多表连接查询 inner join 和 outer join 的使用 JOIN的含义就如英文单词"join"一样,连接两张表,大致分为 内连接,外连接,右连接,左连接, ...

  3. mysql 不通过关联查询表_mysql中多表不关联查询的实现方法详解

    下面小编就为大家带来一篇浅谈mysql中多表不关联查询的实现方法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 大家在使用MySQL查询时正常是直接一个表的查询,要不然 ...

  4. 关联查询mysql_《MySQL数据库》关联查询

    原标题:<MySQL数据库>关联查询 一.关联查询 1.概念 在查询数据时,所需要的数据不只在一张表中,可能在两张或多张表中.这个时候,需要同时操作这些表来查询数据,即关联查询. 关联查询 ...

  5. mysql数据关联查询_《MySQL数据库》关联查询

    原标题:<MySQL数据库>关联查询 一.关联查询 1.概念 在查询数据时,所需要的数据不只在一张表中,可能在两张或多张表中.这个时候,需要同时操作这些表来查询数据,即关联查询. 关联查询 ...

  6. Day4-Mybatis框架(多表的关联查询)

    Day4-Mybatis框架(多表的关联查询) 关联查询 使用背景:项目中可能不止一个表的时候 即多表的时候(表间关系可分为一对一,一对多,多对多) 这时候查询会涉及到来自多个表的操作. 简单的入门代 ...

  7. MySQL中的关联查询

    MySQL中的关联查询 (1)Question:关联是什么 关联是SQL语言中使用SELECT操作表的一种操作机制,用来联系两个或者多个表.SELECT是SQL中的查询语句,用于查询数据库中的数据.将 ...

  8. Hibernate实现对多个表进行关联查询

    Hibernate实现对多个表进行关联查询? String sTest = "from tBookInfo book, BookSelection sel where book.id = s ...

  9. mysql一对多关联查询分页_mysql一对多关联查询分页错误问题的解决方法

    xml问价中查询数据中包含list,需要使用collection .... .... 这样的查询系统封装的通用分页查询是不对的,所以需要自己sql中加入分页解决 SELECT you.nick_nam ...

  10. Mybatis-plus:单表使用关联查询+ResultMap结果映射

    Mybatis-plus:单表使用关联查询+ResultMap结果映射 一:数据表与实体类 二:mapper与mapper.xml 三:service 四:控制器 五:返回结果 一:数据表与实体类 数 ...

最新文章

  1. 继谷歌苹果微软也被曝人工收集用户语音数据,微软公开承认了
  2. blockhouses
  3. 通过ping命令测试主机与虚拟机之间是否连通
  4. c# 2.0实现摄象头视频采集,拍照,录象
  5. remmina连接xfce桌面的centos7
  6. C# string转double,double转string
  7. 95-866-040-源码-吞吐量-提升吞吐的利器 MicroBatch
  8. 从贝叶斯模型(Bayes)到生成模型(Generative models)(生成式分类器,generative classifier)
  9. 华三配置telnet
  10. 数据系统 需要的服务器配置,数据系统 需要的服务器配置
  11. 我用Python爬取了李沧最近一年多的二手房成交数据得出以下结论
  12. 衣服挂牌 挂牌吊牌(麻绳,五彩绳,尼龙绳等)
  13. 南华大学2022第五届网络安全竞赛wp
  14. 关闭计算机用英语怎么说,关闭计算机用英语肿么说
  15. DC学习(时序分析和命令)
  16. 图书管理系统之带验证码登录界面
  17. 十大经典排序算法的动图
  18. Android 文件转base64字符串,json文件转对象
  19. db2advis DB2索引优化建议
  20. c语言,计算 1.01,0.99,1.02,0.98 的 365 次方

热门文章

  1. typecho博客,typecho插件,typecho博客搭建
  2. JavaScript字符串的长度
  3. HTML5超级链接、图片与多媒体
  4. 示波器wvf导入matlab,运动控制系统实验
  5. 了解 Web 服务规范,第 5 部分: WS-Policy
  6. 计算机物联网工程专业考研,物联网工程专业考研方向
  7. jQuery中点击按钮创建表格
  8. 嵌入式单片机基础篇(五)之stm32F1以及51单片机时钟详解
  9. Python中整除、求余运算
  10. 上传文件计算机传输的,电脑文件怎么传输到iPad