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

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

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

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

Добавлен: 02.04.2021

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

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

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

 

66 

2.18. 

В неш нее

 

объ единение

 

Ч а сто

 

п олез на

 

оп ерация

 

объед инения

 

д в ух

 

з а п росов

в

 

которой

 

в торой

 

з а п рос

 

в ыбира ет

 

строки

исключ енные

 

п ер в ым

Та ка я

 

оп ерация

 

на з ыв а ется

 

в нешним

 

объед инением

.  

Ра ссмотрим

 

п ример

Пусть

 

в

 

та блице

 

STUDENT

 

имеются

 

з а п иси

 

о

 

студ ента х

в

 

которых

 

не

 

ука з а н

 

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

 

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

Требуется

 

соста в ить

 

сп исок

 

студ ентов

 

с

 

ука з а нием

 

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

 

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

 

д ля

 

тех

 

студ ентов

у

 

которых

 

э ти

 

д а нные

 

есть

но

 

п ри

 

э том

 

не

 

отбра сыв а я

 

и

 

студ ентов

у

 

которых

 

унив ерситет

 

не

 

ука з а н

М ожно

 

п олуч ить

 

жела емые

 

св ед ения

сфор миров а в

 

объед инение

 

д в ух

 

з а п росов

од ин

 

из

 

которых

 

в ып олняет

 

в ыборку

 

студ ентов

 

с

 

на з в а ниями

 

их

 

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

а

 

в торой

 

в ыбирает

 

студ ентов

 

с

 

NULL

-

з на ч ениями

 

в

 

п оле

 

UNIV

_

ID

В

 

д а нном

 

случ а е

 

ока з ыв а ется

 

п олезной

 

в оз можность

 

в ста в ки

 

в

 

з а п рос

 

конста нт

в

 

на шем

 

случ а е

 

текстов ой

 

конста нты

 

н е

 

и звестен

ч тобы

 

отметить

 

в

 

сп иске

 

тех

 

студ ентов

у

 

которых

 

отсутств ует

 

информа ция

 

об

 

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

SELECT

 

SURNAME

NAME

UNIV

_

NAME

 

 

FROM

 

STUDENT

UNIVERSITY 

 

WHERE

 

STUDENT

.

UNIV

_

ID

 = 

UNIVERSITY

.

UNIV

_

ID

 

UNION

  

SELECT

 

SURNAME

NAME

н е

 

и звестен

    

 

 

FROM

 

STUDENT

  

 

WHERE

 

UNIV

_

ID

 

IS

 

NULL

 

ORDER

 

BY

 1; 

Д ля

 

сов местимости

 

столбцов

 

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

 

з а п росов

 

конста нту

 

н е

 

и звестен

 

в о

 

в тором

 

з а п росе

 

след ует

 

д оп олнить

 

п робела ми

 

та к

ч тобы

 

ее

 

д лина

 

соотв етств ов а ла

 

д лине

 

п оля

 

UNIV

_

NAME

 

или

 

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

 

д ля

 

согла сов а ния

 

тип ов

 

функцию

 

CAST

В

 

некоторых

 

СУ Б Д

 

согла сов а ние

 

тип ов

 

п оля

 

и

 

з а мещ а ющ ей

 

его

 

текстов ой

 

конста нты

 

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

 

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

УП Р АЖ НЕ НИ Я

 

41.

 

Соз д а йте

 

объед инение

 

д в ух

 

з а п росов

которые

 

в ыд а ют

 

з на ч ения

 

п олей

 

UNIV

_

NAME

CITY

RATING

 

д ля

 

в сех

 

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

Те

 

из

 

них

у

 

которых

 

р ейтинг

 

рав ен

 

или

 

в ыше

 300, 

д олжны

 

иметь

 

коммента р ий

 

Вы со к

и й

в се

 

оста льные

 

 

Н и зкий


background image

 

67 

42.

 

Н а п ишите

 

кома нд у

которая

 

в ыд а ет

 

сп исок

 

фа милий

 

студ ентов

с

 

коммента р ием

 

успева ет

 

у

 

студ ентов

имеющ их

 

в се

 

п оложительные

 

оценки

коммента р ием

 

н е

 

успева ет

 

д ля

 

сд а в а в ших

 

э кз а мены

но

 

имеющ их

 

хотя

 

бы

 

од ну

 

неуд ов летв орительную

 

оценку

и

 

коммента р ием

 

н е

 

сда ва л

 

 

д ля

 

в сех

 

оста льных

В

 

в ыв од имом

 

результа те

 

фа милии

 

студ ентов

 

уп оряд оч ить

 

п о

 

а лфа в иту

43.

 

Выв ед ите

 

объед иненный

 

