Пиши Дома Нужные Работы

Обратная связь

Insert into secondpart (uniq_id)

Select firstpart.uniq_id from firstpart

Where

Not exists

(Select seconpart.uniq_id from secondpart Where

firstpart.uniq_id = secondpart.uniq_id )

 

Рассмотрим в подробностях пример записанный выше.

Добавляет записи во вторую таблицу с кодом uniq_id - такие что, записи с этим uniq_id существуют в первой части (first_part) и не существуют во второй.

Оператор Select используемый в операторе Insert в свою очередь использует связанный подзапрос для нахождения таких строк из первой таблицы для которых нет соответствия во второй. Результатом выполнения оператора Select является столбец из uniq_id’ов которые добавляются во вторую таблицу. Для оценки результатов самого внутреннего запроса используется оператор EXISTS.

EXISTS - оператор, применяемый для образования предиката, фиксирующего будет ли подзапрос генерировать выходные данные.

EXISTS - принимает значение “истина” если подзапрос используемый в качестве аргумента генерирует выходные данные, и “ложь” в противном случае. В отличии от прочих операторов и предикатов, он не может принимать значения “неизвестно” (unknown). В примере EXISTS выбирает один столбец, аналогично предыдущим примерам. На самом деле несущественно сколько столбцов извлекает EXISTS поскольку он не применяет полученных значений, а только фиксирует наличие данных.

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

 

 

Объединение множества запросов в один.

Все предшествующие примеры показывают различные варианты запросов с расположением “один внутри другого”. Существует другой способ объединения множества запросов - их объединение с использованием предложения UNION.



 

Объединения (unions) отличаются от подзапросов тем, что любой из запросов не может управлять другим запросом. В объединении все запросы выполняются независимо, но их выходные данные затем объединяются. UNION объединяет выходные данные двух или более SQL - запросов в единое множество строк и столбцов.

 

Для выполнения команды UNION столбцы запросов входящие в состав выходных данных должны быть совместимы по объединению (union compatible).

- одинаковое количество столбцов (столбцы должны быть сравнимы по объединению)

Одинаковые типы данных(тип и длина - числовые)

Для символьных данных (тип и длина - строгость ограничений зависит от конкретного продукта )

Если для одного столбца установлено ограничение NOT NULL то это ограничение должно быть у соответствующих столбцов других запросов.

 

Синтаксис:

 

select -without-order-by

... UNION [ALL] select-without-order-by

... [ UNION [ALL] select-without-order-by ] ...

... [ ORDER BY integer [ ASC | DESC ], ... ]

 

Для повышения наглядности (и удобства) (например, комментарии из какого конкретно запроса получена данная строка) можно вставлять константы и выражения в операторы select использующие Union. При этом константы должны удовлетворять условиям сравнимости.

 

Alter procedure

Yura.get_param(in sta_ char(15),in typ char(20),in metall char(15),in otpr char(20),in pol char(20),in otvets char(20),in from_ char(20),in to_ char(20),in stn_o char(20),in stn_n char(20),in kontr char(20))

result(stats smallint,"\\x27num_fr\\x27" char(6))

Begin

