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

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

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

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

Добавлен: 02.04.2021

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

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

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

 

56 

SELECT DISTINCT 

SUBJ

_

ID

 

 

FROM

 

EXAM

_

MARKS

 

A

 

 

WHERE EXISTS

            

 

 

SELECT

 * 

 

 

 FROM 

EXAM

_

MARKS

 

B

 

 

 

 WHERE 

A

.

SUBJ

_

ID

 = 

B

.

SUBJ

_

ID

 

 

 

 AND 

A

.

STUDENT

_

ID

 < > 

B

.

STUDENT

_

ID

); 

Ч а сто

 

EXISTS

 

п р именяется

 

с

 

оп ера тором

 

NOT

 (

п о

-

русски

 

NOT

 

EXISTS

 

интерп ретируется

ка к

 

не

 

сущест в ует

 

). 

Е сли

 

п ред ыд ущ ий

 

з а п рос

 

сформулиров а ть

 

след ующ им

 

образ ом

 

 

на йти

 

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

 

п ред метов

 

обуч ения

которые

 

сд а в а лись

 

од ним

 

и

 

только

 

од ним

 

студ ентом

  (

д ругими

 

слов а ми

д ля

 

которых

 

не

 

сущ еств ует

 

д р угого

 

сд а в а в шего

 

студ ента

), 

то

 

д оста точ но

 

п росто

 

п оста в ить

 

NOT

 

п еред

 

EXISTS

След ует

 

иметь

 

в

 

в ид у

ч то

 

в

 

п од з а п росе

ука з ыв а емом

 

в

 

оп ера торе

 

EXISTS

нельзя

 

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

 

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

 

ф ункци и

Воз можности

 

п рименения

 

в ложенных

 

з а п росов

 

в есьма

 

раз нообраз ны

Н а п ример

п усть

 

из

 

та блицы

 

STUDENT

 

требуется

 

из в леч ь

 

строки

 

д ля

 

ка жд ого

 

студ ента

сд а в шего

 

более

 

од ного

 

п ред мета

SELECT

  * 

 

FROM

 

STUDENT

 

FIRST

 

 

WHERE EXISTS

            

 

 

(

SELECT

 

SUBJ

_

ID

 

 

 

 

FROM

 

EXAM

_

MARKS

 

SECOND 

 

 

 

 

GROUP

 

BY

 

SUBJ

_

ID

 

 

 

 

HAVING

 

COUNT

(

SUBJ

_

ID

) >

1

 

 

 

 

WHERE

 

FIRST

.

STUDENT

_

ID

 = 

SECOND

.

STUDENT

_

ID

); 

 

УП Р АЖ НЕ НИ Я

 

33.

 

Н а п ишите

 

з а п рос

 

с

 

EXISTS

п оз в оляющ ий

 

в ыв ести

 

д а нные

 

обо

 

в сех

 

студ ента х

 

обуч а ющ ихся

 

в

 

в уз а х

имеющ их

 

рейтинг

 

в ыше

 300. 

34.

 

Н а п ишите

 

п ред ыд ущ ий

 

з а п рос

исп ользуя

 

соед инения

35.

 

Н а п ишите

 

з а п рос

 

с

 

EXISTS

в ыбирающ ий

 

св ед ения

 

обо

 

в сех

 

студ ента х

д ля

 

которых

 

в

 

том

 

же

 

город е

гд е

 

жив ет

 

студ ент

сущ еств уют

 


background image

 

57 

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

в

 

котор ых

 

он

 

не

 

уч ится

36.

 

Н а п ишите

 

з а п рос

в ыбира ющ ий

 

из

 

та блицы

 

SUBJECT

 

д а нные

 

о

 

на з в а ниях

 

п ред метов

 

обуч ения

э кз а мены

 

п о

 

которым

 

сд а ны

 

более

 

ч ем

 

од ним

 

студ ентом

 

2.12. 

О перат оры

 

сравнения

 

с

 