сп исок

 

студ ентов

 

и

 

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

жив ущ их

 

в

 

М оскв е

с

 

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

 

коммента р иями

 

студен т

 

или

 

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

.  

44.

 

Выв ед ите

 

объед иненный

 

сп исок

 

студ ентов

 

и

 

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

 

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

 

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

 

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

 

с

 

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

 

коммента р иями

 

студен т

 

или

 

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

.  

2.19. 

С оединение

 

т абл иц

 

с

 

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

 

операт ора

 

JOIN

 

Е сли

 

в

 

оп ераторе

 

SELECT

 

п осле

 

ключ ев ого

 

слов а

 

FROM

 

ука з ыв а ется

 

не

 

од на

а

 

д в е

 

та блицы

то

 

в

 

рез ульта те

 

в ып олнения

 

з а п р оса

в

 

котором

 

отсутств ует

 

п ред ложение

 

WHERE

ка жд а я

 

стр ока

 

од ной

 

та блицы

 

буд ет

 

соед инена

 

с

 

ка жд ой

 

стр окой

 

в торой

 

та блицы

Та ка я

 

оп ерация

 

на з ыв а ется

 

д ека р т о в ы м

 

пр о и зв ед ени ем

 

или

 

по лны м

 

(

CROSS

)

 

со ед и нени ем

 

та блиц

 

ба з ы

 

д а нных

Са ма

 

п о

 

себе

 

э та

 

оп ерация

 

не

 

имеет

 

п рактич еского

 

з на ч ения

более

 

того

п ри

 

ошибоч ном

 

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

 

она

 

может

 

п рив ести

 

к

 

неожид а нным

 

нешта тным

 

ситуа циям

та к

 

ка к

 

в

 

э том

 

случ а е

 

в

 

отв ете

 

на

 

з а п рос

 

колич еств о

 

з а п исей

 

буд ет

 

ра в но

 

п роиз в ед ению

 

ч исла

 

з а п исей

 

в

 

соед иняемых

 

та блица х

то

 

есть

   

может

 

ока з аться

 

ч резв ыч а йно

 

большим

Соед инение

 

та блиц

 

имеет

 

смысл

 

тогд а

когд а

 

соед иняются

 

не

 

в се

 

строки

 

исход ных

 

та блиц

а

 

только

 

те

которые

 

интересуют

 

п ользов а теля

Та кое

 

огранич ение

 

может

 

быть

 

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

 

с

 

п омощ ью

 

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

 

в

 

з а п росе

 

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

 

услов ия

 

в

 

п ред ложении

 

WHERE

Та ким

 

обр а з ом

,  SQL 

п оз в ол яет

 

в ыв од ить

 

информа цию

 

из

 

нескольких

 

та блиц

св яз ыв а я

 

их

 

п о

 

з на ч ениям

 

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

 

п олей

.  

Н а п ример

если

 

необход имо

 

п олуч ить

 

фа милии

 

