
- •1. История возникновения баз данных
- •2. Системы управления базами данных
- •1. Непосредственное управление данными во внешней памяти
- •2. Управление буферами оперативной памяти
- •3. Управление транзакциями
- •4. Журнализация
- •5. Поддержка языков бд
- •3. Классификация баз данных
- •4. Проектирование реляционных баз данных
- •1) Создание концептуальной модели бд.
- •2) Создание логической модели бд.
- •3) Создание физической модели бд.
- •5. Логическая модель базы данных
- •5.1. Основные понятия
- •5.2. Нормализация данных
- •5.3. Иерархия категорий
- •6. Правила ссылочной целостности
- •7. Язык обработки данных sql и его особенности в субд Oracle
- •7.1. Основные объекты Oracle
- •7.2. Основные типы данных Oracle
- •7.2.1. Типы данных для хранения строк символов
- •7.2.2. Типы данных для хранения чисел
- •7.2.3. Специальный тип rowid
- •7.2.4. Тип данных для хранения даты и времени
- •7.2.5. Типы данных для хранения больших объемов информации
- •7.3. Создание, модификация и удаление таблиц
- •7.4. Вставка, выборка, модификация и удаление записей таблиц
- •7.4.1. Операции вставки строк
- •7.4.2. Операции выборки строк
- •Select p.*, d.* from project p, department d
7.4. Вставка, выборка, модификация и удаление записей таблиц
После изучения вопросов, связанных с созданием и модификацией структуры таблиц, закономерно возникает вопрос о том, каким образом можно создавать, модифицировать, удалять данные, которые будут в них храниться, а также получать доступ к данным.
В данном случае необходимо перейти от изучения языка определения данных DDL (Data Definition Language) к изучению языка манипуляции данными DML (Data Manipulation Language).
Рассмотрим последовательно все основные операции, выполняемые над информацией, которая хранится в таблицах базы данных.
7.4.1. Операции вставки строк
Для выполнения вставки строк в таблицы предназначен оператор INSERT, который имеет следующий синтаксис:
INSERT INTO [имя_схемы.]имя_таблицы
[(имя_колонки1, имя_колонки2, ...)]
VALUES (выражение1, выражение2, ...)
Необязательный параметр имя_схемы используется для уточнения имени схемы, в которой находится таблица Oracle. По умолчанию используется схема пользователя, выполняющего операцию.
Перечисление колонок (имя_колонки1, имя_колонки2, ...) является необязательным. В случае его отсутствия подразумевается, что при вставке строки будут заполнены поля соответствующие всем колонкам, при этом порядок следования колонок будет использоваться тот, который был задан при создании таблицы с помощью команды CREATE TABLE.
Параметры (выражение1, выражение2, ...) заменяются на вычисляемые значения.
Рассмотрим использование команды INSERT на примерах. Пусть таблица project была создана следующей командой:
CREATE TABLE project (
proj_no NUMBER(4),
proj_name VARCHAR2(30),
bdate DATE,
budget NUMBER(10,2) )
Тогда для вставки строк в таблицу project можно использовать следующие команды:
INSERT INTO project (proj_name, proj_no, budget, bdate,) VALUES (’Проект 1’,1, ,123.45, TO_DATE(’01.06.2009’,’DD.MM.YYYY’))
INSERT INTO project (proj_no, proj_name) VALUES (2, ’Проект 2’)
INSERT INTO project VALUES (1, ’Проект 1’, TO_DATE(’01.06.2009’,’DD.MM.YYYY’), 123.45)
В команде (1) перечислены все колонки таблицы project в произвольном порядке. После ключевого слова VALUES записаны выражения, значения которых будут вычислены и помещены в соответствующие поля таблицы project.
При заполнении колонок, имеющих тип DATE, в прикладных программах пользовательский интерфейс позволяет вводить дату в обычном национальном формате (например, 2 символа числа, 2 символа месяца и 4 символа года, разделенные точкой). Однако при составлении запроса, выполняющего вставку строки, в которой есть колонки типа DATE, необходимо использовать встроенную функцию TO_DATE, которой в качестве параметров передаются строка, содержащая дату (’01.06.2009’), и строка, содержащая формат даты (’DD.MM.YYYY’).
В команде (2) перечислены не все колонки. При выполнении такой команды поля, соответствующие отсутствующим колонкам, будут заполнены неопределенным (NULL) значением.
В команде (3) перечисление колонок отсутствует, то есть по умолчанию подразумеваются тот состав и тот порядок колонок, которые были использованы в команде CREATE TABLE.
Строки, которые необходимо вставить в таблицу, могут быть результатом запроса к другой таблице или представлению. При этом синтаксис команды INSERT будет иметь следующий вид:
INSERT INTO [имя_схемы.]имя_таблицы
[(имя_колонки1, имя_колонки2, ...)]
подзапрос
В данной конструкции подзапрос представляет собой конструкцию на языке SQL, предназначенную для выборки строк из одной или нескольких таблиц или представлений.
Для примера рассмотрим ситуацию, когда существуют две таблицы project и project1, имеющие одинаковую структуру и порядок следования колонок. Тогда вставка всех строк таблицы project1 в таблицу project может быть представлена следующими командами:
INSERT INTO project SELECT * FROM project1
INSERT INTO project (proj_no, proj_name) SELECT proj_no, proj_name FROM project1
Подзапрос должен возвращать колонки тех типов и в той последовательности, которая должна быть вставлена в таблицу. В команде (1) по умолчанию выбираются все колонки и все строки таблицы project1 и вставляются в таблицу project. В команде (2) выбираются только колонки proj_no и proj_name таблицы project1, значения которых затем вставляются в строки таблицы project.