Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
21
Добавлен:
05.06.2015
Размер:
385 Кб
Скачать

8 Rows selected.

Q3_11a

Коррелированный подзапрос при использовании оператора UPDATE.

Создадим таблицу emp1:

create table emp1 as select * from emp;

Изменим ее:

alter table emp1 add(dname varchar2(14);

А теперь заполним значениями новую колонку:

scott@8i> update emp1 x

set dname=(select dname from dept

where deptno=x.deptno);

scott@8i> select * from emp1;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DNAME

---------- ---------- --------- ---------- --------- ---------- ---------- ---------- --------------

7369 SMITH CLERK 7902 17-DEC-80 800 20 RESEARCH

7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 SALES

7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 SALES

7566 JONES MANAGER 7839 02-APR-81 2975 20 RESEARCH

7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 SALES

7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 SALES

7782 CLARK MANAGER 7839 09-JUN-81 2450 10 ACCOUNTING

7788 SCOTT ANALYST 7566 19-APR-87 3000 20 RESEARCH

7839 KING PRESIDENT 17-NOV-81 5000 10 ACCOUNTING

7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 SALES

7876 ADAMS CLERK 7788 23-MAY-87 1100 20 RESEARCH

7900 JAMES CLERK 7698 03-DEC-81 950 30 SALES

7902 FORD ANALYST 7566 03-DEC-81 3000 20 RESEARCH

7934 MILLER CLERK 7782 23-JAN-82 1300 10 ACCOUNTING

14 Rows selected.

3.3. Использование подзапросов во фразе FROM

Q3_12

Использование подзапросов во фразе FROM. В нижеприводимом примере by_dept и total - псевдонимы подзапросов. В отличие от псевдонимов столбцов использование AS для подзапроса во фразе FROM недопустимо.

Процент служащих и зарплаты по отделам

SQL> select DEPTNO "Dept",

round(100*by_dept.dept_emp/total.total_emp,0) "% Serves",

round(100*by_dept.dept_sal/total.total_sal,0) "% Sal"

from (select count(EMPNO) dept_emp,

sum(sal) dept_sal,

DEPTNO

from EMP group by DEPTNO) by_dept,

(select count(EMPNO) total_emp,

sum(sal) total_sal

from EMP) total;

DEPTNO % Serves % Sal

--------- --------- ---------

10 21 30

20 36 37

30 43 32

3.4. Операторы над множествами

Q3_13

Пересечение множеств INTERSECT

Должности, которые имеются как в отделе 10, так и в отделе 30

SQL> select job from EMP

where DEPTNO=10

intersect

select job from EMP

where DEPTNO=30;

JOB

---------

CLERK

MANAGER

Q3_14

Объединение множеств UNION

Должности, которые есть в оделах 10 и 30

SQL> select job from EMP

where DEPTNO=10

union

select job from EMP

where DEPTNO=30;

JOB

---------

CLERK

MANAGER

PRESIDENT

SALESMAN

Q3_15

UNION ALL дубликаты не исключаются

SQL> select job from EMP

where DEPTNO=10

union all

select job from EMP

where DEPTNO=30;

JOB

---------

PRESIDENT

MANAGER

CLERK

MANAGER

SALESMAN

SALESMAN

SALESMAN

CLERK

SALESMAN