Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

SQL в вопросах и задачах

.pdf
Скачиваний:
34
Добавлен:
21.05.2015
Размер:
917.91 Кб
Скачать

41

яз ыка SQL (в оз можно, с указ аниемд лины, точ ности и масштаба) или быть NULL-з нач ением.

∙ любое ч ислов ое в ыражение может быть яв но п реобраз ов а но в любой

д ругой ч ислов ой тип .

симв ольноев ыра жениеможет бытьп реобраз ов ано в любой ч ислов ой тип .

 

При этом в рез ульта тесимв ольного в ыражения отсекаются нач альныеи

 

конеч ные п робелы, а

остальные симв олы п реобраз уются в ч ислов ое

 

з нач ениеп о п ра в иламяз ыка SQL.

 

 

 

если яв но

з ад анна я

д лина

симв ольного

тип а

нед остаточ на и

 

п реобраз ов анное з нач ение не раз мещ ается в

нем,

то рез ультатив ное

 

з нач ениеусекаетсясп рав а.

 

 

 

в оз можно яв ноеп реобр азов а ниесимв ольного тип а в симв ольный с д ругой

 

д линой. Е сли

д лина рез ультата

больше д лины

аргумента, то з на ч ение

д оп олняетсяп робелами; если меньше, то усекается.

NULL-з нач ениеп реобраз уетсяв NULL-з нач ениесоотв етств ующ его тип а.

ч ислов оев ыра жениеможет бытьп реобраз ов ано в симв ольный тип .

Пример.

SELECT CAST STUDENT_ID AS CHAR(10)

FROM STUDENT;

УП Р АЖ НЕ НИ Я

1. Состав ьтез ап рос д лятаблицы STUDENT таким образ ом, ч тобы в ыход на я

таблица

сод ержа ла

од ин

столбец,

сод ержащ ий

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

р аз д еленных симв олом“;” (точ ка с з а п ятой) з нач ений в сех столбцов

этой

таблицы,

и

п р и

этом

текстов ые

з нач ения д олжны

отображаться

п роп исными

симв олами

(в ерхний

регистр),

то

есть

быть

п ред ста в ленными

 

 

след ующ ем

 

в ид е:

10;КУЗНЕЦОВ;БОРИС;0;БРЯНСК;8/12/1981;10.

2. Состав ьтез ап рос д лята блицы STUDENT такимобраз ом, ч тобы в ыход ная таблица сод ержала в сего од ин столбец след ующ емв ид е:

Б.КУЗНЕЦОВ; место жительства-БРЯНСК; родился - 8.12.81.

3. Состав ьтез ап рос д лята блицы STUDENT такимобраз ом, ч тобы в ыход ная таблица сод ержала в сего од ин столбец след ующ емв ид е:

42

б.кузнецов; место жительства-брянск; родился: 8-дек-1981.

4. Состав ьтез ап рос д лята блицы STUDENT такимобраз ом, ч тобы в ыход ная таблица сод ержала в сего од ин столбец след ующ емв ид е:

Борис Кузнецов родился в 1981 году.

5.Выв ести фа милии, имена студ ентов и в елич ину п олуч аемых ими стип енд ий, п ри этомз нач ениястип енд ий д олжны бытьув елич ены в 100 р аз .

6.То же, ч то и в з ад ач е4, но только д лястуд ентов 1, 2 и 4-го курсов и та ким образ ом, ч тобы фамилии и имена были в ыв ед ены п роп исными букв ами.

7.Состав ьтез ап рос д лята блицы UNIVERSITY такимобраз ом, ч тобы

в ыход наятаблица сод ержала в сего од ин столбец след ующ емв ид е:

Код-10; ВГУ-г.ВОРОНЕЖ; Рейтинг=296.

8. Тоже, ч то и в з а д ач е7, но з нач ениярейтинга требуетсяокруглитьд о п ерв ого з нака (на п р имер, з на ч ение382 округляетсяд о 400).

2.4. Агрегирование и групповы е ф ункц ии

 

А грегирующ ие функции

п оз в оляют п олуч а ть из та блицы

св од ную

(агрегиров анную)

информацию, в ып олняя оп ер ации над груп п ой строк

