Sie sind auf Seite 1von 25

SQL> cl scr

SQL> SELECT Ename, Empno, MGR, Job


2 FROM Emp
3 START WITH Ename = 'KING'
4 COPNNECT BY PRIOR Empno = MGR;
COPNNECT BY PRIOR Empno = MGR
*
ERROR at line 4:
ORA-00933: SQL command not properly ended
SQL> ed
Wrote file afiedt.buf
1
2
3
4*
SQL>

SELECT Ename, Empno, MGR, Job


FROM Emp
START WITH Ename = 'KING'
CONNECT BY PRIOR Empno = MGR
/

ENAME
EMPNO
MGR JOB
---------- ---------- ---------- --------KING
7839
PRESIDENT
BLAKE
7698
7839 MANAGER
MARTIN
7654
7698 SALESMAN
ALLEN
7499
7698 SALESMAN
TURNER
7844
7698 SALESMAN
JAMES
7900
7698 CLERK
WARD
7521
7698 SALESMAN
CLARK
7782
7839 MANAGER
MILLER
7934
7782 CLERK
JONES
7566
7839 MANAGER
FORD
7902
7566 ANALYST
ENAME
EMPNO
MGR JOB
---------- ---------- ---------- --------SMITH
7369
7902 CLERK
SCOTT
7788
7566 ANALYST
ADAMS
7876
7788 CLERK
14 rows selected.
SQL> UPDATE Emp
2 SET MGR = 7566
3 WHERE MGR IS NULL;
1 row updated.
SQL> SELECT Ename, Empno, MGR, Job
2 FROM Emp;
ENAME
EMPNO
MGR JOB
---------- ---------- ---------- --------KING
7839
7566 PRESIDENT
BLAKE
7698
7839 MANAGER
CLARK
7782
7839 MANAGER
JONES
7566
7839 MANAGER
MARTIN
7654
7698 SALESMAN
ALLEN
7499
7698 SALESMAN

TURNER
JAMES
WARD
FORD
SMITH

7844
7900
7521
7902
7369

7698
7698
7698
7566
7902

SALESMAN
CLERK
SALESMAN
ANALYST
CLERK

ENAME
EMPNO
MGR JOB
---------- ---------- ---------- --------SCOTT
7788
7566 ANALYST
ADAMS
7876
7788 CLERK
MILLER
7934
7782 CLERK
14 rows selected.
SQL> ed
Wrote file afiedt.buf
1 SELECT Ename, Empno, MGR, Job
2 FROM Emp
3 START WITH Ename = 'KING'
4* CONNECT BY PRIOR Empno = MGR
SQL> /
ERROR:
ORA-01436: CONNECT BY loop in user data

no rows selected
SQL> ed
Wrote file afiedt.buf
1
2
3
4*
SQL>

SELECT Ename, Empno, MGR, Job


FROM Emp
START WITH Ename = 'KING'
CONNECT BY NOCYCLE PRIOR Empno = MGR
/

ENAME
EMPNO
MGR JOB
---------- ---------- ---------- --------KING
7839
7566 PRESIDENT
BLAKE
7698
7839 MANAGER
MARTIN
7654
7698 SALESMAN
ALLEN
7499
7698 SALESMAN
TURNER
7844
7698 SALESMAN
JAMES
7900
7698 CLERK
WARD
7521
7698 SALESMAN
CLARK
7782
7839 MANAGER
MILLER
7934
7782 CLERK
JONES
7566
7839 MANAGER
FORD
7902
7566 ANALYST
ENAME
EMPNO
MGR JOB
---------- ---------- ---------- --------SMITH
7369
7902 CLERK
SCOTT
7788
7566 ANALYST
ADAMS
7876
7788 CLERK
14 rows selected.

SQL>
SQL>
2
3
4
5
6
7

COLUMN SalPath FORMAT A20


SELECT Ename,
CONNECT_BY_ISCYCLE "Cycle",
LEVEL,
SYS_CONNECT_BY_PATH(Sal, '/') "SalPath"
FROM Emp
START WITH Ename = 'KING'
CONNECT BY NOCYCLE PRIOR Empno = MGR;