студ ентов

  (

та блица

 

STUDENT

и

 

д ля

 

ка жд ого

 

студ ента

 

 

на з в а ния

 

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

  (

та блица

 


background image

 

68 

UNIVERSITY

), 

расп оложенных

 

в

 

город е

гд е

 

жив ет

 

студ ент

то

 

необход имо

 

п олуч ить

 

в се

 

комбина ции

 

з а п исей

 

о

 

студ ента х

 

и

 

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

 

в

 

обеих

 

та блица х

в

 

которых

 

з на ч ение

 

п оля

 

CITY

 

сов п а д а ет

Э то

 

можно

 

сд ела ть

 

с

 

п омощ ью

 

след ующ его

 

з а п роса

SELECT 

STUDENT

.

SURNAME

UNIVERSITY

.

UNIV

_

NAME

STUDENT

.

CITY

  

FROM

 

STUDENT

UNIVERSITY 

  

WHERE

 

STUDENT

.

CITY

 = 

UNIVERSITY

.

CITY

Соед инение

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

 

п ред ика ты

основ а нные

 

на

 

рав енств а х

на з ыв а ется

 

экв и со ед и нени ем

Ра ссмотренный

 

п ример

 

соед инения

 

та блиц

 

относятся

 

к

 

в ид у

 

та к

 

на з ыв а емого

 

в нут р еннего

 

(

INNER

)

 

со ед и нени я

При

 

та ком

 

тип е

 

соед инения

 

соед иняются

 

только

 

те

 

строки

 

та блиц

д ля

 

которых

 

яв ляется

 

истинным

 

п р ед ика т

з а д а в а емый

 

в

 

п ред ложении

 

ON

 

в ып олняемого

 

з а п роса

.  

Прив ед енный

 

в ыше

 

з а п рос

 

может

 

быть

 

з а п иса н

 

ина ч е

с

 

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

 

ключ ев ого

 

слов а

 

JOIN

SELECT 

STUDENT

.

SURNAME

UNIVERSITY

.

UNIV

_

NAME

STUDENT

.

CITY

  

FROM

 

STUDENT

 

INNER

 

JOIN

 UNIVERSITY

  

ON

 

STUDENT

.

CITY

 = 

UNIVERSITY

.

CITY

;  

К люч ев ое

 

слов о

 

INNER

 

в

 

з а п р осе

 

может

 

быть

 

оп ущ ено

та к

 

ка к

 

э та

 

оп ция

 

в

 

оп ераторе

 

JOIN

 

д ейств ует

 

п о

 

умолч а нию

Ра ссмотренный

 

в ыше

 

случ а й

 

п олного

 

соед инения

 

(

д ека р тов а

 

п роиз в ед ения

 

та блиц

с

 

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

 

ключ ев ого

 

слов а

 

JOIN

 

буд ет

 

в ыгляд еть

 

след ующ им

 

образ ом

 

SELECT 

*

 

FROM 

STUDENT

 

JOIN

 UNIVERSITY

ч то

 

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

 

SELECT 

*

 

FROM 

STUDENT

UNIVERSITY

За метим

ч то

 

в

 

СУ Б Д

  Oracle 

з а д а в а емый

 

ста нд а р том

 

яз ыка

  SQL 

оп ератор

 

JOIN

 

не

 

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


background image

 

69 

2.19.1. 

О перац ии

 

соединения

 

т абл иц

 

посредст вом

 

ссы л очной

 

ц ел остност и

  

 

Информа ция

 

в

 

та блица х

 

STUDENT

 

и

 

EXAM

_

MARKS

 

уже

 

св яз а на

 

п осред ств ом

 

п оля

 

STUDENT

_

ID

В

 

та блице

   

STUDENT

 

п оле

 

STUDENT

_

ID

 

яв ляется

 

п ер в ич ным

 

ключ ом

а

 

в

 

та блице

 

EXAM

_

MARKS

ссыла ющ имся

 

на

 

него

 

в нешним

 

ключ ом

Состояние

 

св яз а нных

 

та ким

 

обра з ом

 

та блиц

 

на з ыв а ется

 

состоянием

 

ссылоч ной

 

целостности

В

 

д а нном

 

случ а е

 

ссылоч на я

 

целостность

 

э тих

 

та блиц

 

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

ч то

 

ка ж д о м у

 

з на ч ению

 

п оля

 

STUDENT

_

ID

 

в

 

та блице

 

EXAM

_

MARKS

 

о бяза т ельно

 

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

 

т а ко е

 

ж е

 

зна чени е

 

п оля

 

STUDENT

_

ID

 

в

 

та блице

 

STUDENT

Д ругими

 

слов а ми

в

 

та блице

 

EXAM

_

MARKS

 

не

 

может

 

быть

 

з а п исей

имеющ их

 

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

 

студ ентов

которых

 

нет

 

в

 

та блице

 

STUDENT

Ста нд а р тное

 

п рименение

 

оп ерации

 

соед инения

 

состоит

 

в

 

из в леч ении

 

д а нных

 

в

 

термина х

 

э той

 

св яз и

.  

Ч тобы

 

п олуч ить

 

сп исок

 

фа милий

 

студ ентов

 

с

 

п олуч енными

 

ими

 

оценка ми

 

и

 

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

 

п ред метов

 

можно

 

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

 

след ующ ий

 

з а п рос

:

 

SELECT

 

SURNAME

MARK

SUBJ

_

ID

 

FROM

 

STUDENT

EXAM

_

MARKS

 

WHERE

 

STUDENT

.

STUDENT

_

ID

 = 

EXAM

_

MARKS

.

STUDENT

_

ID

Тот

 

же

 

са мый

 

результа т

 

может

 

быть

 

п олуч ен

 

п ри

 

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

 

в

 

з а п росе

 

д ля

 

з а д а ния

 

оп ерации

 

соед инения

 

та блиц

 

ключ ев ого

 

слов а

 

JOIN

За п рос

 

с

 

оп ера тором

 

JOIN

 

в ыгляд ит

 

след ующ им

 

образ ом

 

  SELECT

 

SURNAME

MARK

 

FROM

 

STUDENT 

JOIN 

EXAM

_

MARKS

 

ON

 

STUDENT

.

STUDENT

_

ID

 = 

EXAM

_

MARKS

.

STUDENT

_

ID

Х отя

 

в ыше

 

реч ь

 

шла

 

о

 

соед инении

 

д в ух

 

та блиц

можно

 

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

 

з а п росы

 

п утем

 

соед инения

 

более

 

ч ем

 

д в ух

 

та блиц

.  

Пусть

 

требуется

 

на йти

 

фа милии

 

в сех

 

студ ентов

п олуч ив ших

 

неуд ов летв ор ительную

 

оценку

в месте

 

с

 

на з в а ниями

 

п р ед метов

 

обуч ения

п о

 

которым

 

п олуч ена

 

э та

 

оценка

SELECT

 

SUBJ

_

NAME

SURNAME

MARK

 

 

FROM

 

STUDENT

SUBJECT

EXAM

_

MARKS

 

 

WHERE

 

STUDENT

.

STUDENT_ID

 = 

EXAM

_

MARKS

.

STUDENT

_

ID 

 

 

AND

 

SUBJECT

.

SUBJ_ID

 = 

EXAM

_

MARKS

.

SUBJ

_

ID 


background image

 

70 

 

 

AND

 

EXAM

_

MARKS

.

MARK

 = 

2

;  

То

 

же

 

са мое

 

с

 

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

 

оп ератор а

 

JOIN

 

SELECT

 

SUBJ

_

NAME

SURNAME

MARK

 

 

FROM

 

STUDENT 

JOIN 

SUBJECT 

JOIN 

EXAM

_

MARKS  

 

ON 

STUDENT

.

STUDENT_ID

 = 

EXAM

_

MARKS

.

STUDENT

_

ID 

 

 

AND

 

SUBJECT

.

SUBJ_ID

 = 

EXAM

_

MARKS

.

SUBJ

_

ID 

 

 

AND

 

EXAM

_

MARKS

.

MARK

 = 

2

;  

2.19.2. 

В неш нее

 

соединение

 

т абл иц

  

К а к

 

отмеч а лось

 

ранее

п ри

 

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

 

в нут р еннего

 

(

INNER

соед инения

 

та блиц

 

соед иняются

 

только

 

те

 

их

 

строки

в

 

которых

 

сов п а д а ют

 

з на ч ения

 

п олей

з а д а в а емые

 

в

 

п р ед ложении

 

WHERE

 

з а п роса

О д на ко

 

в о

 

многих

 

случ а ях

 

э то

 

может

 

п рив ести

 

к

 

нежела тельной

 

п отере

 

информа ции

Ра ссмотрим

 

ещ е

 

раз

 

п рив ед енный

 

в ыше

 

п ример

 

з а п роса

 

на

 

в ыборку

 

сп иска

 

фа милий

 

студ ентов

 

с

 

п олуч енными

 

ими

 

оценка ми

 

и

 

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

 

п ред метов

Пр и

 

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

ка к

 

э то

 

было

 

сд ела но

 

в

 

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

 

п римере

в нутреннего

 

соед инения

 

в

 

результа т

 

з а п роса

 

не

 

п оп а д ут

 

студ енты

которые

 

ещ е

 

не

 

сд а в а ли

 

э кз а мены

 

и

 

которые

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

отсутств уют

 

в

 

та блице

 

EXAM

_

MARKS

Е сли

 

же

 

необход имо

 

иметь

 

з а п иси

 

об

 

э тих

 

студ ента х

 

в

 

в ыд а в а емом

 

з а п росом

 

сп иске

то

 

можно

 

п рисоед инить

 

св ед ения

 

о

 

студ ента х

не

 

сд а в а в ших

 

э кз а мен

п утем

 

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

 

оп ератора

 

UNION

 

с

 

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

 

з а п росом

Н а п ример

след ующ им

 

обра з ом

SELECT

 

SURNAME

CAST

 

MARK

 

AS

 

CHAR

(

1

), 

CAST

 

SUBJ

_

ID

 

AS

 

CHAR

(

10

FROM

 

STUDENT

EXAM

_

MARKS

 

WHERE

 

STUDENT

.

STUDENT

_

ID

 = 

EXAM

_

MARKS

.

STUDENT

_

ID 

 UNION 

 SELECT

 

SURNAME

CAST

 

NULL

 

AS

 

CHAR

(

1

), 

CAST

 

NULL

 

AS

 

CHAR

(

10

FROM

 

STUDENT

  

WHERE NOT EXIST

  

      (

SELECT

 *  

 

FROM

 

EXAM

_

MARKS 

   

 

WHERE

 

STUDENT

.

STUDENT

_

ID

 = 

EXAM

_

MARKS

.

STUDENT

_

ID)

(

з д есь

 

функция

 

п реобраз ов а ния

 

тип ов

 

CAST

 

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

 

д ля

 

обесп еч ения

 

сов местимости

 

тип ов

 

п олей

 

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

 

з а п росов

).