таблицы.

Д ля

з ад ания в

SELECT-з ап росе агрегирующ их

оп ераций

исп ольз уютсяслед ующ иеключ ев ыеслов а :

 

COUNT оп ред еляет колич еств о строк или з нач ений п оля, в ыбранных

 

п осред ств омз ап роса, и неяв ляющ ихсяNULL-з на ч ениями;

 

SUM

в ыч исляет а рифметич ескую сумму в сех в ыбранных

з нач ений

д анного п оля;

AVG в ыч исляет сред неез нач ениед ляв сех в ыбранных з нач ений д а нного

п оля;

MAX в ыч исляет на ибольшееиз в сех в ыбра нных з нач ений д анного п оля;

MIN в ыч исляет на именьшееиз в сех в ыбранных з на ч ений д анного п оля. В SELECT-з ап р осе агрегир ующ ие функции исп ольз уются ана логич но

именам п олей, п ри э том п ослед ние(имена п олей) исп ольз уются в кач еств е аргументов этих функций.

Функция AVG п ред на з нач ена д ля п од сч ета сред него з нач ения п оля на множеств ез а п исей таблицы.

43

Н а п ример, д ля оп р ед еления сред него з нач ения п оля MARK (оценки) п о в сем з ап исямта блицы EXAM_MARKS можно исп ольз ов а тьз ап рос с функцией AVG след ующ его в ид а :

SELECT AVG(MARK)

FROM EXAM_MARKS;

Д ля п од сч ета общ его колич еств а строк в та блицеслед ует исп ольз ов ать функциюCOUNT со з в ез д оч кой.

SELECT COUNT(*)

FROM EXAM_MARKS;

А ргументы DISTINCT и ALL п оз в оляют, соотв етств енно, исключ атьи в ключ атьд убликаты обр абатыв а емых функцией COUNT з нач ений, п ри этом необход имо уч итыв ать, ч то п ри исп ольз ов а нии оп ции ALL з нач ения NULL в серав но нев ойд ут в ч исло п од сч итыв а емых з нач ений.

SELECT COUNT(DISTINCT SUBJ_ID)

FROM SUBJECT;

Пред ложение GROUP BYGROUP BY (ГРУППИРОВАТЬ ПО) п оз в оляет груп п ир ов атьз а п иси в п од множеств а , оп ред еляемыез нач ениями ка кого-либо п оля, и п рименятьа грегирующ иефункции уженеко в сем з ап исямта блицы,

а раз д ельно к ка жд ой сформиров анной гр уп п е.

 

Пред п оложим,

требуется

найти максима льное

з нач ение оценки,

п олуч енной ка жд ым

студ ентом. За п рос

буд ет в ыгляд еть след ующ им

образ ом:

 

 

 

 

 

SELECT STUDENT_ID, MAX(MARK)

 

 

FROM EXAM_MARKS

 

 

 

GROUP BY STUDENT_ID;

 

 

Выбираемые

из

таблицы

EXAM_MARKS з а п иси

груп п ируются п о

з нач ениямп оляSTUDENT_ID, ука з анного

п ред ложении

GROUP BY, и д ля

кажд ой груп п ы наход итсяма ксимальноез на ч ениеп оля MARK. Пред ложение GROUP BY п оз в оляет п р именятьагрегирующ иефункции к кажд ой груп п е,

оп ред еляемой

общ им з нач ением п оля (или п олей), ука з анных

в этом

п ред ложении.

В п рив ед енном з ап росе рассматрив аются гр уп п ы

з ап исей,

сгруп п иров анныеп о ид ентификатора мстуд ентов .

 

44

В конструкции GROUP BY д лягруп п иров а нияможет бытьисп ольз ов ано

болееод ного столбца . Н а п ример :

SELECT STUDENT_ID, SUBJ_ID, MAX(MARK)

FROM EXAM_MARKS

GROUP BY STUDENT_ID, SUBJ_ID;

В этом случ ае строки

в нач але груп п ируются п о з на ч ениям п ер в ого

столбца, а в нутри этих груп п

– в п од груп п ы п о з нач ениям в торого столбца .

Таким образ ом, GROUP BY нетолько устана в лив ает столбцы, п о котор ым

