全外连接是在结果中除了显示满足连接的条件的行外,还显示了join两侧表中所有满足检索条件的行。
SQL> select e.empno,e.ename,e.sal,d.grade
2 from emp e full outer join salgrade d
3 on e.sal between d.losal and d.hisal;
EMPNO ENAME SAL GRADE
---------- ---------- ---------- ----------
7839 KING 5000 5
7902 FORD 3000 4
7788 SCOTT 3000 4
7566 JONES 2975 4
7698 BLAKE 2850 4
7782 CLARK 2450 4
7499 ALLEN 1600 3
7844 TURNER 1500 3
7934 MILLER 1300 2
7521 WARD 1250 2
7654 MARTIN 1250 2
7876 ADAMS 1100 1
7900 JAMES 950 1
7369 SMITH 800 1
7937 Candy 500 6
上面的结果中
7937 Candy 500
这一条数据没有对应的工资等级,
6
这条数据没有对应的员工信息,右外连接
交叉连接
使用cross joi实现交叉连接,可以将两个表的交叉连接,所得到的结果是将这两个表中各行数据的所有的组合,即这两个表所有数据行的笛卡儿积。
交叉连接与简单连接操作非常相似,不同的是,使用交叉连接时,在from子句中多个表名之间不是逗号,而是使用cross join关键字隔开。令外,在交叉连接中不需要使用关键字on限定连接条件,但是可以添加where子句设置连接条件。
SQL> select empno,ename,e.deptno,d.deptno
2 from emp e cross join dept d;
EMPNO ENAME DEPTNO DEPTNO
---------- ---------- ---------- ----------
7369 SMITH 20 10
7499 ALLEN 30 10
7521 WARD 30 10
7566 JONES 20 10
7654 MARTIN 30 10
7698 BLAKE 30 10
7782 CLARK 10 10
7788 SCOTT 20 10
7839 KING 10 10
7844 TURNER 30 10
7876 ADAMS 20 10
7900 JAMES 30 10
7902 FORD 20 10
7934 MILLER 10 10
7937 Candy 10
7369 SMITH 20 20
7499 ALLEN 30 20
7521 WARD 30 20
7566 JONES 20 20
7654 MARTIN 30 20
7698 BLAKE 30 20
7782 CLARK 10 20
7788 SCOTT 20 20
7839 KING 10 20
7844 TURNER 30 20
7876 ADAMS 20 20
7900 JAMES 30 20
7902 FORD 20 20
7934 MILLER 10 20
7937 Candy 20
7369 SMITH 20 30
7499 ALLEN 30 30
7521 WARD 30 30
7566 JONES 20 30
7654 MARTIN 30 30
7698 BLAKE 30 30
7782 CLARK 10 30
7788 SCOTT 20 30
7839 KING 10 30
7844 TURNER 30 30
7876 ADAMS 20 30
7900 JAMES 30 30
7902 FORD 20 30
7934 MILLER 10 30
7937 Candy 30
7369 SMITH 20 40
7499 ALLEN 30 40
7521 WARD 30 40
7566 JONES 20 40
7654 MARTIN 30 40
7698 BLAKE 30 40
7782 CLARK 10 40
7788 SCOTT 20 40
7839 KING 10 40
7844 TURNER 30 40
7876 ADAMS 20 40
7900 JAMES 30 40
7902 FORD 20 40
7934 MILLER 10 40
7937 Candy 40
已选择 60 行。
//交叉连接如果不使用任何的条件限制的话,将得到的是数据的笛卡儿积,也就是每个表中的数据与另一个表中的数据的所有的组合。
SQL> select empno,ename,e.deptno,d.deptno
2 from emp e cross join dept d
3 where d.deptno=10
4 and e.deptno=10;
EMPNO ENAME DEPTNO DEPTNO
---------- ---------- ---------- ----------
7782 CLARK 10 10
7839 KING 10 10
7934 MILLER 10 10
//对两个表中的deptno进行限制