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

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

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

Добавлен: 02.04.2021

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

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

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

61 

ему

з на ч ение

UNKNOWN

Поэ тому

в

рез ульта те

в ып олнения

п од з а п роса

не

буд ет

п олуч ено

ни

од ного

з на ч ения

и

п од з а п рос

п римет

з на ч ение

ло ж ь

Э то

в

св ою

оч еред ь

сд ела ет

NOT

EXISTS

истинным

и

след ов а тельно

строка

с

NULL

з на ч ением

в

п оле

RATING

п оп а д ет

в

в ыход ные

д а нные

По

смыслу

з а п роса

та кой

результа т

яв ляется

неп рав ильным

та к

ка к

на

са мом

д еле

рейтинг

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

оп исыв а емого

д а нной

строкой

может

быть

и

больше

рейтинга

ка кого

-

либо

москов ского

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

  (

он

п росто

неиз в естен

). 

У ка з а нна я

п роблема

св яз а на

с

тем

ч то

з на ч ение

EXISTS

в сегд а

п р инима ет

з на ч ения

и ст и на

или

ло ж ь

и

никогд а

UNKNOWN

Э то

яв ляется

д ов од ом

д ля

исп ользов а ния

в

та ких

случ а ях

оп ер а тора

ANY

в место

EXISTS

.

2.14. 

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

COUNT 

вм есто

 EXISTS

При

отсутств ии

NULL

-

з на ч ений

оп ера тор

EXISTS

может

быть

исп ользов а н

в место

ANY

и

ALL

Та кже

в место

EXISTS

и

NOT

EXISTS

могут

быть

исп ользов а ны

те

же

са мые

п од з а п росы

но

с

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

COUNT

(*) 

в

п ред ложении

SELECT

Н а п ример

з а п рос

SELECT

  * 

FROM

UNIVERSITY

A  

WHERE

NOT

EXISTS

(

SELECT

 * 

 FROM

UNIVERSITY

B

 WHERE

A

.

RATING

 > = 

B

.

RATING

 AND

B

.

CITY

 = 

М о ск

ва

); 

может

быть

п ред ста в лен

и

в

след ующ ем

в ид е

  

SELECT

  * 

FROM

UNIVERSITY

A

WHERE

 1 > 

(

SELECT

COUNT

(*) 

 FROM

UNIVERSITY

B

 WHERE

A

.

RATING

 > = 

B

.

RATING

 AND

B

.

CITY

 = 

М о сква

); 


background image

62 

УП Р АЖ НЕ НИ Я

37.

Н а п ишите

з а п рос

в ыбира ющ ий

д а нные

о

на з в а ниях

   

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

р ейтинг

которых

ра в ен

или

п рев осход ит

рейтинг

Воронежского

госуд а рств енного

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

38.

Н а п ишите

з а п рос

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

ANY

или

ALL

в ып ол няющ ий

в ыборку

д а нных

о

студ ента х

у

которых

в

город е

их

п остоянного

местожительств а

нет

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

39.

Н а п ишите

з а п рос

в ыбира ющ ий

из

та блицы

EXAM

_

MARKS

д а нные

о

на з в а ниях

п ред метов

обуч ения

д ля

которых

з на ч ение

п олуч енных

на

э кз а мене

