小。速度很快。可靠。
选择任意三个选项。
SQL语言表达式

1语法

快递:

文字值 绑定参数 方案名称 . 表格名称 . 列名 一元运算符 快递 快递 二进制运算符 快递 函数名称 ( 函数参数 ) 过滤子句 附加条款 ( 快递 ) , 铸件 ( 快递 AS公司 类型名称 ) 快递 COLLATE公司 排序规则名称 快递 不是 喜欢 GLOB公司 REGEXP公司 匹配 快递 快递 逃生 快递 快递 ISNULL(ISNULL) 不为空 不是 无效的 快递 不是 与众不同 发件人 快递 快递 不是 协议双方: 快递 快递 快递 不是 英寸 ( select-stmt(选择-测试) ) 快递 , 方案名称 . 表格功能 ( 快递 ) 表格名称 , 不是 存在 ( select-stmt(选择-测试) ) 案例 快递 什么时候 快递 然后 快递 ELSE公司 快递 结束 raise函数

过滤条款:

函数参数:

文字值:

附加条款:

raise函数:

select-stmt(选择-测试):

类型名称:

2运算符和影响分析的属性

SQLite理解这些操作符,并按优先顺序列出1秩序
(从上到下/从最高到最低):

操作员2
[出口]    + [出口]    - [出口]
[出口]COLLATE(排序规则名称)
||   ->   ->>
*   /   %
+   -
& |   << >>
[出口]退出[ESCAPE-character-expr]4
<  >  <=  >=
=  ==  <>  !=IS不是
是区别于不是区别于
[出口]协议双方:5 [出口][经验]
英寸5匹配5喜欢5REGEXP公司5GLOB公司5
[出口]ISNULL(ISNULL)[经验]不为空[出口]非空
不是[出口]

  1. 同一表格单元格中显示的运算符共享优先级。
  2. "[经验]“表示非二进制运算符的操作数位置。
    没有“[expr]”附加词的运算符是二进制的,并且是左联的。
  3. COLLATE子句(及其排序规则名称)充当单个后缀运算符。
  4. ESCAPE子句(及其转义字符)充当单个后缀运算符。
    它只能绑定到前面的[expr]LIKE[expr]表达式。
  5. (BETWEEN in GLOB LIKE MATCH REGEXP)中的每个关键字都可以加前缀
    通过NOT,保留裸操作符的优先级和关联性。

COLLATE运算符是一元后缀分配排序序列到表达式。COLLATE运算符设置的排序序列覆盖表中COLLATE子句确定的排序顺序列定义.请参阅关于排序序列的详细讨论在中SQLite3中的数据类型文档以获取更多信息。

一元运算符+是no-op。可以应用字符串、数字、blob或NULL,它总是返回结果与操作数具有相同的值。

请注意,等号和非等号有两种变化操作员。等于可以是===.不相等运算符可以是=<>.这个||运算符是“concatenate”-它连接在一起其操作数的两个字符串。这个->->>运算符为“提取”;他们从LHS中提取RHS成分。有关示例,请参见JSON子组件提取.

这个%操作人员铸件将其两个操作数都转换为类型INTEGER,然后计算除左整数后的余数按正确的整数。其他算术运算符执行整数如果两个操作数都是整数且不会导致溢出,则为算术,或浮点运算,根据IEEE标准754,如果任一操作数是实值或整数运算将产生溢出。整数除法产生一个整数结果,向零截断。

任何二进制运算符的结果都是数值或NULL,除了||串联运算符,->->>提取运算符其计算结果为NULL或文本值。

当任何操作数为NULL时,所有运算符的计算结果通常为NULL,具体例外情况如下所述。这与SQL92标准。

与NULL配对时:
  另一个操作数为false;
  计算结果为1(true)当另一个操作数为true时。

这个不是操作员工作喜欢==除非其中一个或两个操作数为NULL。在这种情况下,如果两个操作数都为NULL,则IS运算符求值为1(true),IS NOT运算符求值到0(false)。如果一个操作数为NULL而另一个为NULL,则IS运算符的计算结果为0(false),IS NOT运算符为1(true)。is或is not表达式的计算结果不可能为NULL。

这个运算符是另一种拼写对于操作员。同样区别于操作符的意思是一样的作为不是。标准SQL不支持紧凑的IS和IS not符号。这些紧凑的表单是SQLite扩展。你必须使用冗长且可读性差得多的文字与与其他SQL数据库引擎上的运算符不同。

