oracle笛卡尔乘积

cross jion:将两张表合并起来,n个表使用n-1个cross join

语法:select * from 表1 cross join 表2 cross join 表3 cross join 表4 ... 表n where 条件;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
--将3张表合并,无序的没有意义
SQL>  SELECT * FROM EMP T CROSS JOIN DEPT TT CROSS JOIN SALGRADE TTT;
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO DEPTNO DNAME          LOC                GRADE      LOSAL      HISAL
----- ---------- --------- ----- ----------- --------- --------- ------ ------ -------------- ------------- ---------- ---------- ----------
 7369 SMITH      CLERK      7902 1980/12/17     800.00               20     10 ACCOUNTING     NEW YORK                      700       1200
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30     10 ACCOUNTING     NEW YORK                      700       1200
 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30     10 ACCOUNTING     NEW YORK                      700       1200
 7566 JONES      MANAGER    7839 1981/4/     2975.00               20     10 ACCOUNTING     NEW YORK                      700       1200
 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.10   1400.00     30     10 ACCOUNTING     NEW YORK                      700       1200
 7698 BLAKE      MANAGER    7839 1981/5/     2850.00               30     10 ACCOUNTING     NEW YORK                      700       1200
 7782 CLARK      MANAGER    7839 1981/6/     2450.00               10     10 ACCOUNTING     NEW YORK                      700       1200
 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20     10 ACCOUNTING     NEW YORK                      700       1200
 7839 KING       PRESIDENT       1981/11/17    5000.23               10     10 ACCOUNTING     NEW YORK                      700       1200
 7844 TURNER     SALESMAN   7698 1981/9/     1500.00      0.00     30     10 ACCOUNTING     NEW YORK                      700       1200
 7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20     10 ACCOUNTING     NEW YORK                      700       1200
 7900 JAMES      CLERK      7698 1981/12/     950.55               30     10 ACCOUNTING     NEW YORK                      700       1200
 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20     10 ACCOUNTING     NEW YORK                      700       1200
 7934 MILLER     CLERK      7782 1982/1/23     1300.00               10     10 ACCOUNTING     NEW YORK                      700       1200
 7369 SMITH      CLERK      7902 1980/12/17     800.00               20     10 ACCOUNTING     NEW YORK               2       1201       1400
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30     10 ACCOUNTING     NEW YORK               2       1201       1400
 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30     10 ACCOUNTING     NEW YORK               2       1201       1400
 7566 JONES      MANAGER    7839 1981/4/     2975.00               20     10 ACCOUNTING     NEW YORK               2       1201       1400
 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.10   1400.00     30     10 ACCOUNTING     NEW YORK               2       1201       1400
 7698 BLAKE      MANAGER    7839 1981/5/     2850.00               30     10 ACCOUNTING     NEW YORK               2       1201       1400
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO DEPTNO DNAME          LOC                GRADE      LOSAL      HISAL


--将3张表合并,增加where条件
--这个sql语句是员工名单+城市+薪酬等级where后的结果
SQL>  SELECT * FROM EMP T CROSS JOIN DEPT TT CROSS JOIN SALGRADE TTT where t.deptno = tt.deptno and sal between ttt.losal and ttt.hisal;
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO DEPTNO DNAME          LOC                GRADE      LOSAL      HISAL
----- ---------- --------- ----- ----------- --------- --------- ------ ------ -------------- ------------- ---------- ---------- ----------
 7839 KING       PRESIDENT       1981/11/17    5000.23               10     10 ACCOUNTING     NEW YORK               5       3001       9999
 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20     20 RESEARCH       DALLAS                 4       2001       3000
 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20     20 RESEARCH       DALLAS                 4       2001       3000
 7566 JONES      MANAGER    7839 1981/4/     2975.00               20     20 RESEARCH       DALLAS                 4       2001       3000
 7698 BLAKE      MANAGER    7839 1981/5/     2850.00               30     30 SALES          CHICAGO                4       2001       3000
 7782 CLARK      MANAGER    7839 1981/6/     2450.00               10     10 ACCOUNTING     NEW YORK               4       2001       3000
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30     30 SALES          CHICAGO                3       1401       2000
 7844 TURNER     SALESMAN   7698 1981/9/     1500.00      0.00     30     30 SALES          CHICAGO                3       1401       2000
 7934 MILLER     CLERK      7782 1982/1/23     1300.00               10     10 ACCOUNTING     NEW YORK               2       1201       1400
 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.10   1400.00     30     30 SALES          CHICAGO                2       1201       1400
 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30     30 SALES          CHICAGO                2       1201       1400
 7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20     20 RESEARCH       DALLAS                        700       1200
 7900 JAMES      CLERK      7698 1981/12/     950.55               30     30 SALES          CHICAGO                       700       1200
 7369 SMITH      CLERK      7902 1980/12/17     800.00               20     20 RESEARCH       DALLAS                        700       1200