|
Программирование >> Формирование связанных подзапросов
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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |