数据库语法整理
1.命名规范
1.1 实体(表)的命名
1.1.1表以英文的名词或名词短语命名,对具体各模块的工作用表来说,表名要加上前缀 所属模块_ 后面加上描述该表的功能的单词名称。在命名过程当中,根据语义拼凑缩写即可。
示例:
sfc_routing_card;sfc_manbill
1.1.2 如果表或者是字段的名称仅有一个单词,那么一般不使用缩写,而是用完整的单词。
示例:
senbook;routing;
1.2 属性(列)的命名
1.2.1采用能表明意义的列名,每一个表必须有主健。
示例:
sfc_manbill表中的billno为主键,意义为“编号”
1.2.2 在业务用表中,都会留有预留字段,预留字段都以def_开头,其中varchar类型的字段名称为def_str1,def_str2…同样的int型的字段名称为def_int1,def_int2…numeric型的名称为def_num1,def_num2…datetime型的字段名称为def_date1,def_date2…
1.3视图的命名
以uv_开头,加上 所属模块_,再加上能描述该试图功能的单词名称。
示例:
uv_sfc_tools1,uv_sfc_tools2
1.4存储过程名
存储过程应以"up_"开头,和系统的存储过程区分,后面加上 所属模块_ 再加上主要以动词或动宾形式构成的能表明意义的单词,并用下划线分割各个组成部分。
示例:
up_mdm_substring 将一个单据组合或者字符串分解,从后向前开始查找
1.5变量名
变量名采用小写,
MS SQL中以@+数据类型简写字母_ 加上能表明该变量意义的单词或缩写。常用各数据类型和对应的缩写如下:varchar @s_; integer @i_; datetime @dt_;
char @s_ ; numeric @dec_;
示例:(up_calc_op_time)
declare
@i_maxop integer, --最大工序
@s_workflg varchar(2), --是否外协
@s_isprepare char(1), --是否计算准备时间
@dec_qy numeric(18,6), --计算工序加工时间
Oracle中不能使用@@和@,所以变量由代表该变量类型的简写+该变量的意义组成,中间用_隔开。常用各数据类型和对应的缩写如下:
Int I_; date dt_; varchar s_; numeric dec_;
1.6命名中其他注意事项
(1) 以上命名都不得超过30个字符的系统限制。变量名的长度限制为29(不包括标识字符@)。
(2) 数据对象、变量的命名都采用英文字符,禁止使用中文命名。绝对不要在对象名的字符之间留空格。
(3) 小心保留词,要保证字段名没有和保留词、数据库系统或者常用访问方法冲突。
2.基础语法
2.1定义变量
MS SQL:
DECLARE 变量1 类型;
DECLARE 变量2 类型;…
OR
DECLARE 变量1 类型,
变量2 类型,…
Oracle:
DECLARE 变量1 类型;
变量2 类型;…
2.2为变量赋值
MS SQL:
Select (or Set) 变量 =: 值(表达式)
Oracle:
(1)变量 : = 值(表达式)
(2)SELECT 字段INTO 变量 [FROM …]
2.3 if…else
MS SQL:
一个if else 块 IF (TRUE) PROCESS1 ELSE PROCESS2
多个if else 块 IF (TRUE)
BEGIN
…….
END
ELSE
BEGIN
…….
END
Oracle:
IF (TRUE) THEN
…….
ELSE
..….
END IF
2.4 While
MS SQL
WHILE()
BEGIN
……
END
Oracle:
LOOP
…
EXIT WHEN (CONDITIONS)
END LOOP
2.4 跳出循环语句
MS SQL:
BREAK 退出最内层的 WHILE 循环。
CONTINUE 重新开始 WHILE 循环
Oracle:
EXIT, EXIT WHEN
2.5 Join
MS SQL:
左连接:FROM table1 LEFT OUTER JOIN table2 ON table1.column1 = table2.column2
注意:下面的语法可以起同样作用,但是现在这种用法不被推荐。
WHERE column1 *= column2
右连接:FROM table1 RIGHT OUTER JOIN table2 ON table1.column1 = table2.column2
注意:下面的语法可以起同样作用,但是现在这种用法不被推荐。
WHERE column1 =* column2
完整外部联接:
FROM table1 FULL OUTER JOIN table2 ON table1.column1 = table2.column2
Oracle:
左连接:FROM table1 LEFT OUTER JOIN table2 ON (table1.column1 = table2.column2)
注意:下面的语法也可以起同样作用,而且在9i以前的版本是唯一的左连接语句。
WHERE column1 = column2(+)
右连接:FROM table1 RIGHT OUTER JOIN table2 ON ( table1.column1 = table2.column2)
注意:下面的语法也可以起同样作用,而且在9i以前的版本是唯一的右连接语句。
WHERE column1(+) = column2
完整外部联接:
FROM table1 FULL OUTER JOIN table2 ON (table1.column1 = table2.column2)
2.6select 基础查询
MS SQL:
SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
Oracle:
SELECT select_list
FROM table1 t_alias1
WHERE expr operator
(SELECT column_list
FROM table2 t_alias2
WHERE t_alias1.column
operator t_alias2.column);
2.7select 高级查询
2.7.1SELECT without FROM
MS SQL:
SELECT 'hello world'
Oracle:
SELECT 'hello world' FROM DUAL
2.7.2 SELECT data into a table
MS SQL:
SELECT ... INTO
Oracle:
CREATE TABLE AS SELECT ...
2.7.3两个SELECT 的交集
MS SQL:
SELECT ... WHERE EXISTS (SELECT ...)
Oracle:
SELECT ... INTERSECT SELECT ...
2.7.4两个SELECTS相减
MS SQL:
SELECT ... WHERE NOT EXISTS (SELECT ...)
Oracle:
SELECT ... MINUS SELECT ...
2.7.5查询记录集中前N条记录
MS SQL:
SELECT TOP N * FROM 记录集(表,视图,子查询)
Oracle:
SELECT * FROM 记录集 WHERE ROWNUM<=N
2.8 Where
MS SQL:
SELECT column
FROM table
WHERE column condition value
注:下面的操作符能被使用在WHERE中:
=,<>,>,<,>=,<=,BETWEEN,LIKE
在某些SQL的版本中不等号<>能被写作为!=
Orcale:
SELECT column
FROM table
WHERE column condition value
2.9 And & Or
在WHERE子句中AND和OR被用来连接两个或者更多的条件
AND在结合两个布尔表达式时,只有在两个表达式都为 TRUE 时才传回 TRUE
OR在结合两个布尔表达式时,只要其中一个条件为 TRUE 时,OR便传回 TRUE
2.10 Between…And
指定需返回数据的范围
MS SQL:
SELECT column_name FROM table_name
WHERE column_name
BETWEEN value1 AND value2
Oracle:
To be continued
2.11 Distinct
DISTINCT关键字被用作返回唯一的值, 当column-name(s)中存在重复的值时,返回结果仅留下一个
MS SQL:
SELECT DISTINCT column-name(s)
FROM table-name
Oracle:
To be continued
2.12 Order by
指定结果集的排序,指定结果集的排序,可以按照ASC(递增方式排序,从最低值到最高值)或者DESC(递减方式排序,从最高值到最低值)的方式进行排序,默认的方式是ASC
MS SQL:
SELECT column-name(s)
FROM table-name
ORDER BY
{ order_by_expression [ ASC | DESC ] }
Oracle:
To be continued
2.13 Group by
对结果集进行分组,常与汇总函数一起使用。
MS SQL:
SELECT column,SUM(column)
FROM table
GROUP BY column
Oracle:
To be continued
2.14 Having
指定群组或汇总的搜寻条件, HAVING 通常与 GROUP BY 子句同时使用。不使用 GROUP BY 时,HAVING 则与 WHERE 子句功能相似。
MS SQL:
SELECT column,SUM(column)
FROM table
GROUP BY column
HAVING SUM(column) condition value
Oracle:
To be continued
2.15 INSERT INTO
在表中插入新行
MS SQL:
插入一行数据
INSERT INTO table_name
VALUES (value1, value2,....)
插入一行数据在指定的字段上
INSERT INTO table_name (column1, column2,...)
VALUES (value1, value2,....)
Oracle:
To be continued
2.16 UPDATE
更新表中原有数据
MS SQL:
UPDATE table_name SET column_name = new_value
WHERE column_name = some_value
Oracle:
To be continued
2.17 DELETE
删除表中的数据
MS SQL:
DELETE FROM table_name WHERE column_name = some_value
Oracle:
To be continued<