随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从https://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站https://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!
如有Sybase数据库技术问题需要咨询,请联系我!
以下官方手册为ASE 15.7 ESD#2中文版:
- 新增功能公告 适用于 Windows、Linux 和 UNIX 的 Open Server 15.7 和 SDK 15.7
- 新增功能摘要
- 新增功能指南
- ASE 15.7 发行公告
- 配置指南(windows)
- 安装指南(windows)
- 参考手册:构件块
- 参考手册:命令
- 参考手册:过程
- 参考手册:表
- Transact-SQL® 用户指南
- 系统管理指南,卷 1
- 系统管理指南,卷 2
- 性能和调优系列:基础知识
- 性能和调优系列:锁定和并发控制
- 性能和调优系列:监控表
- 性能和调优系列:物理数据库调优
- 性能和调优系列:查询处理和抽象计划
- 性能和调优系列:使用 sp_sysmon 监控 Adaptive Server
- 性能和调优系列:利用统计分析改进性能
- 程序员参考 jConnect for JDBC 7.0.7
- Adaptive Server Enterprise 中的 Java
- 组件集成服务用户指南
- Ribo 用户指南
- 内存数据库用户指南
- Sybase Control Center for Adaptive Server® Enterprise
- 安全性管理指南
- 实用程序指南
将查询结果分组: group by 子句
group by 子句将查询的输出划分为若干组。可以按一个或多个列名进行 分组,也可以按在表达式中使用数值数据类型所计算得出的列结果进行 分组。与集合一起使用时, group by 检索每个子群中的计算结果,并会 返回多行。
group by 列 (或表达式)的最大数量未受到显式限制。 group by 结果的 唯一限制是 group by 列加上集合结果的宽度不超过 64K。
注释 不能对数据类型为 text、 unitext 或 image 的列使用 group by。
尽管使用 group by 时可以不带集合,但这样的结构限制了功能,并可能 产生混淆的结果。下例按书籍类型对结果进行分组:
select type, advance
from titles group by type
type |
advance |
------------ |
--------- |
popular comp |
7,000.00 |
popular comp |
8,000.00 |
popular comp |
NULL |
business |
5,000.00 |
business |
5,000.00 |
business |
10,125.00 |
mod_cook |
0.00 |
mod_cook |
15,000.00 |
trad_cook |
7,000.00 |
trad_cook |
4,000.00 |
trad_cook |
8,000.00 |
UNDECIDED |
NULL |
psychology |
7,000.00 |
psychology |
2,275.00 |
psychology |
6,000.00 |
psychology |
2,000.00 |
psychology |
4,000.00 |
(18 rows affected)
对 advance 列使用集合后,查询返回各组的总和:
select type, sum(advance) from titles
------------ |
------------------------ |
popular_comp |
15,000.00 |
business |
25,125.00 |
mod_cook |
15,000.00 |
trad_cook |
19,000.00 |
UNDECIDED |
NULL |
psychology |
21,275.00 |
------------ |
------------------------ |
popular_comp |
15,000.00 |
business |
25,125.00 |
mod_cook |
15,000.00 |
trad_cook |
19,000.00 |
UNDECIDED |
NULL |
psychology |
21,275.00 |
group by type type
使用集合的 group by 子句中的汇总值称为矢量集合 ,与标量集合相对, 后者在只返回一行时产生 (请参见 第 71 页的 “集合函数的使用 ”)。
请参见 《参考手册:命令》。
group by 的 SQL 标准比 Sybase 标准更具有限制性。 SQL 标准要求:
• 选择列表中的列必须出现在 group by 表达式中,或者必须是集合函 数的参数。
• group by 表达式只能包含选择列表中的列名,而不能包含仅作为矢 量集合的参数的那些列名。
许多 Transact-SQL 扩展 (在以下的节中描述)放宽了这些限制。但是, 复杂的结果集可能会使理解起来很困难。如果按如下设置 fipsflagger 选 项,就会出现警告消息,说明使用了 Transact-SQL 扩展:
set fipsflagger on
有关 fipsflagger 选项的详细信息,请参见 《参考手册:命令》中的 set
命令。
用 group by 对组进行嵌套
通过在 group by 子句中包括多个列对组进行嵌套。用 group by 建立集 后,即应用了集合。以下语句得出平均价格和书籍总销售额,先按出版 社标识号分组,然后按类分组:
select pub_id, type, avg(price), sum(total_sales) from titles
group by pub_id, type pub_id type
------ ------------ ------ -------
0736 business 2.99 18,722
0736 psychology 11.48 9,564 0877 UNDECIDED NULL NULL
0877 mod_cook 11.49 24,278
0877 psychology 21.59 375
0877 trad_cook 15.96 19,566
1389 business 17.31 12,066
1389 popular_comp 21.48 12,875
(8 rows affected)
可以在组内嵌套组。 group by 列 (或表达式)的最大数量未受到显式 限制。
使用 group by 在查询中引用其它列
SQL 标准规定 group by 子句必须包含来自 select 列表中的项。但是,使 用 Transact-SQL 可以在 group by 或 select 列表中指定任何有效的列名, 无论它们是否采用集合。
Sybase 解除了对包含 group by 的查询的 select 列表中可包括或忽略内容 的限制:
• 选择列表中的列并不限于分组列和用于矢量集合的列。
• group by 所指定的列并不限于选择列表中的非集合列。
矢量集合必须伴有 group by 子句。 SQL 标准要求 select 列表中的非集合 列与 group by 列相匹配。但是,上述第一条允许在查询的 select 列表中 指定附加的扩展列。
例如, SQL 的许多版本不允许在 select 列表中包括扩展的 title_id 列,但 在 Transact-SQL 中却允许这样做:
select type, title_id, avg(price), avg(advance) from titles
group by type type title_id
------------ -------- ----- -------
business |
BU1032 |
13.73 |
6,281.25 |
business |
BU1111 |
13.73 |
6,281.25 |
business |
BU2075 |
13.73 |
6,281.25 |
business |
BU7832 |
13.73 |
6,281.25 |
mod_cook |
MC2222 |
11.49 |
7,500.00 |
mod_cook |
MC3021 |
11.49 |
7,500.00 |
UNDECIDED MC3026 NULL NULL |
popular_comp |
PC1035 |
21.48 |
7,500.00 |
popular_comp |
PC8888 |
21.48 |
7,500.00 |
popular_comp |
PC9999 |
21.48 |
7,500.00 |
popular_comp |
PC1035 |
21.48 |
7,500.00 |
popular_comp |
PC8888 |
21.48 |
7,500.00 |
popular_comp |
PC9999 |
21.48 |
7,500.00 |
psychology PS1372 13.50 4,255.00
psychology PS2091 13.50 4,255.00
psychology PS2106 13.50 4,255.00
psychology PS3333 13.50 4,255.00
psychology PS7777 13.50 4,255.00
trad_cook TC3218 15.96 6,333.33
trad_cook TC4203 15.96 6,333.33
trad_cook TC7777 15.96 6,333.33
(18 rows affected)
上述示例仍然基于 type 列集合 price 和 advance 列,但其结果也显示每组 中包括的书籍的 title_id。
上述第二项允许对查询的选择列表中未指定为列的列进行分组。这些列 不出现在结果中,但矢量集合仍然计算其汇总值。例如:
select state, count(au_id) from authors
group by state, city
state
----- -------- CA 2
CA 1
CA 5
CA 5
CA 2
CA 1
CA 1
CA 1
CA 1
IN 1
KS 1
MD 1
MI 1
OR 1
TN 1
UT 2
(16 rows affected)
此示例虽然不显示每组所包含的城市,但同时按 state 和 city 对矢量集合 结果进行分组。因此,结果可能会造成误解。
您可能会认为以下查询应该产生与前一查询相似的结果,因为似乎只有 矢量集合才记录每行每个城市的数量:
select state, count(au_id) from authors
group by city
但结果却相差很大。由于未将 group by 同时用于 state 和 city 列,查询会 记录每个城市的数量,但将每行中该城市的记录内容显示在 authors 中, 而不是将其按城市组成一个结果行。
state
----- ----------- CA 1
CA 5
CA 2
CA 1
CA 5
KS 1
CA 2
CA 2
CA 1
CA 1
TN 1
OR 1
CA 1
MI 1
IN 1
CA 5
CA 5
CA 5
MD 1
CA 2
CA 1
UT 2
UT 2
(23 rows affected)
在包括 where 子句或连接的复杂查询中使用 Transact-SQL 扩展时,结 果可能会变得更加难以理解。要避免因 group by 而产生令人混淆或误 解的结果,Sybase 建议使用 fipsflagger 选项来标识包含 Transact-SQL 扩 展的查询。请参见 第 79 页的 “ group by 和 SQL 标准”和 《参考手册: 命令》。
另一 Transact-SQL 扩展允许按不包含集合函数的表达式进行分组。例如:
select avg(total_sales), total_sales * price from titles
group by total_sales * price
--------- |
------------- |
2045 |
22,392.75 |
2032 |
40,619.68 |
4072 |
81,399.28 |
NULL |
NULL |
4095 |
61,384.05 |
18722 |
55,978.78 |
375 |
7,856.25 |
15096 |
180,397.20 |
3876 |
46,318.20 |
111 |
777.00 |
3336 |
26,654.64 |
4095 |
81,859.05 |
22246 |
66,515.54 |
8780 |
201,501.00 |
375 |
8,096.25 |
4095 |
81,900.00 |
(16 rows affected)
允许使用 “ total_sales * price”表达式。
不能对列标题 (也称为别名)使用 group by,但仍可以在选择列表中使 用它。以下语句会产生错误消息:
select Category = type, title_id, avg(price), avg(advance)
from titles
group by Category
------------------
Msg 207, Level 16, State 4:
Line 1:
Invalid column name 'Category' Msg 207, Level 16, State 4:
Line 1:
Invalid column name 'Category'
group by 子句应是 “group by type, ”而不是 “group by Category”。
select Category = type, title_id, avg(price), avg(advance)
from titles group by type
--------------
21.48
13.73
11.49
15.96
NULL
13.50
(6 rows affected)
另一个 Transact-SQL 扩展允许在标量集合中嵌套矢量集合。例如,要使 用非嵌套集合得出所有类型书籍的平均价格,请输入:
select avg(price) from titles
group by type
--------------- NULL
13.73
11.49
21.48
13.50
15.96
(6 rows affected)
在 max 函数中嵌套平均价格可产生一组书籍 (按类型分组)的最高平 均价:
select max(avg(price)) from titles
group by type
-------------
21.48
根据定义, group by 子句适用于最内层的集合 — 本例中为 avg。
空值和 group by
如果分组列包含一个空值,则该空值所在行在结果中将自成一组。如果 分组列包含多个空值,则这些空值组成一个组。下例使用 group by 和 advance 列,其中包含一些空值:
select advance, avg(price * 2) from titles
group by advance
advance
------------------ -----------------
NULL NULL
0.00 39.98
2000.00 39.98
2275.00 |
21.90 |
4000.00 |
19.94 |
5000.00 |
34.62 |
6000.00 |
14.00 |
7000.00 |
43.66 |
8000.00 |
34.99 |
10125.00 |
5.98 |
15000.00 |
5.98 |
如果使用 count(column_name) 集合函数,则对包含空值的列执行 group by 会对分组行的计数返回零,因为 count(column_name) 不将空值包括在 内。在大多数情况下,应改用 count(*)。下例对 titles 表中的 price 列 (包 含空值)进行分组和计数,并显示 count(*) 用于比较:
select price, count(price), count(*) from titles
group by price
price
------------- ----- -----
NULL 0 2
2.99 2 2
7.00 1 1
7.99 1 1
10.95 1 1
11.95 2 2
14.99 1 1
19.99 4 4
20.00 1 1
20.95 1 1
21.59 1 1
22.95 1 1 (12 rows affected)
where 子句和 group by
可在带有 group by 的语句中使用 where 子句。执行任何分组之前会消除 不满足 where 子句中的条件的行:
select type, avg(price) from titles
where advance > 5000 group by type
type |
|
------------- |
-------- |
business |
2.99 |
mod_cook |
2.99 |
popular_comp |
21.48 |
psychology |
14.30 |
trad_cook |
17.97 |
(5 rows affected)
只有预付款超过 $5000 的行才包括在用于生成查询结果的组中。
Adaptive Server 处理 select list 和 where 子句中额外列的方法似乎是矛盾 的。例如:
select type, advance, avg(price) from titles
where advance > 5000 group by type
type |
advance |
|
------------- |
--------- |
-------- |
business |
5,000.00 |
2.99 |
business |
5,000.00 |
2.99 |
business |
10,125.00 |
2.99 |
business |
5,000.00 |
2.99 |
mod_cook |
0.00 |
2.99 |
mod_cook |
15,000.00 |
2.99 |
popular_comp |
7,000.00 |
21.48 |
popular_comp |
8,000.00 |
21.48 |
popular_comp |
NULL |
21.48 |
psychology |
7,000.00 |
14.30 |
psychology |
2,275.00 |
14.30 |
psychology |
6,000.00 |
14.30 |
psychology |
2,000.00 |
14.30 |
psychology |
4,000.00 |
14.30 |
trad_cook |
7,000.00 |
17.97 |
trad_cook |
4,000.00 |
17.97 |
trad_cook |
8,000.00 |
17.97 |
查看 advance (扩展的)列的结果时,会发现查询似乎忽略 where 子句。 Adaptive Server 仍然只使用那些满足 where 子句的行来计算矢量集合, 但也显示包括在选择列表中的任何扩展列的所有行。要进一步限制这些 行在结果中出现,请使用 having 子句。请参见 第 89 页的 “选择数据组: having 子句 ”。
group by 和 all
group by 子句中的关键字 all 是 Transact-SQL 增强。它只有在使用它的
select 语句中也包括 where 子句时才有意义。
如果使用 all,则即使某些组没有任何满足搜索条件的行,查询结果也包 括由 group by 子句生成的所有组。如果不使用 all,则包括 group by 的 select 语句不显示其中没有满足条件的行的组。
下面是一个示例:
select type, avg(advance) from titles
where advance > 1000 and advance < 10000 group by type
type
------------ ------------------------
business 5,000.00
popular_comp 7,500.00
psychology 4,255.00
trad_cook 6,333.33
(4 rows affected)
select type, avg(advance) from titles
where advance > 1000 and advance < 10000 group by all type
type
------------ ------------------------ UNDECIDED NULL
business 5,000.00
mod_cook NULL
popular_comp 7,500.00
psychology 4,255.00
trad_cook 6,333.33
(6 rows affected)
第一个语句只生成要求预付款在 $1000 和 $10,000 之间的书籍的组。由 于所有现代烹调书籍的预付款都不在此范围之内,因此结果中没有 mod_cook 类型的组。
第二个语句会生成所有类型的组,包括现代烹调和 “UNDECIDED”, 即使现代烹调组并不包含任何满足 where 子句中指定条件的行也是如此。 Adaptive Server 对于所有没有满足条件的行的组都返回 NULL 结果。
不带 group by 的集合
根据定义,标量集合适用于表中所有的行,对于每个函数,对于整个表 只生成一个值。允许包括带矢量集合的扩展列的 Transact-SQL 扩展也允 许包括带量集合的扩展列。例如,查看 publishers 表:
pub_id pub_name city state
------ ------------------ -------------- -----
0736 New Age Books Boston MA 0877 Binnet & Hardley Washington DC 1389 Algodata Infosystems Berkeley CA
它包含三行。以下查询基于表的每行生成一个三行的标量集合:
select pub_id, count(pub_id) from publishers
pub_id
---------- |
--------- |
0736 |
3 |
0877 |
3 |
1389 |
3 |
(3 rows affected)
因为 Adaptive Server 将 publishers 视为一个组,所以标量集合适用于
(单组)表。除标量集合外,结果对于在选择列表中包括的每列还显示 表的每行。
where 子句对标量集合和对矢量集合的作用方式相同。 where 子句限制 包括在集合汇总值中的列,但对于在选择列表中指定的每个扩展列,它 不影响在结果中出现的行。例如:
select pub_id, count(pub_id) from publishers
where pub_id < "1000"
pub_id
-------------- ----------- 0736 2
0877 2
1389 2
(3 rows affected)
像 group by 的其它 Transact-SQL 扩展一样,此扩展提供的结果可能难以 理解,特别是对于大型表的查询或使用多表连接的查询更是如此。
Sybase SQL Anywhere数据库恢复工具ReadASADB:
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具: ReadASADB。此工具支持ASA v5.0, v6.0, v7.0, v8.0, v9.0, v10.0, v11.0, v12.0, v16.0, v17.0等版本。
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具。
恢复Sybase SQL Anywhere的工具在国内处于领先水平。
Sybase SQL Anywhere数据库恢复工具ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具
- 适用于所有的SQL Anywhere版本 包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x,16.x,17.x
- 适用于所有的UltraLite版本
- 能够恢复出来表结构和数据
- 能够恢复自定义数据类型
- 能够恢复存储过程等对象的语法
- 能够导出到目标数据库
- 能够导出到SQL文件并生成导入脚本
- 支持多种字符集,包括:cp850、cp936、gb18030、utf8等
- 能够恢复未加密或者简单加密类型的数据
- 简单易用
- 限制:不支持AES加密的数据文件
SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍
Sybase SQL Anywhere数据库恢复工具ReadASADB适用场景
各种误操作:
- 误截断表(truncate table)
- 误删除表(drop table)
- 错误的where条件误删数据
- 误删除db或log文件
- 误删除表中的字段
Sybase SQL Anywhere数据库恢复工具ReadASADB的应用场景:
1.因为物理磁盘故障、操作系统、系统软件方面或者掉电等等原因导致的Sybase SQL Anywhere数据库无法打开的情况;
2.误操作,包括truncate table,drop table,不正确的where条件导致的误删除等;
Sybase SQL Anywhere无法打开时,比较常见的错误是:Assertion failed。
如:
1、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Checkpoint log: invalid bitmap page -- transaction rolled back
2、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Page number on page does not match page requested -- transaction rolled back
3、Internal database error *** ERROR *** Assertion failed:200502 (9.0.2.2451) Checksum failure on page 23 -- transaction rolled back
4、File is shorter than expected
5、Internal database error *** ERROR *** Assertion failed: 201116 Invalid free list index page found while processing checkpoint log -- transaction rolled back
6、*** ERROR *** Assertion failed: 51901 Page for requested record not a table page or record not present on page
7、*** ERROR *** Assertion failed: 201417 (7.0.4.3541) Invalid count or free space offset detected on a table page
8、Internal database error *** ERROR *** Assertion failed: 201425 (8.0.3.5594) Invalid count or free space offset detected on a free list page -- transaction rolled back.
9、Internal database error *** ERROR *** Assertion failed: 100702 (8.0.1.2600) Unable to modify indexes for a row referenced in rollback log -- transaction rolled back
Sybase ASE数据库恢复工具READSYBDEVICE:
一个不依赖数据库管理系统、直接从Sybase数据库设备文件上提取数据的业内领先的恢复工具!能够从损坏的Sybase ASE设备文件(.dat)上提取数据的非常规恢复工具。
Sybase ASE数据库恢复工具READSYBDEVICE的主要功能:
- 被勒索病毒加密数据文件及备份文件情况下的恢复;
- 系统崩溃只剩下数据文件的情况下的恢复,甚至数据库文件不存在而只有损坏的备份文件情况下的恢复;
- 因断电、硬盘坏道等造成数据库文件损坏情况下的恢复;
- delete数据恢复、误update数据恢复、误删除表(drop)恢复、误truncate表恢复 等;
- 各种Sybase内部系统表损坏、索引错误的修复;
- master数据库损坏而无法正常运行情况下的恢复;
- Sybase数据库被标记为可疑,不可用等情况的恢复;
- Sybase数据库中数据文件内部出现坏块情况下的恢复;
- Sybase数据库无数据文件但有日志文件的情况下的恢复;
- Sybase数据库只有数据文件无任何日志文件的情况下的恢复;
- Sybase数据文件被误删除情况下的碎片提取恢复;
- 磁盘阵列上的Sybase数据库被误格式化情况下的数据库恢复;
- 数据库sysobjects等系统表损坏无法正常应用情况下的恢复;
- Sybase数据库还原数据库出现失败情况下的恢复;
- Sybase数据库只剩下损坏的备份文件情况下的恢复。
Sybase ASE数据库恢复工具READSYBDEVICE支持的版本:
Sybase ASE 11.0.x,11.5.x,11.9.x,12.0.x,12.5.x,15.0.x,15.5.x,15.7.x,16.0.xSQL Server数据库恢复工具SQLRescue:
一个不依赖数据库管理系统、直接从SQL Server数据库文件上提取数据的业内领先的恢复工具!能够从损坏的SQL Server数据库文件(.mdf)上提取数据的非常规恢复工具。
SQL Server数据库恢复工具SQLRescue的主要功能:
- 系统崩溃只剩下数据文件的情况下的恢复,即无日志文件或者日志文件损坏情况下的恢复;
- 断电导致数据库文件损坏情况下的恢复;
- 硬盘坏道造成数据库损坏情况下的恢复;
- 数据文件内部存在坏页情况下的恢复;
- 企业管理器误删除数据表记录,管理软件误删除数据表记录的恢复;
- 并闩锁错误、格式化、误删除后导致软件不能使用的情况;
- 无法读取并闩锁页sysindexes失败情况下的修复;
- 数据文件被误删除情况下的碎片提取恢复;
- 系统表损坏、索引错误、误删除数据库表、删除记录的数据找回;
- master数据库损坏而无法正常运行情况下的恢复;
- 数据文件无法附加情况下的数据恢复;
- 数据库被标记为可疑,质疑,不可用等情况的恢复;
- 数据库sysobjects等系统表损坏情况下的恢复;
- 数据被误(drop、delete、truncate)删除表数据的恢复,误update后的数据恢复等;
- 还原时报一致性错误,错误823等情况下的数据恢复,各种错误提示的数据库文件修复;
- 数据库被误格式化等情况下的数据库恢复;
- 日志收缩造成数据库损坏情况下的恢复;
- 仅剩损坏的备份文件情况下的恢复。
SQL Server数据库恢复工具SQLRescue技术特点:
只要SQL Server数据库的数据文件存在,我们就有办法帮您从数据文件中找回重要数据。- 从数据文件中直接恢复数据
- 不能附加时直接恢复数据并生成新的数据库
- 系统表损坏的数据库修复
- 快速修复SQL 823错误、连接中断错误
SQL Server数据库恢复工具SQLRescue支持的版本:
Microsoft SQL Server 7.0, 2000, 2005, 2008, 2008R2, 2012, 2014, 2016, 2017,2019。+-------------------------------------华丽的分割线-------------------------------------------------------------------------