|
发表于 2014-8-5 21:34:43
|
显示全部楼层
表达式编辑器里的操作符是 可以用 like 或者 in 的 ,更多的详细你可以参考 API,里面写的很详细;
帮你贴一下吧。
KSQL是一个语法上靠近SQL-92的本体数据操作语言。
一.KSQL语法
1. SELECT语法
SELECT [DISTINCT] <查出列表>
FROM <概念1> <别名1> [[OPTIONAL] JOIN <概念2> <别名2> ON <条件> ...]
[WHERE <条件>]
[GROUP BY <分组列表> [HAVING <条件>]]
[ORDER BY <排序列表>]
[UNION ...]
[LIMIT ..]
1) 案例:
¨ SELECT p.* FROM SA_OPPerson p WHERE p.sName LIKE 'zhang%'
¨ SELECT p, case when p.sCode = 'ogn' then '机构' when p.sCode = 'dpt' then '部门' else '其他' end AS type FROM SA_OPPerson p
¨ SELECT p.* FROM SA_OPPerson p WHERE p.sCode = peratorCode()
¨ SELECT p, o FROM SA_OPPerson p JOIN SA_OPOrg o ON p.sMainOrg = o
¨ SELECT p, o FROM SA_OPPerson p OPTIONAL JOIN SA_OPOrg o ON p.sMainOrg = o WHERE p.sCode = 'PSN01'
¨ SELECT COUNT(p.sName), MAX(p.sLevel), p.sMainOrgID FROM SA_OPPerson p WHERE p.sName like 'ZH%' GROUP BY p.sMainOrgID HAVING COUNT(p.sName)> 5
¨ SELECT p, p.sName, p.sCode FROM SA_OPPerson p WHERE p.sName LIKE 'ZH%'
UNION
SELECT o, o.sName, o.sCode FROM SA_OPOrg o WHERE o.sFID LIKE '/OGN01%'
2. INSERT语法
INSERT INTO <概念> <别名> (<修改关系列表>) VALUES (<插入的值>)
INSERT INTO <概念> <别名> (<修改关系列表>) <子查询>
INSERT INTO <多值关系> (<概念名>, <关系名>) VALUES (<插入的值>)
1) 案例:
¨ INSERT INTO SA_OPPerson p (p, p.sName, p.sCode) VALUES ('PSN01', :name, :code)
¨ INSERT INTO SA_OPPerson p (p, p.sName, p.sCode) (SELECT :newid , p1.sName, p1.sCode FROM SA_OPPerson p1 WHERE p1.sName = 'ZHANGSAN')
INSERT INTO Person.hasDog (Person[0], Person[1], Person.hasDog) VALUES('P1', 'P2', 'D1') //这里假设Person是联合主键,且Person.hasDog是多对多关系
2) 注意:
最后一种语法主要用于插入一条多对多关系,如:假设Person.hasDog是多对多关系,存在关系表中,则INSERT INTO Person.hasDog (Person, Person.hasDog) VALUES ('P1', 'D1')
3. UPDATE语法
UPDATE <概念> <别名> SET <关系1> = <值1> [, <关系2> = <值2> ...] WHERE <条件>
UPDATE <概念> <别名> SET <关系> = <子查询> WHERE <条件>
1) 说明:略
2) 案例:
¨ UPDATE SA_OPPerson p SET p.sName = 'ZHANGSAN', p.sCode = 'ZS' WHERE p = 'PSN01'
¨ UPDATE SA_OPPerson p SET p.sName = (SELECT o.sName FROM SA_OPOrg o WHERE o = 'OGN01')
4. DELETE语法
DELETE FROM <概念> <别名> WHERE <条件>
DELETE FROM <多值关系> WHERE <条件>
1) 案例:
¨ DELETE FROM SA_OPPerson p WHERE p.sName LIKE 'ZH%'
¨ DELETE FROM Person.hasDog WHERE Person = 'PSN01' //这里假定Person.hasDog 为多对多关系
二.KSQL特性
1. KSQL中关键字、KSQL函数大小写不敏感,但概念、关系、别名、变量名及表达式函数名大小写敏感
2. 字符串使用单引号', 如:WHERE SA_OPPerson = 'PSN01'
3. 支持新增(INSERT), 删除(DELETE),修改(UPDATE)及查询(SELECT)的操作
4. FROM支持连接(JOIN)和可选连接(OPTIONAL JOIN, 等价于SQL的LEFT JOIN)
5. 支持UNION,CASE WHEN以及子查询
6. 支持命名参数,以':'开头,如:WHERE SA_OPPerson.sName = :userName
7. 支持表达式函数,表达式函数在内存中计算,以':'开头,如:WHERE SA_OPPerson.sCode = peratorCode()
8. 支持本地SQL函数,以SQL.开头,如:SQL.datalength(SA_OPPerson.sName) AS nlen FROM SA_OPPerson SA_OPPerson WHERE SA_OPPerson.sAge > 20
9. KSQL语句中必须给出概念的别名,可以与概念同名,如:SELECT SA_OPPerson.sName FROM SA_OPPerson SA_OPPerson
10. 目前KSQL中的标识符在表达式中全局唯一,暂不支持标识符作用域
11. 支持分组(GROUP BY),排序(ORDER BY )
12. 支持分页,格式为LIMIE start, rows。start表示从第几条开始取,从0开始;rows表示取多少条,-1表示不限制。如:
a) SELECT p.* FROM SA_OPPerson p LIMIT 0, 10 //从第0条开始,取10条,就是取开始的10条;
b) SELECT p.* FROM SA_OPPerson p LIMIT 1, -1 //从第1条开始,取所有记录,即跳过最开始的一行记录
13. 支持DISTINCT 如:SELECT DISTINCT p.sName FROM SA_OPPerson p
14. 以下标的方式支持对联合主键部分列的访问。如:假设概念Cat所映射的表的主键是联合主键SID1,SID2,则Cat[0]可以方位SID1, Cat[1]可以访问SID2
SELECT c.* FROM Cat c WHERE c[0] = 'cat1' AND c[1] LIKE 'c%'
三.KSQL支持的操作符
1. 算数:+, -, *, /
2. 比较:=, >, <, >=, <=, <>, like, in, exists, is null, is not null, between
3. 逻辑: and, or, not
4. 其他:union, case ... when ... then ... else ... end
四.KSQL支持的函数
1. 字符串: concat, instr, substring, ltrim, rtrim, trim, length, upper, lower, replace
2. 数值: mod, ceil, pi, rand, square, ln, log10, abs, sin, cos, tan, cot, asin, atan, exp, floor, sqrt, sign, power, round
3. 集合: count, max, min, sum, avg, countAll
4. 时间日期:dateTimeToDate, dateTimeToString, TimeToString, DateToString, stringToDateTime, stringToDate, stringToTime, getYear, getMonth, getDay, getHour, getMinute, getSecond
|
|