我试图使用DO ..Adapter.DSNSet("myDSN")来设置DSN,但是第一次是成功的,第二次请求不同的DSN,会报超时的错误,我应该如何处理
SQL 是在关系数据库中存储、操作和检索数据的标准语言。
我试图使用DO ..Adapter.DSNSet("myDSN")来设置DSN,但是第一次是成功的,第二次请求不同的DSN,会报超时的错误,我应该如何处理
确定是否根据字段值的条件测试返回记录。
FOR SOME (table [AS t-alias]) (fieldcondition)
table - Table可以是单个表,也可以是用逗号分隔的表列表。
括号是必须的。
AS t-alias - 可选-前一个表名的别名。
别名必须是有效的标识符;
它可以是一个分隔符。
fieldcondition - fieldcondition 指定一个或多个引用一个或多个字段的条件表达式。
字段条件用括号括起来。
可以使用AND(&)和OR(!)逻辑操作符在字段条件中指定多个条件表达式。
FOR SOME谓词允许根据表中一个或多个字段值的布尔条件测试来决定是否返回记录。
如果fieldcondition计算结果为true,则返回记录。
如果fieldcondition计算结果为false,则不返回记录。
对于表(及其可选的t-alias)参数,必须使用括号分隔。
分隔括号对于字段条件参数也是强制性的。
允许(但不是必需的)在这两组括号之间使用空格。
通常,FOR SOME用于确定是否根据另一个表中一条记录的内容从一个表返回一条记录。
FOR SOME还可用于确定是否根据同一表中记录的内容从表中返回记录。
在后一种情况下,要么返回所有记录,要么不返回任何记录。
使用位图块迭代将一个值匹配到一组生成的值。
scalar-expression %FIND valueset [SIZE ((nn))]
scalar-expression - 一个标量表达式(最常见的是表的RowId字段),它的值正在与值集进行比较。valueset - 对用户定义对象的对象引用(oref),该对象实现位图块迭代方法和ContainsItem()方法。
该方法接受一组数据值,并在与标量表达式中的值匹配时返回一个布尔值。SIZE ((nn)) - 可选-用于查询优化的数量级整数(10、100、1000等)。通过选择与值集中指定的值相匹配的数据值,通过迭代位图块序列中的值,%FIND谓词允许筛选结果集。
当标量表达式的值与valueset中的值匹配时,此匹配将成功。
如果值集值不匹配任何标量表达式值,%FIND返回空字符串。
无论显示模式如何,这个匹配总是在逻辑(内部存储)数据值上执行。
%FIND和其他比较条件一样,用于SELECT语句的WHERE子句或HAVING子句中。
%FIND使用抽象的、通过编程指定的匹配值集来过滤字段值。
具体来说,它使用抽象的、编程指定的位图来过滤RowId字段值,其中的值集行为类似于位图索引的下标层。
检查表中是否至少存在一个对应行。
EXISTS select-statement
select-statement - 一种简单的查询,通常包含一个条件表达式。EXISTS谓词测试指定的表,通常至少测试一行是否存在。
因为EXISTS后面的SELECT语句正在被检查是否包含某些内容,所以子句通常是这样的形式:
EXISTS (SELECT... FROM... WHERE...)
SELECT name
FROM Table_A
WHERE EXISTS
(SELECT *
FROM Table_B
WHERE Table_B.Number = Table_A.Number)
在本例中,谓词测试子查询指定的一行或多行是否存在。
注意,测试必须发生在SELECT语句上(而不是在UNION上)。
NOT EXISTS子句测试表中是否有一行不存在,如下例所示:
scalar-expression BETWEEN lowval AND highval
scalar-expression - 一种标量表达式(最常见的是数据列),将其值与低值和高值(包括高值)之间的值范围进行比较。lowval - 解析为低排序规则序列值的表达式,指定与标量表达式中的每个值匹配的值范围的开始。highval - 解析为高排序规则序列值的表达式,指定要与标量表达式中的每个值匹配的值范围的末尾。BETWEEN谓词允许选择lowval和highval指定范围内的数据值。
这个范围包括低值和高值本身。
这等价于一对大于或等于操作符和一对小于或等于操作符。
下面的例子展示了这种比较:
SELECT Name,Age FROM Sample.Person
WHERE Age BETWEEN 18 AND 21
ORDER BY Age
这将返回Sample中的所有记录。
年龄值介于18到21之间的人员表,包括这些值。
注意,必须按升序指定BETWEEN值;
例如BETWEEN 21 AND 18这样的谓词将返回空字符串。
如果标量表达式的值都不在指定的范围内,则BETWEEN返回空字符串。
将值与子查询中的至少一个匹配值匹配。
scalar-expression comparison-operator ANY (subquery)
scalar-expression - 将其值与子查询生成的结果集进行比较的标量表达式(最常见的是数据列)。comparison-operator - 以下比较操作符之一:=(等于),<>或!=(不等于),<(小于),<=(小于或等于),>(大于),>=(大于或等于),[(包含),或](跟随)。subquery - 一个用括号括起来的子查询,它返回一个用于与标量表达式比较的结果集。ANY关键字与比较操作符一起创建谓词(量化比较条件),如果标量表达式的值匹配子查询检索到的一个或多个对应值,则该谓词为真。
ANY谓词将单个标量表达式项与单个子查询SELECT项进行比较。
具有多个选择项的子查询将生成SQLCODE -10错误。
注意:ANY和SOME关键字是同义词。
任何可以指定谓词条件的地方都可以使用ANY,如本手册的谓词概述页面所述。
在适用的情况下,系统自动对任意子查询应用集值子查询优化(SVSO)。
下面的例子选择了居住在密西西比河以西任何一个州的工资超过75,000美元的员工:
将值与子查询中的所有对应值匹配。
scalar-expression comparison-operator ALL (subquery)
scalar-expression - 将其值与子查询生成的结果集进行比较的标量表达式(最常见的是数据列)。comparison-operator - 以下比较操作符之一:=(等于),<>或!=(不等于),<(小于),<=(小于或等于),>(大于),>=(大于或等于),[(包含),或](跟随)。subquery - 一个用括号括起来的子查询,它从单个列返回一个结果集,用于与标量表达式进行比较。ALL关键字与比较操作符一起创建谓词(量化比较条件),如果标量表达式的值与子查询检索到的所有对应值匹配,则该谓词为真。
ALL谓词将单个标量表达式项与单个子查询SELECT项进行比较。
具有多个选择项的子查询将生成SQLCODE -10错误。
ALL可以在任何可以指定谓词条件的地方使用,如本手册的谓词概述页面所述。
在适用的情况下,系统自动对ALL子查询应用集值子查询优化(SVSO)。
下面的示例选择了Person数据库中小于Employee数据库中所有年龄的年龄:
%SelectMode所有谓词都使用逻辑(内部存储)数据值进行比较。
但是,有些谓词可以对谓词值执行格式模式转换,将谓词值从ODBC或Display格式转换为Logical格式。
其他谓词不能执行格式模式转换,因此必须始终以Logical格式指定谓词值。
执行格式模式转换的谓词确定是否需要从匹配字段的数据类型(如DATE``%List)进行转换,并确定从%SelectMode设置进行转换的类型。
如果%SelectMode设置为逻辑格式以外的值(例如%SelectMode=ODBC或%SelectMode=Display),则必须以正确的ODBC或Display格式指定谓词值。
描述计算结果为真或假的逻辑条件。
谓词是一个条件表达式,其计算结果为布尔值(true或false)。
谓词可以如下使用:
SELECT语句的WHERE子句或HAVING子句中确定哪些行与特定查询相关。
注意,不是所有谓词都可以在HAVING子句中使用。JOIN操作的ON子句中确定哪些行与连接操作相关。UPDATE或DELETE语句的WHERE子句中,确定要修改哪些行。WHERE CURRENT OF语句的AND子句中。CREATE TRIGGER语句的WHEN子句中确定何时应用触发操作代码。每个谓词包含一个或多个比较操作符,可以是符号,也可以是关键字子句。 SQL支持以下比较操作符:
使用游标指定当前行的UPDATE/DELETE子句。
WHERE CURRENT OF cursor
cursor - 指定在光标的当前位置执行操作,光标是指向表的光标。WHERE CURRENT OF子句可用于基于游标的嵌入式SQL UPDATE或DELETE语句,以指定位于要更新或删除记录上的游标。
例如:
&sql(DELETE FROM Sample.Employees WHERE CURRENT OF EmployeeCursor)
删除最后一个FETCH命令从“EmployeeCursor”游标获得的行。
嵌入式SQL UPDATE或DELETE可以使用WHERE子句(不带游标)或WHERE CURRENT OF(带声明游标),但不能同时使用两者。
如果指定的UPDATE或DELETE既不带WHERE也不带WHERE CURRENT OF,则会更新或删除表中的所有记录。
下面是可用的相等比较谓词:
| Predicate | Operation |
|---|---|
| = | Equals |
| <> | Does not equal |
| != | Does not equal |
| > | Is greater than |
| < | Is less than |
| >= | Is greater than or equal to |
| <= | Is less than or equal to |
例如:
SELECT Name, Age FROM Sample.Person
WHERE Age < 21
SQL根据排序规则(值的排序顺序)定义了比较操作。
如果两个值以完全相同的方式排序,则它们相等。
如果一个值排在第二个值之后,则该值大于另一个值。
字符串字段排序规则接受字段的默认排序规则。
IRIS默认排序规则不区分大小写。
因此,两个字符串字段值的比较或字符串字段值与字符串文字的比较(默认情况下)是不区分大小写的。
例如,如果Home_State字段值是两个字母的大写字符串:
指定一个或多个限制性条件的SELECT子句。
SELECT fields
FROM table
WHERE condition-expression
condition-expression - 由一个或多个布尔谓词组成的表达式,该谓词控制要检索的数据值。可选的WHERE子句可以用于以下目的:
WHERE子句最常用于指定一个或多个谓词,这些谓词用于限制SELECT查询或子查询检索到的数据(过滤出行)。
还可以在UPDATE命令、DELETE命令或INSERT(或INSERT or UPDATE)命令的结果集中使用WHERE子句。
WHERE子句限定或取消查询选择中的特定行。
符合条件的行是那些条件表达式为真的行。
条件表达式可以是一个或多个逻辑测试(谓词)。
多个谓词可以通过AND和OR逻辑操作符链接。
如果谓词包含除法,并且数据库中有任何值可以生成值为零或NULL的除法,则不能依赖求值顺序来避免被零除法。
相反,使用CASE语句来抑制风险。
WHERE子句可以指定包含子查询的条件表达式。子查询必须用圆括号括起来。
WHERE子句可以使用=(内部连接)符号连接操作符指定两个表之间的显式连接。
指定字段中使用的数据值的INSERT/UPDATE子句。
(field1{,fieldn})
VALUES (value1{,valuen})
field - 字段名或以逗号分隔的字段名列表。value - 值或以逗号分隔的值列表。
每个值被赋给相应的字段。VALUES子句用于INSERT、UPDATE或INSERT or UPDATE语句中,以指定要插入到字段中的数据值。
通常:
INSERT查询使用以下语法:INSERT INTO tablename (fieldname1,fieldname2,...)
VALUES (value1,value2,...)
UPDATE查询使用以下语法:UPDATE tablename (fieldname1,fieldname2,...)
VALUES (value1,value2,...)
VALUES子句中的元素依次对应于表名后面指定的字段。
注意,如果在VALUES子句中只指定了一个value元素,则没有必要将元素括在括号中。
下面的嵌入式SQL示例显示了一个INSERT语句,它向“Employee”表添加了一行:
设置当前名称空间和数据库。
USE [DATABASE] dbname
dbname - 当前进程将使用的名称空间和相应的数据库作为当前名称空间。USE DATABASE命令将当前进程切换到指定的名称空间及其关联的数据库。
这允许在SQL中更改名称空间。
DATABASE关键字是可选的。
指定的dbname是所需的命名空间和包含数据库文件的对应目录的名称。
指定dbname作为标识符。
命名空间名称不区分大小写。
由于USER是SQL保留字,因此必须使用分隔标识符来指定用户命名空间,如下面的SQL Shell示例所示:
USER>>USE DATABASE Samples
SAMPLES>>USE DATABASE "User"
USER>>
如果指定的dbname不存在,IRIS将发出SQLCODE -400错误。
USE DATABASE命令是一个特权操作。
在使用USE DATABASE之前,必须以具有适当权限的用户身份登录。
如果不这样做,将导致SQLCODE -99错误(特权冲突)。
使用$SYSTEM.Security.Login()方法为用户分配适当的权限:
DO $SYSTEM.Security.Login("_SYSTEM","SYS")
&sql( )
请问有没有第三方java库能够调用类似 ##class(%SYSTEM.Version).GetVersion()这种方法,或者通过sql语句能够调用这种类方法吗
本节中的示例更新SQLUser.MyStudents表。
下面的示例创建SQLUser.MyStudents表,并用数据填充它。
因为这个示例的重复执行会积累具有重复数据的记录,所以它使用TRUNCATE TABLE在调用INSERT之前删除旧数据。
在调用UPDATE示例之前执行这个示例:
如果没有指定%NOCHECK, IRIS将使用系统范围的配置设置来确定是否执行外键引用完整性检查;
默认值是执行外键引用完整性检查。
可以在系统范围内设置此默认值,如外键引用完整性检查中所述。
要确定当前系统范围的设置,调用$SYSTEM.SQL.CurrentSettings()。
此设置不适用于用NOCHECK关键字定义的外键。
在UPDATE操作期间,对于每个具有更新字段值的外键引用,都会在被引用表中的旧(更新前)引用行和新(更新后)引用行上获得共享锁。
这些行在执行引用完整性检查和更新行时被锁定。
然后释放锁(直到事务结束才持有锁)。
这确保了引用的行不会在引用完整性检查和更新操作完成之间发生更改。
锁定旧行可以确保在可能的UPDATE回滚之前不会更改所引用的行。
锁定新行可以确保引用的行不会在引用完整性检查和更新操作完成之间发生更改。
如果对CASCADE、SET NULL或SET DEFAULT定义的外键字段执行了带有%NOLOCK的UPDATE操作,则相应的更改外键表的引用操作也会使用%NOLOCK。
数据以逻辑模式格式存储。
例如,日期存储为整数天数,时间存储为从午夜开始的秒数,%List存储为编码字符串。
大多数其他数据,如字符串和数字,不需要转换;
无论当前模式如何,它们都以相同的格式输入、更新和存储。
对于已转换的数据,可以在LOGICAL模式(默认)中更新数据值,或者通过指定选择模式,使用更易于阅读的格式(DISPLAY模式或ODBC模式)更新数据值。
例如,通过指定选择模式,可以以DISPLAY格式(例如2/22/2018)、ODBC格式(例如2018-02-22)或逻辑格式(例如64701)更新日期。
对于某些数据类型,还可以在ODBC或DISPLAY选择模式下以LOGICAL格式指定数据。
IRIS支持列表结构数据类型%list(数据类型类%Library.List)。
这是一种压缩的二进制格式,并不映射到 SQL的相应本机数据类型。
它对应的数据类型为VARBINARY,默认MAXLEN为32749。
因此,动态SQL不能使用UPDATE或INSERT来设置类型为%List的属性值。
可以按照如下方法更新流字段中的数据值:
为指定表中的指定列设置新值。
UPDATE [%keyword] table-ref [[AS] t-alias]
value-assignment-statement
[FROM [optimize-option] select-table [[AS] t-alias]
{, select-table2 [[AS] t-alias]} ]
[WHERE condition-expression]
UPDATE [%keyword] table-ref [[AS] t-alias]
value-assignment-statement
[WHERE CURRENT OF cursor]
value-assignment-statement ::=
SET column1 = scalar-expression1 {,column2 = scalar-expression2} ... |
[ (column1 {,column2} ...) ] VALUES (scalar-expression1 {,scalar-expression2} ...) |
VALUES :array()
解锁表
UNLOCK [TABLE] tablename IN EXCLUSIVE MODE [IMMEDIATE]
UNLOCK [TABLE] tablename IN SHARE MODE [IMMEDIATE]
tablename - 要解锁的表的名称。
Tablename必须是已经存在的表。
表名可以是限定的(schema.table),也可以是非限定的(table)。
非限定表名接受默认模式名。
模式搜索路径被忽略。IN EXCLUSIVE MODE / IN SHARE MODE - IN EXCLUSIVE MODE关键字短语释放常规的IRIS锁。
IN SHARE MODE关键字短语在IRIS级别释放共享锁。UNLOCK命令用来解锁被LOCK命令锁定的SQL表。
此表必须是已存在的表,您对其具有必要的特权。
如果tablename是临时表,则命令执行成功,但不执行任何操作。
如果tablename是视图,则命令失败,并出现SQLCODE -400错误。
UNLOCK和UNLOCK TABLE是同义词。
UNLOCK命令用来反转LOCK操作。
即使没有锁被持有,UNLOCK命令也会成功完成。
可以使用LOCK多次锁定一个表;
必须显式解锁表,解锁次数为表被显式锁定的次数。
组合两个或多个SELECT语句。
select-statement {UNION [ALL] [%PARALLEL] select-statement}
select-statement {UNION [ALL] [%PARALLEL] (query)}
(query) {UNION [ALL] [%PARALLEL] select-statement}
(query) {UNION [ALL] [%PARALLEL] (query)}
ALL - 可选——关键字字面量。
如果指定,则返回重复的数据值。
如果省略,重复的数据值将被抑制。%PARALLEL - 可选—%PARALLEL关键字。
如果指定,则union的每一边都作为单独的进程并行运行。select-statement - 从数据库中检索数据的SELECT语句。query - 组合一个或多个SELECT语句的查询。UNION将两个或多个查询组合为一个查询,该查询将数据检索到结果中。
由UNION组合的查询可以是由单个SELECT语句组成的简单查询,也可以是复合查询。
基于代表性数据调优表。
TUNE TABLE tablename [ tune_options ]
tablename - 要调优的现有表的名称。
表名可以是限定的(schema.table),也可以是非限定的(table)。
非限定表名接受默认模式名。tune_options - 可选—如果指定,一个或多个TUNE TABLE选项,以任意顺序指定,由空格分隔。
这些tune_options不区分大小写。TUNE TABLE命令根据表中当前的数据对现有表进行调优。
该数据应该代表表完全填充时所期望的数据。
TUNE TABLE根据代表性数据计算和设置表的块大小、选择性和范围大小。
通常,TUNE TABLE设置一个或多个这些值,并清除所有使用这个持久类(表)的缓存查询,以便查询将使用这些新值。
但是,如果TUNE TABLE没有更改这些值(例如,自上次对该表运行TUNE TABLE以来数据没有更改),则缓存查询不会被清除,该表的类定义也不会被标记为需要重新编译。
从表中删除所有数据并重置计数器。
TRUNCATE TABLE [restriction] tablename
restriction - 可选—以下限制关键字中的一个或多个,用空格隔开:%NOCHECK, %NOLOCK。tablename - 要从中删除所有行的表。
还可以指定一个可更新视图,通过该视图可以删除表中的所有行。
表名(或视图名)可以是限定的(schema.table)或非限定的(table)。
使用模式搜索路径(如果提供的话)或默认模式名将非限定名称匹配到其模式。TRUNCATE TABLE命令从表中删除所有行,并重置所有表计数器。
可以直接截断表,也可以通过视图截断表。
通过视图截断表会受到删除要求和限制,如CREATE view中所述。
TRUNCATE TABLE重置用于生成RowID字段、IDENTITY字段和SERIAL (%Library.Counter)字段连续整数值的内部计数器。
IRIS为插入到TRUNCATE表后的表中的第一行中的这些字段赋值为1。
对表的所有行执行DELETE操作不会重置这些内部计数器。
TRUNCATE TABLE重置用于在数据插入到流字段时生成流字段OID值的内部计数器。
对表的所有行执行DELETE操作不会重置此内部计数器。
指定返回多少行的SELECT子句。
SELECT [DISTINCT clause]
[TOP {[((]int[))] | ALL}]
select-item{,select-item}
int - 限制返回到指定整数的行数。
int参数可以是一个正整数、一个动态SQL输入参数(?)或一个解析为正整数的嵌入式SQL主机变量(:var)。在动态SQL中,int值可以选择用单括号或双括号括起来(双括号是首选语法);
这些括号禁止在相应的缓存查询中对int值进行文字替换。TOP ALL仅在子查询或CREATE VIEW语句中有意义。
它用于在这些情况下支持使用ORDER BY子句,满足在子查询或CREATE VIEW中使用的查询中ORDER BY子句必须与TOP子句配对的要求。
TOP ALL不限制返回的行数。可选的TOP子句出现在SELECT关键字和可选的DISTINCT子句之后,以及第一个选择项之前。
TOP关键字用于动态SQL和基于指针的嵌入式SQL。
在非游标嵌入式SQL中,TOP关键字的唯一有意义的用法是TOP 0。
任何其他TOP int(其中int是任何非零整数)都是有效的,但没有意义,因为非游标嵌入式SQL中的SELECT总是最多返回一行数据。
开始一个事务。
START TRANSACTION [%COMMITMODE commitmode]
START TRANSACTION [transactionmodes]
commitmode - 可选-指定在当前进程中如何向数据库提交将来的事务。
取值包括EXPLICIT、IMPLICIT和NONE。
默认是维护现有的提交模式;
进程的初始提交模式默认值是IMPLICIT。transactionmodes - 可选—指定事务的隔离模式和访问模式。
可以将隔离模式、访问模式或这两种模式的值指定为逗号分隔的列表。隔离模式的有效值为ISOLATION LEVEL READ COMMITTED, ISOLATION LEVEL READ UNCOMMITTED, ISOLATION LEVEL READ VERIFIED. 默认 ISOLATION LEVEL READ UNCOMMITTED.访问模式的有效值为“READ ONLY”和“READ WRITE”。
注意,只有隔离级别READ COMMITTED与读写模式READ WRITE兼容。设置事务的参数。
SET TRANSACTION [%COMMITMODE commitmode]
SET TRANSACTION [transactionmodes]
%COMMITMODE commitmode - 可选-指定向数据库提交事务的方式。
取值包括EXPLICIT、IMPLICIT和NONE。
默认为IMPLICIT。transactionmodes - 可选—指定事务的隔离模式和访问模式。
可以将隔离模式、访问模式或这两种模式的值指定为逗号分隔的列表。隔离模式的有效值为ISOLATION LEVEL READ COMMITTED, ISOLATION LEVEL READ UNCOMMITTED, and ISOLATION LEVEL READ VERIFIED。
默认为“ISOLATION LEVEL READ UNCOMMITTED”。
访问模式的有效值为“READ ONLY”和“READ WRITE”。
注意,只有隔离级别READ COMMITTED与读写模式READ WRITE兼容。SET TRANSACTION语句为当前进程设置控制SQL事务的参数。
这些参数在下一个事务开始时生效,并在当前进程持续期间或直到显式重置为止。
它们不会在事务结束时自动重置为默认值。
设置执行选项。
SET OPTION option_keyword = value
SET OPTION语句用于设置执行选项,如编译模式、SQL配置设置和控制日期、时间和数字约定的区域设置。
每个set option语句只能设置一个关键字选项。
SET OPTION支持以下选项:
COMPILEMODEEXACT_DISTINCTLOCK_ESCALATION_THRESHOLDLOCK_TIMEOUTPKEY_IS_IDKEYSUPPORT_DELIMITED_IDENTIFIERSLocale Options (date, time, and numeric conventions)SET OPTION可以在动态SQL(包括SQL Shell)和嵌入式SQL中使用。
为了SQL兼容性,IRIS会解析其他SET OPTION参数(这里没有文档),但不执行任何操作。
因为SET OPTION的准备和执行速度很快,而且通常只运行一次,所以IRIS不会在ODBC、JDBC或动态SQL中为SET OPTION创建缓存查询。
IRIS支持下列选项:
AUTO_PARALLEL_THRESHOLD在本文中,我將演示以下內容:
以下是主要和轉換後的 HL7 2.5 ORU_R01 消息:
第 1 步:首先,我們需要在數據庫中保存參考範圍,為此我使用了 TestRanges 持久類:.png)
第 2 步:我們需要創建一個自定義函數來獲取引用範圍,為此我在實用程序類中創建了 GetReferenceRange() ClassMethod 函數。 請注意這個類應該是來自 EnsRule.FunctionSet 的擴展.png)
我們需要創建另一個函數來設置異常標誌,為此我在實用程序類中創建了 SetAbnormalFlag() ClassMethod 函數.png)
WHERE子句限定或取消查询选择中的特定行。
符合条件的行是那些条件表达式为真的行。
条件表达式是逻辑测试(谓词)的列表,可以通过AND和OR逻辑操作符链接这些测试(谓词)。
这些谓词可以使用NOT一元逻辑操作符进行反转。
SQL谓词可分为以下几类:
Comparison 谓词BETWEEN 谓词LIKE 谓词NULL 谓词IN and %INLIST 谓词EXISTS 谓词FOR SOME 谓词FOR SOME %ELEMENT 谓词条件表达式不能包含聚合函数。
如果希望使用聚合函数返回的值指定选择条件,请使用HAVING子句。
WHERE子句可以使用=(内部连接)符号连接操作符指定两个表之间的显式连接。
WHERE子句可以使用箭头语法(- >)操作符在基表和来自另一个表的字段之间指定隐式连接。
GROUP BY子句接受查询的结果行,并根据一个或多个数据库列将它们分成单独的组。
当将SELECT与GROUP BY结合使用时,将为GROUP BY字段的每个不同值检索一行。
GROUP BY子句在概念上类似于 IRIS扩展%FOREACH,但是GROUP BY操作整个查询,而%FOREACH允许在子填充上选择聚合,而不限制整个查询填充。
例如:
指定SELECT-ITEM时,可以使用AS关键字指定列名的别名:
SELECT Name AS PersonName, DOB AS BirthDate, ...
列别名在结果集中显示为列标题。指定列别名是可选的;始终提供默认值。列别名以指定的字母大小写显示;但是,当在ORDER BY子句中引用时,它不区分大小写。C别名必须是有效的标识符。C别名可以是分隔的标识符。使用带分隔符的标识符允许列别名包含空格、其他标点符号或作为SQL保留名称。例如,SELECT Name AS "Customer Name" or SELECT Home_State AS "From"。
As关键字不是必需的,但使查询文本更易于阅读。因此,以下也是有效的语法:
SELECT Name PersonName, DOB BirthDate, ...
SQL不执行列别名的惟一性检查。
字段列和列别名可能具有相同的名称(尽管不可取),或者两个列别名相同。
当ORDER by子句引用此类非惟一列别名时,可能会导致SQLCODE -24“Ambiguous sort column”错误。
列别名与所有SQL标识符一样,不区分大小写。