- •Раздел 1 sql
- •Раздел 1
- •1 Основные сведения о субд Oracle
- •2. Общие сведения о sql
- •3. Основные правила написания sql-операторов
- •4. Инструкции dml
- •5. Инструкция select
- •6. Предложения select и from
- •7. Отбор строк (предложение where)
- •8. Многотабличные запросы
- •9. Многотабличные запросы на выборку в Oracle
- •10. Предложения group by и having
- •11. Статистические функции
- •12. Подчиненные запросы (подзапросы)
- •13. Добавление данных (инструкция insert)
- •14. Удаление данных (инструкция delete)
- •15. Обновление данных (инструкция update)
- •16. Инструкции ddl
- •17. Стандартные Типы данных sql
- •18. Создание таблиц (инструкция create table)
- •19. Удаление таблицы (инструкция drop table)
- •20. Изменение определения таблицы (инструкция alter table)
- •21. Условия целостности данных
- •22. Создание представлений
- •23. Псевдонимы таблиц (инструкции create / drop synonym)
- •24. Индексы (инструкции create/drop index)
- •25. Последовательности (инструкция create/drop sequence)
- •26. Транзакции
- •27. Журнал транзакций. Проблемы обработки параллельных транзакций
- •28. Блокировки транзакций
- •29. Понятие транзакции и виды блокировок Oracle
- •30. Концепция многоверсионной модели согласованности по чтению
- •31. Управление транзакциями в Oracle
- •32. Принципы защиты данных в стандартном sql (без редакции)
- •33. Разрешение и запрещение ролей
- •34. Способы обеспечения безопасности в Oracle
- •Аутентификация
- •Профили
- •Привилегии
- •Для предоставления системных привилегий или ролей:
- •Для предоставления привилегий доступа к объектам схемы:
- •Для изъятия системных привилегий или ролей:
- •Для изъятия привилегий доступа к объектам:
- •Другие возможности обеспечения безопасности
4. Инструкции dml
К DML инструкциям в Oracle относятся команды вставки, обновления, удаления, чтения, изменения способа работы сервера при обращении к данным.
Перечислим основные DML инструкции в таблице:
Таблица
Инструкция |
Назначение |
ALTER SESSION |
изменяет функциональные характеристики текущего сеанса связи с БД (+NLS) многие из параметров определены в файле инициализации INTT.DBA или SPFILE |
ANALYZE |
собирает или удаляет статистическую информацию об объекте БД, проверяет структуру объекта или идентифицирует переменные и сцепленные строки таблицы (кластера). |
DELETE |
удаляет строки из таблицы, представления или моментальной копии |
EXPAIN PLAN |
создаёт пояснение для плана использования (исполнения) команды SQL. |
INSERT INTO |
вставка строки данных в таблицу или представление |
MERGE INTO |
выбирает строки таблицы для обновления или вставки в другую таблицу(с Oracle9i Release 2) (позволяет избегать многократного использования INSERT, UPDATE) |
SAVE POINT точка сохранения |
определяет точку сохранения транзакции, до которой можно было выполнить откат при помощи команды ROLLBACK |
SELECT |
извлекаем данные из таблиц, представлений и момент копий |
SET CONSTRAINT |
задаёт на уровне транзакций, будут ли ограничения проверяться после каждой DML команды или только в конце транзакций |
SET ROLE |
включить или отключить роль для текущего сеанса |
SET TRANSACTION |
установить базовые характеристики транзакции |
TRUNCATE |
удаляет все строки из таблицы или кластера (не создаёт записей отката, выполняется быстро, аналог DELETE FROM) |
UPDATE |
изменяет значение, хранящегося в одном или нескольких столбцах данных в одной или нескольких таблицах, представлениях или моментальных копиях |
В стандарте SQL описаны наиболее распространенные инструкции SELECT, INSERT INTO, UPDATE и DELETE, которые подробно рассмотрены далее.
5. Инструкция select
Общие сведения о предложении SELECT. Все запросы на получение практически любого количества данных из одной или нескольких таблиц выполняются с помощью предложения SELECT. В общем случае результатом реализации предложения SELECT является другая таблица. К этой новой таблице может быть снова применена операция SELECT и т.д., т.е. такие операции могут быть вложены друг в друга.
Предложение SELECT может использоваться как:
самостоятельная команда на получение и вывод строк таблицы, сформированной из столбцов и строк одной или нескольких таблиц (представлений);
элемент WHERE- или HAVING-условия ("вложенный запрос");
фраза выбора в командах CREATE VIEW, DECLARE CURSOR или INSERT;
средство присвоения глобальным переменным значений из строк сформированной таблицы (фраза INTO).
Инструкция SELECT – наиболее мощная из всех SQL-инструкций и, по сути, аналогична таким операторам реляционной алгебры как SELECTion, projection, join.
Инструкция SELECT состоит из шести предложений.
Предложения SELECT и FROM являются обязательными. Четыре остальных включаются в инструкцию только при необходимости. Ниже перечислены функции каждого из предложений.
В предложении SELECT указывается список столбцов, которые должны быть возвращены инструкцией SELECT. Возвращаемые столбцы могут содержать значения, извлекаемые из столбцов таблиц базы данных, или значения, вычисляемые во время выполнения запроса.
В предложении FROM указывается список таблиц, которые содержат элементы данных, извлекаемые запросом.
Предложение WHERE показывает, что в результаты запроса следует включать только некоторые строки. Для отбора строк, включаемых в результаты запроса, используется условие отбора.
Предложение GROUP BY позволяет создать итоговый запрос. Обычный запрос включает в результаты запроса по одной записи для каждой строки из таблицы. Итоговый запрос, напротив, вначале группирует строки базы данных по определенному признаку, а затем включает в результаты запроса одну итоговую строку для каждой группы.
Предложение having показывает, что в результаты запроса следует включать только некоторые из групп, созданных с помощью предложения GROUP BY. В этом предложении, как и в предложении WHERE, для отбора включаемых групп используется условие отбора.
Предложение order by сортирует результаты запроса на основании данных, содержащихся в одном или нескольких столбцах. Если это предложение не указано, результаты запроса не будут отсортированы.
Полный формат инструкции SELECT, применяемой в Oracle имеет вид:
SELECT [{DISTINCT | UNIQUE | ALL}]
{[схема.]{[имя_таблицы. | представление. | моментальная_копия.]. имя_столбца}
| выражение [[AS] псевдоним] [, выражение [[AS] псевдоним]…]
| *}
FROM
{имя_таблицы [@связь_БД] [AS OF {SCN | TIMESTAMP} выражение]
| имя_таблицы PARTITION (имя_раздела) [AS OF {SCN | TIMESTAMP} выражение]
| имя_таблицы SUBPARTITION (имя_подраздела) [AS OF{SCN | TIMESTAMP} выражение]
| имя_таблицы SAMPLE[BLOCK] процент_выборки [AS OF{SCN | TIMESTAMP} выражение]
| представление[@связь_БД] [AS OF {SCN | TIMESTAMP} выражение]
| представление PARTITION (имя_ раздела) [AS OF {SCN | TIMESTAMP} выражение]
| представление SUBPARTITION (имя_подраздела) [AS OF {SCN | TIMESTAMP} выражение]
| представление SAMPLE [BLOCK] процент_выборки [AS OF {SCN | TIMESTAMP} выражение]
| моментальная_копия[@связь_БД] [AS OF{SCN | TIMESTAMP} выражение]
| моментальная_копия PARTITION (имя_ раздела) [AS OF {SCN | TIMESTAMP} выражение]
| моментальная_копия SUBPARTITION (имя_подраздела) [AS OF {SCN | TIMESTAMP} выражение]
| моментальная_копия SAMPLE [BLOCK] процент_выборки [AS OF {SCN | TIMESTAMP} выражение]
| (подзапрос)
| имя_таблицы
{[тип_соединения] JOIN имя_таблицы
{ ON условие
|USING (столбец [столбец]…)
|{CROSS JOIN|NATURAL [тип_соединения] JOIN имя_таблицы}
}
[, [псевдоним_таблицы]
[, имя таблицы …]
[WHERE условие]
{[GROUP BY {выражение | {выражение [, выражение …]}
| CUBE (выражение [, выражение …])
| ROLLUP (выражение [, выражение …])
}
GROUPING SETS (
{выражение | {выражение [, выражение …]}
|CUBE (выражение [, выражение …])
|ROLLUP (выражение [, выражение …])
}
[HAVING условие]
[[START WITH условие] CONNECT BY условие]
[{UNION [ALL]] | INTERSECT | MINUS} {подзапрос}
[,{UNION [ALL] | INTERSECT | MINUS} {подзапрос}…]]
[ORDER BY{выражение | позиция | псевдоним} [ASC | DESC]
[, {выражение | позиция | псевдоним} [ASC | DESC] …]
FOR UPDATE[OF] {таблица | представление}.столбец
[{таблица | представление}.столбец ]
[NOWAIT]
При описании инструкции используются следующие ключевые слова:
DISTINCT – указывает, что должна быть возвращена только одна копия строки, даже в случае наличия дубликатов строк;
AS задает псевдоним для столбца или выражения, может отсутствовать;
ALL указывает, что должны быть возвращены все строки, включаю дубликаты. По умолчанию ALL.
AS OF обеспечивает работу с данными по состоянию на конкретный номер системного изменения (SCN) или временную метку как указывает выражение;
SAMPLE [BLOCK] -выполняется случайная (или блочная) выборка строк таблицы;
START WITH – указывает строки, выступающие в качестве корневых в иерархическом запросе (если эти ключевые слова пропущены, то все строки таблицы считаются корневыми);
CONNECT BY – определяет отношение между родительскими и дочерними строками иерархии;
INNER внутреннее соединение (установлено по умолчанию);
RIGHT правое внешнее соединение;
LEFT левое внешнее соединение;
FULL полное внешнее соединение;
ON условие задает условие соединения, которое не привязано к условию WHERE;
USING - соединение по равенству для столбцов, имеющих одинаковые имена;
CROSS JOIN - перекрёстное соединение, т.е. прямое произведение двух отношений;
NATURAL - естественное соединение по одноименным столбцам двух таблиц с одинаковыми значениями;
JOIN - явное указание на соединение, эквивалентно перечислению таблиц через запятую;
CUBE группировка на основе всех возможных комбинаций значений предложенного списка отношений;
ROLLUP группировка на основе значений предложенного списка выражений и сводных строк, возвращённых для каждого выражения наряду с дополнительной строкой общего итога;
GROUPING SETS – задает несколько групп данных для более удобного агрегирования (если указаны только нужные группы, то серверу не приходится выполнять все множество агрегатирований, которые требуют CUBE и ROLLUP);
FOR UPDATE [OF] – означает, что выбранные строки будут заблокированы. Если указывается ключевое слово OF, то будут заблокированы только строки названной таблицы;
NOWAIT – означает, что если таблица уже заблокирована, то сервер Oracle не будет ждать снятия блокировки.