
- •Лабораторная работа «Оператор select»
- •Предложение having - наложение ограничений на группировку записей
- •Использование between
- •Использование in (список значений)
- •Использование starting
- •Использование containing
- •Использование функции upper
- •Использование like
- •Использование функции cast
- •Использование подзапросов
- •Дополнительные возможности использования подзапросов, возвращающих единичное значение Использование exists
- •Использование singular
- •Использование подзапросов, возвращающих множество значений Использование all, some
- •Использование having и агрегатных функций для вложенных подзапросов
- •Внешние соединения
- •Union - объединение результатов выполнения нескольких операторов select
- •Использование is null
- •Использование операции сцепления строк
- •Работа с разными бд в одном запросе
Лабораторная работа «Оператор 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, где список возможных значений возвращается вложенным подзапросом. Этот вариант рассматривается в подразделе, посвященном подзапросам.