3文字值(常量)

文字值表示一个常量。文字值可以是整数、浮点数、字符串、,BLOB或NULL。

整数和浮点文字的语法(统称为“数字文字”)如下图所示:

数字-文字:

数字 . E类 e(电子) 数字 . 数字 - 数字 + 0x个 六位数

如果数字文字具有小数点或指数条款或如果小于-9223372036854775808或大于9223372036854775807,则为浮点文字。否则它是一个整型文字。开始求幂的“E”字符浮点文字的子句可以是大写或小写。始终使用“.”字符作为小数点,即使区域设置为指定了“,”此角色-使用“,”作为小数点将导致句法歧义。

十六进制整数文字遵循C语言表示法“0x”或“0x”后跟十六进制数字。例如,0x1234表示与4660相同0x80000000000000表示与-9223372036854775808相同。十六进制整数文本解释为64位两个’s补整数,因此是有限的精确到16位有效数字。SQLite中添加了对十六进制整数的支持版本3.8.6(2014-08-15)。为了向后兼容,“0x”十六进制整数符号只被SQL语言解析器理解,而不被类型转换例程。字符串变量包含格式类似十六进制整数的文本强制字符串值时解释为十六进制整数由于CAST表达式或对于列亲和力转换或在执行数值运算之前或任何其他运行时转换。强制时将十六进制整数格式的字符串值转换为整数值时,当看到“x”字符时,转换过程停止因此得到的整数值总是零。SQLite仅在以下情况下理解十六进制整数表示法显示在SQL语句文本中,而不是显示为数据库内容的一部分。