осущ еств ляетсягруп п иров а ние, но и ука з ыв ает п оряд ок ра збиениястолбцов на груп п ы.

След ует иметьв в ид у, ч то в п р ед ложении GROUP BY д олжны быть

указ а ны

в се в ыбира емые столбцы, п рив ед енные п осле ключ ев ого слов а

SELECT,

кр оместолбцов , указ анных в ка ч еств еаргумента в агрегир ующ ей

функции.

 

п омощ ью GROUP BY

При

необход имости ч асть сформиров а нных с

груп п может бытьисключ ена с п омощ ьюп ред ложенияHAVING.

Пред ложение HAVING оп ред еляет кр итерий,

п о которому груп п ы

след ует в ключ атьв в ыход ныед а нные, п о аналогии с п ред ложением WHERE,

котороеосущ еств ляет это д ляотд ельных строк.

 

 

SELECT SUBJ_NAME, MAX(HOUR)

 

 

FROM SUBJECT

 

 

GROUP BY SUBJ_NAME

 

 

HAVING MAX(HOUR) >= 72;

 

В услов ии, з ад ав а емом п ред ложением HAVING,

ука з ыв а ют только п оля

или в ыражения, которые на в ыход е имеют ед инств енное з нач ение д ля кажд ой в ыв од имой груп п ы.

УП Р АЖ НЕ НИ Я

9. Н а п ишитез а п рос д ляп од сч ета колич еств а студ ентов , сд ав а в ших экз амен п о п ред мету обуч енияс ид ентификатором, рав ным20.

10.Н а п ишитез а п рос, который п оз в оляет п од сч ита тьв та блицеEXAM_MARKS колич еств о раз лич ных п ред метов обуч ения.

11.Н а п ишите з ап рос, который в ып олняет в ыборку д ля кажд ого студ ента

45

з нач енияего ид ентифика тора и минима льной из п олуч енных имоценок.

12.Н а п ишите з ап рос,

который в ып олняет в ыборку д ля кажд ого студ ента

з нач енияего ид ентифика тора и ма ксима льной из п олуч енных имоценок.

13.Н а п ишитез а п рос,

в ып олняющ ий в ыв од фамилии п ерв ого а лфа в итном

п оряд ке(п о фа милии) студ ента, фамилия которого нач инается на букв у “И”.

14.Н а п ишите з ап рос, который в ып олняет в ыв од

д ля кажд ого п ред мета

обуч ения на именов а ние п ред мета

и максима льное з нач ение номера

семестр а, в которомэтотп р ед мет п реп од ается.

 

15.Н а п ишите з ап рос, который в ып олняет в ыв од

д анных д ля ка жд ого

конкретного д ня сд ач и экз а мена

о колич еств е студ ентов , сд ав а в ших

э кз амен этот д ень.

 

 

16.Н а п ишите з ап р ос д ля п олуч ения сред него балла

д ля кажд ого курса п о

кажд ому п р ед мету.

 

 

17.Н а п ишитез ап рос д ляп олуч ениясред него балла д лякажд ого студ ента .

18.Н а п ишитез ап рос д ляп олуч ениясред него балла д лякажд ого экз амена .

19.Н а п ишите з ап рос д ля оп ред еления колич еств а студ ентов , сд ав а в ших кажд ый экз амен.

20.Н а п ишитез ап рос д ля оп ред еления колич еств а из уч аемых п ред метов на кажд омкурсе.

2.5. П уст ы е з начения (NULL) в агрегирую щ их ф ункц ия х

Н а лич ие п устых (NULL) з нач ений в п олях таблицы на кла д ыв ает особенности на в ып олнениеагрегир ующ их оп ераций над д а нными, которые след ует уч итыв атьп р и их исп ольз ов а нии в SQL-з а п росах.

2.5.1. В л ия ние NULL– з начений в ф ункц ии COUNT

Е сли аргумент функции COUNT яв ляется конста нтой или столбцом без п устых з нач ений, то функция в оз в ра щ а ет колич еств о строк, к которым п рименимо оп ред еленноеуслов иеили груп п иров а ние.

46

