- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
扩展SQL语法说明书
DOCPROPERTY COMPANY 深圳市道讯科技开发有限公司 DOCPROPERTY PROJECT 扩展SQL语法说明书
版本: DOCPROPERTY Version \* MERGEFORMAT 1.0.0 第 PAGE 6 页 DATE \@ yyyy-M-d 2017-5-2
TITLE \* MERGEFORMAT 扩展SQL语法说明书
DOCPROPERTY Company \* MERGEFORMAT 深圳市道讯科技开发有限公司
DOCPROPERTY DocDate \* MERGEFORMAT 2005/5/1
格式
一律采用大写字母。
SELECT、FROM、WHERE、GROUP BY、ORDER BY等关键字,出现在行首。
字段之间的分隔,采用逗号加空格的方式,例如:SELECT A, B, FROM ...。
语法
严格遵循SQL92标准,不得采用某种数据库特定的语法。
参数
SQL参数和字段名称一致。如果有多个同名字段,则加上下划线和序号加以区分。例如:
WHERE PRIV_ID = :PRIV_ID
WHERE A.PRIV_ID =:PRIV_ID_1 OR B.PRIV_ID = :PRIV_ID_2。
伪列
伪劣指SQL语句中,由于字段重名,或者为了精确表达字段实际意义,而指定的字段别名。伪列的使用和命名有以下约定:
基础实体表中的字段,和扩展实体表关联后,改用伪列来精确命名。例如:
SELECT A.VENDER_ID, B.UNIT_NAME AS VENDER_NAME
FROM (VENDER A INNER JOIN SYS_UNIT B
ON (A.VENDER_ID = B.UNIT_ID))
其中,基础实体表是SYS_UNIT,扩展实体表是VENDER,UNIT_NAME改名为VENDER_NAME,和VENDER_ID对应,表达更为精确。由于客户端不必了解数据库中的具体表法方式,因此,上述情况,SQL输出字段时采用伪列也更为合理。
不同实体表的字段冲突时,采用伪列并添加限定信息到伪列名称中。例如:
SELECT A.VENDEE_ID, B.TEL_NUM AS VENDEE_TEL_NUM,
B.LM_ID, C.TEL_NUM AS LM_TEL_NUM
FROM ((ORDER A INNER JOIN VENDEE B
ON (A.VENDEE _ID = B.VENDEE _ID))
LEFT OUTER JOIN LM C
ON (A.LM_ID = C.LM_ID))
其中,电话号码出现两次,一个是购买方电话,一个是联系人电话,采用伪列区分。
运算符
字符串相加的运算符采用$+$,不能使用Oracle中的“||”或者Sybase中的“+”。其它运算符参照SQL92标准。
DBMS标记
数据库厂商对SQL92的支持不是非常全面,而且SQL92对部分复杂操作,尤其是查询优化提示的语法也没有详细规定,造成程序中少部分SQL语句无法用每个数据库???支持的方式来表达。因此,扩展语法中引入了DBMS标记,语法为:$@DBMS1;DBMS2…@内容$。
两个$字符之间为特殊DBMS语句。
两个@字符之间标记该语句适用的DBMS列表。DBMS之间用半角“;” 分隔。如果当前DBMSDBMS列表,则后续得内容有效;否则,后续内容被忽略。
内容为特殊的SQL语句,针对DBMS列表中指定的数据库类型。
数据库联接
采用INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN的方式。考虑到某些数据库(如Access)对联接语法要求严格,多个表联接时,连接子句两边要用括号包围,例如:
((A INNER JOIN B ON (A.F1 = B.F1))
INNER JOIN C ON (B.F2 = C.F2))
INNER JOIN D ON (C.F3 = D.F3)
如果使用了嵌套SQL,用于关联的表从子查询获取时,Access和Oracle的要求方式不一样。Access还是如同上述要求,ORACLE则不允许多余的括号。举例如下:
Access
(((SELECT * FROM X) A
INNER JOIN B ON (A.F1 = B.F1))
INNER JOIN C ON (B.F2 = C.F2))
INNER JOIN D ON (C.F3 = D.F3)
Oracle
(SELECT * FROM X) A
INNER JOIN B ON (A.F1 = B.F1)
INNER JOIN C ON (B.F2 = C.F2)
INNER JO
您可能关注的文档
最近下载
- 《中国民航发展史》课件——1-2 近代中国航空的开展.pptx VIP
- 第2节_电生磁-教学课件.pptx VIP
- 上访事件应急处置方案.docx VIP
- 《中国民航发展史》课件——第六章 中国民航体制改革的继续深化与.pptx VIP
- 《核电子学》习题解答.docx
- 《中国民航发展史》课件——第三章 新中国民用航空事业的创立与初步发展.pptx VIP
- 《中国民航发展史》课件——第二章 第二次世界大战后快速崛起的中国民用航空.pptx VIP
- 心流体验之如何进入最佳心理状态的课件.pptx
- 牙科椅的使用注意事项和维护保养.pptx
- 《中国民航发展史》课件——第一章 中国民用航空的萌芽与初步发展.pptx VIP
文档评论(0)