远程Sybase数据库技术支持,联系手机:13811580958,QQ:289965371!

 

随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从http://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站http://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!

如有Sybase数据库技术问题需要咨询,请联系我!

  QQ :289965371 点击这里给我发消息
  Email:

以下官方手册为ASE 15.7 ESD#2中文版:

  1. 新增功能公告 适用于 Windows、Linux 和 UNIX 的 Open Server 15.7 和 SDK 15.7
  2. 新增功能摘要
  3. 新增功能指南
  4. ASE 15.7 发行公告
  5. 配置指南(windows)
  6. 安装指南(windows)
  7. 参考手册:构件块
  8. 参考手册:命令
  9. 参考手册:过程
  10. 参考手册:表
  11. Transact-SQL® 用户指南
  12. 系统管理指南,卷 1
  13. 系统管理指南,卷 2
  14. 性能和调优系列:基础知识
  15. 性能和调优系列:锁定和并发控制
  16. 性能和调优系列:监控表
  17. 性能和调优系列:物理数据库调优
  18. 性能和调优系列:查询处理和抽象计划
  19. 性能和调优系列:使用 sp_sysmon 监控 Adaptive Server
  20. 性能和调优系列:利用统计分析改进性能
  21. 程序员参考 jConnect for JDBC 7.0.7
  22. Adaptive Server Enterprise 中的 Java
  23. 组件集成服务用户指南
  24. Ribo 用户指南
  25. 内存数据库用户指南
  26. Sybase Control Center for Adaptive Server® Enterprise
  27. 安全性管理指南
  28. 实用程序指南

 


< 上一个 | 内容 | 下一步 >

where 子句

说明 selectinsertupdate delete 语句中设置搜索条件。

语法 selectinsertupdate delete 语句中,搜索条件紧跟在关键字 where 之后。如果要在单一语句中使用一个以上的搜索条件,可使用 and 或者 or 连接这些条件。

where [not] expression comparison_operator expression

where {[not] expression comparison_operator expression} | {...} where [not] expression [not] like "match_string"

[escape "escape_character "] where [not] expression is [not] null

where [not] expression [not] between expression and expression

where [not] expression [not] in ({value_list | subquery}) where [not] exists (subquery)

where [not] expression comparison_operator {any | all} (subquery) where [not] column_name join_operator column_name

where [not] logical_expression

where [not] expression {and | or} [not] expression

where column_name is [not] null

参数 not

否定任何逻辑表达式或关键字(如 likenullbetweenin exists)。

expression 可以是列名、常量、函数、子查询或者任何由算术运算符或逐位运算 符连接起来的列名、常量和函数的组合。有关表达式的详细信息,请 参见 《参考手册:构件块》的339 页的 “表达式”4 章 “表 达式、标识符和通配符”


comparison_operator

是以下运算符之一:

image

运算符 含义

= 等于

> 大于

< 小于

>= 大于或等于

<= 小于或等于

!= 不等于

<> 不等于

!> 不大于

!< 不小于


比较 charncharunicharvarcharunivarchar nvarchar 数据时,< 意 味着更靠近字母表的开始位置,而 > 意味着更靠近字母表的结尾位置。

大小写和特殊字符求值取决于 Adaptive Server 所在计算机上的操作系 统的归类序列。例如,小写字母可能比大写字母大,而大写字母可能 比数字大。

为了便于比较,将忽略尾随空格。例如,“Dirk”与 “Dirk ”是相 同的。

比较日期时, < 表示较早而 > 表示较晚。应为比较运算符使用的所有 字符和日期数据加上引号。例如:

= "Bennet"

> "94609"

请参见42 页的 “用户定义的数据类型”《参考手册1 章 “系统 数据类型和用户定义的数据类型”:过程》中的。


like

是一个关键字,该关键字表示所跟字符串 (用单引号或双引号引起 来)是匹配模式。 like 可用于 charvarcharunicharunivarcharncharnvarchardatetimedate timetext 以及 unitext 列,但不能搜 索秒或毫秒。

可以将 like 关键字和通配符用于 datetime date 数据以及 char varchar。将 like 用于 datetimedate time 值时, Adaptive Server 将日 期转换为标准 datetime 格式,然后再转换成 varchar。由于标准存储格 式不包括秒或毫秒,所以不能用 like 和某一模式来搜索秒或毫秒。

like 非常适合用来搜索 date/ time 值,因为 date/time 条目可多种日期分 量。例如,如果将值 “9:20”插入名为 arrival_time 的列,则以下子句 将找不到它,因为 Adaptive Server 将这个输入内容转换为 “Jan 1, 1900 9:20AM.”:

where arrival_time = '9:20'

但是,下面的子句可以找到它:

where arrival_time like '%9:20%'

match_string

是一个用引号引起来的由字符和通配符组成的字符串。 1-37 列出 了这些通配符。

1-37: 通配符

image