Е сли аргументом функции яв ляется ст о лбец, сод ержащ ий п устое з нач ение, то COUNT в ер нет ч исло стр ок, несод ер жа щ их п устыез нач ения, и к которымп рименимо оп ред еленноеуслов иеили груп п иров а ние.

Е сли бы механиз м NULL не был д оступ ен, то неп р именимые и отсутств ующ иез нач ения п ришлосьбы исключ а тьс п омощ ью конструкции

WHERE.

Пов ед ение функции COUNT(*) не з ав исит от п устых з нач ений. О на в оз в ратит общ ееколич еств о стр ок в та блице.

2.5.2. В л ия ние NULL-з начений в ф ункц ии AVG

Ср ед нее з нач ение множеств а ч исел ра в но сумме ч исел, д еленной на ч исло элементов множеств а . О д нако, если некоторые элементы п усты, то есть их з на ч ениянеиз в естны или несущ еств уют, то д елениена колич еств о в сех элементов множеств а п рив ед ет к неп ра в ильному рез ульта ту.

Функция AVG в ыч исляет сред нее з нач ение в сех и зв ест ны х з нач ений множеств а элементов , то есть эта функция п од сч итыв ает сумму и звест ны х з нач ений и д елит еена колич еств о эт и х з нач ений, а нена общ ееколич еств о з нач ений, сред и котор ых могут бытьNULL-з нач ения. Е сли столбец состоит только из п устых з нач ений, то функцияAVG такжев оз в ратитNULL.

2.6.Рез ул ь т ат дей ст вия т рехз начны х усл овны х операт оров

У слов ныеоп ераторы п ри отсутств ии п устых з нач ений в оз в ра щ ают либо TRUE (и сти н а ), либо FALSE (ло ж ь). Е сли жев столбцеп рисутств уют п устые

з нач ения,

то может быть в оз в ра щ ено и

третье з нач ение: UNKNOWN

(н еи звестн о ). В этой схеме,

нап р имер, услов ие WHERE A=2,

гд е А

– имя

столбца,

з на ч ения которого

могут

быть неиз в естны,

п ри

A=2

буд ет

соотв етств ов ать TRUE, п ри

A=4 в

рез ультате буд ет п олуч ено з на ч ение

FALSE, а

п р и отсутств ующ ем з на ч ении A (NULL-з нач ение) рез ультат буд ет

UNKNOWN.

Пустые з нач ения оказ ыв а ют

в лияние на

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

логич еских оп ера торов NOT, AND и OR.

Опера тор NOT

47

О быч ный уна р ный оп ератор NOT обра щ а ет оценку TRUE в FALSE и наоборот. О д нако NOT NULL п о п режнему буд ет в оз в ра щ а тьп устоез на ч ение NULL. При э том след ует отлич атьслуч а й NOT NULL от услов ия IS NOT NULL, котороеяв ляется п ротив оп оложностью IS NULL, отд еляя из в естные з нач енияотнеиз в естных.

Опера тор AND

Е сли рез ультат д в ух услов ий, объед иненных оп ераторомAND, из в естен, то п рименяются п ра в ила булев ой логики, то естьп р и обоих утв ержд ениях TRUE состав ноеутв ержд ениетакжебуд ет TRUE. Е сли жехотябы од но из

д в ух утв ержд ений буд ет FALSE, то состав ноеутв ер жд ениебуд ет FALSE.

Е сли рез ультат од ного из утв ержд ений неиз в естен, а д ругой оценив ается

как TRUE, то состояние неиз в естного утв ержд ения

яв ляется

оп ред еляющ им, и, след ов ательно, итогов ый рез ульта ттакженеиз в естен.

Е сли рез ультат од ного из утв ержд ений неиз в естен, а д ругой оценив ается как FALSE, итогов ый рез ультат буд ет FALSE.

Е сли р ез ультат обоих утв ержд ений

неиз в естен, то рез ультат также

 

остаетсянеиз в естным.

 

Опера тор OR

 

Е сли рез ультат д в ух услов ий, объед иненных оп ера тором OR, из в естен, то

 

п рименяются п рав ила булев ой логики,

а именно: если хотя бы од но из

 

