Содержание

Слайд 2

Явное представление данных
Гарантированный доступ к данным
Полная обработка неопределённых значений
Доступ к описанию БД

Явное представление данных Гарантированный доступ к данным Полная обработка неопределённых значений Доступ
в терминах реляционной модели
Полнота подмножества языка
Возможность обновления представлений
Наличие высокоуровневых операций управления данными
Физическая независимость данных
Логическая независимость данных
Независимость контроля целостности
Дистрибутивная независимость
Согласование языковых уровней

Реляционная модель данных

Слайд 3

Базовые порции данных представляют собой отношения (relations) или таблицы
Операции над таблицами затрагивают

Базовые порции данных представляют собой отношения (relations) или таблицы Операции над таблицами
только отношения

Свойства реляционной БД

Слайд 4

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ------- ---------------

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- -------
------ ---------- ------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7876 ADAMS CLERK 7788 12-JAN-83 1100 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
7788 SCOTT ANALYST 7566 09-DEC-82 3000 20

Терминология реляционной БД

Слайд 5

Данные в ячейках структурно неделимы
Данные в столбце одного типа
Столбцы размещаются в произвольном

Данные в ячейках структурно неделимы Данные в столбце одного типа Столбцы размещаются
порядке
Строки размещаются в произвольном порядке
Столбцы имеют уникальные имена
Каждая строка должна быть уникальной

Требования к таблице

Слайд 6

Первичный ключ - столбец или подмножество столбцов, которые уникально, т.е. единственным образом,

Первичный ключ - столбец или подмножество столбцов, которые уникально, т.е. единственным образом,
определяют строки.
Первичный ключ, который содержит более одного столбца, называется множественным, комбинированным или составным.
Внешний ключ - столбец (или подмножество столбцов одной таблицы), который может служить в качестве первичного ключа для другой таблицы. Используется для обеспечения отношений между таблицами.

Общие понятия

Слайд 7

Первичный ключ не может быть полностью или частично пустым.

Правило целостности обьектов

Первичный ключ не может быть полностью или частично пустым. Правило целостности обьектов

Слайд 8

Внешний ключ может быть пустым или соответствовать значению первичного ключа.

Правило ссылочной целостности

Внешний ключ может быть пустым или соответствовать значению первичного ключа. Правило ссылочной целостности

Слайд 9

Типы данных и объекты, заданные пользователем.
Полная совместимость с реляционными базами данных.
Поддержка мультимедийных

Типы данных и объекты, заданные пользователем. Полная совместимость с реляционными базами данных.
и больших объектов.
Высококачественное оснащение сервера баз данных.

Oracle: Система управления объектно-реляционными базами данных

Слайд 10

Команды SQL

SELECT: выборка данных
INSERT, UPDATE, DELETE: язык манипулирования данными (DML)

Команды SQL SELECT: выборка данных INSERT, UPDATE, DELETE: язык манипулирования данными (DML)
CREATE, ALTER, DROP, RENAME, TRUNCATE: язык определения данных (DDL)
COMMIT, ROLLBACK, SAVEPOINT: управление транзакциями
GRANT, REVOKE: язык управления данными (DCL)

Слайд 11

Каждой строке таблицы в БД ORACLE назначается уникальный ROWID.

Идентификаторы записей ROWID

Каждой строке таблицы в БД ORACLE назначается уникальный ROWID. Идентификаторы записей ROWID

Слайд 12

Файлы данных
Расширения
Табличные пространства
Сегменты отката
Временные сегменты
Таблицы
Индексы
Словарь данных
Обзоры
Последовательности
Синонимы
Триггеры
Связи БД
Пакеты, процедуры и функции

Пользовательские объекты

Файлы данных Расширения Табличные пространства Сегменты отката Временные сегменты Таблицы Индексы Словарь

Слайд 13

Написание команд SQL

Команды SQL не различают регистры символов.
Команды SQL могут занимать одну

Написание команд SQL Команды SQL не различают регистры символов. Команды SQL могут
или несколько строк.
Ключевые слова нельзя сокращать и размещать на двух строках.
Предложения обычно пишутся на отдельных строках.
Для облегчения чтения используются табуляция и отступы.

Слайд 14

Выборка данных – оператор SELECT

Выбор информации из БД (selection)
Проекция (projection)
Соединение (join)

Выборка данных – оператор SELECT Выбор информации из БД (selection) Проекция (projection) Соединение (join)

Слайд 15

SELECT column1, column2,…., columnN
FROM table

Основной синтаксис SELECT

SELECT column1, column2,…., columnN FROM table Основной синтаксис SELECT

Слайд 16

Основной синтаксис SELECT

SQL> SELECT * FROM dept;
DEPTNO DNAME LOC
--------- --------------

Основной синтаксис SELECT SQL> SELECT * FROM dept; DEPTNO DNAME LOC ---------
-------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

Слайд 17

Основной синтаксис SELECT

SQL> SELECT deptno, loc FROM dept;
DEPTNO LOC
--------- -------------

Основной синтаксис SELECT SQL> SELECT deptno, loc FROM dept; DEPTNO LOC ---------
10 NEW YORK
20 DALLAS
30 CHICAGO
40 BOSTON

Слайд 18

Для типов данных NUMBER и DATE можно использовать арифметические выражения:

Арифметические выражения

Для типов данных NUMBER и DATE можно использовать арифметические выражения: Арифметические выражения

Слайд 19

SQL> SELECT ename, sal, sal+300 FROM emp;

Использование арифм. операторов

ENAME SAL SAL+300
---------- ---------

SQL> SELECT ename, sal, sal+300 FROM emp; Использование арифм. операторов ENAME SAL
---------
SMITH 800 1100
ALLEN 1600 1900
WARD 1250 1550
JONES 2975 3275
MARTIN 1250 1550

Слайд 20

* / + -
Умножение и деление имеют приоритет над сложением и вычитанием.
Операторы

* / + - Умножение и деление имеют приоритет над сложением и
с одинаковым приоритетом выполняются слева направо.
Для выполнения операторов в определенном порядке и упрощения их чтения используются скобки.

Приоритеты операторов

Слайд 21

SQL> SELECT ename, sal, 12*sal+100 FROM emp;
ENAME SAL 12*SAL+100
---------- --------- ----------
SMITH 800

SQL> SELECT ename, sal, 12*sal+100 FROM emp; ENAME SAL 12*SAL+100 ---------- ---------
9700
ALLEN 1600 19300
WARD 1250 15100
JONES 2975 35800
MARTIN 1250 15100
BLAKE 2850 34300

Приоритеты операторов

Слайд 22

SQL> SELECT ename, sal, 12*(sal+100) FROM emp;
ENAME SAL 12*(SAL+100)
---------- --------- ------------
SMITH 800

SQL> SELECT ename, sal, 12*(sal+100) FROM emp; ENAME SAL 12*(SAL+100) ---------- ---------
10800
ALLEN 1600 20400
WARD 1250 16200
JONES 2975 36900
MARTIN 1250 16200
BLAKE 2850 35400

Приоритеты операторов

Слайд 23

Неопределенное значение (NULL) – значение, которое недоступно, не присвоено, неизвестно или неприменимо.
Это

Неопределенное значение (NULL) – значение, которое недоступно, не присвоено, неизвестно или неприменимо.
не ноль и не пробел.
SQL> SELECT ename, job, comm FROM emp;
ENAME JOB COMM
----------- -------- ---------
SMITH CLERK
ALLEN SALESMAN 300
WARD SALESMAN 500
JONES MANAGER
MARTIN SALESMAN 1400

Неопределенное значение NULL

Слайд 24

SQL> SELECT ename 12*sal+comm FROM emp;
ENAME 12*SAL+COMM
---------- -----------
SMITH
ALLEN 19500
WARD 15500
JONES
MARTIN 16400
BLAKE

NULL

SQL> SELECT ename 12*sal+comm FROM emp; ENAME 12*SAL+COMM ---------- ----------- SMITH ALLEN
в арифметических выражениях

Результат вычисления выражения, содержащего неопределенное значение, также будет неопределенным

Слайд 25

Альтернативный заголовок столбца.
Удобен при вычислениях.
Следует сразу за именем столбца; ключевое слово AS

Альтернативный заголовок столбца. Удобен при вычислениях. Следует сразу за именем столбца; ключевое
между именем столбца и псевдонимом необязательно.
Заключается в двойные кавычки, если содержит пробелы, спец. символы или различает регистры символов.

Псевдоним (алиас) столбца

Слайд 26

SQL> SELECT ename AS name, sal salary FROM emp;
NAME SALARY
---------- ---------
SQL> SELECT

SQL> SELECT ename AS name, sal salary FROM emp; NAME SALARY ----------
ename ‘Name’, sal*12 ‘Annual Salary’ FROM emp;
Name Annual Salary
---------- -------------

Псевдоним (алиас) столбца

Слайд 27

Соединяет столбцы или символьные строки с другими столбцами.
Изображается двумя вертикальными линиями (

Соединяет столбцы или символьные строки с другими столбцами. Изображается двумя вертикальными линиями
|| ).
Создает столбец с результатом, представляющий символьное выражение.

Оператор конкатенации

Слайд 28

SQL> SELECT ename || job AS ‘Employees’ FROM emp;
Employees
-------------------
SMITHCLERK
ALLENSALESMAN
WARDSALESMAN
JONESMANAGER
MARTINSALESMAN
BLAKEMANAGER

Использование оператора конкатенации

SQL> SELECT ename || job AS ‘Employees’ FROM emp; Employees ------------------- SMITHCLERK

Слайд 29

Литерал – символ, выражение или число, включенные в SELECT список.
Даты и символьные

Литерал – символ, выражение или число, включенные в SELECT список. Даты и
литералы должны быть заключены в апострофы.
Каждая символьная строка выводится один раз для каждой возвращаемой строки таблицы.

Литералы

Слайд 30

SQL> SELECT ename ||' '||'is a'||' '|| job AS "Employee details“ FROM

SQL> SELECT ename ||' '||'is a'||' '|| job AS "Employee details“ FROM
emp;
Employee details
-------------------------
SMITH is a CLERK
ALLEN is a SALESMAN
WARD is a SALESMAN
JONES is a MANAGER
MARTIN is a SALESMAN
BLAKE is a MANAGER

Использование литералов

Слайд 31

SQL> SELECT deptno FROM emp;
DEPTNO
---------
10
30
10
20

Дублирование строк

По умолчанию

SQL> SELECT deptno FROM emp; DEPTNO --------- 10 30 10 20 …
выдаются все строки, включая дубликаты.

Слайд 32

SQL> SELECT DISTINCT deptno FROM emp;
DEPTNO
---------
10
20
30

Дублирование строк

Дубликаты устраняются

SQL> SELECT DISTINCT deptno FROM emp; DEPTNO --------- 10 20 30 Дублирование
при помощи ключевого слова DISTINCT в команде SELECT.

Слайд 33

Соединение с БД из командной строки:
sqlplus [username [/password [@database]]]

Соединение с базой

Соединение с БД из командной строки: sqlplus [username [/password [@database]]] Соединение с базой данных
данных

Слайд 34

SQL> DESCRIBE tablename
SQL> DESCRIBE dept
Name Null? Type
------------------- -------- ------------
DEPTNO

SQL> DESCRIBE tablename SQL> DESCRIBE dept Name Null? Type ------------------- -------- ------------
NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)

Отображение структуры таблицы в SQL*Plus

Слайд 35

A[PPEND] text
C[HANGE] / old / new /
C[HANGE] /

A[PPEND] text C[HANGE] / old / new / C[HANGE] / text /
text /
CL[EAR] BUFF[ER]
DEL
DEL n
DEL m n

Редактирование SQL команд и PL/SQL блоков

Слайд 36

Редактирование SQL команд и PL/SQL блоков

I[NPUT]
I[NPUT] text
L[IST]
L[IST]

Редактирование SQL команд и PL/SQL блоков I[NPUT] I[NPUT] text L[IST] L[IST] n
n
L[IST] m n
R[UN]
n
n text
0 text

Слайд 37

SAV[E] filename [CREATE | REPLACE | APPEND]
GET filename
STA[RT] filename

SAV[E] filename [CREATE | REPLACE | APPEND] GET filename STA[RT] filename @filename
@filename
ED[IT] filename
SPO[OL] [filename | OFF|OUT]
EXIT

Команды SQL*Plus для работы с файлами

Слайд 38

SELECT column1, column2,…., columnN
FROM table
WHERE condition (s)

Ограничение колич. выбираемых строк

Количество возвращаемых строк

SELECT column1, column2,…., columnN FROM table WHERE condition (s) Ограничение колич. выбираемых
можно ограничить с помощью предложения WHERE.

Предложение WHERE следует за предложением FROM.

Слайд 39

SQL> SELECT ename, job, deptno
FROM emp
WHERE job = ‘CLERK’;
ENAME JOB DEPTNO
----------

SQL> SELECT ename, job, deptno FROM emp WHERE job = ‘CLERK’; ENAME
--------- ---------
SMITH CLERK 20
JAMES CLERK 30
MILLER CLERK 10
ADAMS CLERK 20

Использование предложения WHERE

Слайд 40

Операторы сравнения

Операторы сравнения

Слайд 41

SQL> SELECT ename, sal, comm
FROM emp
WHERE sal <=comm;
ENAME SAL COMM
----------

SQL> SELECT ename, sal, comm FROM emp WHERE sal ENAME SAL COMM
---------- ----------
MARTIN 1250 1400

Использование операторов сравнения

Слайд 42

Другие операторы сравнения

Другие операторы сравнения

Слайд 43

SQL> SELECT ename, sal FROM emp
WHERE sal BETWEEN 1000 AND

SQL> SELECT ename, sal FROM emp WHERE sal BETWEEN 1000 AND 1500;
1500;
ENAME SAL
---------- ----------
WARD 1250
MARTIN 1250
TURNER 1500
MILLER 1300
ADAMS 1100

Использование оператора BETWEEN

Слайд 44