ENAME
Cycle
LEVEL SalPath
---------- ---------- ---------- -------------------KING
0
1 /5000
BLAKE
0
2 /5000/2850
MARTIN
0
3 /5000/2850/1250
ALLEN
0
3 /5000/2850/1600
TURNER
0
3 /5000/2850/1500
JAMES
0
3 /5000/2850/950
WARD
0
3 /5000/2850/1250
CLARK
0
2 /5000/2450
MILLER
0
3 /5000/2450/1300
JONES
1
2 /5000/2975
FORD
0
3 /5000/2975/3000
ENAME
Cycle
LEVEL SalPath
---------- ---------- ---------- -------------------SMITH
0
4 /5000/2975/3000/800
SCOTT
0
3 /5000/2975/3000
ADAMS
0
4 /5000/2975/3000/1100
14 rows selected.
SQL>
2
3
4
5
6
7

SELECT Ename,
LEVEL,
SYS_CONNECT_BY_PATH(Sal, '/') "SalPath"
FROM Emp
WHERE CONNECT_BY_ISCYCLE = 0
START WITH Ename = 'KING'
CONNECT BY NOCYCLE PRIOR Empno = MGR;

ENAME
LEVEL SalPath
---------- ---------- -------------------KING
1 /5000
BLAKE
2 /5000/2850
MARTIN
3 /5000/2850/1250
ALLEN
3 /5000/2850/1600
TURNER
3 /5000/2850/1500
JAMES
3 /5000/2850/950
WARD
3 /5000/2850/1250
CLARK
2 /5000/2450
MILLER
3 /5000/2450/1300
FORD
3 /5000/2975/3000
SMITH
4 /5000/2975/3000/800
ENAME
LEVEL SalPath
---------- ---------- -------------------SCOTT
3 /5000/2975/3000
ADAMS
4 /5000/2975/3000/1100
13 rows selected.

SQL> ed
Wrote file afiedt.buf
1
2
3
4
5
6
7*
SQL>

SELECT Ename,
LEVEL,
SYS_CONNECT_BY_PATH(Sal, '/') "SalPath"
FROM Emp
WHERE CONNECT_BY_ISCYCLE = 1
START WITH Ename = 'KING'
CONNECT BY NOCYCLE PRIOR Empno = MGR
/

ENAME
LEVEL SalPath
---------- ---------- -------------------JONES
2 /5000/2975
SQL> cl scr
SQL> ROLLBACK;
Rollback complete.
SQL> cl scr
SQL>
2
3
4
5

SELECT Ename "Employee", CONNECT_BY_ISLEAF "IsLeaf",


LEVEL, SYS_CONNECT_BY_PATH(Ename, '/') "Path"
FROM Emp
START WITH Empno = 7839
CONNECT BY PRIOR Empno = MGR;

Employee
IsLeaf
LEVEL
---------- ---------- ---------Path
-------------------------------------------------------------------------------KING
0
1
/KING
BLAKE
/KING/BLAKE

MARTIN
1
/KING/BLAKE/MARTIN

Employee
IsLeaf
LEVEL
---------- ---------- ---------Path
-------------------------------------------------------------------------------ALLEN
1
3
/KING/BLAKE/ALLEN
TURNER
1
/KING/BLAKE/TURNER

JAMES
/KING/BLAKE/JAMES

Employee
IsLeaf
LEVEL
---------- ---------- ----------

Path
-------------------------------------------------------------------------------WARD
1
3
/KING/BLAKE/WARD
CLARK
/KING/CLARK

MILLER
1
/KING/CLARK/MILLER

Employee
IsLeaf
LEVEL
---------- ---------- ---------Path
-------------------------------------------------------------------------------JONES
0
2
/KING/JONES
FORD
/KING/JONES/FORD

SMITH
1
/KING/JONES/FORD/SMITH

3
4

Employee
IsLeaf
LEVEL
---------- ---------- ---------Path
-------------------------------------------------------------------------------SCOTT
0
3
/KING/JONES/SCOTT
ADAMS
1
/KING/JONES/SCOTT/ADAMS

14 rows selected.
SQL> COLUMN Path FORMAT A15
SQL> COLUMN Path FORMAT A35
SQL> /
Employee
IsLeaf
LEVEL Path
---------- ---------- ---------- ----------------------------------KING
0
1 /KING
BLAKE
0
2 /KING/BLAKE
MARTIN
1
3 /KING/BLAKE/MARTIN
ALLEN
1
3 /KING/BLAKE/ALLEN
TURNER
1
3 /KING/BLAKE/TURNER
JAMES
1
3 /KING/BLAKE/JAMES
WARD
1
3 /KING/BLAKE/WARD
CLARK
0
2 /KING/CLARK
MILLER
1
3 /KING/CLARK/MILLER
JONES
0
2 /KING/JONES
FORD
0
3 /KING/JONES/FORD
Employee
IsLeaf
LEVEL Path
---------- ---------- ---------- ----------------------------------SMITH
1
4 /KING/JONES/FORD/SMITH

