连表查询:表连接(92),表连接(99)

--连表查询
--当要查询的数据来自与不同的表|数据源,就可以使用连表查询
--语法: 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(+); -->  右连接

回顾

--select 数据(*|字段,字段|伪列) from 数据源(表|结果集|视图) where 行过滤条件 group by 分组字段 having 组过滤条件 order by 排序字段;

--92语法  select 数据(*|字段,字段|伪列) from 数据源1,数据源2.. where 行过滤条件 and 表连接条件 group by 分组字段 having 组过滤条件 order by 排序字段;

--多表连接

--查询30部门员工信息以及员工所在部门信息以及员工薪资登记信息

--连接之后过滤

select * from emp e,dept d,salgrade s where e.deptno=d.deptno and e.sal between s.losal and s.hisal and  e.deptno = 30;

--99链表查询

--笛卡尔积   cross join

select * from emp e,dept d; --92

select deptno from emp e cross join dept d;  --99

--查询30部门的员工信息

select * from emp where deptno = 30;

--查询30部门的部门信息

select * from dept where deptno = 30;

--连接之前过滤

select * from (select * from emp where deptno = 30) cross join (select * from dept where deptno = 30);

--连接条件

--等值连接

       --自然连接 natural join   自动根据同名字段,主外键关联关系 字段做等值连接

       select deptno from emp e natural join dept d;

       --注意: 在自然连接中同名字段不能指明出处

       

       --join using(自动做等值连接的同名字段)...

       select deptno from emp e inner join dept d using(deptno);

       --注意: 在join using中同名字段不能指明出处

--非等值连接      

       --数据源1 join 数据源2 on 表连接条件 可以做等值,可以做非等值

       select e.deptno from emp e join dept d on e.deptno = d.deptno;

       

       --查询员工信息以及员工工资等级信息

       select * from emp e inner join salgrade s on e.sal between s.losal and s.hisal;

       

       --查询员工信息以及所在部门信息以及员工工资等级信息,以及上级经理人信息

       select *

         from emp e

         join dept d

           on e.deptno = d.deptno

         join salgrade s

           on e.sal between s.losal and s.hisal

         join emp e2

           on e.mgr = e2.empno

           where deptno in (10,30);

     

--内连接 : 满足连接条件才能显示 (inner) join

--外连接 : 有的表中的数据不满足连接条件也显示

      --主表: 不满足连接条件也显示

      --左连接 : left join

      --右连接 : right join

      --全连接 : full join 两张表都作为主表

      

      select * from emp e1 full join emp e2 on e1.mgr=e2.empno;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值