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

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

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

Добавлен: 02.04.2021

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

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

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

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

д ля

обесп еч ения

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

тип ов

п олей

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

з а п росов

).