Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД7.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
38 Кб
Скачать
☆
    1. Использование Having и агрегатных функций для вложенных запросов

Если в условии поиска для вложенного запроса нужно указать агрегатную функцию используется предложение HAVING

#Определить покупателя, у которого средняя покупка (количество) больше средней покупки других покупателей и среднее количество покупок этого покупателя.

Select R1.pokup_name, avg (R1.kolvo) from Rashod R1

Group by R1.pokup_name

Having R2.pokup_name, avg( R1.kolvo)>=ALL //имеющего ср. Количество>=всех ..

(Select avg R2.kolvo from Rashod R2

Group by R2.pokup_name)

#Определить адрес покупателя, который приобрёл наибольшее количество товара

Select * from Pokupateli P

Where P.pokup_name = (select R.pokupname from Rashod R

Having sum (R.kolvo) >=ALL (select sum(RR.kolvo), RR.pokup_name from Rashod RR Group by RR.pokup_name))

  1. Объединение результатов выполнения нескольких запросов (union)

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

#Select * from Tovar

Where kolvo>100

#select * from Tovar

Where name_tovar starting with ‘A’

#Select * from Tovar

Where price between (100 and 500)

Select * from Tovar

Where kolvo>100

UNION

select * from Tovar

Where name_tovar starting with ‘A’

UNION

Select * from Tovar

Where price between (100 and 500)

  1. Внешние соединения

Внешнее соединение определяется в предложении from согласно спецификации:

Select {*|<значение1>[,<значение2>]} from <table1> <вид соединения> join <table2> ON <условие поиска>

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

  • Left - левое внешнее соединение, когда ведущей является table1

  • Right - правое внешнее соединение, когда ведущей является table2

  • Full – полное внешнее соединение, когда ведущей являются обе таблицы. В результирующий набор данных включаются все записи обеих таблиц, по следующему алгоритму: если для записи table1 имеются записи table2 которые удовлетворяют условию соединения, то в результирующий набор данных будут включены все комбинации соединения таких записей таблицы table1 и table2, в противном случае, в результирующий набор данных будет включена запись table1 соединенная с пустой записью, тоже относится и к записям table2.

#Пусть имеют таблицы А и В со связью по столбцу P1

A

P1

P2

P3

a

x

400

b

x

200

C

Y

500

d

B

P1

P2

X

1

y

2

z

2

Select A.P1,A.P2,B.P2 from A left join B on A.P2=B.P1

Select A.P1,A.P2,B.P2 from A right join B on A.P2=B.P1

Select A.P1,A.P2,B.P1,B.P2 from A full join B on A.P2=B.P1

A.P1

A.P2

B.P2

a

x

1

b

x

1

C

Y

2

d

-

-

A.P1

A.P2

B.P2

a

x

1

b

x

1

C

Y

2

-

-

2

A.P1

A.P2

B.P1

B.P2

a

x

x

1

b

x

x

1

C

Y

y

2

d

-

-

-

-

z

-

2