д в ух утв ержд ений соотв етств ует TRUE, то и соста в ноеутв ер жд ениебуд ет

TRUE, если оба утв ержд ения оценив а ются как FALSE, то соста в ное утв ержд ениебуд ет FALSE.

Е сли рез ультат од ного из утв ержд ений неиз в естен, а д ругой оценив ается как TRUE, итогов ый рез ультат буд ет TRUE.

Е сли рез ультат од ного из утв ержд ений неиз в естен, а д ругой оценив ается

как FALSE, то

состояние неиз в естного утв ер жд ения играет

роль.

След ов ательно, итогов ый рез ультат та кженеиз в естен.

 

∙ Е сли р ез ультат

обоих утв ержд ений неиз в естен, то рез ультат

также

остаетсянеиз в естным.

 

П рим ечание.

48

 

 

О тсутств ующ ие (NULL) з нач ения целесообраз но

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

столбцах, п ред наз нач енных д ляагрегиров ания,

ч тобы из в леч ьп реимущ еств а

из сп особа обработки п устых з нач ений в

функциях

COUNT и AVG.

Практич ески в о в сех остальных случ аях п устых з на ч ений след ует из бегать, так как п ри их налич ии сущ еств енно усложняется кор ректное п остр оение услов ий отбора, п рив од я иногд а к неп ред сказ уемым рез ульта там в ыборки. Д ляинд ика ции жеотсутств ующ их, неп рименимых или п о какой-то п рич ине неиз в естных д а нных можно исп ольз ов ать з нач ения п о умолч анию, уста на в лив а емыез а ранее (на п ример, с п омощ ью команд ы CREATE TABLE

(раз д ел 4.1).

2.7.Упоря дочение вы ходны х пол ей (ORDER BY)

К ак уже отмеч алось, з ап иси

в таблица х реляционной баз ы д анных

неуп оряд оч ены. О д на ко, д а нные,

в ыв од имые в рез ультате в ып олнения

з ап роса, могут бытьуп оряд оч ены.

Д ляэтого исп ольз уется оп ер атор ORDER

BY, который п оз в оляет уп оряд оч ив атьв ыв од имыез ап иси в

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

з нач ениями од ного или нескольких в ыбранных столбцов .

При этом можно

з ад а тьв оз раста ющ ую (ASC) или

убыв а ющ ую (DESC) п ослед ов а тельность

сортир ов ки д ляка жд ого из столбцов . По умолч анию п р инята в оз р астающ ая п ослед ов ательностьсортиров ки.

Зап рос, п оз в оляющ ий в ыбрать в се д анные из таблицы

п ред метов

обуч ения SUBJECT, с уп оряд оч ив а нием п о наименов а ниям

п ред метов ,

в ыгляд итслед ующ имобра з ом:

 

SELECT *

 

FROM SUBJECT

 

ORDER BY SUBJ_NAME;

 

Тот жесп исок, но уп оряд оч енный в обратном п оряд ке, можно п олуч ить з ап росом:

SELECT *

FROM SUBJECT

ORDER BY SUBJ_NAME DESC;

М ожно уп ор яд оч ить в ыв од имый сп исок п ред метов обуч ения п о з нач ениямсеместр ов , а в нутри семестров – п о на именов а ниямп ред метов .

49

SELECT *

FROM SUBJECT

ORDER BY SEMESTR, SUBJ_NAME;

Пред ложение ORDER BY

может исп ольз ов аться с GROUP BY д ля

уп оряд оч ив а ния груп п з а п исей.

Пр и этом оп ератор ORDER BY в з а п росе

всегд а д о лж енбы т ь последним .

 

SELECT SUBJ_NAME, SEMESTR, MAX(HOUR)

FROM SUBJECT

GROUP BY SEMESTR, SUBJ_NAME

ORDER BY SEMESTR;

При уп оряд оч ив а нии в место наименов а ний столбцов можно указ ыв ать

их номера, имея, од нако,

в в ид у, ч то в

д анномслуч аеэто – номера столбцов ,

указ анные п ри оп ред елении в ыход ных

д анных

в з ап росе, а

 

не номера

столбцов в таблице. Полем с номером 1

яв ляется п ерв оеп оле,

указ анноев

п ред ложении ORDER BY – нез а в исимо от его расп оложенияв таблице.

 

SELECT SUBJ_ID, SEMESTR

 

 

 

 

 

 

 

FROM SUBJECT

 

 

 

 

 

 

 

 

ORDER BY 2 DESC;

 

 

 

 

 

 

 

В этом з ап росе в ыв од имые з ап иси буд ут

уп оряд оч ены

п о

п олю

SEMESTR.

 

 

 

 

 

 

 

 

 

Е сли в

п оле, которое исп ольз уется д ля уп оряд оч ив а ния,

сущ еств уют

NULL-з нач ения, то в сеони р аз мещ а ются в концеили п ред шеств уют в сем

остальнымз нач ениямэтого п оля.

 

 

 

 

 

 

 

УП Р АЖ НЕ НИ Я

 

 

 

 

 

 

 

 

21.Пред п оложим, ч то стип енд ия

в сем студ ентам ув елич ена

на

20%.

Н а п ишите з ап рос к

таблице STUDENT, в ып олняющ ий в ыв од

номера

студ ента,

фамилию

студ ента

и

в елич ину

ув елич енной

 

стип енд ии.

Выход ные д анные уп оряд оч ить:

а)

