Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_po_bd.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
188.42 Кб
Скачать
  1. Удаление избыточных данных.

Dictinct-это аргумент к0ый обеспеч-т уст. 2-ых знач. Из предлож. Select т.е Dictinct следует за тем какие значения выводились раньше и что бы они не были продублированы в списке.

All-дублирование строк. Сохр.

Пример1

вывести все знаечения табл пк.

Select *

from pc

пример2

выести номера всех мод из табл пк

а)с повторение

б)без повторений

a)select model

from pc

б)select distinct model

from pc

26.Выбор при использование предложений. Примеры простых предикат.

т.к из сех табл.обычно интересует опред строки SQL дает нам возможность устанавливать критерии отбора.

Where-предложения команды select к-ый поз-т уст-ть предикаты усл. К-ых может быть верным либо не верным для любой строки табл. Команда извлекает только те строки из талб. Для к-ый это усл. Верно.

Предикаты- пред. Собой выражение(либо одно,либо комбинацию пост-ый с помощью Булевых операций and,or,not)так же в этих комбинациях могут использоваться круглые скобки,для конкретизации порядка вып операций.

Предикаты сравнения пред.собой два выражения соед-ых опер-ом сравнения ><,<=,>=,<>.

Примеры простых предикат.

Сравнение.

Price<100-цена меньше 100

type='laptop'типо продукта яв-ся laptop

cd='24x'-скор-ть 24х

color<>'y'-не цветной принтер

ram=128-опер. Память равен 128

price<=speed*2-цена не привышает уд-го чистоты прцессора.

Пример1.

Получить инф. О чистоте процессора и объем опер. Памяти для комп с ценой ниже 500

select distinct speed,ram

from pc

where price<500

пример2

получ. Инф.о комп имеющих частоту процессора не менее 500мгц.и цену ниже 800.

select *

from pc

where (speed>=500) and (price<800)

пример3

получ.инф. О принтарах к-ые не яв-ся матричными и стоит меньше 300.

select *

from printer

where (type<>matrix) and (price<300).

27. Предикат BETWEEN.-проверяет,попадают ли значения проверяемого выражения в диапазон задаваемый пограничными выр-ями,соединяемыми служебными словами and.

Синтаксис between.

<проверяемое выр-е>[NOT]Between<нач-е значение>and<конечное значение>

Пример8.Найти модель и частоту процессора стоимостью от 400до600$.

Select model,speed

From pc

Where price between 400and600

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

Табличный подзапрос-это обычный оператор select,кот.создает одну или неск.строк для одного столбца,совместимого по типу данных со значением проверяемого значения.

<пров.значение>[NOT]IN<(подзапрос)>либо<список значений>.

Пример1.Найти модель,частоту процессора и объем жесткого диска для тех комп-ов,кот.комплектуются накопителями размером 10или20.

Select model,speedd,hd

From pc

Where hd in (10,20)

model

speed

hd

1260

1233

1233…

500

800

750…

10

20

20…

Пример2. Найти модель,частоту процессора,объем жесткого диска для тех комп-в,кот.комплектуются накопителями 10или20байтов и выпускают производителем А.

1)Select pc.model,speed,hd

From product,pc

Where (product.model=pc.model) and (hd in (10,20))and(maker=’A’)

2)select model,speed,hd

From pc

Where (hd in (10,20)) and model in (select model

From product

Where maker=’A’)

Model

1232

1233

1276

model

speed

Hd

1233

1232

1232

1233

750

500

450

800

20

10

10

20

28.Предикат LIKE.-сравнивает строку,указанную в проверяемом выражении с шаблоном, кот-й указан в выр-ии для выч-ий значения строки.

<пров-е знач>[NOT]LIKE<выр-е для вычисления знач.строки>

Предикат LIKE применим только к полям типа char и varchar,чтобы находить подстроки.

В образце разрешается исп-ть 2 трафоретных символа:

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

-символ %,кот.заменяет набор любых символов.

Шаблон

описание

‘abc%’

Любые строки,кот.нач-ся с букв a,b,c

‘abc_’

Строки длиной 4 символа,причем 1ми символами строки д.б.abc

‘%z’

Любая послед-сть символов,кот.заканчив-ся символом z.

‘%Kazan%’

Любая послед-сть символов,сод-щий слово Kazan в любом месте строки.

Пример1.вывести производителя,модель продукции,тип кот.нач-ся с буквы ‘p’.

Select maker,model,type

From product

Where type like ‘p%’

Пример2.с таб printer вывести все модели и типы продукции,типы кот-х заканчив-ся на ‘er’.

Select model,type

From printer

Where type like ‘%er’

Пример3.вывести из таб printer модель и тип той продукции,у кот-й тип состоит из 3х символов(название).

Select model,type

From printer

Where type like ‘_ _ _’

29.Получение итоговых значений с помощью агрегатных функций.

Ф-ция

Описание

Count(*)

Подсчитывает общее число строк в таб-це.

Count(<имя поля>)

Подсчитывает кол-во знач-й в указанном столбце.

Sum(<имя поля>)

Выч-т сумму знач-й в УК-м ст-це

Avg(<>)

Выч ср.знач. в у.с.

Min(<>)

Выч.мин.зн.в у.с.

Max(<>)

Выч.макс.зн.в у.с.

Все эти ф-ции возвращают единственное знач-е.Ф-ции count,min,max применимы к любым типам,ф-ции sum и avg исп-ся только для числовых полей.Разница м-у ф-циями count(*) и count(имя поля) состоит в том,что ф-я count(имя поля) при подсчете не учитывает NULL зн-я(пустые ячейки).

