Oracle联合查询详解

联合查询(多表连接)
概念:多张表连接,合并查询数据

分类:
1.笛卡尔积连接(交叉连接)
语法:
select t1.column1,t1.column2,t2.column1,t2.column2,… from table_name1 t1 cross join table_name2 t2;
select t1.col_list,t2.col_list from table_name1 t1,table_name2 t2;

关键字:cross join

select * from emp t1 cross join dept t2;

数据量:是两张表的数据的乘积

2.内连接
语法:
select t1.col_list,t2.col_list from table_name1 t1 [inner] join table_name2 t2 on t1.column1 = t2.column2;

关键字:inner join … on …

select t1.empno,t1.ename,t1.deptno,t2.deptno,t2.dname from emp t1 join dept t2 on t1.deptno = t2.deptno;

数据量:两张表所关联的数据的条数

3.自然连接(不常用)
语法:
select t1.col_list,t2.col_list from table_name1 t1 natural join table_name2 t2;

关键字:natural join

select * from emp t1 natural join dept t2;

学生表 老师表
id id
teacher_id

数据量:自动根据相同字段相关联,获取相关条件的数据

4.外连接
1)全外连接
语法:
select t1.col_list,t2.col_list from table_name1 t1 full [outer] join table_nema2 t2 on t1.column1 = t2.column2;

关键字:full [outer] join ... on ...

select t1.*,t2.* from emp t1 full join dept t2 on t1.deptno = t2.deptno;

数据量:相关联的数据全部展示,
        并左表数据全部展示,右表数据不匹配,以空值显示,
        右表数据全部展示,左表不匹配,以空值显示

2)左外连接
语法:
select t1.col_list,t2.col_list from table1 t1 left [outer] join table2 t2 on t1.column1 = t2.column2;
select t1.col_list,t2.col_list from table1 t1,table2 t2 where t1.column1 = t2.column2(+)

关键字:left [outer] join … on …

select * from emp t1 left join dept t2 on t1.deptno = t2.deptno;

数据量:左表数据全部展示,右表数据不匹配,以空值显示

3)右外连接
语法:
select t1.col_list,t2.col_list from table1 t1 right [outer] join table2 t2 on t1.column1 = t2.column2;
select t1.col_list,t2.col_list from table1 t1,table2 t2 where t1.column1(+) = t2.column2;

关键字:right [outer] join … on …

select * from emp t1 right join dept t2 on t1.deptno = t2.deptno;

数据量:右表数据全部展示,左表数据不匹配,以空值显示

5.自连接
自连接是一种特殊的连接,自己和自己连接
select t1.col_list,t2.col_list from table1 t1 join table1 t2 t1.column1 = t2.column2;

自连接关键字:可以是任何连接方式

–查询emp表中自己的领导
select t1.empno 员工编号,t1.ename 员工姓名,t1.mgr 领导编号,t2.empno “领导编号(empno)”,t2.ename 领导姓名 from emp t1 join emp t2 on t1.mgr = t2.empno;

6.不等连接
语法:
select t1.col_list,t2.col_list from table1 t1 join table2 t2 on t1.column1 != t2.column2;

select * from emp;
select * from dept;
select * from salgrade;

select *
from emp t1
join dept t2 on t1.deptno = t2.deptno
join salgrade t3 on t1.sal between t3.losal and t3.hisal;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值