--连表查询
--当要查询的数据来自与不同的表|数据源,就可以使用连表查询
--语法: 92 99
--92
--笛卡尔积 : 对乘
--select 数据 from 数据源1,数据源2...;
--注意:
--查询同名字段需要指明出处
--查询所有员工信息,这个员工所在的部门信息
--查询的数据: 员工信息,部门信息
--数据的来源: emp dept
select * from emp,dept;
--表连接条件
--等值连接
select e.*,d.* from emp e,dept d where e.deptno=d.deptno;
select e.empno,d.dname,e.deptno from emp e,dept d where e.deptno=d.deptno;
--查询10,30部门的员工 信息以及所在部门信息
select e.*,d.* from emp e,dept d where e.deptno=d.deptno and e.deptno in(10,30) order by sal;
--等值连接条件的字段一般为主外键关联关系或者同名字段,但是主要类型相同就可
select * from emp e,dept d where e.ename=d.dname;
--非等值连接
--查询员工的信息以及工资等级信息
select grade from salgrade where 1500 between losal and hisal;
select * from emp e,salgrade s where e.sal between s.losal and s.hisal;
--自连接
--一张包作为2个身份,自己与自己连接
--查询由上级存在的员工信息以及上级经理人信息
--数据: 员工信息,经理人信息
--来源: 员工表emp e1, 经理人表 emp e2
select * from emp e1,emp e2 where e1.mgr=e2.empno;
--内连接: 满足连接条件才保留,不满足连接条件不保留
--所有员工的员工信息以及上级经理人信息
--需求: 员工表中数据无论是否满足连接条件都要显示
--外连接 : 主表中的数据无论是否满足连接条件都显示
--左外连接: 左连接 表连接的位置,主表 在左边
--右外连接: 右连接 表连接的位置,主表 在右边
--员工表作为主表
--在连接条件的位置,主表的对面添加(+)
select * from emp e1,emp e2 where e1.mgr=e2.empno(+); --> 左连接
select * from emp e2,emp e1 where e1.mgr=e2.empno(+); --> 右连接