select语句(下篇)——连表查询

表连接

​ 当想要查询的数据,来自于不同的表中,需要使用表连接查询

92语法

--92语法: select 数据 from 表,表,数据来源...
--连接条件: 条件92语法中就直接写在where中
--注意: 如果在表连接时候,出现了多表中相同的字段的使用,一定要指明这个同名字段的出处

--笛卡尔积
select * from emp,dept;

--等值连接
--查询每个员工的员工信息和所在部门的信息
--数据: 员工名称.部门民称
--来源: 员工表  部门表
--条件: 这个员工.以及这个员工所在的部门
select empno, ename, dept.deptno, dname from emp, dept where emp.deptno = dept.deptno;

--查询20部门的员工信息和部门信息
select empno, ename, d.deptno, dname from emp e, dept d where e.deptno = d.deptno and e.deptno=20;

--非等值连接
--查询员工的信息,以及薪资等级信息
select * from emp e, salgrade s where sal between losal and hisal and deptno in(10, 30);

--查询员工的信息,以及所在的部门信息,以及工资等级
select * from emp e, dept d, salgrade s where e.deptno = d.deptno and e.sal between losal and hisal;

--查询所有有上级的员工,员工的信息以及经理人信息
--员工的经理人标号是经理人表中的员工编号  e1员工表  e2经理人表
select * from emp e1, emp e2 where e1.mgr = e2.empno;

--外链接 
--左外链接  右外链接
--主表: 主表中的数据无论是否满足条件都会显示
--表示谁是主表: 在表连接的条件上,主表对面的添加一个(+)
--emp e1, emp e主表在左边就是左连接,主表在逗号就叫右连接

--查询所有的员工(有没有上级都要),员工的信息以及经理人信息
--e1员工表为主表
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 e2, emp e1 where e1.mgr(+) = e2.empno;

--内连接和外链接
--内连接:等值,非等值
--外链接:主表

99语法

--笛卡尔积   cross join
select * from emp cross join dept;

--查询30部门的员工信息以及部门信息
--先连接后过滤
select * from emp, dept where emp.deptno=dept.deptno and emp.deptno=30; 
--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 ename,deptno,dname from emp natural join dept;

--join..using(制定等值连接字段名)
--同名字段不能使用限定词
select ename,deptno,dname from emp inner join dept using(deptno);

--等值|非等值连接
--表1 join 表2 on 连接条件
select e.deptno from emp e inner join dept d on e.deptno=d.deptno;

--30部门薪资>1500的员工信息,部门信息,薪资等级信息
select *
  from emp
  join dept
    on emp.deptno = dept.deptno
  join salgrade
    on emp.sal between losal and hisal
 where emp.deptno = 30
   and sal > 1500;
   
--查询所有存在上级的员工的信息,上级经理人信息
select * from emp e1 join emp e2 on e1.mgr = e2.empno;

--内连接  (inner) join
--外连接
--左连接 left join .. on
--有链接 right join .. on 
--查询所有员工的信息,上级经理人信息
select * from emp e1 ,emp e2 where e1.mgr = e2.empno(+);
select * from emp e1 right join emp e2 on e1.mgr = e2.empno;

--全连接 两张表都作为主表存在
select * from emp e1 full join emp e2 on e1.mgr = e2.empno;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值