SCOTT
ADAMS

0
1

3 /KING/JONES/SCOTT
4 /KING/JONES/SCOTT/ADAMS

14 rows selected.
SQL>
2
3
4
5
6

SELECT Ename "Employee", CONNECT_BY_ISLEAF "IsLeaf",


LEVEL, SYS_CONNECT_BY_PATH(Ename, '/') "Path"
FROM Emp
WHERE CONNECT_BY_ISLEAF = 0
START WITH Empno = 7839
CONNECT BY PRIOR Empno = MGR;

Employee
IsLeaf
LEVEL Path
---------- ---------- ---------- ----------------------------------KING
0
1 /KING
BLAKE
0
2 /KING/BLAKE
CLARK
0
2 /KING/CLARK
JONES
0
2 /KING/JONES
FORD
0
3 /KING/JONES/FORD
SCOTT
0
3 /KING/JONES/SCOTT
6 rows selected.
SQL> e
SP2-0042: unknown command "e" - rest of line ignored.
SQL> ed
Wrote file afiedt.buf
1
2
3
4
5
6*
SQL>

SELECT Ename "Employee", CONNECT_BY_ISLEAF "IsLeaf",


LEVEL, SYS_CONNECT_BY_PATH(Ename, '/') "Path"
FROM Emp
WHERE CONNECT_BY_ISLEAF = 1
START WITH Empno = 7839
CONNECT BY PRIOR Empno = MGR
/

Employee
IsLeaf
LEVEL Path
---------- ---------- ---------- ----------------------------------MARTIN
1
3 /KING/BLAKE/MARTIN
ALLEN
1
3 /KING/BLAKE/ALLEN
TURNER
1
3 /KING/BLAKE/TURNER
JAMES
1
3 /KING/BLAKE/JAMES
WARD
1
3 /KING/BLAKE/WARD
MILLER
1
3 /KING/CLARK/MILLER
SMITH
1
4 /KING/JONES/FORD/SMITH
ADAMS
1
4 /KING/JONES/SCOTT/ADAMS
8 rows selected.
SQL>
2
3
4
5
6

SELECT Ename "Employee", CONNECT_BY_ISLEAF "IsLeaf",


LEVEL, SYS_CONNECT_BY_PATH(Ename, '/') "Path"
FROM Emp
WHERE LEVEL > 3 AND CONNECT_BY_ISLEAF = 0
START WITH Empno = 7839
CONNECT BY PRIOR Empno = MGR;

no rows selected
SQL> ed
Wrote file afiedt.buf

1
2
3
4
5
6*
SQL>

SELECT Ename "Employee", CONNECT_BY_ISLEAF "IsLeaf",


LEVEL, SYS_CONNECT_BY_PATH(Ename, '/') "Path"
FROM Emp
WHERE LEVEL > 3 AND CONNECT_BY_ISLEAF = 1
START WITH Empno = 7839
CONNECT BY PRIOR Empno = MGR
/

Employee
IsLeaf
LEVEL Path
---------- ---------- ---------- ----------------------------------SMITH
1
4 /KING/JONES/FORD/SMITH
ADAMS
1
4 /KING/JONES/SCOTT/ADAMS
SQL>
2
3
4
5
6

SELECT Ename "Employee", CONNECT_BY_ISLEAF "IsLeaf",


LEVEL, SYS_CONNECT_BY_PATH(Ename, '/') "Path"
FROM Emp
WHERE LEVEL < 3 AND CONNECT_BY_ISLEAF = 0
START WITH Empno = 7839
CONNECT BY PRIOR Empno = MGR;

Employee
IsLeaf
LEVEL Path
---------- ---------- ---------- ----------------------------------KING
0
1 /KING
BLAKE
0
2 /KING/BLAKE
CLARK
0
2 /KING/CLARK
JONES
0
2 /KING/JONES
SQL> cl scr
SQL> SELECT * FROM Dept;
DEPTNO
---------10
20
30
40

DNAME
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS

SQL> SELECT Job


