Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задания ,методические указания к лабораторным работам.doc
Скачиваний:
39
Добавлен:
26.03.2016
Размер:
1.06 Mб
Скачать

IV. Группирование

1. Оператор group by.

Оператор group by группирует таблицу, представленную фразой from, в группы таким образом, чтобы в каждой группе все строки имели одно и то же значение поля, указанного во фразе group by. Далее, к каждой группе перекомпанованной таблицы (а не к каждой строке исходной таблицы) применяется фраза select, в результате чего каждое выражение во фразе select принимает единственное значение для группы.

Пример

Выдать для каждой поставляемой детали ее номер и общий объем поставок, за исключением поставок поставщика S1:

Select номер_детали, sum( количество)

from SPJ

where номер_поставщика

group by номер_детали

Результат:

Hомеp_поставщика

(Sum)

 

P1

300

 

P2

800

 

P4

300

 

P5

400

2. Оператор having.

Оператор having играет ту же роль для групп, что и фраза where для строк, и используется для того, чтобы исключать группы, точно так же, как where используется для исключения строк. Выражение во фразе having должно принимать единственное значение для группы.

Пример

Выдать номера деталей, поставляемых более чем одним поставщиком:

Select номер_детали

from SPJ

group by номер_детали

having count(*) > 1

Результат:

Номер_детали

 

P1

 

P2

 

P4

 

P5

V. Построение внешнего соединения

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

Существует четыре основных типа внешних соединений:

простое внешнее соединение;

простое внешнее соединение с третьей таблицей;

внешнее соединение простого соединения с третьей таблицей;

внешнее соединение внешнего соединения с третьей таблицей.

1. Простое соединение.

Пример

Select S.номер_поставщика, S.фамилия, SPJ.количество

from S, SPJ

where S.номер_поставщика=SPJ.номер_поставщика

Результат:

Hомеp_поставщика

Фамилия

Количество

 

S1

Смит

300

 

S1

Смит

200

 

S1

Смит

400

 

S1

Смит

200

 

S1

Смит

100

 

S1

Смит

100

 

S2

Джонс

300

 

S2

Джонс

400

 

S3

Блейк

200

 

S4

Кларк

200

 

S4

Кларк

300

 

S4

Кларк

400

2. Простое внешнее соединение двух таблиц.

Пример

Select S.номер_поставщика, S.фамилия, SPJ.количество

from S, outer SPJ

where S.номер_поставщика=SPJ.номер_поставщика

Добавление ключевого слова outer перед именем таблицы SP превращает ее в подчиненную таблицу. Результатом этого внешнего соединения будет получение сведений обо всех поставщиках, независимо от того, делали ли они поставки.

Результат:

Hомеp_поставщика

Фамилия

Количество

 

S1

Смит

300

 

S1

Смит

200

 

S1

Смит

400

 

S1

Смит

200

 

S1

Смит

100

 

S1

Смит

100

 

S2

Джонс

300

 

S2

Джонс

400

 

S3

Блейк

200

 

S4

Кларк

200

 

S4

Кларк

300

 

S4

Кларк

400

 

S5

Адамс

 

3. Внешнее соединение простого соединения с третьей таблицей.

Пример

select S.номер_поставщика, S.фамилия, SPJ.номер_детали,

P.название, P.цвет, P.вес

from S, outer(SPJ, P)

where S.номер_поставщика = P.номер_поставщика

and

SP.номер_детали =SPJ.номер_детали

and

цвет in ("Красный", "Зеленый")

Оператор select выполняет сначала простое соединение таблиц SP и P, а затем этот оператор выполняет внешнее соединение как комбинирование этой информации с данными из главной таблицы S.

Результат:

Hомеp_пост

Фамилия

Номер_дет

Название

Цвет

Вес

S1

Смит

P1

Гайка

Красный

12

S1

Смит

P2

Болт

Зеленый

17

S1

Смит

P4

Винт

Красный

14

S1

Смит

P6

Блюм

Красный

19

S2

Джонс

P1

Гайка

Красный

12

S2

Джонс

P2

Болт

Зеленый

17

S3

Блейк

P2

Болт

Зеленый

17

S4

Кларк

P2

Болт

Зеленый

17

S4

Кларк

P4

Винт

Красный

14

S5

Адамс

 

 

 

 

4. Внешнее соединение внешнего соединения с третьей таблицей.

Пример

select S.номер_поставщика, S.фамилия, SP.номер_детали,

P.название, P.цвет, P.вес

from S, outer(SP, outer P)

where S.номер_поставщика = SP.номер_поставщика

and

SP.номер_детали = P.номер_детали

and

цвет in ("Красный", "Зеленый")

Оператор select сначала выполняет внешнее соединение таблиц SP и P, затем - внешнее соединение как комбинирование этой информации с данными из главной таблицы S.

Результат:

Hомеp_пост

Фамилия

Номер_дет

Название

Цвет

Вес

S1

Смит

P1

Гайка

Красный

12

S1

Смит

P2

Болт

Зеленый

17

S1

Смит

P3

 NULL

 NULL

 NULL

S1

Смит

P4

Винт

Красный

14

S1

Смит

P5

 NULL

 NULL

 NULL

S1

Смит

P6

Блюм

Красный

19

S2

Джонс

P1

Гайка

Красный

12

S2

Джонс

P2

Болт

Зеленый

17

S3

Блейк

P2

Болт

Зеленый

17

S4

Кларк

P2

Болт

Зеленый

17

S4

Кларк

P4

Винт

Красный

14

S4

Кларк

P5

 NULL

 NULL

 NULL

S5

Адамс

 NULL

 NULL

 NULL

 NULL

5. Внешнее соединение двух таблиц с третьей.

Пример

Select S.номер_поставщика, S.фамилия, s.город,

SP.количество, P.название, P.город

from S, outer SP, outer P

where S.номер_поставщика = SP.номер_поставщика

and

S.город = S.город

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

Результат:

Hомеp_пост

Фамилия

Город_пост

Кол-во

Название

Город_дет

S1

Смит

Лондон

300

Гайка

Лондон

S1

Смит

Лондон

300

Винт

Лондон

S1

Смит

Лондон

300

Блюм

Лондон

. . .

. . .

. . .

. . .

. . .

. . .

S2

Джонс

Париж

300

Болт

Париж

S2

Джонс

Париж

300

Кулачок

Париж

S2

Джонс

Париж

400

Болт

Париж

. . .

. . .

. . .

. . .

. . .

. . .

S4

Кларк

Лондон

400

Гайка

Лондон

S4

Кларк

Лондон

400

Винт

Лондон

S4

Кларк

Лондон

400

Блюм

Лондон

S5

Адамс

 

 

 

 

Всего выборка содержит 34 строки.

Подготовьте запрос и проверьте полученный результат.