- •Группировка записей
- •Наложение ограничений на группировку записей
- •Задание сложных условий поиска
- •Использование логических выражений
- •Сравнение столбца с результатом вычисления выражения
- •Использование сцепления строк/конкатенации ||
- •Использование функции cast
- •Дополнительные возможности использования подзапросов, возвращающих единственное значение
- •Использование Exist (существование)
- •Использование Singular (единственный)
- •Использование подзапросов возвращающих множество значений
- •Использование подзапросов
- •Вложение подзапросов
- •Использование Having и агрегатных функций для вложенных запросов
- •Объединение результатов выполнения нескольких запросов (union)
- •Внешние соединения
- •Cтандартные функции языка sql
Использование 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))
Объединение результатов выполнения нескольких запросов (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)
|
||
Внешние соединения
Внешнее соединение определяется в предложении 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 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