2 FROM Emp
3 UNION
4 SELECT
5 Job
6 FROM Emp;ed
7
SQL> ed
Wrote file afiedt.buf
1
2
3
4
5*
SQL>

SELECT Job
FROM Emp
UNION
SELECT Job
FROM Emp
/

JOB
--------ANALYST
CLERK

LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON

MANAGER
PRESIDENT
SALESMAN
SQL> ed
Wrote file afiedt.buf
1
2
3
4
5*
SQL>

SELECT Job
FROM Emp
UNION ALL
SELECT Job
FROM Emp
/

JOB
--------PRESIDENT
MANAGER
MANAGER
MANAGER
SALESMAN
SALESMAN
SALESMAN
CLERK
SALESMAN
ANALYST
CLERK
JOB
--------ANALYST
CLERK
CLERK
PRESIDENT
MANAGER
MANAGER
MANAGER
SALESMAN
SALESMAN
SALESMAN
CLERK
JOB
--------SALESMAN
ANALYST
CLERK
ANALYST
CLERK
CLERK
28 rows selected.
SQL> ed
Wrote file afiedt.buf
1
2
3
4

SELECT Job
FROM Emp
WHERE Deptno = 10
UNION

5
6
7*
SQL>

SELECT Job
FROM Emp
WHERE Deptno = 20
/

JOB
--------ANALYST
CLERK
MANAGER
PRESIDENT
SQL> ed
Wrote file afiedt.buf
1
2
3
4
5
6
7*
SQL>

SELECT Job
FROM Emp
WHERE Deptno = 10
UNION ALL
SELECT Job
FROM Emp
WHERE Deptno = 20
/

JOB
--------PRESIDENT
MANAGER
CLERK
MANAGER
ANALYST
CLERK
ANALYST
CLERK
8 rows selected.
SQL> cl scr
SQL>
SQL>
2
3

SET AUTOTRACE ON EXPLAIN


SELECT Job
FROM Emp
WHERE Deptno In(10, 20);

JOB
--------PRESIDENT
MANAGER
MANAGER
ANALYST
CLERK
ANALYST
CLERK
CLERK
8 rows selected.
Execution Plan
----------------------------------------------------------

0
1

SQL>
2
3
4
5
6
7

SELECT STATEMENT Optimizer=ALL_ROWS (Cost=3 Card=8 Bytes=152


)
0

TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=8 Bytes=


152)

SELECT Job
FROM Emp
WHERE Deptno = 10
UNION ALL
SELECT Job
FROM Emp
WHERE Deptno = 20;

JOB
--------PRESIDENT
MANAGER
CLERK
MANAGER
ANALYST
CLERK
ANALYST
CLERK
8 rows selected.
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=6 Card=8 Bytes=152
)
1
2

0
1

UNION-ALL
TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=3 Byte
s=57)

TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=5 Byte


s=95)

SQL> cl scr
SQL> SELECT Ename, Dname
2 FROM Emp, Dept
3 WHERE Emp.Deptno = Dept.Deptno;
ENAME
---------KING
BLAKE
CLARK
JONES
MARTIN
ALLEN

DNAME
-------------ACCOUNTING
SALES
ACCOUNTING
RESEARCH
SALES
SALES

TURNER
JAMES
WARD
FORD
SMITH

SALES
SALES
SALES
RESEARCH
RESEARCH

ENAME
---------SCOTT
ADAMS
MILLER

DNAME
-------------RESEARCH
RESEARCH
ACCOUNTING

14 rows selected.
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=7 Card=14 Bytes=58
8)
1
2

0
1

HASH JOIN (Cost=7 Card=14 Bytes=588)


TABLE ACCESS (FULL) OF 'DEPT' (TABLE) (Cost=3 Card=4 Byt
es=88)

TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14 Byt


es=280)

SQL> ed
Wrote file afiedt.buf
1
2
3
4*
SQL>

SELECT Ename, Dname


FROM Emp, Dept
WHERE Emp.Deptno = Dept.Deptno AND
Emp.Deptno IN(10, 30)
/

ENAME
---------KING
BLAKE
CLARK
MARTIN
ALLEN
TURNER
JAMES
WARD
MILLER

DNAME
-------------ACCOUNTING
SALES
ACCOUNTING
SALES
SALES
SALES
SALES
SALES
ACCOUNTING

9 rows selected.
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=7 Card=6 Bytes=252
)
1

HASH JOIN (Cost=7 Card=6 Bytes=252)

