全外串連和交叉串連,串連串連
全外串連是在結果中除了顯示滿足串連的條件的行外,還顯示了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進行限制