SQL> SELECT empno, ename, sal, mgr FROM emp
WHERE mgr IN

SQL> SELECT empno, ename, sal, mgr FROM emp WHERE mgr IN (7902,
(7902, 7566, 7788);
EMPNO ENAME SAL MGR
------ ---------- ---------- ----------
7369 SMITH 800 7902
7902 FORD 3000 7566
7876 ADAMS 1100 7788
7788 SCOTT 3000 7566

Использование оператора IN

Слайд 45

Оператор LIKE используется для поиска символьных значений по шаблону с метасимволами
Условия поиска

Оператор LIKE используется для поиска символьных значений по шаблону с метасимволами Условия
могут включать алфавитные и цифровые символы
SELECT ename
FROM emp
WHERE ename LIKE ‘S%’;

Использование оператора LIKE

Слайд 46

Метасимволы можно комбинировать
SQL> SELECT ename
FROM emp
WHERE ename LIKE ‘_A%’;

Метасимволы можно комбинировать SQL> SELECT ename FROM emp WHERE ename LIKE ‘_A%’;

ENAME
----------
WARD
MARTIN
JAMES

Использование оператора LIKE

Слайд 47

С помощью оператора IS NULL производится проверка на неопределенные значения
SQL> SELECT

С помощью оператора IS NULL производится проверка на неопределенные значения SQL> SELECT
ename, mgr
FROM emp
WHERE mgr IS NULL;
ENAME MGR
---------- ----------
KING

Использование оператора IS NULL

Слайд 48

Логические операторы

Логические операторы

Слайд 49

Оператор AND (‘И’) требует выполнения обоих условий.
SQL> SELECT empno, ename, job,

Оператор AND (‘И’) требует выполнения обоих условий. SQL> SELECT empno, ename, job,
sal
FROM emp
WHERE sal>=1100 AND job='CLERK';
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7876 ADAMS CLERK 1100
7934 MILLER CLERK 1300

Использование оператора AND

Слайд 50

Оператор OR (‘ИЛИ’) требует выполнения любого из условий.
SQL> SELECT empno, ename,

Оператор OR (‘ИЛИ’) требует выполнения любого из условий. SQL> SELECT empno, ename,
job, sal
FROM emp
WHERE sal>=1100 OR job='CLERK';
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7369 SMITH CLERK 800
7499 ALLEN SALESMAN 1600
7521 WARD SALESMAN 1250

Использование оператора OR

Слайд 51

Оператор NOT - логическое отрицание условия.
SQL> SELECT ename, job
FROM

Оператор NOT - логическое отрицание условия. SQL> SELECT ename, job FROM emp
emp
WHERE job NOT IN ('CLERK‘,‘MANAGER‘,‘ANALYST‘);
ENAME JOB
---------- ---------
MARTIN SALESMAN
KING PRESIDENT
TURNER SALESMAN

Использование оператора NOT

Слайд 52

Приоритеты операторов

Изменить стандартную последовательность вычислений можно при помощи круглых скобок.

Приоритеты операторов Изменить стандартную последовательность вычислений можно при помощи круглых скобок.

Слайд 53

SQL> SELECT ename, job, sal
FROM emp
WHERE job=‘SALESMAN‘
OR job

SQL> SELECT ename, job, sal FROM emp WHERE job=‘SALESMAN‘ OR job =
= ‘PRESIDENT’
AND sal>1500;
SQL> SELECT ename, job, sal
FROM emp
WHERE (job=‘SALESMAN‘
OR job = ‘PRESIDENT’)
AND sal>1500;

Приоритеты операторов

Слайд 54

Предложение ORDER BY используется для сортировки строк:
ASC: сортировка по возрастанию (по

Предложение ORDER BY используется для сортировки строк: ASC: сортировка по возрастанию (по
умолчанию)
DESC: сортировка по убыванию
В команде SELECT предложение ORDER BY указывается последним.
Возможна сортировка по псевдониму столбца
Возможна сортировка по нескольким столбцам, в т. ч. можно сортировать по столбцу, не входящему в SELECT список.

Сортировка данных

Слайд 55

SQL> SELECT ename, job, deptno, hiredate
FROM emp ORDER BY hiredate;
ENAME

SQL> SELECT ename, job, deptno, hiredate FROM emp ORDER BY hiredate; ENAME
JOB DEPTNO HIREDATE
---------- --------- ---------- ---------
SMITH CLERK 20 17-DEC-80
ALLEN SALESMAN 30 20-FEB-81
WARD SALESMAN 30 22-FEB-81
JONES MANAGER 20 02-APR-81

Сортировка данных

Слайд 56

SQL> SELECT ename, deptno, sal
FROM emp ORDER BY deptno ASC,

SQL> SELECT ename, deptno, sal FROM emp ORDER BY deptno ASC, sal
sal DESC;
ENAME DEPTNO SAL
---------- ---------- ----------
KING 10 5000
CLARK 10 2450
MILLER 10 1300
FORD 20 3000

Сортировка данных

Слайд 57

Однострочные функции
- символьные
- числовые
- над датами
- преобразования
Многострочные функции
- групповые

FUNCTION

SINGLE
ROW

MULTI
ROW

2 типа SQL функций

Однострочные функции - символьные - числовые - над датами - преобразования Многострочные

Слайд 58

Обрабатывают каждую полученную по запросу строку.
Выдают результат отдельно для каждой строки.
Могут иметь

Обрабатывают каждую полученную по запросу строку. Выдают результат отдельно для каждой строки.
вложенность.
Могут задаваться везде, где допускаются переменные, имена столбцов или выражения.
Могут изменять тип данных.

Однострочные функции

Слайд 59

FUNCTION_NAME (column | expression, [arg1, arg2, ...])

Однострочные функции

FUNCTION_NAME (column | expression, [arg1, arg2, ...]) Однострочные функции

Слайд 60

Символьные функции

Символьные
функции

Функции преобразования
регистра символов

Функции манипулиров-я
символами

LOWER
UPPER
INITCAP

CONCAT
SUBSTR
LENGTH
INSTR
LPAD
TRIM

Символьные функции Символьные функции Функции преобразования регистра символов Функции манипулиров-я символами LOWER

Слайд 61

LOWER : Переводит все символы строки на
нижний регистр
UPPER

LOWER : Переводит все символы строки на нижний регистр UPPER : Переводит
: Переводит все символы строки на
верхний регистр
INITCAP : Делает первую букву всех слов строки прописной, остальные буквы - строчными

Функции преобразования регистра

Слайд 62

Функции преобразования регистра

Преобразование регистра для символьных строк.

Функции преобразования регистра Преобразование регистра для символьных строк.

Слайд 63

Использование функций преобразования

Вывод номера служащего, фамилии и номера отдела для служащего по

Использование функций преобразования Вывод номера служащего, фамилии и номера отдела для служащего
фамилии Blake
SQL> SELECT empno, ename, deptno FROM emp WHERE
ename = 'blake‘;
no rows selected
SQL> SELECT empno, ename, deptno FROM emp WHERE
LOWER(ename) = 'blake‘;
EMPNO ENAME DEPTNO
---------- ---------- ----------
7698 BLAKE 30

Слайд 64

Функции манипулирования символами

Манипулирование символьными строками.

Функции манипулирования символами Манипулирование символьными строками.

Слайд 65

Использование символьных функций

SQL> SELECT ename, CONCAT(ename, job),
LENGTH(ename),INSTR(ename, 'A')
FROM emp
WHERE

Использование символьных функций SQL> SELECT ename, CONCAT(ename, job), LENGTH(ename),INSTR(ename, 'A') FROM emp
SUBSTR(job,1,5) = 'SALES';
ENAME CONCAT(ENAME,JOB) LENGTH(ENAME) INSTR(ENAME,'A')
------- ------------------- ------------- ----------------
ALLEN ALLENSALESMAN 5 1
WARD WARDSALESMAN 4 2
MARTIN MARTINSALESMAN 6 2
TURNER TURNERSALESMAN 6 0

Слайд 66

ROUND : Округляет числовое значение до заданной точности.
ROUND(45.926, 2) 45.93
TRUNC : Усекает

ROUND : Округляет числовое значение до заданной точности. ROUND(45.926, 2) 45.93 TRUNC
значение до заданного количества десятичных знаков.
TRUNC(45.926, 2) 45.92
MOD : Возвращает остаток от деления первого на второе.
MOD(1600,300) 100

Числовые функции

Слайд 67

Использование функции ROUND

SQL> SELECT ROUND(45.923,2),ROUND(45.923,0), ROUND(45.923,-1)
FROM DUAL;
ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1)
--------------- --------------- ----------------
45.92

Использование функции ROUND SQL> SELECT ROUND(45.923,2),ROUND(45.923,0), ROUND(45.923,-1) FROM DUAL; ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1)
46 50

Слайд 68

Использование функции TRUNC

SQL> SELECT TRUNC(45.923,2),TRUNC(45.923), TRUNC(45.923,-1)
FROM DUAL;
TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-1)
--------------- ------------- ----------------
45.92

Использование функции TRUNC SQL> SELECT TRUNC(45.923,2),TRUNC(45.923), TRUNC(45.923,-1) FROM DUAL; TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-1)
45 40

Слайд 69

Использование функции MOD

SQL> SELECT ename, sal, comm, MOD(sal, comm)
FROM EMP
WHERE job='SALESMAN';
ENAME SAL

Использование функции MOD SQL> SELECT ename, sal, comm, MOD(sal, comm) FROM EMP
COMM MOD(SAL,COMM)
------ ---------- ---------- -------------
ALLEN 1600 300 100
WARD 1250 500 250
MARTIN 1250 1400 1250
TURNER 1500 0 1500

Слайд 70

Oracle хранит данные во внутреннем цифровом формате.
век, год, месяц, число, часы,

Oracle хранит данные во внутреннем цифровом формате. век, год, месяц, число, часы,
минуты, секунды
По умолчанию дата выдаётся в формате DD-MON-YY.
Функция SYSDATE возвращает текущие дату и время.
DUAL – фиктивная таблица, используемая для просмотра SYSDATE.

Работа с датами

Слайд 71

Просмотр текущей даты

SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
---------
01-MAY-02

Просмотр текущей даты SQL> SELECT SYSDATE FROM DUAL; SYSDATE --------- 01-MAY-02

Слайд 72

Результатом прибавления числа к дате и вычитания числа из даты является дата.
Результатом

Результатом прибавления числа к дате и вычитания числа из даты является дата.
вычитания одной даты из другой является количество дней, разделяющих эти даты.
Прибавление часов к дате производится путем деления количества часов на 24.

Арифметические операции с датами

Слайд 73

Использование операций с датами

SQL> SELECT ename, (SYSDATE-hiredate)/7 WEEKS
FROM EMP
WHERE deptno=10;
ENAME WEEKS
---------- ----------
CLARK

Использование операций с датами SQL> SELECT ename, (SYSDATE-hiredate)/7 WEEKS FROM EMP WHERE
1090.26313
KING 1067.26313
MILLER 1057.6917

Слайд 74

Функции для работы с датами

Функции для работы с датами

Слайд 75

MONTHS_BETWEEN(’01-SEP-95’,’11-JAN-94’) 19.6774194
ADD_MONTHS (’11-JAN-94’,6) ’11-JUL-94’
NEXT_DAY (’01-SEP-95’,’FRIDAY’) ’08-SEP-95’
LAST_DAY (’01-SEP-95’) ’30-SEP-95’
ROUND (’25-JUL-95’,’MONTH’) ’01-AUG-95’
ROUND (’25-JUL-95’,’YEAR’) ’01-JAN-96’
TRUNC (’25-JUL-95’,’MONTH’) ’01-JUL-95’
TRUNC (’25-JUL-95’,’YEAR’) ’01-JAN-95’

Функции для работы с

MONTHS_BETWEEN(’01-SEP-95’,’11-JAN-94’) 19.6774194 ADD_MONTHS (’11-JAN-94’,6) ’11-JUL-94’ NEXT_DAY (’01-SEP-95’,’FRIDAY’) ’08-SEP-95’ LAST_DAY (’01-SEP-95’) ’30-SEP-95’ ROUND
датами

Слайд 76

