以下均以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中可以看出,不等连接也可以有内连接、左外/右外/全连接。