`
yangxiutian
  • 浏览: 59802 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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中可以看出,不等连接也可以有内连接、左外/右外/全连接。
7
6
分享到:
评论
2 楼 yangxiutian 2012-08-30  
乱_战 写道
W3CHOOL:重要事项:不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。某些数据库会列出介于 "Adams" 和 "Carter" 之间的人,但不包括 "Adams" 和 "Carter" ;某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人;而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人,包括 "Adams" ,但不包括 "Carter" 。

不同数据库不同的处理方式,要根据数据库而言

楼主查看了下w3school的网站,确实是这么说的,谢谢一楼的指正。oracle的处理方式是包括两个端点值。
1 楼 乱_战 2012-08-30  
W3CHOOL:重要事项:不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。某些数据库会列出介于 "Adams" 和 "Carter" 之间的人,但不包括 "Adams" 和 "Carter" ;某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人;而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人,包括 "Adams" ,但不包括 "Carter" 。

不同数据库不同的处理方式,要根据数据库而言

相关推荐

Global site tag (gtag.js) - Google Analytics