оценок

  (

п оле

MARK

п рев ыша ет

любое

з на ч ение

оценки

д ля

п ред мета

имеющ его

ид ентифика тор

рав ный

 105. 

40.

Н а п ишите

э тот

же

з а п рос

с

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

MAX

2.15. 

О перат ор

объ единения

 UNION

О п ера тор

UNION

исп ользуется

д л я

объед инения

в ыход ных

д а нных

д в ух

или

более

  SQL-

з а п росов

в

ед иное

множеств о

строк

и

столбцов

Н а п ример

д ля

того

ч тобы

п олуч ить

в

од ной

та блице

фа милии

и

ид ентифика торы

студ ентов

и

п реп од а в а телей

из

М оскв ы

можно

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

след ующ ий

з а п рос

SELECT

С туден т

______

SURNAME

,

STUDENT

_

ID 

FROM

STUDENT 

WHERE

CITY

 = 

М о ск

ва

UNION 

SELECT

Пр епо да ва тель’

SURNAME

,

LECTURER

_

ID 

FROM

LECTURER

  

WHERE

CITY

 = 

М о ск

ва ’

О братите

в нима ние

на

то

ч то

симв олом

;

  (

точ ка

с

з а п ятой

ока нч ив а ется

только

п ослед ний

з а п рос

О тсутств ие

э того

симв ола

в

конце

SELECT-

з а п роса

оз на ч а ет

ч то

след ующ ий

з а

ним

з а п рос

та кже

ка к

и

он

са м

яв ляется

ч а стью

общ его

з а п роса

с

UNION

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

оп ера тора

UNION

в оз можно

только

п р и

объед инении


background image

63 

з а п росов

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

столбцы

которых

со в м ест и м ы

по

о бъ ед и нени ю

То

есть

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

ч ислов ые

п оля

д олжны

иметь

п олностью

сов п а д а ющ ие

тип

и

р а з мер

симв ольные

п оля

д олжны

иметь

точ но

сов п а д а ющ ее

колич еств о

симв олов

Е сли

NULL-

з на ч ения

з а п рещ ены

д ля

столбца

хотя

бы

од ного

любого

п од з а п роса

объед инения

то

они

д олжны

быть

з а п рещ ены

и

д ля

в сех

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

столбцов

в

д ругих

п од з а п р оса х

объед инения

2.16. 

Устранение

дубл ирования

в

UNION

В

отлич ие

от

обыч ных

з а п росов

UNION

а в тома тич ески

исключ а ет

из

в ыход ных

д а нных

д ублика ты

строк

на п ример

в

з а п р осе

  

SELECT

CITY 

FROM

STUDENT 

UNION 
SELECT

CITY 

FROM

LECTURER

сов п а д а ющ ие

на именов а ния

гор од ов

буд ут

исключ ены

Е сли

в се

же

необход имо

в

ка жд ом

з а п росе

в ыв ести

в се

строки

неза в исимо

от

того

имеются

ли

та кие

же

строки

в

д ругих

объед иняемых

з а п роса х

то

след ует

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

в о

множеств енном

з а п росе

конструкцию

с

оп ератором

UNION

ALL

Та к

в

з а п росе

SELECT

CITY 

FROM

STUDENT 

UNION ALL 
SELECT

CITY 

FROM

LECTURER

д ублика ты

з на ч ений

город ов

в ыв од имые

в тор ой

ч а стью

з а п роса

не

буд ут

исключ а ться

.  

Прив ед ем

ещ е

од ин

п р имер

исп ользов а ния

оп ера тора

UNION

Пусть

необход имо

соста в ить

отч ет

сод ержа щ ий

д ля

ка жд ой

д а ты

сд а ч и

э кз а менов

св ед ения

п о

ка жд ому

студ енту

п олуч ив шему

ма ксима льную

или

минима льную

оценки

.  

SELECT

  

ма к

с

о ц

A

.

STUDENT

_

ID

SURNAME

MARK

EXAM

_

DATE 


background image

64 

FROM

STUDENT

A

EXAM

_

MARKS

WHERE

 (

A

.

STUDENT

_

ID

 = 

B

.

STUDENT

_

ID 

AND

B

.

MARK

 =            

(

SELECT

MAX

(

MARK

FROM

EXAM

_

MARKS

WHERE

C

.

EXAM

_

DATE

 = 

B

.

EXAM

_

DATE

)) 

UNION ALL 

SELECT

ми н

о ц

A

.

STUDENT

_

ID

SURNAME

MARK

EXAM

_

DATE 

FROM

STUDENT

A

EXAM

_

MARKS

WHERE

 (

A

.

STUDENT

_

ID

 = 

B

.

STUDENT

_

ID 

AND

B

.

MARK

 =  

(

SELECT

MIN

(

MARK

FROM

EXAM

_

MARKS

WHERE

C

.

EXAM

_

DATE

 = 

B

.

EXAM

_

DATE

)); 

Д ля

отлич ия

строк

в ыв од имых

п ерв ой

и

в торой

ч а стями

з а п роса

в

них

в ста в лены

текстов ые

конста нты

ма кс

о ц

и

ми н

о ц

В

п рив ед енном

з а п росе

а грегирующ ие

функции

исп ользуются

в

п од з а п роса х

Э то

яв ляется

нерациона льным

с

точ ки

з рения

в ремени

з а тр ач ив а емого

на

в ып олнение

з а п роса

  (

см

раз д ел

  2.9). 

Б олее

э ффектив на

форма

з а п роса

в оз в ращ а ющ его

а на логич ный

рез ульта т

SELECT

  

ма к

с

о ц

A

.

STUDENT

_

ID

SURNAME

E

.

MARK

E

.

EXAM

_

DATE 

FROM 

STUDENT A

,

  

(

SELECT 

B

.

STUDENT

_

ID

B

.

MARK

B

.

EXAM

_

DATE

FROM 

EXAM

_

MARKS B

,

(

SELECT MAX

(

MARK

)

 AS 

MAX

_

MARK

C

.

EXAM

_

DATE

FROM 

EXAM

_

MARKS C

GROUP

BY 

C

.

EXAM

_

DATE

)

D

WHERE 

B

.

EXAM

_

DATE=D

.

EXAM

_

DATE

  

AND 

B

.

MARK=MAX_MARK

)

 E 

WHERE 

A

.

STUDENT

_

ID=E

.

STUDENT

_

ID

UNION

ALL 

SELECT

ми н

о ц

A

.

STUDENT

_

ID

SURNAME

E

.

MARK

E

.

EXAM

_

DATE 

FROM 

STUDENT A

,

  

(

SELECT  

B

.

STUDENT

_

ID

B

.

MARK

B

.

EXAM

_

DATE

FROM 

EXAM

_

MARKS B

,

(

SELECT MIN

(

MARK

)

 AS 

MIN

_

MARK

C

.

EXAM

_

DATE

FROM 

EXAM

_

MARKS C 

GROUP

BY 

C

.

EXAM

_

DATE

)

 D 


background image

65 

WHERE 

B

.

EXAM

_

DATE=D

.

EXAM

_

DATE  

AND 

B

.

MARK=MIN

_

MARK

)

 E 

WHERE 

A

.

STUDENT

_

ID=E

.

STUDENT

_

ID 

2.17. 

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

UNION

с

ORDER

BY

Пред ложение

ORDER

BY

п рименяется

д ля

уп оряд оч ения

в ыход ных

д а нных

объед инения

з а п росов

та к

же

ка к

и

д ля

отд ельных

з а п росов

Послед ний

п ример

п р и

необход имости

уп оряд оч ения

в ыход ных

д а нных

з а п роса

п о

фа милиям

студ ентов

и

д а та м

э кз а менов

может

в ыгляд еть

та к

SELECT

  

ма к

с

о ц

A

.

STUDENT

_

ID

SURNAME

E

.

MARK

E

.

EXAM

_

DATE 

FROM 

STUDENT A

,

  

(

SELECT 

B

.

STUDENT

_

ID

B

.

MARK

B

.

EXAM

_

DATE

FROM 

EXAM

_

MARKS B

,

(

SELECT MAX

(

MARK

)

 AS 

MAX

_

MARK

C

.

EXAM

_

DATE

FROM 

EXAM

_

MARKS C

GROUP

BY 

C

.

EXAM

_

DATE

)

D

WHERE 

B

.

EXAM

_

DATE=D

.

EXAM

_

DATE

  

AND 

B

.

MARK=MAX_MARK

)

 E 

WHERE 

A

.

STUDENT

_

ID=E

.

STUDENT

_

ID

UNION ALL 

SELECT

ми н

о ц

A

.

STUDENT

_

ID

SURNAME

E

.

MARK

E

.

EXAM

_

DATE 

FROM 

STUDENT A

,

  

(

SELECT  

B

.

STUDENT

_

ID

B

.

MARK

B

.

EXAM

_

DATE

FROM 

EXAM

_

MARKS B

,

(

SELECT MIN

(

MARK

)

 AS 

MIN

_

MARK

C

.

EXAM

_

DATE

FROM 

EXAM

_

MARKS C 

GROUP BY 

C

.

EXAM

_

DATE

)

 D 

WHERE 

B

.

EXAM

_

DATE=D

.

EXAM

_

DATE  

AND 

B

.

MARK=MIN

_

MARK

)

 E 

WHERE 

A

.

STUDENT

_

ID=E

.

STUDENT

_

ID 

ORDER BY 

SURNAME

E

.

EXAM

_

DATE

;