SQL-关联
关联的本质:从一张表依次取一条数据和另一张表每一条数据进行匹配
内关联 inner join (inner可省略) -- 只显示关联的上的数据
外关联有三种
左外 left join -- 主表数据不丢失(关键字左边的表)
右外 right join -- 主表数据不丢失(关键字右边的表)
全外 full join -- 主表数据不丢失(左右都是主表)
未明确定义列 就是两个表里面都存在的字段必须带上别名 要告诉数据库你查询的字段来自哪张表
表别名的作用
带出字段 免得自己写错
关联字段的名字可以不一样,因为它是根据里面的值去做关联的
关联字段的数据类型要一致
笛卡尔积(无条件关联)14*4=56
工作中有时候忘记写关联条件了,就变成了笛卡尔积,数据累积暴增,导致程序跑的非常慢!
select e.*,d.*
from emp e
join dept d on 1 = 1
;
两张表关联起来就是一张表 where就理解为取数条件
select *
from dept d
join emp e on d.deptno = e.deptno
where d.deptno = 10
;
写在on后面就是关联条件,只有10部门的这条数据才能关联的上,主表数据不丢失。
select *
from dept d
join emp e on d.deptno = e.deptno and d.deptno = 10
;
总结:内关联条件写在where后面跟写在on后面结果是一样的
建议把条件写在on后面 性能会好点
关联里面,同一个表可以用很多次
-- 3*3 + 5*5 + 6*6
select *
from emp a
join emp b on a.deptno = b.deptno;
表自连 找上级
select a.empno,a.ename,a.mgr
,b.empno,b.ename,b.mgr
from emp a
join emp b on a.mgr = b.empno ;
多表关联 语法
select *
from emp a
join emp b on a.deptno = b.deptno
join emp c on a.deptno = b.deptno
join dept d on a.deptno = b.deptno;
最新文章
- Java反射使用技巧
- 自由缩放属性resize
- sql事务和锁
- C语言基本点初探
- BMP图片格式
- 夺命雷公狗ThinkPHP项目之----企业网站18之网站配置列表页的完成
- oracle10g库连接报错
- Redis初步
- (转载)用PHP正则表达式清除字符串的空白
- 给方法传递参数:ref参数和out参数
- Java设计模式之单例模式详解
- DOM解析原理示意
- Bom部分
- Flask--偏函数, 线程安全, 请求上下文
- 浅析JavaScript工厂模式
- MyBatis通过Mapper动态代理来实现curd操作
- python3-基础2
- LeetCode——300. Longest Increasing Subsequence
- python脚本批量复制文件
- 国内高速Maven仓库