- •Раздел 1 Утилита sql*Plus, простые запросы выборки столбцов и строк
- •7839 King president 17-nov-81 5000 10
- •7900 James 950
- •7 Rows selected.
- •7 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •9 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •6 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •7369 Smith 800
- •Функции Oracle sql
- •9 Rows selected.
- •Раздел 3 Выборка данных из нескольких таблиц
- •20 Smith 800
- •30 James 950
- •10 Miller 1300
- •6 Rows selected.
- •6 Rows selected.
- •6 Rows selected.
- •8 Rows selected.
- •8 Rows selected.
- •14 Rows selected.
- •9 Rows selected.
- •9 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •6 Rows selected.
- •15 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •14 Rows selected.
- •7 Rows selected.
- •Раздел 4 Другие команды языка манипулирования данными dмl и обработка транзакций
- •7902 Ford analyst 7566 03-dec-81 3000 20
- •7788 Scott analyst 7566 09-dec-82 3000 20
- •Раздел 5 Создание и изменение таблиц средствами ddl
- •Раздел 6 Другие объекты базы данных
- •7934 Miller 10
- •16 Rows selected.
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