SELECT empno, hiredate,
ROUND(hiredate,'MONTH'),TRUNC(hiredate, 'MONTH')
FROM emp
WHERE hiredate like'%82‘;
EMPNO HIREDATE ROUND(HIR TRUNC(HIR
--------

SELECT empno, hiredate, ROUND(hiredate,'MONTH'),TRUNC(hiredate, 'MONTH') FROM emp WHERE hiredate like'%82‘; EMPNO HIREDATE
--------- --------- ---------
7934 23-JAN-82 01-FEB-82 01-JAN-82
7788 09-NOV-82 01-NOV-82 01-NOV-82

Функции для работы с датами

Слайд 77

Функции преобразования

Преобразование
типа данных

Неявное преобразование
типа данных

Явное преобразование
типа данных

Функции преобразования Преобразование типа данных Неявное преобразование типа данных Явное преобразование типа данных

Слайд 78

Явное преобразование типов данных

Явное преобразование типов данных

Слайд 79

TO_CHAR (DATE, ‘fmt’)
Модель формата:
Заключается в апострофы. Различает символы верхнего и нижнего регистров.
Может

TO_CHAR (DATE, ‘fmt’) Модель формата: Заключается в апострофы. Различает символы верхнего и
включать любые разрешенные элементы формата даты.
Отделяется от значение даты запятой.

Функция TO_CHAR с датами

Слайд 80

Элементы формата даты

Элементы формата даты

Слайд 81

SQL> SELECT empno, TO_CHAR(hiredate, 'MM/YY') Month_Hired FROM emp WHERE ename =

SQL> SELECT empno, TO_CHAR(hiredate, 'MM/YY') Month_Hired FROM emp WHERE ename = 'BLAKE';
'BLAKE';
EMPNO MONTH
---------- -----
7698 05/81
SQL> SELECT TO_CHAR(SYSDATE,'DD-MONTH-YEAR') FROM DUAL;
TO_CHAR(SYSDATE,'DD-MONTH-YEAR')
-------------------------------------------------------
01-MAY-TWO THOUSAND TWO

Функция TO_CHAR с датами

Слайд 82

TO_CHAR (number, ‘fmt’)
Форматы, используемые с функцией TO_CHAR для вывода числового значения в

TO_CHAR (number, ‘fmt’) Форматы, используемые с функцией TO_CHAR для вывода числового значения
виде символьной строки.

Функция TO_CHAR с числами

Слайд 83

SQL> SELECT TO_CHAR(sal,'$99,999') SALARY
FROM emp WHERE ename = 'SCOTT‘;
SALARY
--------
$3,000

Функция TO_CHAR с

SQL> SELECT TO_CHAR(sal,'$99,999') SALARY FROM emp WHERE ename = 'SCOTT‘; SALARY --------
числами

Слайд 84

Преобразование строки символов в числовой формат с помощью функции TO_NUMBER.
TO_NUMBER (char)
Преобразование строки

Преобразование строки символов в числовой формат с помощью функции TO_NUMBER. TO_NUMBER (char)
символов в формат даты с помощью функции TO_DATE.
TO_DATE (char [, ‘fmt’])

Функции TO_NUMBER и TO_DATE

Слайд 85

Упрощает условные запросы, выполняя работу команды
CASE или IF-THEN-ELSE:
DECODE (col/expression, search1, result1

Упрощает условные запросы, выполняя работу команды CASE или IF-THEN-ELSE: DECODE (col/expression, search1,
[, search2, result2,…,]
[, default])

Функция DECODE

Слайд 86

SQL> SELECT job, sal,
DECODE (job, 'ANALYST', SAL*1.1, 'CLERK', SAL*1.15, 'MANAGER', SAL*1.20,

SQL> SELECT job, sal, DECODE (job, 'ANALYST', SAL*1.1, 'CLERK', SAL*1.15, 'MANAGER', SAL*1.20,
SAL)
REVISED_SALARY FROM EMP;
JOB SAL REVISED_SALARY
--------- ---------- --------------
CLERK 800 920
SALESMAN 1600 1600
SALESMAN 1250 1250

Функция DECODE

Слайд 87

Однострочные функции могут быть вложены на любую глубину
Вложенные функции вычисляются от самого

Однострочные функции могут быть вложены на любую глубину Вложенные функции вычисляются от
глубокого уровня к внешнему

Вложенные функции

F3(F2(F1(col,arg1),arg2),arg3)

Шаг 1 = Результат 1

Шаг 2 = Результат 2

Шаг 3 = Результат 3

Слайд 88

Вложенные функции

SQL> SELECT ename,
NVL(TO_CHAR(mgr), 'No Manager')
FROM emp
WHERE mgr IS NULL;
ENAME NVL(TO_CHAR(MGR),'NOMANAGER')
----- ----------------------------------
KING

Вложенные функции SQL> SELECT ename, NVL(TO_CHAR(mgr), 'No Manager') FROM emp WHERE mgr
No Manager

Слайд 89

Выборка данных из нескольких таблиц

EMPNO ENAME … DEPTNO
----- ------ ------
7839 KING

Выборка данных из нескольких таблиц EMPNO ENAME … DEPTNO ----- ------ ------
… 10
7698 BLAKE … 30

7934 MILLER … 10

DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

EMPNO DEPTNO LOC
----- ------ --------
7839 10 NEW YORK
7698 30 CHICAGO
7782 10 NEW YORK
7566 20 DALLAS
7654 30 CHICAGO
7499 30 CHICAGO

EMP

DEPT

Слайд 90

Соединение используется для выборки данных из
нескольких таблиц.
SELECT table1.column, table2.column
FROM table1, table2
WHERE

Соединение используется для выборки данных из нескольких таблиц. SELECT table1.column, table2.column FROM
table1.column1 = table2.column2;
Условие соединения указывается во фразе WHERE.
Если одно и то же имя столбца присутствует более, чем в одной таблице, к имени столбца добавляется имя таблицы в виде префикса.

Понятие соединения

Слайд 91

Декартово произведение образуется, если:
- Опущено условие соединения.
- Условие соединения недействительно.
- Все строки

Декартово произведение образуется, если: - Опущено условие соединения. - Условие соединения недействительно.
первой таблицы соединяются со всеми
строками второй таблицы
Во избежании получения декартова произведения предложение WHERE всегда должно включать правильное условие соединения.

Декартово произведение

Слайд 92

Получение декартова произведения

EMPNO ENAME … DEPTNO
----- ------ ------
7839 KING … 10

Получение декартова произведения EMPNO ENAME … DEPTNO ----- ------ ------ 7839 KING
7698 BLAKE … 30

7934 MILLER … 10

DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

ENAME DNAME
----- -----
KING ACCOUNTING
BLAKE ACCOUNTING

KING RESEARCH
BLAKE RESEARCH

EMP (14 записей)

DEPT (4 записи)

SQL> SELECT ename,dname FROM emp, dept;

Декартово произведение: 14*4=56 строк

Слайд 93

Основные типы соединений
Эквисоединения
Неэквисоединения
Дополнительные типы соединений
Внешние соединения
Соединения таблицы с собой

Виды соединений

Основные типы соединений Эквисоединения Неэквисоединения Дополнительные типы соединений Внешние соединения Соединения таблицы с собой Виды соединений

Слайд 94

Эквисоединение

EMPNO ENAME DEPTNO
----- ------- ----------
7369 SMITH 20
7499 ALLEN 30
7521

Эквисоединение EMPNO ENAME DEPTNO ----- ------- ---------- 7369 SMITH 20 7499 ALLEN
WARD 30
7566 JONES 20
7654 MARTIN 30
7698 BLAKE 30
7782 CLARK 10
7839 KING 10
7844 TURNER 30
7900 JAMES 30
7902 FORD 20
...

DEPTNO DNAME LOC
------ ------- ----------
20 RESEARCH DALLAS
30 SALES CHICAGO
30 SALES CHICAGO
20 RESEARCH DALLAS
30 SALES CHICAGO
30 SALES CHICAGO
10 ACCOUNTING NEW YORK
10 ACCOUNTING NEW YORK
30 SALES CHICAGO
30 SALES CHICAGO
20 RESEARCH DALLAS
...

EMP

DEPT

Внешний ключ

Главный ключ

Слайд 95

Выборка при помощи эквисоединений

SQL> SELECT emp.empno, emp.ename, emp.deptno, dept.deptno,dept.loc
FROM emp, dept
WHERE emp.deptno

Выборка при помощи эквисоединений SQL> SELECT emp.empno, emp.ename, emp.deptno, dept.deptno,dept.loc FROM emp,
= dept.deptno;

EMPNO ENAME DEPTNO DEPTNO LOC
---------- ---------- ---------- ---------- ------------
7369 SMITH 20 20 DALLAS
7499 ALLEN 30 30 CHICAGO
7521 WARD 30 30 CHICAGO
7566 JONES 20 20 DALLAS
...

Слайд 96

Различение столбцов с одинаковыми именами

Для различения одноименных столбцов из разных таблиц используются

Различение столбцов с одинаковыми именами Для различения одноименных столбцов из разных таблиц
префиксы в виде имен таблиц.
Использование префиксов в виде имен таблиц увеличивает производительность.
Одноименные столбцы из разных таблиц можно различать по их псевдонимам.

Слайд 97

Дополнит. условия при эквисоединении

SQL> SELECT emp.empno, emp.ename, emp.deptno, dept.deptno,dept.loc
FROM emp, dept
WHERE emp.deptno

Дополнит. условия при эквисоединении SQL> SELECT emp.empno, emp.ename, emp.deptno, dept.deptno,dept.loc FROM emp,
= dept.deptno
AND INITCAP(ename) = ‘King’;

EMPNO ENAME DEPTNO DEPTNO LOC
---------- ---------- ---------- ---------- -------------
7839 KING 10 10 NEW YORK

Слайд 98

Псевдонимы таблиц

Использование псевдонимов таблиц упрощает запросы.
SQL> SELECT emp.empno, emp.ename, emp.deptno, dept.deptno,dept.loc
FROM emp,

Псевдонимы таблиц Использование псевдонимов таблиц упрощает запросы. SQL> SELECT emp.empno, emp.ename, emp.deptno,
dept
WHERE emp.deptno = dept.deptno;
SQL> SELECT e.empno, e.ename, e.deptno, d.deptno,d.loc
FROM emp e, dept d
WHERE e.deptno = d.deptno;

Слайд 99

Не-эквисоединение

EMPNO ENAME SAL
----- ------- ----------
7499 ALLEN 1600
7566 JONES 2975
7654

Не-эквисоединение EMPNO ENAME SAL ----- ------- ---------- 7499 ALLEN 1600 7566 JONES
MARTIN 1250
7698 BLAKE 2850
7782 CLARK 2450
7839 KING 5000
7844 TURNER 1500
7900 JAMES 950
...

GRADE LOSAL HISAL
----- ---------- ----------
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999

EMP

SALGRADE

Оклад в таблице EMP находится между нижней и верхней границами окладов в таблице SALGRADE

Слайд 100

SQL> SELECT e.ename, e.sal, s.grade FROM emp e, salgrade s
WHERE e.sal BETWEEN

SQL> SELECT e.ename, e.sal, s.grade FROM emp e, salgrade s WHERE e.sal
s.losal AND s.hisal;
ENAME SAL GRADE
---------- ---------- ----------
SMITH 800 1
JAMES 950 1
ADAMS 1100 1
WARD 1250 2
...

Выборка при помощи не-эквисоединений

Слайд 101

Внешние соединения

EMPNO ENAME … DEPTNO
----- ------ ------
7839 KING … 10
7698

Внешние соединения EMPNO ENAME … DEPTNO ----- ------ ------ 7839 KING …
BLAKE … 30
7934 MILLER … 20
...

DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

EMP

DEPT

В отделе OPERATIONS служащих нет

EMP.deptno = DEPT.deptno

Слайд 102

Внешнее соединение используется для выборки строк, не удовлетворяющих обычным условиям соединения.
Оператором внешнего

Внешнее соединение используется для выборки строк, не удовлетворяющих обычным условиям соединения. Оператором
соединения является знак плюс (+).
SELECT table.column, table.column
FROM table1, table2
WHERE table1.column(+) = table2.column;
SELECT table.column, table.column
FROM table1, table2
WHERE table1.column = table2.column(+);

Внешние соединения

Слайд 103

SQL> SELECT e.ename, d.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno(+)=d.deptno
ORDER BY e.deptno;
ENAME

SQL> SELECT e.ename, d.deptno, d.dname FROM emp e, dept d WHERE e.deptno(+)=d.deptno
DEPTNO DNAME
---------- ---------- --------------
BLAKE 30 SALES
MARTIN 30 SALES
WARD 30 SALES
40 OPERATIONS

Использование внешних соединений

Слайд 104

Соединение таблицы с собой

EMPNO ENAME MGR
----- ------- ----------
7499 ALLEN 7698
7654

Соединение таблицы с собой EMPNO ENAME MGR ----- ------- ---------- 7499 ALLEN
MARTIN 7698
7566 JONES 7839
7698 BLAKE 7839
7782 CLARK 7839
7839 KING

EMP (WORKER)

EMPNO ENAME
----- -------
7698 BLAKE
7698 BLAKE
7839 KING
7839 KING
7839 KING

EMP (MANAGER)

MGR в таблице WORKER равен EMPNO в таблице MANAGER

Слайд 105

SQL> SELECT worker.ename ||' works for '|| manager.ename
FROM emp worker, emp

SQL> SELECT worker.ename ||' works for '|| manager.ename FROM emp worker, emp
manager
WHERE worker.mgr = manager.empno;
WORKER.ENAME||'WORKSFOR'||MANAG
-------------------------------
SMITH works for FORD
ALLEN works for BLAKE
WARD works for BLAKE
JONES works for KING

Соединение таблицы с собой

Слайд 106

Групповые функции

DEPTNO SAL
---------- ----------
20 800
30 1600
30 1250
20

Групповые функции DEPTNO SAL ---------- ---------- 20 800 30 1600 30 1250
2975
30 1250
30 2850
10 2450
10 5000
30 1500
30 950
20 3000
20 1100
...

MAX(SAL)
--------
5000

EMP

Максимальный оклад в таблице EMP

Слайд 107

AVG
COUNT
MAX
MIN
STDDEV
SUM
VARIANCE

Типы групповых функций

AVG COUNT MAX MIN STDDEV SUM VARIANCE Типы групповых функций

Слайд 108

AVG и SUM применяются к столбцам с числовыми
данными.
SQL> SELECT AVG(sal), MAX(sal), MIN(sal),

AVG и SUM применяются к столбцам с числовыми данными. SQL> SELECT AVG(sal),
SUM(sal)
FROM emp
WHERE job LIKE 'SALES%';
AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)
---------- ---------- ---------- ----------
1400 1600 1250 5600

Использование функций AVG и SUM

Слайд 109

MIN и MAX применяются к данным любого типа.
SQL> SELECT MIN(hiredate), MAX(hiredate) FROM

MIN и MAX применяются к данным любого типа. SQL> SELECT MIN(hiredate), MAX(hiredate)
emp;
MIN(HIRED MAX(HIRED
--------- ---------
17-DEC-80 12-JAN-83

Использование функций MIN и MAX

Слайд 110

COUNT(*) возвращает количество строк в таблице.
SQL> SELECT COUNT(*) FROM emp WHERE deptno

COUNT(*) возвращает количество строк в таблице. SQL> SELECT COUNT(*) FROM emp WHERE
= 30;
COUNT(*)
----------
6

Использование функции COUNT

Слайд 111

COUNT(expr) возвращает количество строк с
определёнными значениями (не NULL).
SQL> SELECT COUNT(COMM) FROM emp

COUNT(expr) возвращает количество строк с определёнными значениями (не NULL). SQL> SELECT COUNT(COMM)
WHERE deptno = 30;
COUNT(COMM)
-----------
4

Использование функции COUNT

Слайд 112

Групповые функции игнорируют неопределенные
значения в столбцах.
SQL> SELECT AVG(comm) FROM emp;
AVG(COMM)
----------

Групповые функции игнорируют неопределенные значения в столбцах. SQL> SELECT AVG(comm) FROM emp;
550

Групповые функции

Слайд 113

Функция NVL заставляет групповые функции включать
неопределенные значения.
SQL> SELECT AVG(NVL(comm,0)) FROM emp;

Функция NVL заставляет групповые функции включать неопределенные значения. SQL> SELECT AVG(NVL(comm,0)) FROM
AVG(NVL(COMM,0))
----------------
157.142857

Использование NVL c гр. функциями

Слайд 114

Создание групп данных

DEPTNO SAL
---------- ----------
10 2450
10 5000
10 1300

Создание групп данных DEPTNO SAL ---------- ---------- 10 2450 10 5000 10
20 800
20 1100
20 3000
20 2975
20 3000
30 1600
30 950
30 1500
30 2850
30 1250
30 1250

DEPTNO AVG(SAL)
------ -------
10 2916.6667
20 2175
30 1566.6667

EMP

Средний оклад в таблице EMP по каждому отделу

Слайд 115

Создание групп данных: GROUP BY

SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER

Создание групп данных: GROUP BY SELECT column, group_function(column) FROM table [WHERE condition]
BY column];
Предложение GROUP BY разбивает строки таблицы на
группы.

Слайд 116

Все столбцы, которые входят в SELECT список и к которым не применяются

Все столбцы, которые входят в SELECT список и к которым не применяются
групповые функции, должны быть указаны в GROUP BY.
SQL> SELECT deptno, AVG(sal) FROM emp GROUP BY deptno;
DEPTNO AVG(SAL)
---------- ----------
10 2916.66667
20 2175
30 1566.66667

Использование предложения GROUP BY

Слайд 117

SQL> SELECT deptno, job, sum(sal) FROM emp
GROUP BY deptno, job;

SQL> SELECT deptno, job, sum(sal) FROM emp GROUP BY deptno, job; DEPTNO
DEPTNO JOB SUM(SAL)
---------- --------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 ANALYST 6000
20 CLERK 1900
...

Группировка по нескольким столбцам

Слайд 118

SQL> SELECT deptno, COUNT(ename) FROM emp;
SQL> SELECT deptno, AVG(sal)
FROM emp
WHERE

SQL> SELECT deptno, COUNT(ename) FROM emp; SQL> SELECT deptno, AVG(sal) FROM emp
AVG(sal) > 2000
GROUP BY deptno;

Ошибки при использовании гр. функций

Слайд 119

Исключение групп

DEPTNO SAL
---------- ----------
10 2450
10 5000
10 1300
20

Исключение групп DEPTNO SAL ---------- ---------- 10 2450 10 5000 10 1300
800
20 1100
20 3000
20 2975
20 3000
30 1600
30 950
30 1500
30 2850
30 1250
30 1250

DEPTNO MAX(SAL)
------ -------
10 5000
20 3000

EMP

Максимальный оклад в отделе превышает $2900

Слайд 120

SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
Выводятся группы,

SELECT column, group_function(column) FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition]
удовлетворяющие условию в
предложении HAVING.

Исключение групп: HAVING

Слайд 121

SQL> SELECT job, SUM(sal) PAYROLL
FROM emp
WHERE job NOT LIKE 'SALES%‘

SQL> SELECT job, SUM(sal) PAYROLL FROM emp WHERE job NOT LIKE 'SALES%‘
GROUP BY job
HAVING SUM(sal)>5000
ORDER BY SUM(sal);
JOB PAYROLL
--------- ----------
ANALYST 6000
MANAGER 8275

Использование предложения HAVING

Слайд 122

SQL> SELECT max(avg(sal))
FROM emp
GROUP BY deptno;
MAX(AVG(SAL))
-------------
2916.66667

Вложенные групповые функции

SQL> SELECT max(avg(sal)) FROM emp GROUP BY deptno; MAX(AVG(SAL)) ------------- 2916.66667 Вложенные групповые функции

Слайд 123

Подзапросы

SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
Вложенный запрос выполняется

Подзапросы SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table);
один раз до главного запроса.
Результат подзапроса используется главным запросом (внешним запросом).

Слайд 124

Использование подзапроса

SELECT ename
FROM emp
WHERE sal >
(SELECT sal
FROM emp

Использование подзапроса SELECT ename FROM emp WHERE sal > (SELECT sal FROM
WHERE empno = 7566);
ENAME
----------
KING
FORD
SCOTT

2975

Слайд 125

Подзапрос должен быть заключен в скобки.
Подзапрос должен находиться справа от оператора сравнения.
Подзапрос

Подзапрос должен быть заключен в скобки. Подзапрос должен находиться справа от оператора
не может содержать предложение ORDER BY.
В однострочных подзапросах используются однострочные операторы.
В многострочных подзапросах используются многострочные операторы.

Указания по использованию подзапросов

Слайд 126

Однострочный подзапрос.
Многострочный подзапрос.
Многостолбцовый подзапрос.

Типы подзапросов

Главный запрос

Главный запрос

Главный запрос

подзапрос
подзапрос
подзапрос

возвращает

возвращает

возвращает

CLERK

CLERK
MANAGER

CLERK 7900
MANAGER 7698

Однострочный подзапрос. Многострочный подзапрос. Многостолбцовый подзапрос. Типы подзапросов Главный запрос Главный запрос

Слайд 127

Выполнение однострочных подзапросов

SELECT ename, job
FROM emp
WHERE job =
(SELECT job FROM

Выполнение однострочных подзапросов SELECT ename, job FROM emp WHERE job = (SELECT
emp WHERE empno = 7369)
AND sal >
(SELECT sal FROM emp WHERE empno = 7876);
ENAME JOB
---------- ---------
MILLER CLERK

CLERK

1100

Слайд 128

Использование гр. функций в подзапросах

SELECT ename, job, sal
FROM emp
WHERE sal =

Использование гр. функций в подзапросах SELECT ename, job, sal FROM emp WHERE

(SELECT MIN(sal)
FROM emp);
ENAME JOB SAL
---------- --------- ----------
SMITH CLERK 800

800

Слайд 129

HAVING с подзапросами

SELECT deptno, MIN(sal)
FROM emp
GROUP BY deptno
HAVING MIN(sal) >
(SELECT MIN(sal)

HAVING с подзапросами SELECT deptno, MIN(sal) FROM emp GROUP BY deptno HAVING
FROM emp
WHERE deptno = 20);
DEPTNO MIN(SAL)
---------- ----------
10 1300
30 950

800

Слайд 130

SQL> SELECT empno, ename
FROM emp
WHERE sal = (SELECT MIN(sal)
FROM emp
GROUP

SQL> SELECT empno, ename FROM emp WHERE sal = (SELECT MIN(sal) FROM
BY deptno);
SQL> SELECT ename, job
FROM emp
WHERE job = (SELECT job
FROM emp
WHERE ename = ‘SMYTHE’);

Ошибки при использовании подзапросов

Слайд 131

Многострочные запросы

Возвращают более одной строки
Используют многострочные операторы сравнения

Многострочные запросы Возвращают более одной строки Используют многострочные операторы сравнения

Слайд 132

Оператор IN

SQL> SELECT ename, sal, deptno
FROM emp
WHERE sal IN (800, 950,

Оператор IN SQL> SELECT ename, sal, deptno FROM emp WHERE sal IN
1300);
ENAME SAL DEPTNO
---------- ---------- ----------
SMITH 800 20
JAMES 950 30
MILLER 1300 10

Слайд 133

Оператор ANY

SQL> SELECT empno, ename, job
FROM emp
WHERE sal < ANY
(SELECT sal

Оператор ANY SQL> SELECT empno, ename, job FROM emp WHERE sal (SELECT
FROM emp
WHERE job = ‘CLERK’)
AND job <> ‘CLERK’;
EMPNO ENAME JOB
---------- ---------- ---------
7521 WARD SALESMAN
7654 MARTIN SALESMAN

1300
1100
950
800

Слайд 134

Оператор ALL

SQL> SELECT empno, ename, job
FROM emp
WHERE sal > ALL
(SELECT avg(sal)

Оператор ALL SQL> SELECT empno, ename, job FROM emp WHERE sal >
FROM emp
GROUP BY deptno);
EMPNO ENAME JOB
---------- ---------- ---------
7566 JONES MANAGER
7839 KING PRESIDENT
7902 FORD ANALYST
7788 SCOTT ANALYST

1566.6667
2175
2916.6667

Слайд 135

Многостолбцовые подзапросы

SELECT column, column, ...
FROM table
WHERE (column, column, ...) IN
(SELECT column,

Многостолбцовые подзапросы SELECT column, column, ... FROM table WHERE (column, column, ...)
column, ...
FROM table
WHERE condition);

Слайд 136

Использование многостолбц. подзапросов

SELECT ordid, prodid, qty
FROM item
WHERE (prodid, qty) IN
(SELECT prodid,

Использование многостолбц. подзапросов SELECT ordid, prodid, qty FROM item WHERE (prodid, qty)
qty
FROM item
WHERE ordid = 605)
AND ordid <> 605;

Слайд 137

Сравнения столбцов

Парное
PRODID QTY
101863 100
100861 100
102130 10
100890 5
100870 500
101860 50

Непарное
PRODID QTY
101863 100
100861 100
102130 10
100890 5
100870

Сравнения столбцов Парное PRODID QTY 101863 100 100861 100 102130 10 100890
500
101860 50

Слайд 138

Подзапрос с непарным сравнением

SELECT ordid, prodid, qty
FROM item
WHERE prodid IN
(SELECT prodid

Подзапрос с непарным сравнением SELECT ordid, prodid, qty FROM item WHERE prodid
FROM item
WHERE ordid = 605)
AND qty IN
(SELECT qty
FROM item
WHERE ordid = 605)
AND ordid <> 605;

Слайд 139

Неопределенные значения в подзапросе

SQL> SELECT employee.ename
FROM emp employee
WHERE employee.empno NOT

Неопределенные значения в подзапросе SQL> SELECT employee.ename FROM emp employee WHERE employee.empno
IN
(SELECT manager.mgr FROM emp manager);
no rows selected
NOT IN эквивалентно !=ALL

Слайд 140

Подзапрос в предложении FROM

SQL> SELECT a.ename, a.sal, a.deptno, b.salavg
FROM emp a,

Подзапрос в предложении FROM SQL> SELECT a.ename, a.sal, a.deptno, b.salavg FROM emp
(SELECT deptno, avg(sal) salavg FROM emp GROUP BY deptno) b
WHERE a.deptno = b.deptno AND a.sal > b.salavg
ENAME SAL DEPTNO SALAVG
---------- ---------- ---------- ----------
KING 5000 10 2916.66667
FORD 3000 20 2175
JONES 2975 20 2175
SCOTT 3000 20 2175
...

Слайд 141

Использование переменных подстановки SQL*Plus для временного хранения значений.
- Одиночный амперсанд(&)
- Двойной амперсанд

Использование переменных подстановки SQL*Plus для временного хранения значений. - Одиночный амперсанд(&) -
(&&)
- Команды DEFINE и ACCEPT
Передача значений переменных из одной команды SQL в другую.
Динамическое изменение верхних и нижних колонтитулов.

Переменные подстановки

Слайд 142

Данная переменная позволяет запросить значение у пользователя.
SQL> SELECT empno, ename, sal, deptno

Данная переменная позволяет запросить значение у пользователя. SQL> SELECT empno, ename, sal,
FROM emp
WHERE empno = &employee_num;
Enter value for employee_num: 7369
EMPNO ENAME SAL DEPTNO
--------- ---------- ---------- ----------
7369 SMITH 800 20

Переменная подстановки с одним &

Слайд 143

Если задан режим SET VERIFY ON, SQL*Plus выводит текст команды до и

Если задан режим SET VERIFY ON, SQL*Plus выводит текст команды до и

после замены переменных подстановки значениями.
SQL> SET VERIFY ON
SQL> SELECT empno, ename, sal, deptno
FROM emp
WHERE empno = &employee_num;
Enter value for employee_num: 7369
old 1: WHERE empno = &employee_num
new 1: WHERE empno = 7369

Использование команды SET VERIFY

Слайд 144

Даты и символьные значения заключаются в апострофы.
SQL> SELECT ename, deptno, sal*12
FROM

Даты и символьные значения заключаются в апострофы. SQL> SELECT ename, deptno, sal*12
emp
WHERE job = '&job_title';
Enter value for job_title: ANALYST
ENAME DEPTNO SAL*12
---------- ---------- ----------
FORD 20 36000
SCOTT 20 36000

Символьные значения и даты с &

Слайд 145

Переменные подстановки могут замещать:
Условие WHERE
Предложение ORDER BY
Выражение со столбцами
Имя таблицы
Целую команду SELECT

Задание

Переменные подстановки могут замещать: Условие WHERE Предложение ORDER BY Выражение со столбцами
параметров во время выполнения

Слайд 146

SQL> SELECT empno, ename, job, &column_name FROM emp
WHERE &condition ORDER BY

SQL> SELECT empno, ename, job, &column_name FROM emp WHERE &condition ORDER BY
&order_column;
Enter value for column_name: sal
Enter value for condition: sal>=3000
Enter value for order_column: ename
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7902 FORD ANALYST 3000
7839 KING PRESIDENT 5000
7788 SCOTT ANALYST 3000

Задание параметров во время выполнения

Слайд 147

Переменная подстановки с двумя амперсандами (&&) позволяет многократно использовать значение переменной, не

Переменная подстановки с двумя амперсандами (&&) позволяет многократно использовать значение переменной, не
запрашивая его повторно у пользователя.
SQL> SELECT empno, ename, job, &&column_name
FROM emp ORDER BY &column_name;
Enter value for column_name: deptno
EMPNO ENAME JOB DEPTNO
---------- ---------- --------- ----------
7782 CLARK MANAGER 10
7839 KING PRESIDENT 10
...

Переменная подстановки с двумя &&

Слайд 148

Задать переменную можно с помощью одной из
двух команд SQL*Plus:
- DEFINE: создает

Задать переменную можно с помощью одной из двух команд SQL*Plus: - DEFINE:
пользовательскую переменную с типом данных CHAR
- ACCEPT: считывает входные данные пользователя и сохраняет их в переменной
Если в команде DEFINE требуется одиночный пробел, этот пробел должен быть заключен в апострофы

Задание пользовательских переменных

Слайд 149

Создает более удобное приглашение пользователю ввести данные.
Явно задает переменную типа NUMBER или

Создает более удобное приглашение пользователю ввести данные. Явно задает переменную типа NUMBER
DATE.
Скрывает вводимые пользователем данные в целях защиты.
ACCEPT variable [datatype] [FORMAT format]
[PROMPT text] {HIDE}

Команда ACCEPT

Слайд 150

SQL> ACCEPT dept PROMPT 'Provide the department name:'
SELECT *
FROM

SQL> ACCEPT dept PROMPT 'Provide the department name:' SELECT * FROM dept
dept
WHERE dname = UPPER('&dept');
Provide the department name: Sales
DEPTNO DNAME LOC
---------- -------------- -------------
30 SALES CHICAGO

Использование команды ACCEPT

Слайд 151

Переменная остается заданной:
- До её удаления командой UNDEFINE
- До выхода из SQL*Plus
Проверить

Переменная остается заданной: - До её удаления командой UNDEFINE - До выхода
изменения можно с помощью команды DEFINE.
Чтобы задать переменные для всех сеансов, необходимо изменить файл login.sql, чтобы переменные создавались при запуске системы.

Команды DEFINE и UNDEFINE

Слайд 152

Переменная для хранения названия отдела:
SQL> DEFINE deptname = sales
SQL> DEFINE deptname
DEFINE DEPTNAME

Переменная для хранения названия отдела: SQL> DEFINE deptname = sales SQL> DEFINE
= "sales" (CHAR)
Использование переменной:
SELECT *
FROM dept
WHERE dname = UPPER('&deptname');

Использование команды DEFINE

Слайд 153

Для управления текущим сеансом пользуйтесь командой SET.
SET system_variable value
Проверка заданных значений с

Для управления текущим сеансом пользуйтесь командой SET. SET system_variable value Проверка заданных
помощью SHOW:
SQL> SET ECHO ON
SQL> SHOW ECHO
echo ON

Настройка среды SQL*Plus

Слайд 154

ARRAYSIZE {20 | n}
COLSEP {_ | text}
FEEDBACK {6 |

ARRAYSIZE {20 | n} COLSEP {_ | text} FEEDBACK {6 | n
n | OFF | ON}
HEADING {OFF | ON}
LINESIZE {80 | n}
LONG {80 | n}
PAGESIZE {24 | n}
PAUSE {OFF | ON | text}
TERMOUT {OFF | ON}

Переменные команды SET

Слайд 155

COLUMN [column option]
TTITLE [text | OFF | ON]
BTITLE [text

COLUMN [column option] TTITLE [text | OFF | ON] BTITLE [text |
| OFF | ON]
BREAK [ON report_element]

Команды форматирования среды SQL*Plus

Слайд 156

Управляет форматом вывода столбца
COLUMN [column option]
CLE[AR]: сбрасывает все установки для столбца.

Управляет форматом вывода столбца COLUMN [column option] CLE[AR]: сбрасывает все установки для
FOR[MAT] format: изменяет вывод столбца с помощью форматной модели.
HEA[DING] text: задает заголовок столбца.
JUS[TIFY] {align}: выравнивает заголовок столбца слева, по центру или справа.

Команда COLUMN

Слайд 157

Создание заголовков столбцов:
COLUMN ename HEADING 'Employee|Name' FORMAT A15
COLUMN sal JUSTIFY LEFT FORMAT

Создание заголовков столбцов: COLUMN ename HEADING 'Employee|Name' FORMAT A15 COLUMN sal JUSTIFY
$99,990.00
COLUMN mgr FORMAT 999999999 NULL ‘No manager’
Вывод на экран текущих установок для ENAME:
COLUMN ename
Сброс установок для ENAME:
COLUMN ename CLEAR

Использование команды COLUMN

Слайд 158

Модели формата в команде COLUMN

Модели формата в команде COLUMN

Слайд 159

Устраняет дубликаты и группирует строки
Для устранения дубликатов
SQL> BREAK ON ename ON

Устраняет дубликаты и группирует строки Для устранения дубликатов SQL> BREAK ON ename
job
Для вычисления общих сумм
SQL> BREAK ON report
Для группировки строк по заданным значениям
SQL> BREAK ON ename SKIP 4 ON job SKIP2

Использование команды BREAK

Слайд 160

Вывод заголовков и нижних колонтитулов
TTI[TLE] [text|OFF|ON]
Задание заголовка отчета
SQL> TTITLE ‘Salary|Report’
Задание

Вывод заголовков и нижних колонтитулов TTI[TLE] [text|OFF|ON] Задание заголовка отчета SQL> TTITLE
нижнего колонтитула отчета
SQL> BTITLE ‘Confidental’

Использование команд TTITLE и BTITLE

Слайд 161

Команды DML выполняются при следующих операциях:
- Добавление новых строк в таблицу
- Изменение

Команды DML выполняются при следующих операциях: - Добавление новых строк в таблицу
существующих строк в таблице
- Удаление существующих строк из таблицы
Транзакция – совокупность команд DML, образующих логическую единицу работы.

Язык манипулирования данными (DML)

Слайд 162

Для добавления новых строк в таблицу используется команда INSERT.
INSERT INTO table [(column

Для добавления новых строк в таблицу используется команда INSERT. INSERT INTO table
[, column…])] VALUES (value [, value…]);
Данный синтаксис позволяет заносить в таблицу только по одной строке.

Команда INSERT

Слайд 163

Символьные значения и даты заключаются в апострофы.
SQL> INSERT INTO dept (deptno, dname,

Символьные значения и даты заключаются в апострофы. SQL> INSERT INTO dept (deptno,
loc)
VALUES (50, 'DEVELOPMENT', 'DETROIT');
1 row created.

Вставка новых строк в таблицу

Слайд 164

Неявный метод: столбец не указывается в списке столбцов.
SQL> INSERT INTO dept (deptno,

Неявный метод: столбец не указывается в списке столбцов. SQL> INSERT INTO dept
dname)
VALUES (60, ‘MIS');
1 row created.
Явный метод: использование ключевого слова NULL или пустой строки(‘’) в списке VALUES.
SQL> INSERT INTO dept (deptno, dname)
VALUES (70, ‘FINANCE‘, NULL);
1 row created.

Добавление строк с NULL значениями

Слайд 165

Функция SYSDATE записывает текущие дату и время.
SQL> INSERT INTO emp (empno, ename,

Функция SYSDATE записывает текущие дату и время. SQL> INSERT INTO emp (empno,
job, mgr, hiredate, sal, comm, deptno)
VALUES (7196, ‘GREEN‘,’SALESMAN’, 7782, SYSDATE, 2000, NULL, 10);
1 row created.

Вставка специальных значений

Слайд 166

Добавление нового служащего.
SQL> INSERT INTO emp
VALUES (2296, ‘AROMANO‘,’SALESMAN’, 7782, TO_DATE(‘FEB,3,97’,’MON DD,

Добавление нового служащего. SQL> INSERT INTO emp VALUES (2296, ‘AROMANO‘,’SALESMAN’, 7782, TO_DATE(‘FEB,3,97’,’MON
YY’), 1300, NULL, 10);
1 row created.
Проверка добавления нового служащего.
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ------ -------- ---- --------- ---- ---- ------
2296 AROMANO SALESMAN 7782 03-FEB-97 1300 10

Задание конкретных значений даты

Слайд 167

SQL> INSERT INTO dept (deptno, dname, loc)
VALUES (&department_id, ‘&department_name’,
‘&location’);
Enter value

SQL> INSERT INTO dept (deptno, dname, loc) VALUES (&department_id, ‘&department_name’, ‘&location’); Enter
for department_id: 80
Enter value for department_name: EDUCATION
Enter value for location: ATLANTA
1 row created.

Задание значений с переменными

Слайд 168

Команда INSERT включает подзапрос.
SQL> INSERT INTO managers (id, name, salary, hiredate)
SELECT

Команда INSERT включает подзапрос. SQL> INSERT INTO managers (id, name, salary, hiredate)
empno, ename, sal, hiredate
FROM emp
WHERE job = ‘MANAGER’;
3 rows created.
Предложение VALUES не используется.
Количество столбцов, указанных в предложении INSERT, должно совпадать с количеством столбцов в подзапросе.

Копирование строк из другой таблицы

Слайд 169

Для обновления существующих строк в таблице используется команда UPDATE.
UPDATE table
SET column

Для обновления существующих строк в таблице используется команда UPDATE. UPDATE table SET
= value [, column = value]
[WHERE condition];
В случае необходимости можно обновлять несколько строк.

Команда UPDATE

Слайд 170

Предложение WHERE позволяет изменить конкретную строку или строки.
SQL> UPDATE emp
SET deptno

Предложение WHERE позволяет изменить конкретную строку или строки. SQL> UPDATE emp SET
= 20
WHERE empno = 7782;
1 row updated.
Если предложение WHERE отсутствует, обновляются все строки таблицы.
SQL> UPDATE employee
SET deptno = 20;
14 rows updated.

Обновление строк в таблице

Слайд 171

Изменение должности и номера отдела служащего под номером 7698 на такие же

Изменение должности и номера отдела служащего под номером 7698 на такие же
значения, как у служащего под номером 7499.
SQL> UPDATE emp
SET (job, deptno) =
(SELECT job, deptno
FROM emp
WHERE empno = 7499)
WHERE empno = 7782;
1 row updated.

UPDATE с помощью многостолб. подзапр.

Слайд 172

Для изменения строк таблицы на основе значений из другой таблицы следует использовать

Для изменения строк таблицы на основе значений из другой таблицы следует использовать
подзапросы в командах UPDATE.
SQL> UPDATE employee
SET deptno = (SELECT deptno
FROM emp
WHERE empno = 7788)
WHERE job = (SELECT job
FROM emp
WHERE empno = 7788);
2 rows updated.

UPDATE на основе другой таблицы.

Слайд 173

Для удаления существующих строк используется команда DELETE.
DELETE [FROM] table [WHERE condition];
В

Для удаления существующих строк используется команда DELETE. DELETE [FROM] table [WHERE condition];
случае необходимости можно удалять несколько строк.

Команда DELETE

Слайд 174

Конкретная строка или строки удаляются с помощью предложения WHERE.
SQL> DELETE FROM department

Конкретная строка или строки удаляются с помощью предложения WHERE. SQL> DELETE FROM
WHERE dname = ‘DEVELOPMENT’;
1 row deleted.
Если предложение WHERE отсутствует, удаляются все строки таблицы.
SQL> DELETE FROM department;
4 rows deleted.

Удаление строк из таблицы

Слайд 175

Для изменения строк таблицы на основе значений из другой таблицы следует использовать

Для изменения строк таблицы на основе значений из другой таблицы следует использовать
подзапросы в командах UPDATE.
SQL> DELETE FROM employee
WHERE deptno = (SELECT deptno
FROM dept
WHERE dname = ‘SALES’);
6 rows deleted.

DELETE на основе другой таблицы.

Слайд 176

Содержат что-либо из следующего:
Команды DML, выполняющие единое согласованное
изменение данных.
Одну команду DDL.
Одну команду

Содержат что-либо из следующего: Команды DML, выполняющие единое согласованное изменение данных. Одну
DCL.

Транзакции базы данных

Слайд 177

Начинаются с выполнения первой исполняемой команды SQL.
Заканчиваются одним из сл. cобытий:
- Выполнение

Начинаются с выполнения первой исполняемой команды SQL. Заканчиваются одним из сл. cобытий:
команды COMMIT или ROLLBACK
- Выполнение команды DDL или DCL
(автоматическая фиксация транзакции)
- Выходы в подпрограммы пользователя
- Отказы системы

Транзакции базы данных

Слайд 178

COMMIT
SAVEPOINT name
ROLLBACK [TO SAVEPOINT name]

Управление транзакциями

COMMIT SAVEPOINT name ROLLBACK [TO SAVEPOINT name] Управление транзакциями

Слайд 179

Управление транзакциями

INSERT UPDATE INSERT DELETE

COMMIT

Точка сохранения A

Точка сохранения B

ТРАНЗАКЦИЯ

ROLLBACK to B

ROLLBACK

Управление транзакциями INSERT UPDATE INSERT DELETE COMMIT Точка сохранения A Точка сохранения
to A

ROLLBACK

Слайд 180

Автоматическая фиксация изменений (COMMIT) происходит в сл. случаях:
- Выполнение команды DDL

Автоматическая фиксация изменений (COMMIT) происходит в сл. случаях: - Выполнение команды DDL
- Выполнение команды DCL
- Нормальный выход из SQL*Plus без явного выполнения команды COMMIT или ROLLBACK
Автоматический откат (ROLLBACK) происходит в случае аварийного прекращения сеанса работы в SQL*Plus или отказа системы.

Неявная обработка транзакций

Слайд 181

Состояние данных может быть восстановлено.
Текущий пользователь может просмотреть результаты своих операций DML

Состояние данных может быть восстановлено. Текущий пользователь может просмотреть результаты своих операций
с помощью команды SELECT.
Другие пользователи не могут видеть результаты команд DML текущего пользователя.
Изменяемые строки блокируются, и другие пользователи не могут обновлять их содержимое.

Состояние данных

Слайд 182

Внесение изменений.
SQL> UPDATE emp
SET deptno = 10
WHERE empno = 7782;
1 row

Внесение изменений. SQL> UPDATE emp SET deptno = 10 WHERE empno =
updated.
Фиксация изменений.
SQL> COMMIT;
Commit complete.

Фиксация изменений в данных

Слайд 183

Внесение изменений.
SQL> DELETE FROM employee;
14 rows deleted.
Откат изменений.
SQL> ROLLBACK;
Rollback complete.

Откат изменений в

Внесение изменений. SQL> DELETE FROM employee; 14 rows deleted. Откат изменений. SQL>
данных

Слайд 184

SQL> UPDATE...
SQL> SAVEPOINT update_done;
Savepoint created.
SQL> INSERT...
SQL> ROLLBACK TO update_done;
Rollback complete.

Откат к точке

SQL> UPDATE... SQL> SAVEPOINT update_done; Savepoint created. SQL> INSERT... SQL> ROLLBACK TO
сохранения

Слайд 185

Если ошибка возникла при выполнении одной конкретной команды DML, отменяются только результаты

Если ошибка возникла при выполнении одной конкретной команды DML, отменяются только результаты
этой команды.
Сервер Oracle использует неявную точку сохранения.
Все прочие изменения сохраняются.
Пользователю следует завершать транзакции явно командой COMMIT или ROLLBACK.

Откат на уровне команды

Слайд 186

Согласованность чтения гарантирует непротиворечивое представление данных в любой момент времени.
Изменения, сделанные одним

Согласованность чтения гарантирует непротиворечивое представление данных в любой момент времени. Изменения, сделанные
пользователем, не вступают в противоречие с изменениями, сделанными другим пользователем.
Гарантируется, что для одних и тех же данных:
- “Читатели” никогда не блокируют ”Писателей”.
- ”Писатели” никогда не блокируют ”Читателей”.

Согласованность чтения

Слайд 187

Exclusive (исключительный)
Share (разделяемый)

Блокировка данных

Exclusive (исключительный) Share (разделяемый) Блокировка данных

Слайд 188

Объекты базы данных

Объекты базы данных

Слайд 189

Имя начинается с буквы
Может быть длиной до 30 символов
Должно содержать только символы

Имя начинается с буквы Может быть длиной до 30 символов Должно содержать
A-Z, a-z,
0-9, _, $ и #
Не должно совпадать с именем другого объекта, принадлежащего тому же пользователю
Не должно совпадать со словом, зарезервированным сервером Oracle

Правила задания имен

Слайд 190

Необходимо иметь:
- привилегию CREATE TABLE
- область хранения
CREATE TABLE [schema.] table
(column datatype

Необходимо иметь: - привилегию CREATE TABLE - область хранения CREATE TABLE [schema.]
[DEFAULT expr]);

Команда CREATE TABLE

Слайд 191

Задает значение по умолчанию, если при добавлении данных значение не указывается явно.
...hiredate

Задает значение по умолчанию, если при добавлении данных значение не указывается явно.
DATE DEFAULT SYSDATE, ...
В качестве значения допускается литерал, выражение или функция SQL.
Не может использоваться имя другого столбца или псевдостолбца.
Тип данных, используемый по умолчанию, должен совпадать с типом данных столбца.

Опция DEFAULT

Слайд 192

SQL> CREATE TABLE ABC
(DEPTNO NUMBER (2),
DNAME VARCHAR2 (14),
LOC

SQL> CREATE TABLE ABC (DEPTNO NUMBER (2), DNAME VARCHAR2 (14), LOC VARCHAR2
VARCHAR2 (13));
Table created.
SQL> DESCRIBE abc
Name Null? Type
----------------------- -------- -----------
DEPTNO NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)

Создание таблиц

Слайд 193

Таблицы пользователей
- таблицы, создаваемые и поддерживаемые пользователями
- содержат информацию пользователей
Словарь базы данных
-

Таблицы пользователей - таблицы, создаваемые и поддерживаемые пользователями - содержат информацию пользователей
таблицы, создаваемые и поддерживаемые сервером Oracle
- содержат служебную информацию о базе данных

Таблицы в базе данных Oracle

Слайд 194

Вывод определений таблиц, принадлежащих пользователю.
SELECT * FROM user_tables;
Просмотр типов объектов, принадлежащих пользователю.
SELECT

Вывод определений таблиц, принадлежащих пользователю. SELECT * FROM user_tables; Просмотр типов объектов,
DISTINCT object_type
FROM user_objects;
Просмотр таблиц, представлений, синонимов и последовательностей, принадлежащих пользователю.
SELECT * FROM user_catalog;

Запрос к словарю данных

Слайд 195

Типы данных

Типы данных

Слайд 196

Количество заданных столбцов должно совпадать с количеством столбцов в подзапросе
CREATE TABLE table

Количество заданных столбцов должно совпадать с количеством столбцов в подзапросе CREATE TABLE
[column (, column...)]
AS subquery;

Создание таблицы, используя подзапрос

Слайд 197

CREATE TABLE dept30
AS
SELECT empno, ename, sal*12 ANNSAL, hiredate
FROM emp
WHERE deptno = 30;
Table

CREATE TABLE dept30 AS SELECT empno, ename, sal*12 ANNSAL, hiredate FROM emp
created.

Создание таблицы, используя подзапрос

Слайд 198

Используется для следующих операций:
- Добавления / Удаления столбца
- Изменение существующего столбца
- Задание

Используется для следующих операций: - Добавления / Удаления столбца - Изменение существующего
значения по умолчанию для столбца
ALTER TABLE table
ADD (column datatype [DEFAULT expr]
[, column datatype]...);
ALTER TABLE table
MODIFY (column datatype [DEFAULT expr]
[, column datatype]...);

Команда ALTER TABLE

Слайд 199

Столбцы добавляются с помощью предложения ADD.
ALTER TABLE dept30
ADD (job VARCHAR2(9));
Table altered.
EMPNO

Столбцы добавляются с помощью предложения ADD. ALTER TABLE dept30 ADD (job VARCHAR2(9));
ENAME ANNSAL HIREDATE JOB
---------- ---------- ------ --------- ---
7499 ALLEN 19200 20-FEB-81
7521 WARD 15000 22-FEB-81
7654 MARTIN 15000 28-SEP-81
...

Добавление столбца

Слайд 200

Столбцы изменяются с помощью предложения MODIFY.
ALTER TABLE dept30
MODIFY (ename VARCHAR2(15));
Table altered.

Изменение столбца

Столбцы изменяются с помощью предложения MODIFY. ALTER TABLE dept30 MODIFY (ename VARCHAR2(15)); Table altered. Изменение столбца

Слайд 201

Столбцы удаляются с помощью предложения DROP COLUMN.
ALTER TABLE dept30
DROP COLUMN job;
Table altered.

Удаление

Столбцы удаляются с помощью предложения DROP COLUMN. ALTER TABLE dept30 DROP COLUMN
столбца

Слайд 202

Столбцы помечаются, как неиспользуемые с помощью предложения SET UNUSED.
ALTER TABLE table
SET UNUSED

Столбцы помечаются, как неиспользуемые с помощью предложения SET UNUSED. ALTER TABLE table
(column);
Удаление помеченных столбцов – DROP UNUSED COLUMNS.
ALTER TABLE table
DROP UNUSED COLUMNS;

Опция SET UNUSED

Слайд 203

Удаляются все данные и структура таблицы.
Все незафиксированные транзакции фиксируются.
Все индексы удаляются.
Откат этой

Удаляются все данные и структура таблицы. Все незафиксированные транзакции фиксируются. Все индексы
команды невозможен.
SQL> DROP TABLE dept30;
Table dropped.

Удаление таблицы

Слайд 204

Для переименования таблицы, представления, последова-
тельности или синонима используется команда RENAME.
SQL> RENAME dept

Для переименования таблицы, представления, последова- тельности или синонима используется команда RENAME. SQL>
TO department;
Table renamed.

Переименование объекта

Слайд 205

Команда TRUNCATE TABLE:
- Удаляет все строки из таблицы
- Освобождает пространство, используемое таблицей
SQL>

Команда TRUNCATE TABLE: - Удаляет все строки из таблицы - Освобождает пространство,
TRUNCATE TABLE department;
Table truncated.
Отмена удаления строк невозможна
Альтернативная команда - DELETE

Усечение таблицы

Слайд 206

Добавление комментария к таблице или столбцу при помощи команды COMMENT.
SQL> COMMENT ON

Добавление комментария к таблице или столбцу при помощи команды COMMENT. SQL> COMMENT
TABLE emp IS ‘Employee info’;
Comment created.
Просмотр комментариев:
ALL_COL_COMMENTS
USER_COL_COMMENTS
ALL_TAB_COMMENTS
USER_TAB_COMMENTS

Добавление комментариев к таблице

Слайд 207

Ограничения обеспечивают выполнение правил на уровне таблицы.
Ограничения предотвращают удаление таблицы при наличии

Ограничения обеспечивают выполнение правил на уровне таблицы. Ограничения предотвращают удаление таблицы при
подчиненных данных в других таблицах.
В Oracle допускаются сл. виды ограничений:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK

Понятие ограничения

Слайд 208

CREATE TABLE [schema.] table
(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint]);
CREATE TABLE

CREATE TABLE [schema.] table (column datatype [DEFAULT expr] [column_constraint], ... [table_constraint]); CREATE
emp
empno NUMBER(4),
ename VARCHAR2(10),
...
deptno NUMBER(7,2) NOT NULL,
CONSTRAINT emp_empno_pk
PRIMARY KEY (empno));

Определение ограничений

Слайд 209

Ограничение на уровне столбца.
column [CONSTRAINT constraint_name] constraint_type
Ограничение на уровне таблицы.
column,...

Ограничение на уровне столбца. column [CONSTRAINT constraint_name] constraint_type Ограничение на уровне таблицы.
[CONSTRAINT constraint_name] constraint_type
(column,...),

Определение ограничений

Слайд 210

Предотвращает появление неопределенных значений в столбце
CREATE TABLE EMP (
EMPNO NUMBER(4),

Предотвращает появление неопределенных значений в столбце CREATE TABLE EMP ( EMPNO NUMBER(4),

ENAME VARCHAR2(10) NOT NULL,
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) NOT NULL);

Ограничение NOT NULL

Слайд 211

Может быть задано на уровне столбца или таблицы
CREATE TABLE DEPT (

Может быть задано на уровне столбца или таблицы CREATE TABLE DEPT (
DEPTNO NUMBER(2),
DNAME VARCHAR2(14),
LOC VARCHAR2(13),
CONSTRAINT dept_dname_uk UNIQUE(dname));

Ограничение UNIQUE

Слайд 212

Может быть задано на уровне столбца или таблицы
CREATE TABLE DEPT (

Может быть задано на уровне столбца или таблицы CREATE TABLE DEPT (
DEPTNO NUMBER(2),
DNAME VARCHAR2(14),
LOC VARCHAR2(13),
CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno));

Ограничение PRIMARY KEY

Слайд 213

Может быть задано на уровне столбца или таблицы
CREATE TABLE EMP (

Может быть задано на уровне столбца или таблицы CREATE TABLE EMP (
EMPNO NUMBER(4) NOT NULL,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2),
CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)
REFERENCES dept (deptno));

Ограничение FOREIGN KEY

Слайд 214

FOREIGN KEY:
определяет столбец в подчиненной таблице,
используемый в качестве внешнего ключа.
REFERENCES:
определяет родительскую

FOREIGN KEY: определяет столбец в подчиненной таблице, используемый в качестве внешнего ключа.
таблицу и столбец в ней.
ON DELETE CASCADE:
разрешает удаление строки в родительской таблице с одновременным удалением зависимых строк в подчиненной таблице.

Ключевые слова FOREIGN KEY

Слайд 215

Задаёт условие, которому должна удовлетворять каждая строка таблицы
Не допускаются:
- Ссылки на псевдостолбцы

Задаёт условие, которому должна удовлетворять каждая строка таблицы Не допускаются: - Ссылки
CURRVAL, NEXTVAL,
LEVEL и ROWNUM.
- Вызовы функций SYSDATE, UID, USER и USERENV.
- Запросы, ссылающиеся на другие значения в других строках.
..., deptno NUMBER(2),
CONSTRAINT emp_deptno_ck
CHECK (deptno BETWEEN 10 AND 99),...

Ограничение CHECK

Слайд 216

ALTER TABLE table
ADD [CONSTRAINT constraint] type (column);
Ограничение можно добавить, удалить, но не

ALTER TABLE table ADD [CONSTRAINT constraint] type (column); Ограничение можно добавить, удалить,
изменить.
Ограничение можно включать или выключать.
Ограничение NOT NULL добавляется с помощью предложения MODIFY.

Добавление ограничения

Слайд 217

Добавление ограничения FOREIGN KEY для таблицы EMP. Это ограничение означает, что информация

Добавление ограничения FOREIGN KEY для таблицы EMP. Это ограничение означает, что информация
о менеджере уже должна существовать как о служащем в таблице EMP.
ALTER TABLE emp
ADD CONSTRAINT emp_mgr_fk
FOREIGN KEY(mgr) REFERENCES emp(empno);
Table altered.

Добавление ограничения

Слайд 218

Удаление ограничения FOREIGN KEY из таблицы EMP.
ALTER TABLE emp
DROP CONSTRAINT emp_mgr_fk;
Table altered.
Удаление

Удаление ограничения FOREIGN KEY из таблицы EMP. ALTER TABLE emp DROP CONSTRAINT
ограничения PRIMARY KEY из таблицы DEPT и соответствующего ограничения FOREIGN KEY для столбца EMP.DEPTNO.
ALTER TABLE dept
DROP PRIMARY KEY CASCADE;
Table altered.

Удаление ограничения

Слайд 219

Для отключения ограничения используется команда ALTER TABLE с предложением DISABLE.
Для отмены ограничения

Для отключения ограничения используется команда ALTER TABLE с предложением DISABLE. Для отмены
вместе с зависимыми ограничениями используется опция CASCADE.
ALTER TABLE emp
DISABLE CONSTRAINT emp_empno_pk CASCADE;
Table altered.

Отключение ограничений

Слайд 220

Для включения ограничения используется команда ALTER TABLE с предложением ENABLE.
При включении ограничения

Для включения ограничения используется команда ALTER TABLE с предложением ENABLE. При включении
UNIQUE или PRIMARY KEY, автоматически создается уникальный индекс.
ALTER TABLE emp
ENABLE CONSTRAINT emp_empno_pk;
Table altered.

Включение ограничений

Слайд 221

Вместе с предложением DROP COLUMN можно использовать опцию CASCADE CONSTRAINTS.
Опция CASCADE CONSTRAINTS

Вместе с предложением DROP COLUMN можно использовать опцию CASCADE CONSTRAINTS. Опция CASCADE
удаляет все ссылочные ограничения целостности, которые зависят от первичного или уникального ключей, основанных на удаляемом столбце.
Опция CASCADE CONSTRAINTS удаляет все составные ограничения целостности, которые созданы на основе удаляемого столбца.

Каскадное удаление огранич. целостности

Слайд 222

Просмотреть все определения и имена ограничений можно с помощью запроса к представлению

Просмотреть все определения и имена ограничений можно с помощью запроса к представлению
USER_CONSTRAINTS.
SQL> SELECT constraint_name, constraint_type,
search_condition
FROM user_constraints WHERE table_name = 'EMP';
CONSTRAINT_NAME C SEARCH_CONDITION
--------------- - ----------------
PK_EMP P
FK_DEPTNO R

Просмотр ограничений

Слайд 223

Просмотреть столбцы, связанные с ограничениями можно с помощью запроса к представлению USER_CONS_COLUMNS.
SQL>

Просмотреть столбцы, связанные с ограничениями можно с помощью запроса к представлению USER_CONS_COLUMNS.
SELECT constraint_name, column_name
FROM user_cons_columns WHERE table_name = 'EMP';
CONSTRAINT_NAME COLUMN_NAME
--------------- -----------
FK_DEPTNO DEPTNO
PK_EMP EMPNO

Просмотр полей, участвующих в огран-ях

Слайд 224

Ограничение доступа к базе данных.
Упрощение сложных запросов.
Обеспечение независимости от данных.
Представление одних и

Ограничение доступа к базе данных. Упрощение сложных запросов. Обеспечение независимости от данных.
тех же данных в разных видах.

Возможности представлений

Слайд 225

Простые и сложные представления

Простые и сложные представления

Слайд 226

В команду CREATE VIEW включается подзапрос.
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]...)]
AS

В команду CREATE VIEW включается подзапрос. CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY];
Подзапрос может содержать сложную команду SELECT.
Подзапрос не может содержать предложение ORDER BY.

Создание представления

Слайд 227

Создание представления EMPVU10 с информацией о служащих
отдела 10.
SQL> CREATE VIEW

Создание представления EMPVU10 с информацией о служащих отдела 10. SQL> CREATE VIEW
empvu10
AS SELECT empno, ename, job
FROM emp
WHERE deptno = 10;
View created.
Вывод структуры представления с помощью команды DESCRIBE SQL*Plus.
SQL> DESCRIBE empvu10;

Создание представления

Слайд 228

Создание представления SALVU30 с использованием
псевдонимов в подзапросе.
SQL> CREATE VIEW salvu30
AS SELECT

Создание представления SALVU30 с использованием псевдонимов в подзапросе. SQL> CREATE VIEW salvu30
empno EMPLOYEE_NUMBER, ename NAME, sal SALARY
FROM emp
WHERE deptno = 30;
View created.
Вывод структуры представления с помощью команды DESCRIBE SQL*Plus.
SQL> DESCRIBE empvu10;

Создание представления

Слайд 229

SQL> SELECT * FROM salvu30;
EMPLOYEE_NUMBER NAME SALARY
--------------- ---------- ----------
7499 ALLEN 1600

SQL> SELECT * FROM salvu30; EMPLOYEE_NUMBER NAME SALARY --------------- ---------- ---------- 7499
7521 WARD 1250
7654 MARTIN 1250
7698 BLAKE 2850
7844 TURNER 1500
7900 JAMES 950
6 rows selected.

Выборка данных из представления

Слайд 230

Запрос к представлению

SQL*Plus
SELECT *
FROM empvu10;
7839 KING PRESIDENT
7782 CLARK MANAGER
7934 MILLER

Запрос к представлению SQL*Plus SELECT * FROM empvu10; 7839 KING PRESIDENT 7782
CLERK

USER_VIEWS
empvu10
SELECT empno, ename, job
FROM emp
WHERE deptno = 10;

EMP

Слайд 231

Изменение представления EMPVU10 с помощью предложения CREATE OR REPLACE VIEW. Добавление псевдонима

Изменение представления EMPVU10 с помощью предложения CREATE OR REPLACE VIEW. Добавление псевдонима
для каждого столбца.
SQL> CREATE OR REPLACE VIEW empvu10
(employee_number, employee_name, job_title)
AS SELECT empno, ename, job
FROM emp
WHERE deptno = 10;
View created.
Порядок псевдонимов в предложении CREATE VIEW должен быть таким же, как порядок столбцов в подзапросе.

Изменение представления

Слайд 232

Создание сложного представления с групповыми функциями для вывода данных из двух таблиц.
SQL>

Создание сложного представления с групповыми функциями для вывода данных из двух таблиц.
CREATE VIEW dept_sum_vu (name, minsal, maxsal, avgsal)
AS SELECT d.dname, MIN(e.sal), MAX(e.sal), AVG(e.sal)
FROM emp e, dept d
WHERE e.deptno = d.deptno;
GROUP BY d.dname;
View created.

Создание сложного представления

Слайд 233

Операции DML можно выполнять с простыми представлениями.
Нельзя удалить строку, если представление содержит:
-

Операции DML можно выполнять с простыми представлениями. Нельзя удалить строку, если представление
Групповые функции
- Предложение GROUP BY
- Ключевое слово DISTINCT
- Ссылку на псевдостолбец ROWNUM
Нельзя изменить строку, если представление содержит:
- Столбцы, определяемые выражениями
Невозможно добавить данные в представление, если:
- В базовых таблицах имеются столбцы с ограничением NOT NULL, но они не входят в представление.

Правила выполнения DML - операций

Слайд 234

Необходимо следить за тем, чтобы результаты DML операций оставались в пределах домена

Необходимо следить за тем, чтобы результаты DML операций оставались в пределах домена
представления.
SQL> CREATE OR REPLACE VIEW empvu20
AS SELECT *
FROM emp
WHERE deptno = 20
WITH CHECK OPTION CONSTRAINT empvu20_ck;
View created.
Попытка изменить номер отдела для какой-либо строки в представлении закончится неудачей, т. к. при этом нарушится ограничение CHECK OPTION.

Использование WITH CHECK OPTION

Слайд 235

Использование опции WITH READ ONLY запрещает выполнять над представлением любые DML операции.
SQL>

Использование опции WITH READ ONLY запрещает выполнять над представлением любые DML операции.
CREATE OR REPLACE VIEW empvu10
(employee_number, employee_name, job_title)
AS SELECT empno, ename, job
FROM emp
WHERE deptno = 10
WITH READ ONLY;
View created.
Попытка выполнить команду DML для любой строки представления приведет к ошибке сервера Oracle (ORA-01752).

Запрет DML операций

Слайд 236

Удаление представления не вызывает потери данных, т. к. представление основано на реальных

Удаление представления не вызывает потери данных, т. к. представление основано на реальных
таблицах базы данных.
DROP VIEW view;
SQL> DROP VIEW empvu10;
View dropped.
Порядок псевдонимов в предложении CREATE VIEW должен быть таким же, как порядок столбцов в подзапросе.

Удаление представления

Слайд 237

Автоматически генерирует уникальные числа.
Является совместно используемым объектом.
Обычно используется для генерации значений первичного

Автоматически генерирует уникальные числа. Является совместно используемым объектом. Обычно используется для генерации
ключа.
Заменяет код в прикладной программе.
Ускоряет доступ к числам последовательности, если они находятся в сверхоперативной (кэш) памяти.

Понятие последовательности

Слайд 238

Определение последовательности для автоматической
генерации чисел.
CREATE SEQUENCE sequence
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE

Определение последовательности для автоматической генерации чисел. CREATE SEQUENCE sequence [INCREMENT BY n]
n | NOMAXVALUE}]
[{MIXVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE | NOCACHE}];

Команда CREATE SEQUENCE

Слайд 239

Создание последовательности DEPT_DEPTNO для использования в качестве первичного ключа таблицы DEPT.
При генерации

Создание последовательности DEPT_DEPTNO для использования в качестве первичного ключа таблицы DEPT. При
значений первичных ключей не следует использовать опцию CYCLE.
CREATE SEQUENCE dept_deptno
INCREMENT BY 1
START WITH 91
MAXVALUE 100
NOCYCLE
NOCACHE;

Создание последовательности

Слайд 240

Проверить значения последовательности можно в представлении USER_SEQUENCES словаря данных.
SELECT sequence_name, min_value,

Проверить значения последовательности можно в представлении USER_SEQUENCES словаря данных. SELECT sequence_name, min_value,
max_value, increment_by, last_number
FROM user_sequences;
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY LAST_NUMBER
------------ ---------- ---------- ------------ -----------
CUSTID 1 1.0000E+27 1 109
DEPT_DEPTNO 1 100 1 91
ORDID 1 1.0000E+27 1 622
PRODI 1 1.0000E+27 1 200381
STUDENT_SEQUENS 1 1.0000E+27 1 10020

Проверка параметров последовательности

Слайд 241

NEXTVAL генерирует следующее свободное число в последовательности. Столбец возвращает уникальное значение при

NEXTVAL генерирует следующее свободное число в последовательности. Столбец возвращает уникальное значение при
каждом обращении к нему – даже для разных пользователей.
CURRVAL возвращает текущее значение последова-тельности. Чтобы данный столбец содержал значение, необходимо сначала обратиться к NEXTVAL для этой последовательности.

Псевдостолбцы NEXTVAL и CURRVAL

Слайд 242

Добавление нового отдела.
SQL> INSERT INTO dept (deptno, dname, loc)
VALUES
(dept_deptno.NEXTVAL, ‘

Добавление нового отдела. SQL> INSERT INTO dept (deptno, dname, loc) VALUES (dept_deptno.NEXTVAL,
MARKETING’, ’MOSCOW’);
1 row created.
Вывод текущего значения в последовательности DEPT_DEPTNO.
SQL> SELECT dept_deptno.CURRVAL FROM dual;
CURRVAL
----------
91

Использование последовательности

Слайд 243

Изменение шага приращения, макс. и мин. значений, режима циклической генерации значений и

Изменение шага приращения, макс. и мин. значений, режима циклической генерации значений и
кэширования.
ALTER SEQUENCE dept_deptno
INCREMENT BY 1
MAXVALUE 999999
NOCYCLE
NOCACHE;
Sequence altered.

Изменение последовательности

Слайд 244

Для изменения последовательности необходимо быть её владельцем или иметь привилегию ALTER для

Для изменения последовательности необходимо быть её владельцем или иметь привилегию ALTER для
неё.
Команда влияет только на числа, генерируемые после изменения.
Чтобы начать последовательность с другого числа, необходимо удалить её и создать заново.

Изменение последовательности

Слайд 245

Для удаления последовательности используется команда DROP SEQUENCE.
SQL> DROP SEQUENCE dept_deptno;
Sequence dropped.

Удаление последовательности

Для удаления последовательности используется команда DROP SEQUENCE. SQL> DROP SEQUENCE dept_deptno; Sequence dropped. Удаление последовательности

Слайд 246

Используется для ускорения выборки строк с помощью указателя.
Уменьшает количество операций дискового ввода-вывода

Используется для ускорения выборки строк с помощью указателя. Уменьшает количество операций дискового
за счёт использования быстрого метода поиска данных.
Независим от таблицы, для которой был создан.
Автоматически используется и поддерживается сервером Oracle.

Понятие индекса

Слайд 247

Автоматически
-Уникальный индекс создаётся автоматически, если в
определении таблицы задано ограничение

Автоматически -Уникальный индекс создаётся автоматически, если в определении таблицы задано ограничение PRIMARY
PRIMARY KEY или UNIQUE.
Вручную
- Для ускорения доступа к строкам пользователи могут
создать неуникальные индексы

Создание индекса

Слайд 248

Создание индекса по одному или нескольким столбцам.
CREATE INDEX index
ON table (column[,

Создание индекса по одному или нескольким столбцам. CREATE INDEX index ON table
column]...);
Увеличение скорости доступа по столбцу ENAME таблицы EMP.
SQL> CREATE INDEX emp_ename_idx
ON emp(ename);
Index created.

Команда CREATE INDEX

Слайд 249

Представление словаря данных USER_INDEXES содержит имя индекса и информацию о его уникальности.
Представление

Представление словаря данных USER_INDEXES содержит имя индекса и информацию о его уникальности.
словаря данных USER_IND_COLUMNS содержит имя индекса, имя таблицы и имя столбца.
SELECT ic.index_name, ic.column_name,
ic.column_position col_pos, ix.uniqueness
FROM user_indexes ix, user_ind_columns ic
WHERE ic.index_name = ix.index_name
AND ic.table_name = ‘EMP’;

Проверка индексов

Слайд 250

Это индексы, основанные на каком-либо выражении.
Выражение может строиться на основе значений столбцов,

Это индексы, основанные на каком-либо выражении. Выражение может строиться на основе значений
констант, функций SQL или пользовательских функций.
SQL> CREATE TABLE test (col1 number);
SQL> CREATE INDEX test_index on test (col1, col1+10);
SQL> SELECT col1+10 FROM test;

Индексы, основанные на функции

Слайд 251

Удаление индекса
SQL> DROP INDEX index;
Удаление индекса EMP_ENAME_IDX
SQL> DROP INDEX emp_ename_idx;
Index dropped.
Для удаление

Удаление индекса SQL> DROP INDEX index; Удаление индекса EMP_ENAME_IDX SQL> DROP INDEX
индекса необходимо быть его владельцем или иметь привилегию DROP ANY INDEX.

Удаление индекса

Слайд 252

Синонимы (альтернативные имена объектов) упрощают
доступ к объектам:
Позволяют обращаться к таблицам других

Синонимы (альтернативные имена объектов) упрощают доступ к объектам: Позволяют обращаться к таблицам
пользователей.
Устраняют необходимость использования длинных имен объектов.
CREATE [PUBLIC] SYNONYM synonym
FOR object;

Синонимы

Слайд 253

Создание более короткого имени для представления DEPT_SUM_VU.
SQL> CREATE SYNONYM d_sum
FOR dept_sum_vu;
Synonym

Создание более короткого имени для представления DEPT_SUM_VU. SQL> CREATE SYNONYM d_sum FOR
created.
Удаление синонима.
SQL> DROP SYNONYM d_sum;
Synonym dropped.

Создание и удаление синонимов

Слайд 254

Безопасность базы данных
- Безопасность системы
- Безопасность данных
Системные привилегии: получение доступа к базе

Безопасность базы данных - Безопасность системы - Безопасность данных Системные привилегии: получение
данных.
Объектные привилегии: манипулирование содержимым объектов базы данных.
Схема: совокупность объектов, владельцем которых является пользователь

Привилегии

Слайд 255

Команда создания пользователя – CREATE USER:
CREATE USER user IDENTIFIED BY password;
SQL> CREATE

Команда создания пользователя – CREATE USER: CREATE USER user IDENTIFIED BY password;
USER scott IDENTIFIED BY tiger;
User created.

Создание пользователей

Слайд 256

Сразу после создания пользователя АБД может предоставить ему конкретные системные привилегии.
GRANT privilege

Сразу после создания пользователя АБД может предоставить ему конкретные системные привилегии. GRANT
[, privilege...]
TO user [, user...];
Разработчик приложения может иметь следующие системные привилегии:
- CREATE SESSION
- CREATE TABLE
- CREATE SEQUENCE
- CREATE VIEW
- CREATE PROCEDURE

Системные привилегии пользователя

Слайд 257

Сразу после создания пользователя АБД может предоставить ему конкретные системные привилегии.
SQL> GRANT

Сразу после создания пользователя АБД может предоставить ему конкретные системные привилегии. SQL>
create table, create sequence, create view
TO scott;
Grant succeeded.

Предоставление системных привилегий

Слайд 258

SQL> CREATE ROLE manager
Role created.
SQL> GRANT create table, create view
TO manager;
Grant

SQL> CREATE ROLE manager Role created. SQL> GRANT create table, create view
succeeded.
SQL> GRANT manager to BLAKE, CLARK;
Grant succeeded.

Создание роли

Слайд 259

Используется команда ALTER USER
SQL> ALTER USER scott IDENTIFIED BY lion;
User altered.

Изменение пароля

Используется команда ALTER USER SQL> ALTER USER scott IDENTIFIED BY lion; User altered. Изменение пароля пользователя
пользователя

Слайд 260

Объектные привилегии

Объектные привилегии

Слайд 261

Объектные привилегии разные для разных типов данных.
Владелец объекта имеет все привилегии на

Объектные привилегии разные для разных типов данных. Владелец объекта имеет все привилегии
этот объект.
Владелец может предоставлять конкретные привилегии на принадлежащий ему объект.
GRANT object_priv [(columns)]
ON object
TO {user|role|PUBLIC}
[WITH GRANT OPTION];

Объектные привилегии

Слайд 262

Предоставление привилегии на выполнение запросов к таблице EMP.
SQL> GRANT select
ON emp

Предоставление привилегии на выполнение запросов к таблице EMP. SQL> GRANT select ON
TO sue, rich;
Grant succeeded.
Предоставление привилегий пользователю и роли на обновление конкретных столбцов.
SQL> GRANT update (dname, loc)
ON dept
TO scott, manager;
Grant succeeded.

Предоставление объектных привилегий

Слайд 263

Предоставление полномочий пользователю на передачу привилегий.
SQL> GRANT select, insert
ON dept
TO

Предоставление полномочий пользователю на передачу привилегий. SQL> GRANT select, insert ON dept
scott;
WITH GRANT OPTION
Предоставление разрешения всем пользователям БД на выборку данных из таблицы DEPT, принадлежащей пользователю Alice.
SQL> GRANT select
ON alice.dept
TO PUBLIC;

WITH GRANT OPTION и PUBLIC

Слайд 264

Проверка предоставленных привилегий

Проверка предоставленных привилегий

Слайд 265

Для отмены привилегий, прелоставленных другим пользователям, используется команда REVOKE.
Одновременно отменяются привилегии, предоставленные

Для отмены привилегий, прелоставленных другим пользователям, используется команда REVOKE. Одновременно отменяются привилегии,
другим пользователям посредством опции WITH GRANT OPTION.
REVOKE {privilege [, privilege...]|ALL}
ON object
FROM {user [, user...]|role|PUBLIC}
[CASCADE CONSTRAINTS];

Отмена объектных привилегий

Слайд 266

Отмена пользователем ALICE привилегий SELECT и INSERT, предоставленных пользователю SCOTT на таблицу

Отмена пользователем ALICE привилегий SELECT и INSERT, предоставленных пользователю SCOTT на таблицу
DEPT.
SQL> REVOKE select, insert
ON dept
FROM scott;
Revoke succeeded.

Отмена объектных привилегий

Слайд 267


Расширение SQL

Расширение SQL

Слайд 268

Соединения SQL:1999

Тип соединения указывается явно в классе FROM
Предикаты соединения могут быть

Соединения SQL:1999 Тип соединения указывается явно в классе FROM Предикаты соединения могут
указаны в классе ON, выделенном из класса WHERE
Типы соединений:
Пересекающееся
Естественное
Эквивалентное (равное) и класс USING
Внешнее (полное, левое, правое)

Слайд 269

Пересекающееся соединение

Эквивалентно декартову произведению двух таблиц

SELECT c.country_name
, r,region_name
From countries c
CROSS JOIN
regions r;

Пересекающееся соединение Эквивалентно декартову произведению двух таблиц SELECT c.country_name , r,region_name From

Слайд 270

Естественное соединение

Объединение по эквивалентности, основанное на всех столбцах, у которых одинаковые

Естественное соединение Объединение по эквивалентности, основанное на всех столбцах, у которых одинаковые
наименования
Соединяющиеся столбцы должны иметь совместимые данные
Для соединяющихся столбцов нельзя использовать префикс псевдонима (или имени таблицы): ORA-25155

Слайд 271

Пример естественного соединения

SELECT department_id, location_id
, city, country_id
From departments NATURAL JOIN
locations;

Пример естественного соединения SELECT department_id, location_id , city, country_id From departments NATURAL JOIN locations;

Слайд 272

Эквивалентное соединение и класс USING

Отдельно от естественного соединения можно создать правильное

Эквивалентное соединение и класс USING Отдельно от естественного соединения можно создать правильное
эквивалентное соединение с классом USING
Не должно быть префикса на столбцы в классе USING: ORA-25154
Ключевые слова NATURAL и USING взаимоисключающие

Слайд 273

Пример класса USING

SELECT e.employee_id, e.last_name
, d.location_id
From employees e JOIN
departments d USING (department_id)
Where rownum

Пример класса USING SELECT e.employee_id, e.last_name , d.location_id From employees e JOIN
< 6

Слайд 274

Предикаты соединения и класс ON

Используются для разделения предикатов соединения от других

Предикаты соединения и класс ON Используются для разделения предикатов соединения от других
предикатов
Класс ON позволяет использовать любые предикаты, включая подзапросы и логические операторы

Select e.employee_id, e.last_name
, d.department_id, d.location_id
From employees e JOIN
departments d ON
(e.department_id = d.department_id)
Where manager_id = 102;

Слайд 275

Трехстороннее соединение с классом ON

SELECT d.department_name
, l.city, c.country_name
From departments d
JOIN locations l ON
(d.location_id =

Трехстороннее соединение с классом ON SELECT d.department_name , l.city, c.country_name From departments
l.location_id)
JOIN countries c ON
(l.country_id = c.country_id)
Where c.region_id = 1;

Слайд 276

Внешние соединения

Типы: LEFT, RIGHT, FULL
Больше внушительности и наглядности, чем оператор (+)

PROD

Внешние соединения Типы: LEFT, RIGHT, FULL Больше внушительности и наглядности, чем оператор
TYPE

TYPE DESCR

Слайд 277

Пример внешнего соединения

SELECT p.prod, p.type
, t.type, t.descr
From p {LEFT|RIGHT|FULL} OUTER JOIN
t ON

Пример внешнего соединения SELECT p.prod, p.type , t.type, t.descr From p {LEFT|RIGHT|FULL}
(p.type = t.type);

LEFT

RIGHT

Слайд 278

Усовершенствованные CASE выражения

4 типа в SQL:1999:
Простое
Поисковое
NULLIF
COALESCE

Усовершенствованные CASE выражения 4 типа в SQL:1999: Простое Поисковое NULLIF COALESCE

Слайд 279

Простое CASE выражение

Аналогично функции DECODE
Поиск и замена значений внутри выражения

Select e.last_name
, (CASE

Простое CASE выражение Аналогично функции DECODE Поиск и замена значений внутри выражения
extract (year from e.hire_date)
WHEN 1996 THEN ‘ 5 years of service’
WHEN 1991 THEN ‘10 years of service’
WHEN 1986 THEN ‘15 years of service’
ELSE ‘ may be next year!’
END) as “Awards for 2004”
From employees e;

Слайд 280

Поисковое CASE выражение

Аналогично конструкции IF…THEN …ELSE
Поиск по условию и замена значений

Поисковое CASE выражение Аналогично конструкции IF…THEN …ELSE Поиск по условию и замена
внутри выражения

Select e.first_name, e.last_name, e.job_id
, (CASE
WHEN e.job_id LIKE ‘AD%’ THEN ’10%’
WHEN e.job_id LIKE ‘IT%’ THEN ’15%’
WHEN e.first_name = ‘Lex’ THEN ’18%’
ELSE ‘ 0%’
END) as “Raise”
From employees e;

Слайд 281

NULLIF и COALESCE

NULLIF (expr1, expr2) ⬄
CASE WHEN expr1 = expr2
THEN NULL
ELSE expr1
END

COALESCE

NULLIF и COALESCE NULLIF (expr1, expr2) ⬄ CASE WHEN expr1 = expr2
(expr1, expr2, expr3, …) ⬄
CASE WHEN expr1 IS NOT NULL
THEN expr1
ELSE COALESCE(expr2, expr3, …)
END

Слайд 282

Скалярные подзапросы

Возвращают одну строку с одним значением столбца
Ограниченная поддержка в Oracle8i
В Oracle9i

Скалярные подзапросы Возвращают одну строку с одним значением столбца Ограниченная поддержка в
разрешены в любом месте, где может быть использовано скалярное выражение
Тип данных возвращаемого значения должен совпадать со значением, выбранным в подзапросе

Слайд 283

Пример скалярного подзапроса

Select d.department_name
, (select count(*)
from employees e
where e.department_id =
d.department_id) as empcount
From departments

Пример скалярного подзапроса Select d.department_name , (select count(*) from employees e where
d;

Слайд 284

Явный DEFAULT

Insert into employees
(employee_id, first_name, department_id)
Values (1, ‘Scott’, DEFAULT);
Update employees
Set department_id =

Явный DEFAULT Insert into employees (employee_id, first_name, department_id) Values (1, ‘Scott’, DEFAULT);
DEFAULT
Where department_id = 10;

Слайд 285

Команда MERGE

Известна также как “upsert”
Производит обновление, если строки выполнены, в противном случае

Команда MERGE Известна также как “upsert” Производит обновление, если строки выполнены, в
выполняется вставка
Важна для приложений в хранилище данных
Лучшая производительность, требуется меньше сканирований команд и таблиц-источников

MERGE INTO t1
USING t2 ON (join_predicate)
WHEN MATCHED THEN UPDATE SET …
WHEN NOT MATCHED THEN INSERT (…) VALUES (…)

Слайд 286

Фраза GROUPING SETS

надмножество GROUP BY {ROLLUP|CUBE}
Выдает единственный результат, который эквивалентен приблизительно

Фраза GROUPING SETS надмножество GROUP BY {ROLLUP|CUBE} Выдает единственный результат, который эквивалентен
UNION ALL

Select time_id, channel_id, prod_id
sum(amount_sold) as amount
From sales
Group by GROUPING SETS
((time_id, channel_id, prod_id)
, (time_id, channel_id)
, (channel_id, prod_id)
);

Слайд 287

Составные столбцы

Обработка группы столбцов как одной единицы:
GROUP BY ROLLUP (a, b

Составные столбцы Обработка группы столбцов как одной единицы: GROUP BY ROLLUP (a,
,c) возвращает 4 группы
GROUP BY ROLLUP (a, (b ,c)) возвращает 3 группы

Select …
From sales
Where …
Group by rollup
((prod_id, (channel_id, time_id));

Слайд 288

Связанные группы

Перемножение многочисленных групп
Задаются перечислением многочисленных GROUPNG SETS, CUBE, ROLLUP

Select prod_id, channel_id,

Связанные группы Перемножение многочисленных групп Задаются перечислением многочисленных GROUPNG SETS, CUBE, ROLLUP
time_id
sum(amount_sold)
From sales
Where …
Group by prod_id
Cube (channel_id)
Rollup (time_id);

Слайд 289

Класс WITH

Наименование блока запроса в команде SELECT для ссылки, если несколько блоков

Класс WITH Наименование блока запроса в команде SELECT для ссылки, если несколько
в запросе
Класс WITH может содержать многочисленные блоки в запросе, разделенные запятыми
Реализованы как встроенные представления или временные таблицы