mysql 表间关联查询
Mysql 表间关联查询
内连接
- 语法: 表1 [inner] join 表2 on 条件 // inner可以省略
说明: on 关联条件 表1–>驱动表, 表2–> 匹配表 - 执行过程: 遍历驱动表,在匹配表中匹配记录
- 等值连接时 (条件中使用’='): 表1,表2 位置可以交换, 驱动表在前,匹配表灾后
- 结果集特点:
能够在两张表中找到的记录(满足条件/匹配上)会被保留, 找不到(不满足条件/匹配不上)的会被丢弃
- 查询员工的姓名和其部门的名字
-- 表关联查询
select ename,dept_name, e.deptno -- 若字段在两张表中重名则需要指名是哪个表的字段(若不重名则不用指定)
from emp_lym e inner join dept_lym d on e.deptno=d.dept_id;
笛卡尔积:
- 不加where条件的连接,查询到的是笛卡尔积的结果。
- 检索结果的记录条数 = 第一张表的记录条数 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 表间关联查询相关推荐
- Oracle/MySQL数据库的表间关联查询_多表关联查询的SQL语句详解
文章目录 内连接 inner join 示例 外连接 outer join left outer join 左外连接 示例 right outer join 右外连接 示例 full outer jo ...
- 全网最全的mysql表的关联查询(内连接,外连接)
Mysql 多表连接查询 inner join 和 outer join 的使用 JOIN的含义就如英文单词"join"一样,连接两张表,大致分为 内连接,外连接,右连接,左连接, ...
- mysql 不通过关联查询表_mysql中多表不关联查询的实现方法详解
下面小编就为大家带来一篇浅谈mysql中多表不关联查询的实现方法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 大家在使用MySQL查询时正常是直接一个表的查询,要不然 ...
- 关联查询mysql_《MySQL数据库》关联查询
原标题:<MySQL数据库>关联查询 一.关联查询 1.概念 在查询数据时,所需要的数据不只在一张表中,可能在两张或多张表中.这个时候,需要同时操作这些表来查询数据,即关联查询. 关联查询 ...
- mysql数据关联查询_《MySQL数据库》关联查询
原标题:<MySQL数据库>关联查询 一.关联查询 1.概念 在查询数据时,所需要的数据不只在一张表中,可能在两张或多张表中.这个时候,需要同时操作这些表来查询数据,即关联查询. 关联查询 ...
- Day4-Mybatis框架(多表的关联查询)
Day4-Mybatis框架(多表的关联查询) 关联查询 使用背景:项目中可能不止一个表的时候 即多表的时候(表间关系可分为一对一,一对多,多对多) 这时候查询会涉及到来自多个表的操作. 简单的入门代 ...
- MySQL中的关联查询
MySQL中的关联查询 (1)Question:关联是什么 关联是SQL语言中使用SELECT操作表的一种操作机制,用来联系两个或者多个表.SELECT是SQL中的查询语句,用于查询数据库中的数据.将 ...
- Hibernate实现对多个表进行关联查询
Hibernate实现对多个表进行关联查询? String sTest = "from tBookInfo book, BookSelection sel where book.id = s ...
- mysql一对多关联查询分页_mysql一对多关联查询分页错误问题的解决方法
xml问价中查询数据中包含list,需要使用collection .... .... 这样的查询系统封装的通用分页查询是不对的,所以需要自己sql中加入分页解决 SELECT you.nick_nam ...
- Mybatis-plus:单表使用关联查询+ResultMap结果映射
Mybatis-plus:单表使用关联查询+ResultMap结果映射 一:数据表与实体类 二:mapper与mapper.xml 三:service 四:控制器 五:返回结果 一:数据表与实体类 数 ...
最新文章
- 继谷歌苹果微软也被曝人工收集用户语音数据,微软公开承认了
- blockhouses
- 通过ping命令测试主机与虚拟机之间是否连通
- c# 2.0实现摄象头视频采集,拍照,录象
- remmina连接xfce桌面的centos7
- C# string转double,double转string
- 95-866-040-源码-吞吐量-提升吞吐的利器 MicroBatch
- 从贝叶斯模型(Bayes)到生成模型(Generative models)(生成式分类器,generative classifier)
- 华三配置telnet
- 数据系统 需要的服务器配置,数据系统 需要的服务器配置
- 我用Python爬取了李沧最近一年多的二手房成交数据得出以下结论
- 衣服挂牌 挂牌吊牌(麻绳,五彩绳,尼龙绳等)
- 南华大学2022第五届网络安全竞赛wp
- 关闭计算机用英语怎么说,关闭计算机用英语肿么说
- DC学习(时序分析和命令)
- 图书管理系统之带验证码登录界面
- 十大经典排序算法的动图
- Android 文件转base64字符串,json文件转对象
- db2advis DB2索引优化建议
- c语言,计算 1.01,0.99,1.02,0.98 的 365 次方