ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 02.04.2021

Просмотров: 3469

Скачиваний: 5

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

81 

3.2. 

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

подз апросов

в

INSERT

Применение

оп ера тора

INSERT

с

п од з а п росом

п оз в оляет

з а гружа ть

сраз у

несколько

строк

в

од ну

та блицу

исп ользуя

информа цию

из

д ругой

та блицы

В

то

в ремя

ка к

оп ера тор

   

INSERT

,

использующий

   

VALUES

д оба в ляет

только

од ну

строку

INSERT

с

п од з а п росом

д оба в ляет

в

та блицу

столько

строк

сколько

п од з а п рос

из в лека ет

из

д ругой

та блицы

Пр и

э том

колич еств о

и

тип

в оз в ращ а емых

п од з а п росом

столбцов

д олжно

соотв етств ов а ть

колич еств у

и

тип у

столбцов

та бл ицы

в

которую

в ста в ляются

д а нные

Н а п ример

п усть

та блица

STUDENT1

имеет

структуру

п олностью

сов п а д а ющ ую

со

структурой

та блицы

STUDENT

За п рос

п оз в ол яющ ий

з а п олнить

та блицу

STUDENT1

з а п исями

из

та блицы

STUDENT

обо

в сех

студ ента х

из

М оскв ы

в ыгляд ит

след ующ им

обра з ом

INSERT

INTO

STUDENT1

SELECT

 * 

FROM

STUDENT

WHERE

CITY 

=

М о ск

ва ’

Д ля

того

же

ч тобы

д оба в ить

в

та блицу

STUDENT1

св ед ения

обо

в сех

студ ента х

которые

уча т ся

в

М оскв е

можно

исп ользов а ть

в

п ред ложении

WHERE

соотв етств ующ ий

п од з а п рос

Н а п ример

INSERT

INTO

STUDENT1

SELECT

 * 

FROM

STUDENT

WHERE

UNIV

_

ID 

IN

(

SELECT

UNIV

_

ID 

FROM

UNIVERSITY 

WHERE

CITY 

=

М о ск

ва ’

); 


background image

82 

3.2.1. 

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

подз апросов

основанны х

на

т абл иц ах

внеш них

з апросов

Пред п оложим

сущ еств ует

та блица

SSTUD

в

которой

хра нятся

св ед ения

о

студ ента х

обуч а ющ ихся

в

том

же

город е

в

котором

они

жив ут

М ожно

з а п олнить

э ту

та блицу

д а нными

из

та блицы

STUDENT

исп ользуя

св яз а нные

п од з а п росы

след ующ им

образ ом

INSERT

INTO

SSTUD

SELECT

 * 

FROM

STUDENT

A

WHERE

CITY

IN

(

SELECT 

CITY

 FROM 

UNIVERSITY

B

 WHERE

A

.

UNIV

_

ID 

=

 B

.

UNIV

_

ID

); 

Пред п оложим

ч то

требуется

в ыбрать

сп исок

студ ентов

имеющ их

ма ксима льный

ба лл

на

ка жд ый

д ень

сд а ч и

э кз а менов

и

р а з местить

его

в

д ругой

та блице

с

именем

EXAM

Э то

можно

осущ еств ить

с

п омощ ью

з а п р оса

INSERT

INTO

EXAM

  

SELECT

EXAM

_

ID

STUDENT

_

ID

SUBJ

_

ID

MARK

EXAM

_

DATE

FROM

EXAM

_

MARKS

A

WHERE

MARK

=

(SELECT MAX

(

MARK

FROM

EXAM

_

MARKS

B

WHERE

A.EXAM

_

DATE 

=

 B

.

EXAM

_

DATE

); 

3.2.2. 

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

подз апросов

с

DELETE

Пусть

филиа л

унив ерситета

в

Н ью

-

Ва сюка х

ликв ид иров а н

и

требуется

  

уд а лить

из

та блицы

STUDENT

з а п иси

о

студ ента х

которые

та м

уч ились

Э ту

оп ерацию

можно

в ып олнить

с

п омощ ью

з а п роса

DELETE

FROM

STUDENT

WHERE

UNIV

_

ID 

IN

(

SELECT

UNIV

_

ID

 FROM

UNIVERSITY

 WHERE

CITY 

=

Н ью

-

Ва сюк

и

);  


background image

83 

В

п ред ика те

п ред ложения

FROM

  (

п од з а п роса

нельзя

ссыла ться

на

та блицу

из

которой

осущ еств ляется

уд а ление

О д на ко

можно

ссыла ться

на

текущ ую

строку

из

та блицы

яв ляющ уюся

ка нд ид а том

на

уд а ление

то

есть

  

на

строку

котора я

в

на стоящ ее

в ремя

п ров еряется

в

основ ном

п ред ика те

DELETE

FROM

STUDENT

WHERE

EXISTS

(

SELECT

 * 

 FROM

UNIVERSITY

 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

B

 WHERE

A

.

EXAM

_

DATE 

=

 B

.

EXAM

_

DATE

));  

Та к

ка к

столбец

STUDENT

_

ID

яв ляется

п ерв ич ным

ключ ом

то

уд а ляется

ед инств енна я

строка

.  

Е сли

в

ка кой

-

то

д ень

сд а в а лся

только

од ин

э кз а мен

  (

то

есть

п ол уч ена

  

только

од на

минима льна я

оценка

), 

и

п о

ка кой

-

либо

п рич ине

з а п ись

в


background image

84 

которой

на ход ится

э та

оценка

требуется

оста в ить

то

решение

буд ет

иметь

в ид

DELETE

FROM

STUDENT

WHERE

STUDENT

_

ID

IN

(

SELECT

STUDENT

_

ID

 FROM

EXAM

_

MARKS

A

 WHERE

MARK 

(

SELECT

MIN

(

MARK

 FROM

EXAM

_

MARKS

B

 WHERE

A

.

EXAM

_

DATE 

=

 B

.

EXAM

_

DATE

  

AND

1

 <    

(

SELECT

COUNT

(

SUBJ

_

ID

FROM

EXAM

_

MARKS

B

WHERE

A

.

EXAM

_

DATE 

=

 B

.

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


background image

85 

 WHERE

MARK 

(

SELECT

MIN

(

MARK

 FROM

EXAM

_

MARKS

B

 WHERE

A

.

EXAM

_

DATE 

=

 B

.

EXAM

_

DATE

)); 

УП Р АЖ НЕ НИ Я

91.

Пусть

сущ еств ует

та блица

с

именем

STUDENT1

оп ред еления

столбцов

которой

п олностью

сов п а д а ют

с

оп ред елениями

столбцов

та блицы

STUDENT

Вста в ить

в

э ту

та блицу

св ед ения

о

студ ента х

усп ешно

сд а в ших

э кз а мены

более

ч ем

п о

п яти

п ред мета м

обуч ения

92.

Н а п ишите

кома нд у

уд а ляющ ую

из

та блицы

SUBJECT1

св ед ения

о

п ред мета х

обуч ения

п о

которым

студ ента ми

не

п олуч ено

ни

од ной

оценки

93.

Н а п ишите

з а п рос

ув елич ив а ющ ий

д а нные

о

в елич ине

стип енд ии

на

 20% 

в сем

студ ента м

у

которых

общ а я

сумма

ба ллов

п рев ыша ет

з на ч ение

 50.