Файл: SQL в вопросах и задачах.pdf

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

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

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

Добавлен: 02.04.2021

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

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

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
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.