TABLE ACCESS (FULL) OF 'DEPT' (TABLE) (Cost=3 Card=2 Byt


es=44)

TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=9 Byte


s=180)

SQL>
2
3
4
5
6
7

SELECT Ename
FROM Emp
WHERE Deptno IN(10, 30)
UNION
SELECT DName
FROM Dept
WHERE Deptno IN(10, 30);

ENAME
-------------ACCOUNTING
ALLEN
BLAKE
CLARK
JAMES
KING
MARTIN
MILLER
SALES
TURNER
WARD
11 rows selected.
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=7 Card=11 Bytes=22
4)
1
2
3

0
1
2

SORT (UNIQUE) (Cost=7 Card=11 Bytes=224)


UNION-ALL
TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=9 By
tes=180)

4
5

2
4

INLIST ITERATOR
TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' (TABLE) (Cos
t=2 Card=2 Bytes=44)

INDEX (RANGE SCAN) OF 'DEPT_PRIMARY_KEY' (INDEX (U


NIQUE)) (Cost=2 Card=1)

SQL> ed
Wrote file afiedt.buf
1 SELECT Empno
2 FROM Emp
3 WHERE Deptno IN(10, 30)

4 UNION
5 SELECT DName
6 FROM Dept
7* WHERE Deptno IN(10, 30)
SQL> /
SELECT Empno
*
ERROR at line 1:
ORA-01790: expression must have same datatype as corresponding expression
SQL> ed
Wrote file afiedt.buf
1
2
3
4
5
6
7*
SQL>

SELECT TO_CHAR(Empno) Empno


FROM Emp
WHERE Deptno IN(10, 30)
UNION
SELECT DName
FROM Dept
WHERE Deptno IN(10, 30)
/

EMPNO
---------------------------------------7499
7521
7654
7698
7782
7839
7844
7900
7934
ACCOUNTING
SALES
11 rows selected.
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=7 Card=11 Bytes=27
8)
1
2
3

0
1
2

SORT (UNIQUE) (Cost=7 Card=11 Bytes=278)


UNION-ALL
TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=9 By
tes=234)

4
5

2
4

INLIST ITERATOR
TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' (TABLE) (Cos
t=2 Card=2 Bytes=44)

INDEX (RANGE SCAN) OF 'DEPT_PRIMARY_KEY' (INDEX (U


NIQUE)) (Cost=2 Card=1)

SQL> cl scr
SQL> SET AUTOTRACE OFF EXPLAIN
SQL> cl scr
SQL>
2
3
4
5
6
7

SELECT Deptno
FROM Emp
WHERE Deptno = 10
UNION
SELECT Deptno
FROM Emp
WHERE Deptno = 30;

DEPTNO
---------10
30
SQL> SELECT DISTINCT Deptno
2 FROm Emp
3 WHERE Deptno IN(10, 30);
DEPTNO
---------10
30
SQL> cl scr
SQL>
2
3
4
5
6
7

SELECT Ename, Sal


FROM Emp
WHERE Deptno = 10
UNION
SELECT Ename, Sal
FROM Emp
WHERE Deptno = 30;

ENAME
SAL
---------- ---------ALLEN
1600
BLAKE
2850
CLARK
2450
JAMES
950
KING
5000
MARTIN
1250
MILLER
1300
TURNER
1500
WARD
1250
9 rows selected.
SQL> SELECT Ename, Sal
2 FROM Emp
3 WHERE Deptno IN(10, 30);
ENAME
SAL
---------- ---------KING
5000
BLAKE
2850
CLARK
2450

MARTIN
ALLEN
TURNER
JAMES
WARD
MILLER

1250
1600
1500
950
1250
1300

9 rows selected.
SQL> ed
Wrote file afiedt.buf
1 SELECT Ename, Sal
2 FROM Emp
3* WHERE Deptno IN(10, 30)
SQL> ed
Wrote file afiedt.buf
1 SELECT Ename, Sal
2 FROM Emp
3 WHERE Deptno = 10
4 UNION
5 SELECT Ename
6 FROM Emp
7* WHERE Deptno = 30
SQL> /
SELECT Ename, Sal
*
ERROR at line 1:
ORA-01789: query block has incorrect number of result columns
SQL> cl scr
SQL>
2
3
4
5
6
7

SELECT Job
FROM Emp
WHERE Deptno = 10
INTERSECT
SELECT Job
FROM Emp
WHERE Deptno = 30;

