个人学习oracle数据库内连接和外连接心得
2017-06-15 11:52
169 查看
小白一枚 ,第一次尝试写博客 不喜勿喷
等值连接:用代码来说就是用where 关键字连表,
内连接:用代码来说就是用join on ,
例如有emp dept两张表 字段如下:
等值连接sql语句:
select * from emp,dept where emp.deptno=dept.deptno
内连接sql语句:
select * from emp join dept on emp.deptno=dept.deptno
查询结果:
查询结果一模一样,由此可以看出内连接跟等值连接的作用是一样的。
注意:多表查询的性能是很差的,当然,性能差是有一个前提的:数据量大。
接下来是外连表 ,有三种方式(有A B两张表):
左连表查询:A left join B on 或者 A left outer join B on
右连表查询:A right join B on 或者 A right outer join B on
全连接:full join 等价于(full outer join)查询结果等于左外连接和右外连接的和
在这里我觉得有必要说明一下,因为我个人在学习外连接的方式的时候迷糊过,为什么左连表跟右连表查出来的是这样的呢?于是我自己琢磨了一下,得出下面的结论:
左连表是把左表为主表 右连表是把右表作为主表,下面我会用图告诉你们的区别
左连表sql语句(emp表,dept表):
select * from emp left join dept on emp.deptno =dept.deptno
右连表sql:
select * from emp right join dept on emp.deptno=dept.deptno
从图可以看出左连接跟右连接的区别,为什么左连接跟右连接不一样呢?
因为左连表的话 (select * from emp left join dept on emp.deptno =dept.deptno),
在这里emp表为主表 所以查出来的字段必须是跟emp表的字段对应,假如没有,就用null值补充,在
右连表这里就可以看得很清楚,(select * from emp right join dept on emp.deptno=dept.deptno)
右连表把dept表作为主表,emp表中没有一个人是deptno为40的 但是还是显示出来了,没有数据为null
全外连接sql:
select * from emp full join dept on emp.deptno=dept.deptno
在这里没有区别谁是主表 就是查左连表跟右连表的总和
等值连接:用代码来说就是用where 关键字连表,
内连接:用代码来说就是用join on ,
例如有emp dept两张表 字段如下:
等值连接sql语句:
select * from emp,dept where emp.deptno=dept.deptno
内连接sql语句:
select * from emp join dept on emp.deptno=dept.deptno
查询结果:
查询结果一模一样,由此可以看出内连接跟等值连接的作用是一样的。
注意:多表查询的性能是很差的,当然,性能差是有一个前提的:数据量大。
接下来是外连表 ,有三种方式(有A B两张表):
左连表查询:A left join B on 或者 A left outer join B on
右连表查询:A right join B on 或者 A right outer join B on
全连接:full join 等价于(full outer join)查询结果等于左外连接和右外连接的和
在这里我觉得有必要说明一下,因为我个人在学习外连接的方式的时候迷糊过,为什么左连表跟右连表查出来的是这样的呢?于是我自己琢磨了一下,得出下面的结论:
左连表是把左表为主表 右连表是把右表作为主表,下面我会用图告诉你们的区别
左连表sql语句(emp表,dept表):
select * from emp left join dept on emp.deptno =dept.deptno
右连表sql:
select * from emp right join dept on emp.deptno=dept.deptno
从图可以看出左连接跟右连接的区别,为什么左连接跟右连接不一样呢?
因为左连表的话 (select * from emp left join dept on emp.deptno =dept.deptno),
在这里emp表为主表 所以查出来的字段必须是跟emp表的字段对应,假如没有,就用null值补充,在
右连表这里就可以看得很清楚,(select * from emp right join dept on emp.deptno=dept.deptno)
右连表把dept表作为主表,emp表中没有一个人是deptno为40的 但是还是显示出来了,没有数据为null
全外连接sql:
select * from emp full join dept on emp.deptno=dept.deptno
在这里没有区别谁是主表 就是查左连表跟右连表的总和
相关文章推荐
- 学习Polymorphours的绕过防火墙的反向连接报警代码,心得,它的思路
- BT源代码学习心得(十四):客户端源代码分析(对等客户连接中的阻塞管理)
- C++连接Mysql个人心得~Fansonik
- Oracle数据库的连接配置(学习笔记)
- java学习个人心得
- 一些C++连接,以及个人的C++学习总结。
- 学习《实战OpenGL》之OCI接口连接Oracle数据库初探
- “ubunt Server最佳方案”个人学习笔记之安装心得
- Flex开发实例下载——个人学习心得
- 今天考了关于java认证的OCJP,特此谈谈个人java学习过程及心得
- BT源代码学习心得(十三):客户端源代码分析(对等客户的连接建立及其握手协议)
- BT源代码学习心得(十三):客户端源代码分析(对等客户的连接建立及其握手协议)
- BT源代码学习心得(十二):客户端源代码分析(从开始到连接建立阶段)
- vss团队开发工具使用(个人学习心得)
- 编程学习个人心得
- BT源代码学习心得(十二):客户端源代码分析(从开始到连接建立阶段)
- BT源代码学习心得(十四):客户端源代码分析(对等客户连接中的阻塞管理) 转自CSDN:gushenghua的专栏
- SQL左连接攻略--Mysql学习心得(符合sql标准)
- 职场一年,个人学习心得的总结(转
- ApiDemo的学习总结,个人心得,App模块之Activity