通配符 含义

% 任何包含 0 个或多个字符的字符串

_ 任何单个字符

[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 内的任何单个字符

[^] 不在指定范围 ([^a-f]) 或集合 ([^abcdef]) 内的任何单个字符


escape

指定可以用其搜索通配符的出现的转义字符。

escape_character

是任何单个的字符。请参见 《参考手册:构件块》的 4 章 “表达 式、标识符和通配符”中的364 页的 “使用 escape 子句”

is null

搜索 NULL 值。

between

是表示范围开始值的关键字。对范围结束值使用 and。下面的语句表 示介于起始界限之间的范围 (包括界限值):


where @val between x and y

下面的语句表示介于起始界限之间的范围 (不包括界限值):

x and @val < y

如果指定的第一个值大于第二个值,则使用 between 的查询不返回任 何行。

and

连接两个条件并在两个条件都为真时返回结果。

如果在一个语句中使用了多个逻辑运算符,通常先对 and 运算符求 值。但是,可使用小括号更改执行顺序。

in

允许选择与值列表中的任一个值相匹配的值。比较元素可以是常量或 列名,值列表可以是一组常量或一个子查询 (更常见)。有关将 in 和 子查询一起使用的详细信息,请参见 《Transact-SQL 用户指南》。请 将值列表用小括号括起来。

value_list 是值的列表。用单引号或双引号将字符值引起来,并用逗号分隔各个 值 (请参见示例 7)。列表可以是一组变量,例如:

in (@a, @b, @c)

但是,值列表不能使用包含列表的变量,如下所示:

@a = "'1', '2', '3'"

exists

与子查询一起使用可以测试子查询的某些结果是否存在。请参见

Transact-SQL 用户指南》。

子查询

selectinsertdelete update 语句或子查询的 where having 子句 中受限制的 select 语句 (不允许有 order by compute 子句以及关键 字 into)。请参见 《Transact-SQL 用户指南》。

any

>< = 以及子查询一起使用。如果在子查询中检索到的任何值 与外层语句的 where having 子句中的值相匹配,就会返回结果。请 参见 《Transact-SQL 用户指南》。

all


> < 以及子查询一起使用。如果子查询中检索到的所有值都与外 层语句的 where having 子句中的值相匹配,则会返回结果。请参见

Transact-SQL 用户指南》。


column_name 是在比较中使用的列的名称。如果有歧义,请用表名或视图名限定列 名。对有 IDENTITY 属性的列,可以指定 syb_identity 关键字 (必要 时用表名限定)而不是实际的列名。

column_name 允许采用 textunitext image 数据类型。

join_operator

是比较运算符或连接运算符之一 =* *=。请参见 《Transact-SQL 用 户指南》。

logical_expression

是一个返回 TRUE FALSE 的表达式。

or

连接两个条件并在两个条件中的任何一个为真时返回结果。

如果在某个语句中使用了多个逻辑运算符,通常先对 and 运算符求 值,然后再对 or 运算符求值。但是,可使用小括号更改执行顺序。

示例 示例 1

where advance * $2 > total_sales * price

示例 2 查找电话号码不是以 415 开头的所有行:

where phone not like '415%'

示例 3 查找作者名为 CarsonCarsenKarsen Karson 的行:

where au_lname like "[CK]ars[eo]n"

示例 4 查找 sales_east 表中 IDENTITY 列值为 4 的行:

where sales_east.syb_identity = 4

示例 5

where advance < $5000 or advance is null

示例 6

where (type = "business" or type = "psychology") and advance > $5500

示例 7

where total_sales between 4095 and 12000

示例 8 查找州为列表中的三个州之一的行:

where state in ('CA', 'IN', 'MD')

示例 9 根据 textunitext image 列的空值选择数据:

create table temp1(c1 int, c2 text null, c3 unitext null, c4 image null)


insert into temp1 values(1, null, replicate("u",5), null) insert into temp1 values(2, replicate("x",3), null, null)

go

select * from temp1 where c2 is null go


c1 c2 c3 c4

----- ---------- -------------------------- ------------ 1 NULL 0x75007500750075007500 NULL

(1 row affected)


select * from temp1 where c2 is not null and c3 is null and c4 is null go


c1

c2

c3

c4

-----

----------

----------

----------

2

xxx

NULL

NULL


示例 10 根据 text 列的非空值更新数据:

insert into temp1 values(3, replicate("y", 3), null, 0x858585847474) insert into temp1 values(4, replicate("z",3),"aaa", 0x75)

go

update temp1 set c2 = "updated" where c2 is not null select * from temp1 where c2 is not null

go


(3 rows affected)

c1 c2 c3 c4

----- ---------- ---------- ----------

2 updated NULL NULL

3 updated NULL 0x858585847474 4 updated 0x610061006100 0x75


示例 11 根据 temp1 中的 text 列的空值将选择的数据添加到表 temp2 中:

select c1, c2 into temp2 from temp1 where c2 is null select * from temp2

go

(1 row affected) c1 c2

----- ----------

1 NULL


示例 12 根据 temp1 中的 text 列的非空值从 temp1 中选择数据并将其插入 表 temp2 中:

insert into temp2 select c1, c2 from temp1 where c2 is not null select * from temp2

go

(3 rows affected) c1 c2

----- ----------

1 NULL

2 updated

3 updated

4 updated (4 rows affected)


示例 13 根据 text 列的空值选择子查询中的数据:

select count(*) from temp2

where c1 in (select c1 from temp1 where c2 is null and c3 is not null)


-----------

1

(1 row affected)

示例 14 根据 unitext 列的空值删除数据:

delete from temp1 where c3 is null go

(2 rows affected)


用法 where having 搜索条件相同,只是 where 子句中不允许有集合函 数。例如,以下子句是合法的:

having avg (price) > 20

下列子句不合法:

where avg (price) > 20

有关示例,请参见 《参考手册:构件块》中的2

Transact-SQL 函数”来获得有关集合函数用法的信息,并参见

434 页的 “ group by having 子句”。

在搜索条件中指定连接和子查询;有关完整详细信息,请参见

Transact-SQL 用户指南》。


可使用关键字 like 来搜索特定模式的 unitext 列。但是,在与 unitext 列一起使用时,like 子句不进行优化。与 unitext 匹配的 like 模式依赖 于缺省的 Unicode 排序顺序,该顺序也用于与 unichar univarchar 数据类型匹配的 like 模式。

对于变量 expression match_stringwhere 子句接受 text unitext

LOB 定位符,但不接受 image LOB 定位符。

...

where expression like 'match_string'

...

match_string 为定位符时, Adaptive Server 仅使用最多 16KB 的对 应 LOB

指定空条件会仅选择在指定 LOB 列中具有空值的行。 LOB 值可能 因为显式指派了空值或因为 LOB 未初始化而为空。

where 子句中的 and or 条件的数量仅受到运行查询时可用内存量 的限制。

like 谓词中包括的模式字符串仅受到可以放在 varchar 中的字符串大 小的限制。

char varchar 条目中,有两种方法可以指定文字引号。第一种方 法是使用两个引号。例如,如果在某个字符条目开头用了一个单引 号,并要将一个单引号作为该条目的一部分,则可使用两个单引号:

'I don''t understand.'

或使用双引号:

"He said, ""It's not really confusing."""

第二种方法是给引号加上相反类型的引号。也就是说,给包含双引 号的条目加上单引号 (或反之)。下面是一些示例:

'George said, "There must be a better way."' "Isn't there a better way?"

'George asked, "Isn"t there a better way?"'

如果输入的字符串超出屏幕宽度,则在转到下一行之前输入反斜杠

(\)

当某列与 where 子句中的常量或变量比较时, Adaptive Server 将把 常量或变量转换为该列的数据类型,从而使优化程序可以使用索引 进行数据检索。例如,当与 int 列比较时,会将 float 表达式转换成 int。例如:

where int_column = 2

选择 int_column = 2 的行。


Adaptive Server 优化查询时,它将对 where having 子句中的搜 索条件进行评估,以确定哪些条件是可以用于选择最佳索引和查询 计划的搜索参数 (SARG)。所有搜索条件都用来限定行。有关搜索 参数的详细信息,请参见 《性能和调优指南》。

标准 符合 ANSI SQL 的级别符合初级标准。

另请参见 命令 delete, execute, group by having 子句 , insert, select, update.

数据类型 日期和时间数据类型 .

系统过程 sp_helpjoins .




--------------------------------------华丽的分割线-------------------------------------------------------------------------
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具:ReadASADB。
此工具支持ASA v5.0,v6.0,v7.0,v8.0,v9.0,v10.0,v11.0,v12.0等版本。
恢复Sybase SQL Anywhere的工具在国内应该算首创。

ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具

  1. 适用于所有的SQL Anywhere版本    包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x
  2. 适用于所有的UltraLite版本
  3. 能够恢复出来表结构和数据
  4. 能够恢复自定义数据类型
  5. 能够恢复存储过程等对象的语法
  6. 能够导出到目标数据库
  7. 能够导出到SQL文件并生成导入脚本
  8. 支持多种字符集  包括:cp850、cp936、gb18030、utf8等
  9. 能够恢复未加密或者简单加密类型的数据
  10. 简单易用
  11. 限制:不支持AES加密的数据文件
请参考:研发成功了从Sybase SQL Anywhere的DB文件上恢复数据的工具
            SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍

ReadASADB适用场景

各种误操作:

  1. 误截断表(truncate table)
  2. 误删除表(drop table)
  3. 错误的where条件误删数据
  4. 误删除db或log文件
  5. 误删除表中的字段

本工具的应用场景:

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等等。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------