Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа_Оператор SELECT_2.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
84.48 Кб
Скачать

8

Лабораторная работа «Оператор select»

часть2

Оператор SELECT имеет следующий формат:

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

FROM <таблица1> [, < таблица2> ...]

[WHERE <условия_поиска>]

[GROUP BY столбец [COLLATE collation} [,столбец! [COLLATE collation] ...]

[HAVING < условия поиска >]

[UNION <оператор select>]

[PLAN <план выполнения_запроса>]

[ORDER BY <список_столбцов>]

Предложение having - наложение ограничений на группировку записей

Если нужно в результирующем НД выдавать статистику не по всем группам, а только по тем из них, которые отвечают некоторому условию, после предложения GROUP BY указывают предложение

HAVING < условия_поиска >

где условия поиска указываются по тем же правилам, что и условия поиска для предложения WHERE, за важным исключением: в условии поиска предложения HAVING можно указывать статистические (агрегатные) функции, чего нельзя делать в условии поиска для WHERE.

Пример. Выдать минимальные покупки товара в единицах для всех покупателей, у которых минимальное количество покупаемого товара не меньше 100 единиц.

SELECT POKUP, MIN(KOLVO) FROM RASHOD

GROUP BY POKUP HAVING MIN(KOLVO) >= 100

Если не указывать HAVING с условием, будут выданы все группы.

Можно указывать различные агрегатные функции для возвращаемого столбца и условия в HAVING.

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

SELECT POKUP, SUM(KOLVO) FROM RASHOD

GROUP BY POKUP HAVING MIN(KOLVO) >= 100

ЗАМЕЧАНИЕ. Следует помнить, чем условие в HAVING отличается от условия в WHERE: в условии поиска WHERE нельзя указывать агрегатные функции.

Пример. Выдать из таблицы RASHOD дату, товар, стоимость отпущенного товара. При этом показывать только записи, у которых стоимость отпущенного товара больше 120

SELECT R.DAT_RASH, R.TOVAR, (R.KOLVO * T.ZENA) AS STOIM

FROM RASHOD R, TOVARY T

WHERE (R.TOVAR = T.TOVAR) AND ((R.KOLVO * T.ZENA) > 120)

ORDER BY R.DAT_RASH

Использование between

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

<значение> [NOT] BETWEEN <значение1> AND <значение2>

Зарезервированное слово NOT инвертирует условие (значение не должно находиться в интервале между значением! и значением 2).

Пример. Выдать сведения обо всех отпусках товара, где количество отпущенного товара (в единицах) лежит в диапазоне 1000..3000

SELECT * FROM RASHOD

WHERE KOLVO BETWEEN 1000 AND 3000

Использование in (список значений)

Если нужно, чтобы значение какого-либо столбца (или результат вычисления некоторого выражения) совпадало с одним из дискретных значений, в условии поиска указывается предложение

<значение> [NOT] IN (<значеиие1> [, <значение2> ...])

Тогда в результирующий набор данных будут включены только те записи, для которых значение, стоящее слева от слова IN, равно одному из значений, указанных в списке (<значение1> [, <значение2>...]).

Пример. Выдать сведения обо всех отпусках товара, где количество отпущенного товара (в единицах) равно или 100, или 1000, или 3000.

SELECT * FROM RASHOD

WHERE KOLVO IN (100, 1000, 3000)

ЗАМЕЧАНИЕ. Существует вторая форма использования IN, где список возможных значений возвращается вложенным подзапросом. Этот вариант рассматривается в подразделе, посвященном подзапросам.