JOB
--------CLERK
MANAGER
SQL> ed
Wrote file afiedt.buf
1
2
3
4
5
6
7*
SQL>
JOB

SELECT Job
FROM Emp
WHERE Deptno = 10
MINUS
SELECT Job
FROM Emp
WHERE Deptno = 30
/

--------PRESIDENT
SQL> cl scr
SQL> SELECT ROWNUM, Ename
2 FROM Emp
3 WHERE ROWNUM < 8;
ROWNUM
---------1
2
3
4
5
6
7

ENAME
---------KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER

7 rows selected.
SQL> SELECT ROWNUM, Ename
2 FROM Emp
3 WHERE ROWNUM < 5;
ROWNUM
---------1
2
3
4

ENAME
---------KING
BLAKE
CLARK
JONES

SQL> ed
Wrote file afiedt.buf
1
2
3
4
5
6
7*
SQL>

SELECT ROWNUM,
FROM Emp
WHERE ROWNUM <
MINUS
SELECT ROWNUM,
FROM Emp
WHERE ROWNUM <
/

ROWNUM
---------5
6
7

Ename
8
Ename
5

ENAME
---------MARTIN
ALLEN
TURNER

SQL> cl scr
SQL> SELECT Deptno, SUM(Sal)
2 FROm Emp
3 GROUP BY Deptno;
DEPTNO SUM(SAL)
---------- ---------10
8750
20
10875

30

9400

SQL> SELECT SUM(Sal)


2 FROM Emp;
SUM(SAL)
---------29025
SQL>
SQL>
2
3
4

SET AUTOTRACE ON EXPLAIN


SELECT Deptno, SUM(Sal), SalSum
FROM Emp, (SELECT SUM(Sal) SalSum
FROM Emp)
GROUP BY Deptno, SalSum;

DEPTNO SUM(SAL)
SALSUM
---------- ---------- ---------10
8750
29025
20
10875
29025
30
9400
29025
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=7 Card=14 Bytes=54
6)
1
2
3
4
5

0
1
2
3
4

SORT (GROUP BY) (Cost=7 Card=14 Bytes=546)


MERGE JOIN (CARTESIAN) (Cost=6 Card=14 Bytes=546)
VIEW (Cost=3 Card=1 Bytes=13)
SORT (AGGREGATE)
TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=
14 Bytes=182)

TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14 B


ytes=364)

SQL> SELECT Deptno, SUM(Sal), (SELECT SUM(Sal) FROm Emp) SalSum


2 FROM Emp
3 GROUP BY Deptno;
DEPTNO SUM(SAL)
SALSUM
---------- ---------- ---------10
8750
29025
20
10875
29025
30
9400
29025
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=4 Card=14 Bytes=36
4)
1
2

0
1

SORT (AGGREGATE)
TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14 Byt
es=182)

3
4

SQL>
2
3
4
5
6

0
3

SORT (GROUP BY) (Cost=4 Card=14 Bytes=364)


TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14 Byt
es=364)

SELECT Deptno, SUM(Sal) SalSum


FROM Emp
GROUP BY Deptno
UNION
SELECT NULL, SUM(Sal) SalSum
FROM Emp;

DEPTNO
SALSUM
---------- ---------10
8750
20
10875
30
9400
29025
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=9 Card=15 Bytes=37
7)
1
2
3
4

0
1
2
3

SORT (UNIQUE) (Cost=9 Card=15 Bytes=377)


UNION-ALL
SORT (GROUP BY) (Cost=5 Card=14 Bytes=364)
TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=364)

5
6

2
5

SORT (AGGREGATE) (Cost=4 Card=1 Bytes=13)


TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=182)

SQL> ed
Wrote file afiedt.buf
1
2
3
4
5
6
7
8*
SQL>

SELECT
'Department '||Deptno||' Investment : ' Deptno,
SUM(Sal) SalSum
FROM Emp
GROUP BY Deptno
UNION
SELECT 'Organizational Investment : ', SUM(Sal) SalSum
FROM Emp
/

DEPTNO
SALSUM
----------------------------------------------------------------- ---------Department 10 Investment :
8750
Department 20 Investment :
10875
Department 30 Investment :
9400
Organizational Investment :
29025

Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=9 Card=15 Bytes=37
7)
1
2
3
4

0
1
2
3

SORT (UNIQUE) (Cost=9 Card=15 Bytes=377)


