Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
79
Добавлен:
14.01.2018
Размер:
8.23 Mб
Скачать

проверяемое_выражение

Вложенный _запрос

=

< >

<

< =

>

> =

2.Проверка на принадлежность результатам вложенного запроса. Проверяет значение выражения на равенство с одним из значений множества, возвращенного вложенным запросом:

Пример запроса: вывести список квартир, в которых не установлены телефоны:

SELECT * FROM FLAT

WHERE ADR NOT IN (SELECT ADR FROM TPHONE)

3.П

вложенный _запрос

роверка на существование. Проверяет наличие строк в таблице результатов вложенного запроса:

EXISTS

NOT

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

SELECT * FROM PERSON

WHERE EXISTS (SELECT * FROM PROFIT, HAVE_D

WHERE PERSON.NOM=HAVE_D.NOM

AND PROFIT.ID=HAVE_D.ID

AND PROFIT. MONEY>1000)

Обратите внимание на то, что условие поиска EXISTS не использует результаты вложенного запроса. Проверяется только наличие результатов. По этой причине в SQL смягчается правило о единственности возвращаемого столбца во вложенном запросе и во вложенном запросе при проверке EXISTS допускается использование формы SELECT *.

4. Многократное сравнение. Сравнивает значение выражения с каждым из значений множества, возвращаемого вложенным запросом:

проверяемое _выражение

вложенный _запрос

=ANY

< >ALL

<

< =

>

> =

При проверке ANY проверяемое значение поочередно сравнивается с каждым значением, содержащимся в столбце, который сформирован вложенным запросом. Если любое из этих сравнений дает результат TRUE, то проверка ANY возвращает значение TRUE.

При проверке ALL проверяемое значение поочередно сравнивается с каждым значением, содержащимся в столбце данных, выбранных вложенным запросом. Если все сравнения дают результат TRUE, то проверка ALL возвращает значение TRUE.

  1. Внесение изменений в БД: добавление, удаление и обновление данных

Внесение изменений в базу данных

Язык SQL позволяет не только извлекать информацию из БД с помощью запросов на чтение, но и изменять содержащуюся в ней информацию с помощью запросов на добавление, удаление и обновление.

По сравнению с оператором SELECT, задающим запросы на чтение, операторы языка SQL, изменяющие содержимое БД, являются более простыми. Однако при изменении содержимого БД к СУБД предъявляется ряд дополнительных требований. При внесении изменений СУБД должна сохранять целостность данных и разрешать ввод в БД только допустимых значений, а также обеспечивать возможность одновременного изменения БД несколькими пользователями, чтобы они не мешали друг другу.

Добавление новых данных

Наименьшей единицей информации, которую можно добавить в реляционную БД, является одна строка. Существует два способа добавления новых строк в БД:

1) однострочный оператор INSERTпозволяет добавить в таблицу новую строку (рис. 1);

2) многострочный оператор INSERTобеспечивает извлечение строк из одной части БД и добавление их в другую таблицу (рис. 3.18).

INSERT INTO имя_таблицы

( имя_столбца )

,

VALUES ( константа )

NULL

,

Рис. 1. Синтаксическая диаграмма однострочного оператора INSERT

В предложении INTO указывается целевая таблица, в которую добавляется новая строка, а в предложении VALUES содержатся значения данных для новой строки. Список столбцов определяет, какие значения в какой столбец заносятся.

Например, можно задать запросы для внесения в БД сведений о новой квартире, установке телефона в этой квартире и заселении этой квартиры новым жильцом:

а) INSERT INTO FLAT

VALUES (‘Зеленоград, 1001-45’, 40, 3,’H’)

б) INSERT INTO TPHONE (ADR, NTEL, TCATEGORY)

VALUES (‘Зеленоград, 1001-45’, ’999-1199’, ’С’)

в) INSERT INTO PERSON (NOM, FIO, RDATE, POL, ADR)

VALUES(14,’Кукушкин Жан Ильич’,’03/13/77’,’M’,’Зеленоград, 1001-45’)

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

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

При добавлении в таблицу новой строки всем столбцам, имена которых отсутствуют в списке столбцов оператора INSERT, СУБД автоматически присваивает значение NULL либо значение, заданное по умолчанию при описании структуры таблицы (см. в)), где отсутствует имя столбца SUMD).

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

INSERT INTO имя_таблицы запрос

( имя_столбца )

,

Рис. 2. Синтаксическая диаграмма многострочного оператора INSERT

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

Например, можно добавить в таблицу PERSON сведения о новом жителе, у которого общий доход будет таким же, как у жителя с номером 16:

INSERT INTO PERSON

SELECT 20,’Алов Наум Нилыч’,’05/20/49’,’M’, SUM (MONEY),

‘Зеленоград, 1001-45’ FROM HAVE_D, PROFIT

WHERE NOM=16 AND HAVE_D.ID=PROFIT.ID

Такой способ определения общего дохода у жителя с номером 16, требующий осуществления соединения двух таблиц и использования агрегатной функции, обусловлен стандартом SQL1, который требует, чтобы имя целевой таблицы оператора INSERT не присутствовало в предложении FROM запроса, вложенного в него, т. е. запрещается добавление таблицы самой в себя.

В стандарте SQL2 это ограничение отсутствует, и «самодобавление» разрешено. Следовательно, рассмотренный пример можно модифицировать следующим образом:

INSERT INTO PERSON

SELECT 20, ’Алов Наум Нилыч’,’05/20/49’,

’M’ ,SUMD,’Зеленоград, 1001-45’

FROM PERSON WHERE NOM=16

Если в БД имеется таблица OLD_PERSONдля хранения сведений о пожилых гражданах, то данные в нее можно добавить из таблицы PERSON с помощью такого многострочного оператора INSERT:

INSERT INTO OLD_PERSON (NOM, FIO, RDATE, ADR)

SELECT NOM, FIO, RDATE, ADR FROM PERSON WHERE RDATE < ’01/01/1949’

Соседние файлы в папке БД - билеты - 2017