Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
23
Добавлен:
01.05.2014
Размер:
526.34 Кб
Скачать

Элементы языка SQL

Оператор SELECT: использование подзапросов

Дополнительные возможности

Предложение SINGULAR. Требуется выбрать лишь те записи, для которых подзапрос возвращает только одно значение.

SINGULAR (<подзапрос>)

Пример.

Составить список покупателей, купивших только один товар:

SELECT P.*

FROM POKUPATELI P

WHERE SINGULAR (SELECT *

FROM RASHOD R

WHERE R.POKUP = P.POKUP )

Элементы языка SQL

Оператор SELECT: использование подзапросов

Дополнительные возможности

Использование ALL, SOME (ANY). Если в условиях поиска необходимо указать , что сравниваемое значение должно находиться в определенных отношениях со всеми или некоторыми значениями из множества значений, возвращаемых подзапросом, применяют выражение:

<сравниваемое_значение> [NOT] <оператор> {ALL | SOME | ANY } (<подзапрос>)

ALL указывает, что условие поиска будет истинно только тогда, когда сравниваемое значение находится в нужном отношении со ВСЕМИ значениями, возвращаемыми подзапросом.

WHERE STOLBEZ > ALL (SELECT POLE FROM TABLIZA)

SOME (или ANY) условие истинно, когда сравниваемое значение находится в нужном отношении ХОТЯ БЫ С ОДНИМ значением, возвращаемым подхвпросом.

WHERE STOLBEZ > SOME (SELECT POLE FROM TABLIZA)

Элементы языка SQL

Оператор SELECT: использование подзапросов

Дополнительные возможности

Использование ALL, SOME (ANY) Пример.

Определим все факты отгрузки товара со склада, в которых количество единиц отгружаемого товара превышает среднее значение.

SELECT * FROM RASHOD R1 WHERE R1.KOLVO > ALL

(SELECT AVG(R2.KOLVO) FROM RASHOD R2 GROUP BY POKUP)

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

SELECT * FROM RASHOD R1

WHERE R1.KOLVO > SOME

(SELECT AVG(R2.KOLVO) FROM RASHOD R2 GROUP BY POKUP)

Элементы языка SQL

Оператор SELECT: использование подзапросов

Использование HAVING и агрегатных функций для вложенных подзапросов

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

Пример.

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

SELECT R1.POKUP, AVG(R1.KOLVO) FROM RASHOD R1 GROUP BY R1.POKUP

HAVING AVG(R1.KOLVO) >= ALL

(SELECT AVG(R2.KOLVO) FROM RASHOD R2 GROUP BY POKUP)

Элементы языка SQL

Оператор SELECT

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

Внешнее соединение таблиц определяется в предложении FROM согласно следующей спецификации:

SELECT { * | <значение1> [, <значение2> …]}

FROM <таблица1> <вид_соединения> JOIN <таблица2> ON <условие_поиска>

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

LEFT – (левое внешнее соединение), когда ведущей являются таблица1 (расположена СЛЕВА от вида соединения).

RIGHT – (правое внешнее соединение), когда ведущей являются таблица2 (расположена СПРАВА от вида соединения).

FULL – (полное внешнее соединение), когда ведущими являются и таблица1, и таблица2.

Таблица A

 

Ст. P1

Ст.P2

Ст.P3

a

x

400

b

x

200

c

y

500

d

 

 

Таблица B

 

Ст. P1

Ст.P2

x

1

y

2

z

3

Элементы языка SQL

Оператор SELECT

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

SELECT A.P1, A.P2, B.P2

FROM A

LEFT 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

Ст.P2

Ст.P3

a

x

400

b

x

200

c

y

500

d

 

 

Таблица B

 

Ст. P1

Ст.P2

x

1

y

2

z

3

Элементы языка SQL

Оператор SELECT

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

SELECT A.P1, A.P2, B.P2

FROM A

RIGHT JOIN B ON A.P2 = B.P1

Результирующий НД

 

Ст. A. P1

Ст. A.P2

Ст. B.P2

a

x

1

b

x

1

c

y

2

 

 

3

Таблица A

 

Ст. P1

Ст.P2

Ст.P3

a

x

400

b

x

200

c

y

500

d

 

 

Таблица B

 

Ст. P1

Ст.P2

x

1

y

2

z

3

Элементы языка SQL

Оператор SELECT

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

SELECT A.P1, A.P2, B.P1, B.P2

FROM A

FULL JOIN B ON A.P2 = B.P1

 

Результирующий НД

 

Ст. A. P1

Ст. A.P2

Ст. B.P1

Ст. B.P2

a

x

x

1

b

x

x

1

c

y

y

2

d

 

 

 

 

 

z

3

Элементы языка SQL

Оператор SELECT

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

Пример 1. Несколько последовательных внешних соединений

SELECT R.DAT_RASH, R.TOVAR, T.ED_IZM, R.KOLVO, P.ADRES FROM RASHOD R

LEFT JOIN POKUPATELI P ON R.POKUP = P.POKUP LEFT JOIN TOVARY T ON R.TOVAR = T.TOVAR

Пример 2. Комбинирование внешних и внутренних соединений

SELECT P.POKUP, R.DAT_RASH, R.TOVAR, T.ED_IZM, R.KOLVO FROM POKUPATELI P

P LEFT JOIN RASHOD R ON R.POKUP = P.POKUP

INNER JOIN TOVARY T ON R.TOVAR = T.TOVAR

Элементы языка SQL

Оператор SELECT

Объединение запросов – UNION

Иногда бывает полезным объединить два или более результирующих наборов данных. Результирующие наборы должны иметь одинаковую структуру (состав столбцов).

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

SELECT R.*

FROM RASHOD R

WHERE R.TOVAR CONTAINING ‘Сахар’

UNION

SELECT R.*

FROM RASHOD R

WHERE R.KOLVO >= 100

Соседние файлы в папке Презентации по технологиям БД