字符串常量是通过将单引号(')中的字符串。字符串中的单引号可以通过在一行中放置两个单引号进行编码-如Pascal中所示。不支持使用反斜杠字符的C样式转义,因为它们不是标准SQL。

BLOB文字是包含十六进制数据和前面有一个“x”或“x”字符。示例:X'53514C697465'

文字值也可以是标记“NULL”。

4参数

“变量”或“参数”标记在表达式中指定占位符在运行时使用sqlite3_绑定()C/C++接口家族。参数可以采用多种形式:

?NNN(北北北) 问号后跟数字NNN(北北北)NNN第个参数。NNN必须介于1和之间SQLITE_MAX_VARIABLE_NUMBER数据库.
? 如果问号后面没有数字,则会创建一个参数1号大于已分配的最大参数号。如果这意味着参数编号大于SQLITE_MAX_VARIABLE_NUMBER数据库,这是一个错误。提供此参数格式是为了与其他数据库兼容发动机。但由于很容易计算出问号不鼓励使用此参数格式。鼓励程序员使用下面的符号格式之一或?改为上面的NNN格式。
:美国汽车协会 冒号后跟标识符名称,表示命名参数名称:AAAA。命名参数也会进行编号。分配的数字大于1已分配的最大参数编号。如果这意味着参数将分配一个大于的数字SQLITE_MAX_VARIABLE_NUMBER数据库,是的一个错误。为避免混淆,最好避免混淆命名和编号参数。
@美国汽车协会 “at”符号的工作原理与冒号完全相同,只是创建的参数是@AAAA。
$美国汽车协会 后面跟标识符名称的dollar-sign也为命名的名称为$AAAA的参数。本例中的标识符名称可以包括一次或多次出现“::”和一个包含在“(…)”中的后缀任何文本。此语法是Tcl编程语言.存在SQLite实际上是一个Tcl扩展已经逃到野外了。

未使用赋值的参数sqlite3_绑定()得到治疗为空。这个sqlite3_bind_parameter_index()可以使用接口将符号参数名称转换为其等效的数字索引。

最大参数数在编译时由设置这个SQLITE_MAX_VARIABLE_NUMBER数据库宏。个人数据库连接D可以将其最大参数数减少到编译时间最大值以下使用sqlite3_限制(D,SQLITE_LIMIT_VARIABLE_NUMBER公司,...) 接口。

5LIKE、GLOB、REGEXP、MATCH和extract运算符

LIKE操作符执行模式匹配比较。操作数LIKE运算符右侧包含模式和左手操作数包含要与模式匹配的字符串。LIKE模式中的百分比符号(“%”)与任何字符串中零个或多个字符的序列。下划线LIKE模式中的(“_”)匹配字符串。任何其他字符匹配自身或其大小写等效(即区分大小写的匹配)。重要提示:仅限SQLite默认情况下理解ASCII字符的大小写。这个默认情况下,LIKE运算符对以下unicode字符区分大小写超出ASCII范围。例如,表达式“a”像“a”为TRUE,但“‘喜欢’”为FALSE。SQLite的ICU扩展包括LIKE运算符跨所有unicode字符进行大小写折叠。

如果存在可选的ESCAPE子句,则表达式后面的ESCAPE关键字必须计算为包含单个字符。此字符可用于LIKE模式包含文字百分比或下划线字符。逃跑后面跟着百分号(%)、下划线(_)或秒的字符转义字符本身的实例与文字百分比符号、下划线或单个转义字符,分别是。

通过调用应用程序定义的SQL函数像(Y(Y),X(X))像(Y(Y),X(X),Z轴).

可以使用区分大小写的类杂注.

GLOB运算符类似于LIKE,但使用Unix文件通配符的globbing语法。此外,GLOB也是如此敏感,不像LIKE。GLOB和LIKE前面都可以加上NOT关键字以反转测试的意义。中缀GLOB运算符通过调用函数实现全球(Y(Y),X(X))并且可以通过重写进行修改该功能。

REGEXP运算符是REGEXP()的特殊语法用户功能。默认情况下未定义regexp()用户函数因此,使用REGEXP运算符通常会导致错误消息。如果应用程序定义的SQL函数命名为“regexp”在运行时添加,然后“X(X)REGEXP公司Y(Y)“操作员将实现为对“regexp”的调用(Y(Y),X(X))".

MATCH运算符是MATCH()的一种特殊语法应用程序定义的功能。默认match()函数实现引发了一个异常,对任何事情都没有实际用处。但是扩展可以用更多的函数覆盖match()函数有用的逻辑。

提取运算符充当函数的特殊语法“->”()和“->>”()。这些函数的默认实现执行JSON子组件提取,但扩展可以出于其他目的覆盖它们。

6BETWEEN运算符

BETWEEN运算符在逻辑上等价于一对比较。"x个 协议双方: z(z)“是相当于"x个>= x个<=z(z)“除中间x个表达式只计算一次。

7CASE表达式

CASE表达式的作用类似于IF-THEN-ELSE在其他编程语言。

出现在CASE关键字和第一个WHEN关键字称为“base”表达式。有两个基本形式CASE表达式的类型:有基表达式的类型和没有基表达式的型号。

在没有基表达式的CASE中,对每个WHEN表达式求值结果被视为布尔值,从最左边开始,然后继续右边。CASE表达式的结果是THEN的求值与计算结果为的第一个WHEN表达式相对应的表达式真的。或者,如果没有任何WHEN表达式的计算结果为true,则评估ELSE表达式(如果有的话)。如果没有ELSE表达式并且WHEN表达式中没有一个为true,则总体结果为NULL。

在计算when条件时,NULL结果被视为不正确。

在带有基表达式的CASE中,基表达式只计算一次,将结果与每个WHEN的评估进行比较从左到右的表达式。CASE表达式的结果是对应于第一个WHEN的THEN表达式的求值比较为真的表达式。或者,如果没有时间表达式的计算结果等于基表达式的值计算ELSE表达式(如果有的话)。如果没有ELSE表达式并且WHEN表达式都不会产生与基表达式相等的结果,总结果为NULL。

将基表达式与When表达式进行比较时排序序列、亲和力和NULL处理规则适用于基表达式和WHEN表达式分别是左边的-和右操作数=操作员。

如果底座表达式为NULL,则CASE的结果始终为结果如果ELSE表达式存在,则对其求值,如果不存在,则为NULL。

两种形式的CASE表达式都使用lazy或shortshort,评估。

以下两个CASE表达式之间的唯一区别是这个x个表达式在第一个示例中只计算一次,但可能会在第二次中进行多次评估:

内置iif(x,y,z)SQL函数符合逻辑相当于“CASE WHEN x THEN y ELSE z END”。iif()函数在SQL Server中找到,并包含在SQLite中以实现兼容性。一些开发人员更喜欢iif()函数,因为它更简洁的。

8IN和NOT IN运算符

IN和NOT IN运算符在左侧和右侧的值列表或子查询。当IN或NOT IN运算符的右操作数是子查询时子查询的列数必须与中的列数相同这个行值左操作数的。上的子查询IN或NOT IN运算符的右边必须是标量子查询,如果左边表达式不是行值表达式。如果IN或NOT IN运算符的右操作数是值列表,每个值都必须是标量,左边的表达式也必须是标量。IN或NOT IN运算符的右侧可以是桌子名称表值函数 名称在哪儿case右侧被理解为的子查询表单“(SELECT*FROM名称)".当右操作数为空集时,IN的结果为false无论左操作数是什么,即使左操作数为NULL。

IN或NOT IN运算符的结果由以下内容决定矩阵:

左操作数
为空
右操作数
包含NULL
右操作数
是一个空集合
找到左操作数
右操作数内
的结果
IN操作员
的结果
NOT IN运算符
真实的
没关系是的真实的
没关系是的真实的
是的无效的无效的
是的无关紧要没关系无效的无效的

请注意,SQLite允许在IN或NOT IN运算符的右侧为空列表,但大多数其他SQL数据库引擎和SQL92标准都需要包含至少一个元素的列表。

9表列名

列名可以是在创建表格语句或以下特殊标识符之一:“路权ID","OID公司“,或”_路权ID_".这三个特殊标识符描述了唯一整数键(罗伊德)与每个每个表的行,因此在上不可用不带ROWID桌子。特殊标识符仅在创建表格语句未定义具有相同名称的实际列。rowid可以在常规的任何地方使用列可以使用。

10EXISTS操作员

EXISTS运算符的计算结果始终为整数值0之一和1。如果执行指定为右侧的SELECT语句EXISTS运算符的操作数将返回一行或多行,然后EXISTS运算符的计算结果为1。如果执行SELECT将返回根本没有行,则EXISTS运算符的计算结果为0。

SELECT语句返回的每行中的列数(如果有)和返回的特定值对结果没有影响EXISTS运算符的。特别是,包含NULL值的行是与没有NULL值的行处理方式没有任何不同。

11子查询表达式

A类选择括号中的语句是一个子查询。所有类型的SELECT语句,包括聚合和复合SELECT查询(具有以下关键字的查询UNION或EXCEPT)被允许作为标量子查询。子查询表达式的值是结果的第一行从附件中选择声明。如果包含选择语句不返回任何行。

返回单个列的子查询是标量子查询,可以在任何地方使用最多。返回两列或多列的子查询是行值子查询和只能用作比较运算符的操作数或UPDATE SET子句中的值,该子句的列名列表具有相同的大小。

12关联子查询

A类选择语句用作标量子查询或IN、NOT IN或EXISTS表达式的右操作数可以包含对外部查询中列的引用。这样的子查询称为相关子查询。每次都会重新评估相关子查询它的结果是必需的。不相关子查询只计算一次并根据需要重用结果。

13CAST表达式

形式为“CAST”的CAST表达式(快递AS公司类型名称)"用于转换的值快递不同的存储类别由指定类型名称.CAST转换类似于需要列亲和力应用于除具有CAST运算符,即使转换有损且不可逆,而列关联仅更改数据类型如果变化是无损的和可逆的,则为一个值。

如果快递为NULL,则CAST的结果表达式也是NULL。否则,结果的存储类通过应用确定列相关性的规则这个类型名称.

的相似性类型名称 转换处理
将值强制转换为类型名称没有亲和力使值为转换为BLOB。铸造成BLOB包括第一次铸造中的TEXT值编码数据库连接,然后将结果字节序列解释为BLOB而不是TEXT。
文本要将BLOB值强制转换为TEXTBLOB被解释为使用数据库编码的文本编码。

将INTEGER或REAL值强制转换为TEXT会将该值呈现为通过sqlite3_snprintf()但结果文本使用编码属于数据库连接。

真实将BLOB值强制转换为REAL时,该值首先转换为文本。

将TEXT值强制转换为REAL时可以解释为实数的值是从中提取的忽略TEXT值和余数。中的任何前导空格当从TEXT收敛到REAL时,将忽略TEXT值。如果有没有可以解释为实数的前缀转换为0.0。

整数将BLOB值强制转换为INTEGER时,该值首先转换为文本。

将TEXT值强制转换为INTEGER时可以解释为整数的值是从中提取的忽略TEXT值和余数。中的任何前导空格从TEXT转换为INTEGER时忽略TEXT值。如果有没有可以解释为整数的前缀,则结果为转换的值为0。如果前缀整数大于+9223372036854775807,则强制转换的结果正好是+9223372036854775807。类似地,如果前缀整数为小于-9223372036854775808,则转换结果为精确到-9223372036854775808。

强制转换为INTEGER时,如果文本看起来像浮点值,则该指数将被忽略,因为它是整数前缀中没有任何部分。例如,“CAST('123e+5'AS INTEGER)”结果是123,而不是12300000。

CAST运算符理解十进制仅限整数-转换十六进制整数停止在十六进制整数字符串的“0x”前缀中的“x”处所以CAST的结果总是零。

将REAL值转换为INTEGER会得到整数介于REAL值和最接近REAL值的零之间。如果REAL大于最大可能签名整数(+9223372036854775807),则结果是最大可能的有符号整数,如果REAL小于最小可能有符号整数整数(-9223372036854775808),则结果是最不可能的带符号整数。

在SQLite版本3.8.2(2013-12-06)之前,转换大于的REAL值+9223372036854775807.0转换为整数,结果为负数最多整数,-9223372036854775808。此行为旨在模拟执行等效转换时x86/x64硬件的行为。

数字将TEXT或BLOB值转换为NUMERIC将生成INTEGER或一个真实的结果。如果输入文本看起来像一个整数(没有小数点,也没有指数),且该值足够小,可以容纳64位有符号整数,则结果为整数。看起来像浮点的输入文本(有小数点和/或指数),文本描述的值可以在IEEE 754 64位浮点和51位有符号整数,则结果为integer。(在前一句中,指定了一个51位整数,因为它是1位小于IEEE 754 64位浮点的尾数长度,以及从而为文本到浮点转换操作提供了1位的余量。)描述64位范围之外的值的任何文本输入带符号整数产生一个REAL结果。

将REAL或INTEGER值强制转换为NUMERIC是no-op,即使是实数值可以无损地转换为整数。

请注意,将任何非BLOB值强制转换为BLOB和将任何BLOB值强制转换为非BLOB的结果根据数据库是否编码UTF-8,UTF-16be或UTF-16le。

14布尔表达式

SQL语言具有几个上下文,其中表达式计算并将结果转换为布尔值(true或false)。这些上下文包括:

要将SQL表达式的结果转换为布尔值,SQLite首先将结果强制转换为NUMERIC值,方法与CAST表达式.数字零值(整数值0或实数值0.0)被视为假。NULL值仍然为NULL。所有其他值均视为真。

例如,值NULL、0.0、0、'english'和'0'都被考虑在内都是假的。值1、1.0、0.1、-0.1和“1english”被视为是真的。

从SQLite 3.23.0(2018-04-02)开始,SQLite认识到标识符“TRUE”和“FALSE”作为布尔文字,当且仅当这些标识符还没有用于其他意义。如果已经有了存在名为TRUE或FALSE的列或表或其他对象,则为了向后兼容,TRUE和FALSE标识符引用指向其他对象,而不是布尔值。

布尔标识符TRUE和FALSE通常只是整数值分别为1和0。但是,如果为TRUE或FALSE出现在IS操作员的右侧,然后是IS操作员将左侧操作数求值为布尔值,并返回适当的回答。

15功能

SQLite支持许多简单的,骨料,窗口SQL函数。出于演示目的,简单的功能更进一步细分为核心功能,日期时间函数,数学函数、和JSON函数.应用程序可以使用sqlite3_create_function()接口。

上面的主表达式气泡图显示了所有函数调用。但这只是为了简化表达式气泡图。实际上,每种类型的函数都有一点不同语法,如下所示。main中显示的函数调用语法表达式气泡图是以下三种语法的结合:

功能简单:

简单函数 ( 快递 ) , *

聚合-功能-职业:

聚合函数 ( 与众不同 快递 ) 过滤子句 , * 订单 订购术语 ,

窗口功能调用:

窗口-功能 ( 快递 ) 过滤子句 超过 窗口名称 窗-深 , *

需要OVER条款窗口函数并且是被禁止的否则。仅允许DISTINCT关键字和ORDER BY子句在里面聚合函数.FILTER子句不能出现在简单函数.

可以使用与简单函数,只要两种形式的功能不同。例如最大()函数与单个参数是一个聚合最大()具有两个或多个的函数arguments是一个简单的函数。聚合函数通常还可以用作窗口函数。

此页面上次修改时间2024-02-27 20:24:47联合技术公司