п о з нач ению п ослед него столбца

(в елич инестип енд ии); б) в а лфав итномп оряд кефа милий студ ентов .

22.Н а п ишите з ап рос, который п о

таблице EXAM_MARKS п оз в оляет найти

а ) максимальныеи б)

минима льныеоценки ка жд ого студ ента и в ыв од ит

их в местес ид ентифика торомстуд ента.

 

 

 

 

23.Н а п ишите з ап рос, в ып олняющ ий

в ыв од сп иска п ред метов

обуч ения в

50

п оряд кеа) убыв а ния семестров и б) в оз ра стания отв од имых на п р ед мет ч асов . Полесеместра в в ыход ных д а нных д олжно бытьп ер в ым, з а ним д олжны след ов атьимяп ред мета обуч енияи ид ентификатор п ред мета.

24.Н а п ишите з а п рос,

который

в ып олняет в ыв од суммы

баллов

в сех

студ ентов д ляка жд ой д аты сд а ч и экз аменов

и п ред ста в ляет рез ульта ты в

п оряд кеубыв а нияэ тих сумм.

 

 

 

 

25.Н а п ишите з ап рос,

который

в ып олняет

в ыв од а)

сред него,

б)

минима льного, в ) максима льного баллов в сех студ ентов д лякажд ой д аты сд ач и э кз аменов , и п ред ста в ляет рез ультаты в п оряд ке убыв а ния этих з нач ений.

2.8. В л ож енны е подз апросы

SQL п оз в оляет исп ольз ов атьод ни з а п росы в нутри д ругих з ап росов , то

есть в клад ыв а тьз а п росы д руг в д руга. Пред п оложим, из в естна

фамилия

студ ента (“Петр о в”), но неиз в естно з на ч ение п оля STUDENT_ID д ля него.

Ч тобы из в леч ьд а нные обо в сех оценках э того

студ ента, можно

з ап исать

след ующ ий з ап рос:

 

 

 

SELECT *

 

 

 

 

FROM EXAM_MARKS

 

 

 

 

WHERE STUDENT_ID =

 

 

 

 

( SELECT STUDENT_ID

 

 

 

 

FROM STUDENT SURNAME = ‘Петр о в’);

 

 

К ак работает з ап рос SQL со св яз а ннымп од з ап росом?

 

 

Выбирается стр ока из таблицы, имя которой указ ано

в о в нешнем

 

з ап р осе.

 

 

 

Вып олняется п од з ап рос и п олуч енное в

рез ульта теего в ып олнения

 

з нач ение п р именяется д ля а нализ а

этой строки

в

услов ии

п ред ложенияWHERE в нешнего з ап роса .

 

 

 

По рез ультату оценки этого услов ия п ринима ется

решение о

 

в ключ ении или нев ключ ении строки в состав в ыход ных д анных.

Процед ур а п ов торяется д ля след ующ ей строки таблицы в нешнего

 

з ап р оса.

 

 

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]