SYBASE (988809), страница 6
Текст из файла (страница 6)
Сортировка значений полей по возрастанию или убыванию осуществляется с помощью структуры order by, в которой перечисляются через запятую либо названия колонок, либо номера этих колонок в списке полей SELECT. Опция asc определяет сортировку по возрастанию, а опция desc - по убыванию. Если опция не определена, то предполагается упорядочение по возрастанию.
Пример:
select cod_vuza,nazvanie_vuza from vuz_gorod where cod_stran = ‘01’ order by 1
Структура compute используется с агрегатными функциями для получения в отчетах дополнительных записей, содержащих итоговые значения по каждой группе значений полей. С помощью структур compute можно подсчитать итоговые значения и для подгрупп, а также можно задавать несколько структур compute для одной группы. В структуре compute используются следующие агрегатные функции: sum, avg, min, max, count (sum и avg используются только для числовых колонок). Элемент данных, следующий за одной из этих функций, должен быть заключен в круглые скобки.
Агрегатные функции
Функция avg вычисляет среднее среди отобранных значений элемента. Эта функция предназначена только для числовых колонок и может быть использована с ключевым словом distinct. При вычислении среднего null значения игнорируются.
Функция sum вычисляет сумму отобранных значений элемента. Эта функция также предназначена только для числовых колонок, может быть использована с ключевым словом distinct и null значения игнорируются.
Функция max находит наибольшее среди отобранных значений элемента. Эта функция может быть применена к колонке любого типа и null значения игнорируются.
Функция min находит наименьшее среди отобранных значений элемента и также может быть применена к колонке любого типа, null значения игнорируются.
Функция count используется одним из двух способов:
-
count(distinct <имя колонки>) возвращает число, равное количеству отличных друг от друга строк, удовлетворяющих условию поиска;
-
count(*) возвращает число, равное количеству строк, удовлетворяющих условию поиска.
Правила использования структуры compute:
-
в агрегатных функциях нельзя использовать distinct;
-
поля в структуре compute должны обязательно присутствовать в списке выборки;
-
в операторе select, использующего compute, нельзя применять структуру into;
-
при использовании compute by обязательно присутствие структуры order by, при этом список полей в compute by либо идентичен списку полей в order by, либо является его подмножеством с сохранением следования полей слева направо, начинающегося с одного и того же выражения и без пропусков каких-либо выражений.
Пример: если указывается order by a, b, c , то можно использовать:
compute <агр. функция> (<имя колонки>) by a, b, c
compute <агр. функция> (<имя колонки>) by a, b
compute <агр. функция> (<имя колонки>) by a
и нельзя использовать:
compute <агр. функция> (<имя колонки>) by b,c
compute <агр. функция> (<имя колонки>) by a, c
compute <агр. функция> (<имя колонки>) by c
-
для подсчета общих итогов используется compute без by.
Примеры:
-
если в compute после by указывается больше одного поля, то группа значений разбивается на подгруппы и агрегатная функция подсчитывается на нижнем уровне группирования:
select type, pub_id, price from titles
order by type, pub_id, price
compute sum(price) by type, pub_id
-
если агрегатную функцию нужно подсчитать на каждом уровне группирования, то необходимо использовать compute больше одного раза:
select type, pub_id, price from titles
order by type, pub_id, price
compute sum(price) by type, pub_id
compute sum(price) by type
Кроме того, в структуре compute можно указывать одну и ту же агрегатную функцию для нескольких колонок, а также разные агрегатные функции для различных колонок.
-
если необходимо подсчитать только общие итоги, которые печатаются в конце отчета, то надо использовать compute без by:
select type, price,advance from titles
where price > $20
compute sum(price), sum(advance)
Оператор union
Оператор union служит для объединения двух и более запросов в один, для которого
можно использовать структуры order by и compute. Синтаксис оператора:
<запрос1>
[union [all] <запрос N>]…
[<структура order by>]
[<структура compute>]
где <запрос1>: select <список выборки>
[<структура into>]
[<структура from]
[<структура where>]
[<структура group by>]
[<структура having>]
а <запрос N>: select <список выборки>
[<структура from]
[<структура where>]
[<структура group by>]
[<структура having>]
Пример:
select * from t1 union select * from t2
Оператор union, по умолчанию, уничтожает дублируемые записи из результата запросов. Если используется опция all, то все записи включаются в отчет.
Правила использования оператора union:
-
все списки выборки в операторе union должны иметь одинаковую структуру (одинаковое количество однотипных выражений);
-
заголовки колонок в отчете по объединенному запросу берутся из первого запроса;
-
структуру into можно использовать только в первом запросе;
-
структуры order by и compute можно указывать только после последнего запроса для сортировки и подсчета итогов в объединенном запросе;
-
структуры group by и having можно использовать только в индивидуальных запросах;
-
оператор union можно использовать в операторе insert, например:
insert into tour
select city, state from stores
union
select city, state from authors
-
нельзя использовать union в операторе create view;
-
нельзя использовать опцию browse в предложениях select оператора union.
Встроенные функции
Встроенные функции используются в списке выборки, в структуре where и в различных выражениях. Встроенные функции можно разделить на классы:
- системные функции, которые применяются к системным таблицам БД;
- строковые функции, которые применяются к значениям следующих типов: char, nchar, varchar, nvarchar, binary, varbinary;
- текстовые функции, которые применяются к значениям типа text и image;
- математические функции (тригонометрические, геометрические и др.);
- функции даты, которые применяются к значениям типа datetime и smalldatetime;
- функции преобразования одних типов данных в другие и форматирования дат.
Системные функции
Системные функции обеспечивают наиболее быстрый способ обращения к системным таблицам. Общий синтаксис вызова системной функции:
select <имя функции> (<аргумент[ы]>)
Таблица 1
Функция | Аргумент(ы) | Результат |
1) col_name | ( <ид. объекта>, <ид. колонки>) | имя колонки |
2) col_length | (“<имя объекта>”, “<имя колонки>”) | длина колонки в таблице |
3) data_pgs | (<ид. объекта>, {doampg | ioampg}) | количество страниц, занимаемое таблицей или индексом (не включаются страницы, используемые внутренними структурами) |
4) datalength | (<выражение>) | длина выражения в байтах |
5) db_id | (“<имя БД>”) | номер идентификатора БД |
6) db_name | (<номер ид. БД>) | имя БД |
7) host_id | () | номер идентификатора главного процесса |
8) host_name | () | имя текущей главной ЭВМ |
9) index_col | (“<имя объекта>”, <ид. индекса>, <ключ>) | имя колонки индекса |
10) isnull | (<выражение>, <значение>) | замена заданного значения null значением |
11) object_id | (“<имя объекта БД>”) | номер идентификатора объекта БД |
12) object_name | (<ид. объекта БД>) | имя объекта БД |
13) reserved_pgs | (<ид. объекта>, {doampg | ioampg}) | количество страниц, занимаемое таблицей или индексом (включаются страницы, используемые внутренними структурами |
14) rowcnt | (doampg) | количество записей в таблице |
15) sused_id | ([“<имя клиента>”]) | номер идентификатора клиента |
16) sused_name | ([<ид. клиента>]) | имя клиента |
17) tsequal | (<вр. метка>, <вр. метка2>) | сравнивает значения временных меток измененной записи; <вр. метка> - временная метка после выборки записи для просмотра; <вр. метка2> - временная метка сохраненной записи после обновления |
18) used_pgs | (<ид. объекта>, doampg, ioampg) | общее количество страниц, занимаемое таблицей и ее индексом (включаются страницы, используемые внутренними структурами) |
19) user_id | ([“<имя пользов.>”]) | номер идентификатора пользователя |
20) user_name | ([<ид.пользователя>]) | имя пользователя |
21) valid_name | (“<строка>”) | возвращает 0, если <строка> содержит недопустимые символы или длиной больше 30 байт, и не 0 - в противном случае |
Примеры:
-
select x = col_length (“titles”, “title”)
-
select length = datalength (pub_name), pub_name from publishers
-
select name from sysusers where name = user_name(1)
Строковые функции
Строковые функции позволяют работать со строковыми и двоичными данными.
Синтаксис вызова строковых функций:
select <имя функции> (<аргументы>)