м нож еством

 

з начений

 

IN

,

 ANY

,  

ALL

 

О п ера торы

 

срав нения

 

с

 

множеств ом

 

з на ч ений

 

имеют

 

след ующ ий

 

смысл

IN

 

Ра в но

 

любому

 

из

 

з на ч ений

п олуч енных

 

в о

 

в нутреннем

 

з а п росе

NOT IN 

Не

 

р а в но

 

ни

 

од ному

 

из

 

з на ч ений

п олуч енных

 

в о

 

в нутреннем

 

з а п росе

=

 

ANY 

То

 

же

ч то

 

и

 

IN

Соотв етств ует

 

логич ескому

 

оп ера тору

 

OR

>

 

ANY

,

 >

 

=

 

ANY 

Бо льш е

чем

   

(

либо

 

бо льш е

 

и ли

 

р а в но

любое

 

п олуч енное

 

ч исло

Э кв ив а лентно

  > 

или

  > = 

д ля

 

са мого

 

меньшего

 

п олуч енного

 

ч исла

<

 

ANY

,

 <

 

=

 

ANY 

М еньш е

чем

 

(

либо

 

м еньш е

 

и ли

 

р а в но

любое

 

п олуч енное

 

ч исло

Э кв ив а лент

  < 

или

  <  = 

д ля

 

са мого

 

большего

 

п олуч енного

 

ч исла

=

 

ALL 

Ра в но

 

в сем

 

п олуч енным

 

з на ч ениям

Э кв ив а лентно

 

логич ескому

 

оп ератору

 

AND

>

 

ALL

,

 >

 

=

 

ALL 

Бо льш е

чем

 

(

либо

 

бо льш е

 

и ли

 

р а в но

в се

 

п олуч енные

 

ч исла

Э кв ив а лент

  > 

или

  >  = 

д ля

 

са мого

 

большего

 

п олуч енного

 

ч исла

<

 

ALL

,

 <

 

=

 

ALL 

М еньш е

чем

 

(

либо

 

м еньш е

 

и ли

 

р а в но

)  

в се

 

п олуч енные

 

ч исла

Э кв ив а лентно

  < 

или

  <  = 

са мого

 

меньшего

 

п олуч енного

 

ч исла

След ует

 

иметь

 

в

 

в ид у

ч то

 

в

 

некоторых

 

СУ Б Д

 

п од д ержив а ются

 

не

 

в се

 

из

 

э тих

 

оп ер а торов

П рим еры

 

з апросов

 

с

 

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

 

приведенны х

 

операт оров

Выбрать

 

св ед ения

 

о

 

студ ента х

п рожив а ющ их

 

в

 

город е

гд е

 

ра сп оложен

 

унив ерситет

в

 

котором

 

они

 

уч а тся


background image

 

58 

SELECT

  * 

 

FROM

 

STUDENT S

 

 

WHERE

 

CITY

 = 

ANY

            

 

 

SELECT

 

CITY

 

 

 

 FROM

 

UNIVERSITY U 

        

WHERE

 U

.

UNIV

_

ID

 = 

S

.

UNIV

_

ID

); 

Д ругой

 

в а риа нт

 

э того

 

з а п роса

 

SELECT

  * 

 

FROM

 

STUDENT S

  

 

WHERE

 

CITY

 

IN

            

 

 

(

SELECT

 

CITY

 

 

 

 FROM

 

UNIVERSITY U 

        

WHERE

 U

.

UNIV

_

ID

 = 

S

.

UNIV

_

ID

); 

Выборка

 

д а нных

 

об

 

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

 

студ ентов

у

 

которых

 

оценки

 

п рев осход ят

 

в елич ину

п о

 

кра йней

 

мере

од ной

 

из

 

оценок

п олуч енных

 

ими

 

же

 6 

октября

 1999 

год а

SELECT

  

DISTINCT 

STUDENT

_

ID

 

 

FROM

 

EXAM

_

MARKS

  

 

WHERE

 

MARK

 > 

ANY

   

 

 

(

SELECT

 

MARK

 

 

 

 

 FROM

 

EXAM

_

MARKS

 

 

 

 

 WHERE

 

EXAM

_

DATE

 = 

06/10/1999

); 

О п ера тор

 

ALL

ка к

 

п ра в ило

э ффектив но

 

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

 

с

 

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

а

 

не

 

с

 

рав енств а ми

п оскольку

 

з на ч ение

 

р а в но

 

в сем

которое

 

д олжно

 

п олуч иться

 

в

 

э том

 

случ а е

 

в

 

р езульта те

 

в ып олнения

 

п од з а п роса

может

 

иметь

 

место

только

 

если

 

в се

 

результа ты

 

ид ентич ны

Та ка я

 

ситуа ция

 

п рактич ески

 

не

 

может

 

быть

 

реа лиз ов а на

та к

 

ка к

если

 

п од з а п рос

 

генерирует

 

множеств о

 

раз лич ных

 

з на ч ений

то

 

ника кое

 

од но

 

з на ч ение

 

не

 

может

 

быть

 

ра в но

 

ср а з у

 

в сем

 

з на ч ениям

 

в

 

обыч ном

 

смысле

В

  SQL 

в ыра жение

 

<

 

>

 

ALL

 

реа льно

 

оз на ч а ет

 

не

 

р а в но

 

ни

 

о д но м у

 

из

 

рез ульта тов

 

п од з а п р оса

Под з а п рос

в ыбирающ ий

 

д а нные

 

о

 

на з в а ниях

 

в сех

 

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

 

с

 

рейтингом

 

более

 

в ысоким

ч ем

 

рейтинг

 

любого

 

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

 

в

 

Воронеже

SELECT 

*

 

 

FROM

 

UNIVERSITY

  

 

WHERE

 

RATING

 > 

ALL

   


background image

 

59 

 

 

SELECT

 

RATING

 

 

 

 FROM

 

UNIVERSITY

 

 

 

 WHERE

 

CITY

 = 

Во р о н еж

); 

В

 

э том

 

з а п росе

 

в место

 

ALL

 

можно

 

та кже

 

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

 

ANY

(

Проа на лиз ируйте

ка к

 

в

 

э том

 

случ а е

 

из менится

 

смысл

 

п рив ед енного

 

з а п роса

?)  

SELECT

  * 

 

FROM

 

UNIVERSITY

  

 

WHERE NOT

 

RATING

 > 

ANY

   

 

 

SELECT

 

RATING

 

 

 

 FROM

 

UNIVERSITY

 

 

 

 WHERE

 

CITY

 = 

‘Во р о н еж ’

); 

 