UNION-ALL
SORT (GROUP BY) (Cost=5 Card=14 Bytes=364)
TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=364)

5
6

2
5

SORT (AGGREGATE) (Cost=4 Card=1 Bytes=13)


TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=182)

SQL> COLUMN DEPTNO FORMAT A25


SQL> /
DEPTNO
SALSUM
------------------------- ---------Department 10 Investment
8750
:
Department 20 Investment
:

10875

Department 30 Investment
:

9400

Organizational Investment
:

29025

DEPTNO
SALSUM
------------------------- ----------

Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=9 Card=15 Bytes=37
7)
1
2
3
4

0
1
2
3

SORT (UNIQUE) (Cost=9 Card=15 Bytes=377)


UNION-ALL
SORT (GROUP BY) (Cost=5 Card=14 Bytes=364)
TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=364)

5
6

2
5

SORT (AGGREGATE) (Cost=4 Card=1 Bytes=13)


TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=182)

SQL> COLUMN DEPTNO FORMAT A30

SQL> /
DEPTNO
SALSUM
------------------------------ ---------Department 10 Investment :
8750
Department 20 Investment :
10875
Department 30 Investment :
9400
Organizational Investment :
29025
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=9 Card=15 Bytes=37
7)
1
2
3
4

0
1
2
3

SORT (UNIQUE) (Cost=9 Card=15 Bytes=377)


UNION-ALL
SORT (GROUP BY) (Cost=5 Card=14 Bytes=364)
TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=364)

5
6

2
5

SORT (AGGREGATE) (Cost=4 Card=1 Bytes=13)


TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=182)

SQL> cl scr
SQL>
1
2
3
4
5
6
7
8*

R
SELECT
'Department '||Deptno||' Investment : ' Deptno,
SUM(Sal) SalSum
FROM Emp
GROUP BY Deptno
UNION
SELECT 'Organizational Investment : ', SUM(Sal) SalSum
FROM Emp

DEPTNO
SALSUM
------------------------------ ---------Department 10 Investment :
8750
Department 20 Investment :
10875
Department 30 Investment :
9400
Organizational Investment :
29025
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=9 Card=15 Bytes=37
7)
1
2
3
4

0
1
2
3

SORT (UNIQUE) (Cost=9 Card=15 Bytes=377)


UNION-ALL
SORT (GROUP BY) (Cost=5 Card=14 Bytes=364)
TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=364)
SORT (AGGREGATE) (Cost=4 Card=1 Bytes=13)

SQL>
2
3
4
5
6

TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14


Bytes=182)

SELECT Deptno, Job, SUM(Sal) SalSum


FROM Emp
GROUP BY Deptno, Job
UNION
SELECT NULL, NULL, SUM(Sal)
FROM Emp;

DEPTNO
---------##########
##########
##########
##########
##########
##########
##########
##########
##########

JOB
SALSUM
--------- ---------CLERK
1300
MANAGER
2450
PRESIDENT
5000
ANALYST
6000
CLERK
1900
MANAGER
2975
CLERK
950
MANAGER
2850
SALESMAN
5600
29025

10 rows selected.
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=9 Card=15 Bytes=46
1)
1
2
3
4

0
1
2
3

SORT (UNIQUE) (Cost=9 Card=15 Bytes=461)


UNION-ALL
SORT (GROUP BY) (Cost=5 Card=14 Bytes=448)
TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=448)

5
6

2
5

SORT (AGGREGATE) (Cost=4 Card=1 Bytes=13)


TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=182)

SQL> COLUMN DEPTNO FORMAT 999999


SQL> /
DEPTNO
------10
10
10
20
20
20
30
30

JOB
SALSUM
--------- ---------CLERK
1300
MANAGER
2450
PRESIDENT
5000
ANALYST
6000
CLERK
1900
MANAGER
2975
CLERK
950
MANAGER
2850

30 SALESMAN

5600
29025

10 rows selected.
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=9 Card=15 Bytes=46
1)
1
2
3
4

0
1
2
3

SORT (UNIQUE) (Cost=9 Card=15 Bytes=461)


UNION-ALL
SORT (GROUP BY) (Cost=5 Card=14 Bytes=448)
TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=448)

5
6

2
5

SORT (AGGREGATE) (Cost=4 Card=1 Bytes=13)


TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=182)

SQL> ed
Wrote file afiedt.buf
1
2
3
4
5
6
7*
SQL>

