select-запрос выборки
Функция
Определение select-запроса выборки данных.
Спецификация
::=
::=
::=
::=
::=
Синтаксические правила
-
Допустимые привилегии для имен таблиц (представлений), содержащихся в
< табличном выражении >
, должны включатьSELECT
. -
По умолчанию опцию
WAIT
можно использовать только в select-запросе выборки (не в подзапросах). -
Количество столбцов таблицы, получаемой по
< select-запросу выборки >
, равно числу элементов< списка выборки >
. -
Максимальное количество элементов в
< списке выборки >
равно 250. -
Если в
< списке выборки >
задано *, это означает выбор всех столбцов из списка таблиц (представлений). Столбцы выбираются в соответствии с порядком, в котором они были определены при создании таблицы (представления) и порядке очередности таблиц (представлений), заданных во< FROM-спецификации >
. Каждый столбец выбирается только один раз. -
Имена столбцов в каждом
< значимом выражении >
должны однозначно указывать столбец в< табличном выражении >
. -
Ключевое слово
DISTINCT
не должно задаваться в< select-запросе выборки >
более одного раза, за исключением случаев, когда оно задается в< подзапросах >
, входящих в этот< основной запрос выборки >
.select distinct make, count (*) from auto group by make having count(*) >(select count (distinct name) from person); | AMERICAN MOTORS | 91 | | CHRYSLER | 168 | | FORD | 118 | | GENERAL MOTORS | 284 |
-
< Значимое выражение >
может включать пользовательскую функцию СУБД ЛИНТЕР. -
< Значимое выражение >
может быть< логическим выражением >
.create or replace table t_bool (b boolean); insert into t_bool values (TRUE); insert into t_bool values (FALSE); insert into t_bool values (NULL); select b, not (b) "NOT" from t_bool; B NOT ---- ---- | T | F | | F | T | | | |
select t1.b, t2.b, t1.b or t2.b "OR" from t_bool t1, t_bool t2; B B OR ------------ | T | T | T | | T | F | T | | T | | T | | F | T | T | | F | F | F | | F | | | | | T | T | | | F | | | | | |
-
В качестве
< пользовательской функции >
может быть использована любая хранимая процедура, возвращающая значение одного из типов, разрешенных в языке SQL, не имеющая аргументов классаOUT
илиINOUT
и не содержащая обращений к СУБД. -
Если результатом
< табличного выражения >
является сгруппированная таблица, то каждая< спецификация столбца >
в каждом< значимом выражении >
должна быть группируемым столбцом или задаваться посредством агрегатной функции. -
Если результатом
< табличного выражения >
не является сгруппированная таблица, а какое-нибудь< значимое выражение >
включает в себя агрегатную функцию, то все столбцы каждого< значимого выражения >
должны быть заданы посредством агрегатной функции. -
Тип данных, длина, точность и дробная часть столбца таблицы-результата
< запроса выборки >
наследуются от< значимого выражения >
, из которого получен столбец. -
Если i-ое
< выбираемое значение >
в< списке выборки >
специфицировано следующим за ним< именем столбца >
, то i-ый столбец результата есть именованный столбец. Если i-ое< выбираемое значение >
в< списке выборки >
не специфицировано следующим за ним< именем столбца >
, но< значимое выражение >
представлено< спецификацией столбца >
, то i-ый столбец результата есть именованный столбец с именем< спецификация столбца >
. В противном случае, i-ый столбец считается неименованным. -
< Запрос выборки >
является обновляемым только тогда, когда выполняются следующие условия:-
ключевое слово
DISTINCT
не указано; -
все
< значимые выражения >
из< списка выборки >
включают в себя только< спецификацию столбца >
, и ни одна< спецификация столбца >
не встречается более одного раза; -
< FROM-спецификация >
из< табличного выражения >
содержит точно одну< табличную ссылку >
, и эта таблица (представление) является обновляемой; -
< WHERE-спецификация >
из< табличного выражения >
не включает в себя< подзапрос >
; -
< табличное выражение >
не содержит ни< GROUP BY-спецификации >
, ни< HAVING-спецификации >
.
-
-
< Табличное выражение >
можно не задавать. В этом случае запросSELECT
может содержать только константные выражения и пользовательские функции от них, обращения к значениям последовательности (NEXTVAL, CURRVAL
), а также константные предикаты. Такой запрос всегда возвращает одну запись.SELECT SYSDATE; SELECT LOG(2,5); SELECT MY_SEQ.NEXTVAL; SELECT 'СУБД ЛИНТЕР','версия 6.0'; SELECT ?(char(10)); //запрос с параметром create or replace table xxx (i int); insert into xxx values (10); insert into xxx values (20); create or replace procedure ppp () result int declare var i int; // code execute "select max(i) from xxx;" into i; // return i; // end; select ppp() in (20,30); |T|
-
Запрещено использование агрегатных функций в
< запросе выборки >
без< табличного выражения >
. -
Если в качестве выбираемого значения указано имя несуществующего столбца (
< псевдоним столбца >
), то оно должно быть перечислено в списке имен столбцов-псевдонимов< FROM-спецификации >
.select nmrerr, msg from errors fetch first 2; |NMRERR |MSG | |0 |операция завершена успешно | |1 |строка в таблице отсутствует |
select "Код завершения", "Текст сообщения" from errors as "Ошибки" ("Код завершения", "Текст сообщения") fetch first 2; |Код завершения|Текст сообщения | |0 |операция завершена успешно | |1 |строка в таблице отсутствует |
select nmrerr as "Код завершения", msg as "Текст сообщения" from errors fetch first 2; |Код завершения|Текст сообщения | |0 |операция завершена успешно | |1 |строка в таблице отсутствует |
-
В качестве
< функции >
в данной версии допустимы только функцииLEAD
иLAG
.
Общие правила
-
Если результат
< табличного выражения >
не является сгруппированным, а< список выборки >
включает только агрегатные функции, то результат< табличного выражения >
представляет собой значение каждой такой функции, а результатом< запроса выборки >
будет таблица, состоящая из одной строки. i-ым значением в строке будет значение, специфицированное i-ым< значимым выражением >
.select count(*), min(year+1900), max(cylnders), default(make) from auto; |1000 |1970 |12 |null |
-
Если результат
< табличного выражения >
не является сгруппированным,< список выборки >
не включает агрегатные функции, то каждое< значимое выражение >
применяется к каждой строке результата< табличного выражения >
, и в результате получается таблица из «m» строк, где «m» – мощность< табличного выражения >
. ЕслиDISTINCT
не указан, то результатом< запроса выборки >
будет такая таблица. ЕслиDISTINCT
указан, то результатом< запроса выборки >
будет таблица, полученная из описанной путем исключения дубликатов строк. -
Если результат
< табличного выражения >
является сгруппированным и имеет нуль групп, то результатом выполнения< запроса выборки >
будет пустая таблица.Сравните:
a) в ответе 31 группа:
select make from auto where color='BLACK' group by make; |ALPINE | |AMERICAN MOTORS | |BMW | …
б) ответ пуст:
select make from auto where color='GOLD' group by make;
-
Если результат
< табличного выражения >
является сгруппированным и имеет одну группу, а каждое< значимое выражение >
в< списке выборки >
представляет собой агрегатную функцию, то результатом< запроса выборки >
будет таблица, имеющая одну строку. I-е значение этой строки – результат i-й функции:select count(*), min(year+1900), max(cylnders), default(make) from auto group by 2; |1000 |1970 |12 | |
-
Если результат
< табличного выражения >
является сгруппированным и имеет одну или более групп, то результатом применения каждого< значимого выражения >
к каждой группе результата является таблица из «m» строк, где «m» – число групп в< табличном выражении >
. Когда< значимое выражение >
применяется к данной группе, эта группа является аргументом каждой агрегатной функции в< значимом выражении >
. ЕслиDISTINCT
не указан, то результатом будет описанная таблица. Если указанDISTINCT
, результатом< запроса выборки >
будет таблица, полученная из описанной путем исключения дубликатов строк.select make, count( make) from auto where color='BLACK' group by make; |ALPINE | 1 | |AMERICAN MOTORS | 23 | |BMW | 3 | …
select make, count( distinct make) from auto where color='BLACK' group by make; |ALPINE | 1 | |AMERICAN MOTORS | 1 | |BMW | 1 | …
-
Строка является дубликатом другой строки только тогда, когда все пары значений в одних и тех же позициях строк равны.
-
Суммарная длина значений всех столбцов ответа должна быть не более 64 Кбайт.
-
Разрешено использование в одном и том же подзапросе двух функций с модификатором
DISTINCT
, если они ссылаются к разным< значимым выражениям >
. -
Если в одном и том же запросе встречаются и
UNION DISTINCT
, иUNION ALL
, то всеUNION ALL
заменяются наUNION DISTINCT
.
Пример
select 1 from $$$sysrl group by $$$s11 having exists (select 1 from $$$attri group by $$$s21 having avg(distinct $$$s12) = sum(distinct $$$s22) );