2.13. 

О собенности

 

прим енения

 

операт оров

 

ANY

ALL

EXISTS

 

при

 

обработке

 

пуст ы х

 

з начений

 (

NULL)

  

Н еобход имо

 

иметь

 

в

 

в ид у

ч то

 

п ри

 

обра ботке

 

NULL-

з на ч ений

 

след ует

 

уч итыв а ть

 

раз лич ие

 

реа кции

 

на

 

них

 

оп ераторов

 

EXISTS

ANY

 

и

 

ALL

К огд а

 

п ра в ильный

 

п од з а п р ос

 

не

 

генерирует

 

ника ких

 

в ыход ных

 

д а нных

оп ератор

 

ALL

 

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

 

п ринима ет

 

з на ч ение

 

и сти н а

а

 

оп ератор

 

ANY

 

 

з на ч ение

 

ло ж ь

.  

За п рос

 

SELECT

  * 

 

FROM

 

UNIVERSITY

  

 

WHERE

 

RATING

 > 

ANY

  

 

 

SELECT

 

RATING

 

 

 

 FROM

 

UNIVERSITY

 

 

 

 WHERE

 

CITY

 = 

New York

); 

не

 

генерирует

 

в ыход ных

 

д а нных

 (

п од раз умев а ется

ч то

 

в

 

ба з е

 

нет

 

д а нных

 

об

 

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

 

из

 

город а

 New York), 