SELECT Deptno, Job, SUM(Sal) SalSum


FROM Emp
GROUP BY Deptno, Job
UNION
SELECT Deptno, NULL, SUM(Sal)
FROM Emp
GROUP BY Deptno
/

DEPTNO
------10
10
10
10
20
20
20
20
30
30
30

JOB
SALSUM
--------- ---------CLERK
1300
MANAGER
2450
PRESIDENT
5000
8750
ANALYST
6000
CLERK
1900
MANAGER
2975
10875
CLERK
950
MANAGER
2850
SALESMAN
5600

DEPTNO JOB
SALSUM
------- --------- ---------30
9400
12 rows selected.
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=10 Card=28 Bytes=8

12)
1
2
3
4

0
1
2
3

SORT (UNIQUE) (Cost=10 Card=28 Bytes=812)


UNION-ALL
SORT (GROUP BY) (Cost=5 Card=14 Bytes=448)
TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=448)

5
6

2
5

SORT (GROUP BY) (Cost=5 Card=14 Bytes=364)


TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=364)

SQL> ed
Wrote file afiedt.buf
1
2
3
4
5
6
7
8
9
10*
SQL>

SELECT Deptno, Job, SUM(Sal) SalSum


FROM Emp
GROUP BY Deptno, Job
UNION
SELECT Deptno, NULL, SUM(Sal)
FROM Emp
GROUP BY Deptno
UNION
SELECT NULL, NULL, SUM(Sal)
FROM Emp
/

DEPTNO
------10
10
10
10
20
20
20
20
30
30
30

JOB
SALSUM
--------- ---------CLERK
1300
MANAGER
2450
PRESIDENT
5000
8750
ANALYST
6000
CLERK
1900
MANAGER
2975
10875
CLERK
950
MANAGER
2850
SALESMAN
5600

DEPTNO JOB
SALSUM
------- --------- ---------30
9400
29025
13 rows selected.
Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=14 Card=29 Bytes=8
25)
1
2
3

0
1
2

SORT (UNIQUE) (Cost=14 Card=29 Bytes=825)


UNION-ALL
SORT (GROUP BY) (Cost=5 Card=14 Bytes=448)

TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14


Bytes=448)

5
6

2
5

SORT (GROUP BY) (Cost=5 Card=14 Bytes=364)


TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=364)

7
8

2
7

SORT (AGGREGATE) (Cost=4 Card=1 Bytes=13)


TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=182)

SQL> ed
Wrote file afiedt.buf
1
2
3
4
5
6
7
8
9
10
11
12
13
14*
SQL>

SELECT Deptno, Job, SUM(Sal) SalSum


FROM Emp
GROUP BY Deptno, Job
UNION
SELECT Deptno, NULL, SUM(Sal)
FROM Emp
GROUP BY Deptno
UNION
SELECT NULL, Job, SUM(Sal)
FROM Emp
GROUP BY Job
UNION
SELECT NULL, NULL, SUM(Sal)
FROM Emp
/

DEPTNO
------10
10
10
10
20
20
20
20
30
30
30

JOB
SALSUM
--------- ---------CLERK
1300
MANAGER
2450
PRESIDENT
5000
8750
ANALYST
6000
CLERK
1900
MANAGER
2975
10875
CLERK
950
MANAGER
2850
SALESMAN
5600

DEPTNO JOB
SALSUM
------- --------- ---------30
9400
ANALYST
6000
CLERK
4150
MANAGER
8275
PRESIDENT
5000
SALESMAN
5600
29025
18 rows selected.

Execution Plan
---------------------------------------------------------0
SELECT STATEMENT Optimizer=ALL_ROWS (Cost=19 Card=43 Bytes=1
091)
1
2
3
4

0
1
2
3

SORT (UNIQUE) (Cost=19 Card=43 Bytes=1091)


UNION-ALL
SORT (GROUP BY) (Cost=5 Card=14 Bytes=448)
TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=448)

5
6

2
5

SORT (GROUP BY) (Cost=5 Card=14 Bytes=364)


TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=364)

7
8

2
7

SORT (GROUP BY) (Cost=5 Card=14 Bytes=266)


TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=266)

9
10

2
9

SORT (AGGREGATE) (Cost=4 Card=1 Bytes=13)


TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=14
Bytes=182)

SQL> SPOOL OFF

Das könnte Ihnen auch gefallen