Программирование >>  Формирование связанных подзапросов 

1 ... 6 7 8 [ 9 ] 10 11 12 ... 15


3.2. Использование подзапросов в INSERT

UPDATE STUDENT1

SET STIPEND = STIPEND*2

WHERE CITY = ква;

Предложение SET не является предикатом, поэтому в нем можно указать значение NULL следующим образом:

UPDATE UNIVERSITYl SET RATING = NULL WHERE CITY = ква;

Упражнения

1. Напишите команду, которая вводит в таблицу SUBJECT строку нового предмета обучения со следующими значениями полей:

SEMESTER = 4; SUBJ NAME = Алгебра; HOUR = 72; SUBJ ID =201.

2. Введите запись для нового студента, которого зовут Орлов Николай, обучающегося на первом курсе ВГУ, живущего в Воронеже, сведения о дате рождения и размере стипендии неизвестны.

3. Напишите команду, удаляющую из таблицы EXAMMARKS записи обо всех оценках студента, идентификатор которого равен 100.

4. Напишите команду, которая увеличивает на 5 значение рейтинга всех имеющихся в базе данных университетов, расположенных в Санкт-Петербурге.

5. Измените в таблице значение города, в котором проживает студент Иванов, на Воронеж .

3.2. Использование подзапросов в INSERT

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

4 Зак. 444



Например, пусть таблица STUDENTI имеет структуру, полностью совпадающую со структурой таблицы STUDENT. Запрос, позволяющий заполнить таблицу STUDENTI записями обо всех студентах из Москвы из таблицы STUDENT, выглядит следующим образом:

insert into studenti

SELECT *

FROM STUDENT

where city = Москва;

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

INSERT INTO STUDENTI SELECT *

FROM STUDENT WHERE UNIV ID IN (SECT UNIV ID

FROM UNIVERSITY

WHERE CITY = МЬэскв);

3.2.1. Использование подзапросов, основанных на таблицах внешних запросов

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

INSERT INTO SSTUD

SELKCT *

FROM STUDENT A

WHERE CITY IN

(SE CITY

FROM UNIVERSITY В

WHERE A.UNIV ID = B.UNIV ID);



3.2. Использование подзапросов в INSERT 83

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

INSERT INTO EXAM

SELECT EXAM ID, STUDENT ID, SUBJ ID, MARK, EXAMJ5ATE FROM EXAM MARKS A WHERE MARK = (SELECT MAX(MARK; FROM EXAM MARKS В WHERE A.EXAM DATE = В.EXAM DATE);

3.2.2. Использование подзапросов с DELETE

Пусть филиал университета в Нью-Васюках ликвидирован и требуется удалить из таблицы STUDENT записи о студентах, которые там учились. Эту операцию можно втполнить с помощью запроса

DELETE

FROM STUDENT

WHERE UNIV ID IN

(SELECT UNIV ID FROM UNIVERSITY WHERE CITY = НьВаскки);

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

DELETE

FROM STUDENT

WHERE EXISTS (SECT *

FROM UNIVERSITY



1 ... 6 7 8 [ 9 ] 10 11 12 ... 15

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика