Delphi | Сети | ПК | Маршрутизаторы | Моделирование | Протоколы | Экспертные системы | Удаленный доступ | Доменные имена
Аплеты | SQL | Надежность | Задачи | Информационные процессы | JAVA | Отказы изделия | Расчет надежности показателей | Инфсис

Основные понятия и способы применения SQL - в примерах и задачах

Манипулирование данными

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

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

DELETE

FROM STUDENT

WHERE  UNIV_ID IN

(SELECT UNIV_ID FROM UNIVERSITY WHERE CITY =  'Нью-Васюки');

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

DELETE FROM STUDENT WHERE EXISTS (SELECT *

FROM UNIVERSITY 1,1 Методы проведения лабораторной работы При выполнении лабораторной работы студенту предоставляется возможность изучить конструкции и характеристики основных видов подшипников качения по натурным образцам, представленным на стенде и в учебно-методическом пособии, ознакомиться с их классификацией и условными обозначениями.

WHERE RATING = 401

AND STUDENT.UNIV_ID = UNIVERSITY. UNIV_ID) ;

Часть AND предиката внутреннего запроса ссылается на таб­лицу STUDENT. Команда удаляет данные о студентах, которые учатся в университетах, имеющих рейтинг, равный 401. Сущес­твуют и другие способы решения этой задачи.

DELETE

FROM STUDENT WHERE 401 IN

(SELECT RATING FROM UNIVERSITY WHERE STUDENT. UNIV_ID = UNIVERSITY. UNIV ID) ;

Пусть нужно найти наименьшее значение оценки, полу­ченной в каждый день сдачи экзаменов, и удалить из таблицы сведения о студенте, который получил эту оценку. Запрос бу­дет иметь вид:

DELETE

FROM STUDENT

WHERE STUDENT_ID IN

(SELECT STUDENT_ID FROM EXAM_MARKS A

WHERE MARK= (SELECT MIN(MARK)

FROM EXAM_MARKS В

WHERE A.EXAM_DATE = В.EXAMJDATE) ) ;

Так как столбец STUDENT_ID является первичным ключом, то удаляется единственная строка.

Если в какой-то день сдавался только один экзамен (то есть получена только одна минимальная оценка) и по какой-либо причине запись, в которой находится эта оценка, требуется ос­тавить, то решение будет иметь вид:

DELETE

FROM  STUDENT

WHERE  STUDENT_ID IN

(SELECT STUDENT_ID FROM EXAM_MARKS A WHERE  MARK =

(SELECT MIN(MARK) FROM EXAM_MARKS В

WHERE A.EXAM_DATE = B.EXAM_DATE AND 1 <

(SELECT COONT(SUBJ_ID) FROM EXAM_MARKS В WHERE A.EXAM_DATE = В.EXAM_DATE) ) ) ;

3.2.3.  Использование подзапросов с UPDATE

С помощью команды UPDATE можно применять подзапро­сы в любой форме, приемлемой для команды DELETE.

Например, используя связанные подзапросы, можно увели­чить значение размера стипендии на 20 в записях студентов, сдавших экзамены на 4 и 5.

UPDATE  STUDENT1

SET STIPEND = STIPEND + 20

WHERE  4 <=

(SELECT MIN(MARK) FROM EXAM_MARKS WHERE EXAM_MARKS.STUDENT_ID = STUDENT1 .STUDENT_ID) ;

Другой запрос: «Уменьшить величину стипендии на 20 всем студентам, получившим на экзамене минимальную оценку».

UPDATE  STUDENT1 SET STIPEND = STIPEND - 20 WHERE STUDENT_ID IN (SELECT STUDENT_ID

FROM EXAM_MARKS A WHERE MARK =

(SELECT MIN(MARK) FROM EXAM_MARKS В WHERE A. EXAM DATE = B . EXAM DATE));

Упражнения

1.  Пусть существует таблица с именем STUDENTI, определения столб­ цов которой полностью совпадают с определениями столбцов таб­ лицы STUDENT. Вставить в эту таблицу сведения о студентах, ус­ пешно сдавших экзамены более чем по пяти предметам обучения.

Напишите команду, удаляющую из таблицы SUBJECTI сведения о предметах обучения, по которым студентами не получено ни од­ ной оценки.

Напишите запрос, увеличивающий данные о величине стипендии на 20% всем студентам, у которых общая сумма баллов превышает значение 50.

 

Математический анализ, лекции по физике Компьютерные сети