(select status.stats,'status' from status

where status.name_s=sta_

Union select types.typ_num,'types ' from types

where types.name_t=typ

Union select owners.own_num,'owners' from owners

where owners.name_otv=otvets

Order by 2 asc

 

 

Команды изменения данных DML

 

Команда добавления новых записей в таблицу.

Format 1

INSERT INTO [ owner.]table-name [( column-name, ... )]

... VALUES ( expression | DEFAULT, ... )

 

Format 2

INSERT INTO [ owner.]table-name [( column-name, ... )]

... select-statement

 

Назначение

Для добавления одной записи используется формат 1.

Предложение DEFAULT может быть использовано для присвоения столбцу значений заданных для него по умолчанию. Если необязательный список имен столбцов задан то, значения из списка переносятся в указанные столбцы. Если список столбцов не указан - значения записываются в столбцы в том порядке в котором они были созданы ( такой же порядок получается при использовании SELECT *). Записи добавляются в таблицу в произвольную позицию. (В реляционных БД таблицы не упорядочены.)

 

Insert в формате 2 используется для добавления результатов запроса в указанную таблицу.

 

Ограничения доступа:

Пользователь должен иметь доступ по INSERT к указанной таблице table.

 

Формат 2 позволяет пользователю одной операцией добавлять в таблицу результаты сгенерированные оператором SELECT общего вида(без ограничений).Записи добавляются в произвольном порядке вне зависимости от того содержит ли оператор SELECT предложение ORDER BY. Столбцы в операторе SELECT должны совпадать со столбцами указанными в списке оператора INSERT или физическому порядку столбцов в таблице.( порядку в котором они были созданы ( такой же порядок получается при использовании SELECT *)).

 

 

Examples

 

Insert into Fam Values (123,’Склеймин’)

 

Вставка NULL значений

В команде Insert могут быть указаны имена столбцов:

 

Insert into Fam (fam_cod, fam_val) Values (123,’Склеймин’)

 

INSERT INTO department ( dept_id, dept_name )

VALUES ( 230, 'Eastern Sales' )

 

 

Команда обновления значений столбцов

 

UPDATE table-list

... SET column-name = expression, ...

... [ WHERE search-condition ]

... [ ORDER BY expression [ ASC | DESC ] ,... ]

 

Ограничение по правам доступа:

Для пользователя д.б. разрешено выполнения UPDATE для тех столбцов, которые он пытается модифицировать..

 

Оператор UPDATE используется для изменения строк одной или более таблиц.(в новых стандартах и реализациях)

Стандарт SQL(старый) не допускает изменения нескольких таблиц одной командой Update, т.к. в выражении <column-name> нельзя указывать имя таблицы.

 

Каждый указанный столбец принимает значение выражения указанного справа от знака равенства. Структура выражения никак не ограничена. <column-name> может быть использовано в выражении — существующие значение будет использовано.

Если предложение Where не указано будут изменены все записи в таблице.

Если Where присутствует в команде - будут обновлены только те записи, которые удовлетворяют предикату <search-cond>.

 

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

Update разрешает использование подзапросов внутри предиката.

 

Счета в таблице нумеруются начиная с ID 2001.

Запрос перенумеровывает все существующие счета вычитанием 2000 из поля id.

 

UPDATE sales_order_items AS items ,

sales_order AS orders

SET items.id = items.id - 2000,

orders.id = orders.id - 2000 ;

 

Update cust Set raiting=200

 

Обновление нескольких столбцов одной командой

 

Update cust Set raiting=200, city=‘Москва’ WHERE snum=101

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

Контрольные вопросы

1. В чем особенность выражений с подзапросами?

2. Каковы преимущества использования агрегатных функций в подзапросах?

3. Сформулируйте алгоритм выполнения связанных подзапросов.

4. Перечислите ограничения при выполнении оператора Union.

5. Перечислите операторы изменяющие данные в таблицах.

 

 

Лекция 8

Команда удаления строк DELETE

 

Syntax

 

DELETE [FROM] [ owner.]table-name

... [FROM table-list]

... [WHERE search-condition]

Применение

Для удаления записей из БД.

Ограничения

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

 

Оператор DELETE удаляет все записи удовлетворяющие условию WHERE из указанной таблицы. Если WHERE не указано, все записи в таблице будут удалены.

 

Удаляет строки целиком - не может быть использована для удаления значений отдельных полей.(Не нужно указывать имя поля).

 

Примеры

Удаляет поставщика из таблицы (по значению emp_id)

 

DELETE

FROM employee

WHERE emp_id = 105

 

Удаляет записи из таблицы fin_data в которых значение поля year меньше 1993

 

DELETE

FROM fin_data

WHERE year < 1993

 

Удаляет записи из таблицы contact, если такие записи уже есть в таблице customer.

DELETE

FROM contact

FROM contact, customer

WHERE contact.last_name = customer.lname

AND contact.first_name = customer.fname

 

Delete From Fam

Для удаления конкретных строк используется предикат(мб с подзапросом)

Delete From Fam WHERE fam_cod=103

Указание в предикате первичного ключа - гарантия удаления одной строки.

 


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

 

Представления (View)

 

Определение представлений

 

Механизм представлений (view) является мощным средством языка SQL, позволяющим скрыть реальную структуру БД от некоторых пользователей за счет определения представления БД, которое реально является некоторым хранимым в БД запросом с именованными столбцами, а для пользователя ничем не отличается от базовой таблицы БД (с учетом технических ограничений). Любая реализация должна гарантировать, что состояние представляемой таблицы точно соответствует состоянию базовых таблиц, на которых определено представление. Обычно вычисление представляемой таблицы (материализация соответствующего запроса) производится каждый раз при использовании представления.

 

Представления используются по нескольким причинам:

• они позволяют сделать так, что разные пользователи базы данных будут видеть ее по-разному;

• с их помощью можно ограничить доступ к данным, разрешая пользователям видеть только некоторые из строк и столбцов таблицы;

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

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

Имя представления указывается в предложении FROM как имя обычной таблицы, а ссылка на столбцы представления в инструкции SELECT осуществляется точно так же, как на столбцы таблицы. К некоторым представлениям можно применять инструкции insert, delete и update для изменения данных. Таким образом, представление можно использовать в инструкциях SQL так, как будто оно является обычной таблицей.

 






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2024 pdnr.ru Все права принадлежат авторам размещенных материалов.