Пример.найти min и max цены на ПК.

Select min(price) as min_price

Max(price) as max_price

From pc

Min_price

Max_price

350

980

Все эти ф-ции нельзя представлять в разделе where.

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

Select count(*)as kol

From pc

Where model in (select model

From product

Where maker=’A’)

Model

1232

1233

1276

Kol

8

Пример.найти кол-во различных моделей,выпускаемых производителем А.

Select count(model)as kol_mod

From product

Where maker=’A’

Kol_mod

7

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

Select count(distinct model)as kol

From pc

Where in (select model

From product

Where maker=’A’)

Kol

2

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

30.Использование групповых операций. Предложение GROUP BY.предл-е GROUP BY исп-ся для определения групп выходных строк,к кот-м могут применяться агрегатные ф-ции(count,min,max,avg,sum).

Если это предл-е отсутсвует и исп-ся агрегатная ф-я,то эти ф-ции будут применяться ко всему набору строк,кот.удовлетворяют предикату запроса.

Для GROUP BY все зн-я NULL (пустые зня) трактуется как равные,т.е. при группировке по полю,содержащему NULL зн-е все эти строки попадут в одну группу.

Если при наличии предл-я GROUP BY в предл-нии select отсутствует агрегатные ф-ции,то запрос просто вернет по одной строке из каждой группы.

Пример.для каждой модели ПК опр-ть их кол-во и сред.стоимость.

Select model,count(model)as kol,avg(price)as pr

From PC

Group by model

model

kol

Pr

1232

11211

1233

1260

4

3

4

1

425

850

875

350

Сущ-т неск.опред-х правил выполнения агрегатных ф-ций:

1)если в рез-те вып-ния запроса не получено ни одной строки,то исходные данные для выч-ния агрегатной ф-ции отсутствуют.В этом случае рез-том вып-ния ф-ции count будет NULL.

2)аргумент агр-й ф-ции не может сам сод-ть агрегатную ф-цию,т.е.,напр,в одном запросе нельзя получить max ср-нее знач-е.

Max(avg(price))

3)рез-т выполнения ф-ции count есть целое число,др-е агр-е ф-ции наследуют типы данных обрабатываемых значений.

4)если при вып-нении ф-ции sum был получен рез-т,превышающий max зн-е исп-ого типа данных возникает ошибка.

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

Select type,avg(price)as pr

From printer

Group by type

31.Предложение HAVING.-применяется после группировки для опр-ния предиката,фильтрующего группы по зн-ниям агр-ых ф-ций.Это предл-е необходимо для проверки зн-ний,кот.получены с помощью агрегатной ф-ции не из отдельных строк таб-цы,опред-х в предл-нии from,а из групп таких строк.Поэтому проверка не может содержаться в предл-нии where.

Пример.Получить кол-во ПК и ср-юю цену для каждой модели,при условии,что ср.цена меньше 800$.

Select model,count(model)as kol,avg(price)as pr

From pc

Group by model

Having avg(price)<800

model

kol

Pr

1232

1260

4

1

425

350

Замечание.В предл-нии having нельзя исп-ть псевдоним pr,кот. исп-зовался для переименования агр-й ф-ции.

Пример.Из таб.Laptop вывести те модели,кот.больше 2х(кол-во больше 2х).Вывести модель и кол-во.

Select model,count(model)as kol

From laptop

Group by model

Having count(model)>2

Пример.Для каждого произ-ля подсчитать кол-во выпускаемых им моделей.

Select maker,count(model)as kol

From prodect

Group by maker

Пример.Для каждого типа продукции подсчитать кол-во моделей.

Select type count(model)as kol

From product

Group by type.

32.Использование в запросе нескольких источников записей.В разделе from допускается указание неск-х таблиц.Простое перечисление неск-х таб-ц практически не исп-ся и соот-т это операция декартовому произведению,т.е.в результирующем наборе каждая запись одной таб-цы будет сочетаться с каждой записью др-й таб-цы.

А

В

а

в

с

d

1

2

2

4

2

1

4

3

Select *

From A,B

A

B

C

D

1

2

2

4

1

2

3

3

2

1

2

4

2

1

3

3

Обычно пересечение таб-ц в разделе from исп-зя с условием соед-ния записей из разных таблиц,кот.указываются в предложениях where.

Пример.В предыдущем примере возьмем условие совпадения значений в полях а и с.

Select*

From A,B

Where a=c

A

B

C

D

2

1

2

4

В данном примере соед-ся только те строки таб-ц,у кот-х в указанных полях находится равные знач-я(эквисоединение).

Пример.Вывести пары моделей ПК,имеющих одинаковые цены.

Select distinct A.model,B.model

From pc as A,PC as B

Where A.price=B.price and A.model<B.model

A.model<B.model-условие,чтобы исключить одинаковые пары.

Переименование в разделе from исп-ся также если там,в разделе from имеется подзапрос.

Пример.найти номер модели и произ-ля ПК,имеющих цену меньше 600.

Select pc.model,maker

From pc,(select maker,model

From product

Where type=’pc’)as A

Where price<600 and pc.model=A.model.

Maker

Model

A

A

B

E

E

E

1232

1233

1121

1260

2112

2113

В данном случае в предложении select нельзя использ-ть данные таб-цы product,т.к.product уже не исп-ся,а вместо нее исп-ся подзапрос А.

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