- •Информационное обеспечение систем управления Построение запросов при работе с базой данных (Учебное пособие)
- •Тестовая база данных
- •Выборка данных. Команда select
- •Синтаксис оператора select
- •Простые варианты поиска данных
- •Упорядочение результата запроса. Предложение order by
- •Использование ключевого слова distinct
- •Предложение where
- •Синтаксис предложения where
- •Использование операторов сравнения
- •Использование варианта between
- •Проверка на присутствие в списке значений (вариант in)
- •Проверка на пустое значение
- •Поиск в строковых столбцах
- •Вариант like
- •Использование логических операций в условиях поиска
- •Порядок выполнения логических операций
- •Преобразование данных при выборке
- •Обобщение Данных с помощью Агрегатных Функций
- •Использование distinct с count
- •Предложение group by
- •Предложение having
- •Соединение таблиц
- •Внутренние соединения (связывание по равенству)
- •Внешние соединения
- •Левое внешнее соединение
- •Правое внешнее соединение
- •Полное внешнее соединение
- •Более сложные примеры соединений
- •Рефлексивное соединение, или самосоединение
- •Использование подзапросов в операторах sql
- •Выбор одного
- •Использование в подзапросе агрегатных функций
- •Связанные подзапросы
- •Использование оператора exists
- •Использование варианта in с подзапросами
- •Использование not exists
- •Объединение запросов
- •Команда union
- •Добавление данных. Команда insert
- •Добавление отдельной строки
- •Добавление группы строк
- •Обновление уже имеющихся данных. Команда update
- •Удаление данных из таблиц. Команда delete
- •Генераторы и их использование
- •Создание генераторов
- •Использование генераторов
- •Увеличение значения генератора
- •Получение значения генератора в приложение
- •Триггер
Добавление данных. Команда insert
Команда INSERT предназначена для добавления данных в базу. С ее помощью можно добавить в указанную таблицу или представление одну или сразу несколько строк.
Добавление отдельной строки
При добавлении отдельной строки в списке INTO перечисляются столбцы, в которые вводятся значения, а сами значения задаются в списке VALUES. Вместо списка столбцов можно указать символ "*"; в этом случае предполагается, что вводятся значения всех столбцов таблицы в специфицированном при создании таблицы порядке. Поскольку порядок столбцов может изменяться, то такая конструкция является потенциально опасной и лучше ее не применять.
Рассмотрим добавление строки в таблицу CITY.liii
INSERT INTO CITY (CT_CODE, CT_NAME) VALUES (11, 'Челябинск');
В данном случае вводимые значения задавались как константы, но вместо них могут стоять и любые допустимые в SQL выражения, возвращающие единственное значение, в том числе и конструкции SELECT. Покажем как добавить новый аэропорт для города 'Челябинск', при этом код города получим как результат запроса: liv
INSERT INTO AIRPORT (AP_CODE, AP_NAME, AP_CT_CODE)
VALUES (17, 'Чикменево',
(SELECT CT_CODE FROM CITY WHERE CT_NAME = 'Челябинск'))
Добавление группы строк
Одной командой INSERT можно добавить в таблицу и несколько строк. Перечень добавляемых строк в этом случае задается конструкцией SELECT.
В качестве примера рассмотрим добавление в таблицу EQUIPAGE нескольких строк – назначим на рейс авиалинии (AIRLINE) № 901 от '16.02.2008' тех же самых бортпроводников, которые были назначены '14.02.2008'. Для этого нам потребуется при помощи запроса получить коды бортпроводников входивших в экипаж выполнявший 14 февраля 2008г. рейс на линии № 901.
Получаем следующий запрос на вставку строк: lv
INSERT INTO EQUIPAGE
(EQ_PR_CODE, EQ_FL_DATE, EQ_RNK_CODE, EQ_FL_NUM)
SELECT EQ_PR_CODE, '16.02.2008', EQ_RNK_CODE, '901'
FROM EQUIPAGE EQ INNER JOIN RANK R
ON R.RNK_CODE = EQ.EQ_RNK_CODE
WHERE R.RNK_NAME = 'Бортпроводник'
AND EQ.EQ_FL_NUM = '901' AND EQ.EQ_FL_DATE = '14.02.2008'
В результате выполнения внутреннего SELECT находим коды личностей членов экипажа (EQ_PR_CODE) и код (EQ_RNK_CODE) соответствующий коду бортпроводника, поля «Дата вылета» (EQ_FL_DATE) и «Номер маршрута» (EQ_FL_NUM) будут заданы как константы. Таким образом, команда INSERT вставит в таблицу EQUIPAGE столько строк, сколько возвращает внутренний запрос.
Если студент был внимателен, он должен был заметить что в списке столбцов добавляемых в таблицу EQUIPAGE отсутствует первичный ключ – код члена экипажа (EQ_ CODE). В самом деле, мы не можем вставлять его для набора строк, так как для каждой строки он должен быть уникален. Мы можем выполнить приведенный запрос благодаря использованию триггеров, о чем будет рассказано в дальнейшем.
Обновление уже имеющихся данных. Команда update
Уже существующие в таблице данные можно изменить с помощью команды UPDATE. Команда UPDATE не добавляет новых записей в таблицу и не удаляет их, а только дает возможность изменить данные. С помощью одной такой команды можно изменить данные только одной таблицы, но одновременно можно менять данные нескольких столбцов. Одним таким оператором можно изменить и одну строку данных и целый набор строк.
Рассмотрим синтаксис подходящего оператора.
UPDATE имя_таблицы
SET столбец! = 'значение'
[, столбецЗ = 'значение']
[, столбецЗ = 'значение'] [WHERE условие];
Обратите внимание на использование ключевого слова SET' оно одно, а описаний столбцов — несколько. Описания столбцов разделяются запятыми. К этому моменту вы, должно быть, уже почувствовали логику SQL. В операторах SQL запятая обычно используется для разделения различного типа аргументов.
Изменим фамилию у одной из женщин из таблицы PERSON, запрос на изменение будет иметь вид: lvi
UPDATE PERSON SET PR_NAME = 'Смирнова'
WHERE PR_NAME ='Оборина'
AND PR_NAME2 = 'Юлия'
AND PR_NAME3 = 'Витальевна'
AND PR_BIRTHDAY = '02.10.1984'
При использовании оператора UPDATE без ключевого слова WHERE нужно быть исключительно внимательным При отсутствии заданных ключевым словом WHERE условий данные в соответствующем столбце будут обновлены для всех строк данных. В нашем случае это бы означало, что фамилии всех людей станут «Смирнова». Оператор UPDATE без ключевого слова WHERE используется очень редко.
