sql的各种连接查询

以下均以oracle->scott账号自带的数据库为例(方括号里的东西表示有和没有效果是一样的)。
表内查询->自连接
查询所有经理所对应的雇员:
sql/86:
select manager.ename as manager,worker.ename as worker from emp manager,emp worker where manager.empno=worker.mgr;
 sql/92:
select manager.ename as manager, worker.ename as worker where emp manager [inner] join emp worker on manager.empno=worker.mgr;
 
表间连接->内连接
查询部门名对应的雇员名:
sql/86:
select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;
 sql/92:
select e.ename ,d.dname from emp e [inner] join dept d on e.deptno=d.deptno;
相同列名的关联可以用自然连接达到同样的效果:
select ename,dname from emp natural [inner] join dept;
  
     ->左外连接
查询雇员名对应的部门名和没有部门对应的雇员名:
sql/92:
select e.ename,d.dname from emp e left [outer] join dept d on e.deptno=d.deptno;
    相同列名的关联可以用自然连接达到同样的效果:
select ename,dname from emp natural left [outer] join dept;
 
     ->右外连接
查询雇员名对应的部门名和没有雇员对应的部门名:
sql/92:
select e.ename,d.dname from emp e [right] outer join dept d on e.deptno=d.deptno;
      相同列名的关联可以用自然连接达到同样的效果:
select ename,dname from emp natural right [outer] join dept;

          ->全连接
sql/92:
select e.ename,d.dname from emp e full [outer] join dept d on e.deptno=d.deptno;
  相同列名的关联可以用自然连接达到同样的效果:
select ename,dname from emp natural full [outer] join dept;
 
---------以上都是相等连接,还有一种不等连接

例如,显示每个雇员的名字和薪资等级:
sql/86:
select e.ename,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal;
 sql/92:
select e.ename,s.grade from emp e [inner] join salgrade s on e.sal between s.losal and s.hisal;
  *1、 between...and...包括两个端点值(仅限于oracle,其它数据库的处理方式可能不同)。
   2、从可以加inner中可以看出,不等连接也可以有内连接、左外/右外/全连接。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值