ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 02.04.2021
Просмотров: 1531
Скачиваний: 4
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
=
‘
М о сква
’
);
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
в оз можно
только
п р и
объед инении
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
64
FROM
STUDENT
A
,
EXAM
_
MARKS
B
WHERE
(
A
.
STUDENT
_
ID
=
B
.
STUDENT
_
ID
AND
B
.
MARK
=
(
SELECT
MAX
(
MARK
)
FROM
EXAM
_
MARKS
C
WHERE
C
.
EXAM
_
DATE
=
B
.
EXAM
_
DATE
))
UNION ALL
SELECT
‘
ми н
о ц
’
,
A
.
STUDENT
_
ID
,
SURNAME
,
MARK
,
EXAM
_
DATE
FROM
STUDENT
A
,
EXAM
_
MARKS
B
WHERE
(
A
.
STUDENT
_
ID
=
B
.
STUDENT
_
ID
AND
B
.
MARK
=
(
SELECT
MIN
(
MARK
)
FROM
EXAM
_
MARKS
C
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
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
;