в

 

то

 

в ремя

 

ка к

 

з а п рос

  


background image

 

60 

SELECT

  * 

 

FROM

 

UNIVERSITY

  

 

WHERE

 

RATING

 > 

ALL

  

 

 

SELECT

 

RATING

 

 

 

 FROM

 

UNIVERSITY

 

 

 

 WHERE

 

CITY

 = 

New York

); 

п олностью

 

в осп роиз в ед ет

 

та бл ицу

 

UNIVERSITY

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

 

NULL

-

з на ч ений

 

соз д а ет

 

оп ред еленные

 

п роблемы

 

д ля

 

рассма трив а емых

 

оп ер а торов

К огд а

 

в

 SQL 

срав нив а ются

 

д в а

 

з на ч ения

од но

 

из

 

которых

 

NULL

-

з на ч ение

рез ульта т

 

п ринима ет

 

з на ч ение

 

UNKNOWN

 

(

неиз в естно

). 

Пред ика т

 

UNKNOWN

та кже

 

ка к

 

и

 

FALSE

-

п ред ика т

соз д а ет

 

ситуа цию

когд а

 

строка

 

не

 

в ключ а ется

 

в

 

соста в

 

в ыход ных

 

д а нных

но

 

результа т

 

п ри

 

этом

 

буд ет

 

раз лич ен

 

д ля

 

раз ных

 

тип ов

 

з а п росов

в

 

з а в исимости

 

от

 

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

 

в

 

них

 

ALL

 

или

 

ANY

 

в место

 

EXISTS

Ра ссмотрим

 

в

 

ка ч еств е

 

п римера

 

д в е

 

реа лиз а ции

 

з а п р оса

на йти

 

в се

 

д а нные

 

об

 

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

рейтинг

 

которых

 

меньше

 

р ейтинга

 

любого

 

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

 

в

 

М оскв е

1)

  SELECT

  * 

 

FROM

 

UNIVERSITY

  

 

WHERE

 

RATING

 < 

ANY

 

 

 

(

SELECT

 

RATING

 

 

 

 FROM

 

UNIVERSITY

 

 

 

 WHERE

 

CITY

 = 

М о ск

ва

); 

2)

  SELECT

  * 

 

FROM

 

UNIVERSITY

 

A

 

 

WHERE

 

NOT

 

EXISTS

 

 

 

(

SELECT

 * 

 

 

 FROM

 

UNIVERSITY

 

B

 

 

 

 WHERE

 

A

.

RATING

 >= 

B

.

RATING

 

 

 

 

 

AND

 

B

.

CITY

 = 

М о сква ’

); 

При

 

отсутств ии

 

в

 

та блица х

 

NULL

 

оба

 

э ти

 

з а п роса

 

в ед ут

 

себя

 

сов ершенно

 

од ина ков о

Пусть

 

теп ерь

 

в

 

та блице

 

UNIVERSITY

 

есть

 

стр ока

 

с

 

NULL

-

з на ч ениями

 

в

 

столбце

 

RATING

В

 

в ерсии

 

з а п р оса

 c 

ANY

 

в

 

основ ном

 

з а п росе

когд а

 

в ыбирается

 

п оле

 

RATING

 

с

 

NULL

п ред ика т

 

п ринима ет

 

з на ч ение

 

UNKNOWN

 

и

 

строка

 

не

 

в ключ а ется

 

в

 

соста в

 

в ыход ных

 

д а нных

Во

 

в тором

 

же

 

в а р иа нте

 

з а п роса

когд а

 

NOT

 

EXISTS 

в ыбирает

 

э ту

 

стр оку

 

в

 

основ ном

 

з а п росе

NULL

-

з на ч ение

 

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

 

в

 

п ред ика те

 

п од з а п роса

п рисв а ив а я