Oracle表连接

92语法:

当要查询的数据来自于不同的表,需要实现 多表联查
–92语法 99语法
–内连接 :有where ,满足条件才显示,不满足不显示
–92语法 select 数据 from 表1,表2,表3…;
–笛卡尔积 对乘效果
select * from emp,dept;

–查询所有员工的信息,以及所在的部门信息
–数据: 员工信息 部门信息
–来源: emp dept
–等值连接

select empno,ename,emp.deptno,dname  from emp,dept where emp.deptno = dept.deptno;
--注意:当使用同名字段时候,需要指明字段出处
select empno,ename,emp.deptno,dname from emp,dept where emp.ename = dept.dname;

–非等值连接

--查询员工信息以及每个员工的薪资等级
select empno,ename,sal,grade from emp,salgrade where sal between losal and hisal;
--2500这个薪资在几等级
select grade from salgrade where 2500 between losal and hisal;

–自连接 一张表,当多张表使用

--查询有上级的员工的员工信息,以及这个员工的上级信息
--数据: 员工信息 上级信息
--来源: 员工表emp e1  上级表 emp e2
select * from emp e1,emp e2 where e1.mgr = e2.empno;

–外连接

--左外连接|左连接  右外连接|右连接 :主表在逗号的左边叫做左连接,主表在逗号的右边叫做右连接
--主表: 主表中的数据无论是否满足连接条件都要显示
--查询所有员工信息,以及这个员工的上级信息
--员工表作为主表
select * from emp e2,emp e1 where e1.mgr = e2.empno(+);  --右连接
select * from emp e1,emp e2 where e1.mgr = e2.empno(+);  --左连接
select * from emp e1,emp e2 where e1.mgr = e2.empno(+) and e1.deptno in(10,20) order by e1.empno desc;  --左连接

–查询员工信息 e1,部门信息 d,薪资等级 s,上级信息 e2

select dname 部门名称, e1.ename 员工名称, grade 薪资等级, e2.ename 上级名称
  from emp e1, dept d, salgrade s, emp e2
 where e1.deptno = d.deptno
   and e1.sal between losal and hisal
   and e1.mgr = e2.empno;

99语法:

等值连接

--自然连接natural join  自动帮你找两个表之间的同名字段|主外键关系字段左连接  自动做等值连接
--员工的信息以及所在的部门信息
select empno,deptno from emp e natural join dept d;
--注意:如果使用同名字段,不能指明出处

–join…using(同名字段名) 指定使用哪一个同名字段作为等值连接条件

select empno,deptno from emp e join dept d using(deptno);
--注意:如果使用同名字段,不能指明出处

–非等值连接

-- A join B on 连接条件 join c on 连接条件  可以做等值连接  可以做非等值连接
select * from emp e join dept d on e.deptno = d.deptno where e.deptno=30;
--注意:如果使用同名字段,需要指明出处
--查询员工信息,薪资等级
select grade,count(empno)
  from emp e
  join salgrade s
    on e.sal between losal and hisal
  join dept d
    on e.deptno = d.deptno
    where e.deptno in(10,30) group by grade having grade != 1 order by grade;
--员工信息,上级信息
select * from emp e1 inner join emp e2 on e1.mgr=e2.empno; 

–内连接 (inner) join

--外链接  left join左连接    right join右连接  全连接 full join 两边的表都作为主表
--主表 主表在join的左边,叫做左连接 left join   主表在join的右边,叫做左连接 right join    ull join 两边的表都作为主表
select * from emp e1 left join emp e2 on e1.mgr=e2.empno; 
select * from emp e1 right join emp e2 on e1.mgr=e2.empno;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值