当前位置:文档之家› oracle plsql宝典学习笔记

oracle plsql宝典学习笔记

2015.12.28
1、约束的类型:
主键约束、外键约束、唯一约束、检查约束、非空约束是Oracle数据表的5个约束。

主键约束:用来唯一标识表中一个列,一个表中的主键约束只能有一个,但是可以在一个主键约束中包括多个列,也称为联合主键。

外键约束:用来约束两个表中列之间的关系。

唯一约束:用来唯一标识表中的列。

与主键约束不同的是,在一个数据表中可以有多个唯一约束。

检查约束:用来约束表中列的输入值的范围,比如在输入性别时,要求在数据库中只能输入男或女,就可以使用检查约束来约束该列。

非空约束:约束该列一定要输入值。

2、使用外键约束,应注意以下几个方面问题
如果在foreign key约束的列中输入非NULL值,则此值必须在被引用列中存在;否则,将返回违反外键约束的错误信息。

foreign key约束仅能引用位于同一个服务器上同一个数据库中的表,跨数据库的引用完整性必须通过触发器实现。

foreign key约束可以引用同一个表中的其他列,此行为称为自引用。

列级foreign key约束的references子句只能列出一个引用列,此列的数据类型必须与定义约束列的数据类型相同。

表级foreign key约束的references子句中引用列的数目必须与约束列列表中的列数相同,每个引用列的数据类型也必须与列表中相应列的数据类型相同。

在临时表中,不能使用外键约束。

2015.12.30
1、虽然使用DELETE语句和TRUNCATE TABLE语句都能够删除表中的所有数据,但是使用TRUNCATE TABLE语句比使用DELETE语句的执行效率要高。

这是因为:使用DELETE语句,系统将一次一行地处理要删除的表中的记录,在从表中删除行之前,在事务处理日志中记录相关的删除操作和删除行中的列值,以便在删除失败时,可以使用事务处理日志来恢复数据。

使用TRUNCATE TABLE语句则一次性完成删除与表相关的所有数据页的操作。

另外,TRUNCATE TABLE语句并不更新事务处理日志。

因此,使用TRUNCATE TABLE 语句从表中删除行后,将不能用ROLLBACK命令取消行的删除操作。

2016.1.1
1、在实际应用中,使用NOT运算符时,经常忽视其对NULL值的处理问题。

要时刻牢记一点,NOT NULL的结果仍为NULL。

2、X IS NULL不可以写成X=NULL;除了IS[NOT] NULL之外,空值不满足任何查找条件;如果NULL参与算术运算,则该算术表达式的值为NULL;如果NULL参与聚集运算,则除count(*)之外其他聚集函数都忽略NULL。

2016.1.2
1、在默认情况下,ORDER BY按升序进行排列,即默认使用的是ASC关键词。

如果用户特别要求按降序进行排列,则必须使用DESC关键词。

ORDER BY子句一定要放在所有子句的最后(无论包含多少子句)。

对于时间、数值类型的字段排序,其排序规则就是按照时间的早晚、数值的大小进行的;对于字符型的字段排序,则是依照其ASCII码的先后顺序进行的。

在排序时,空值(NULL)默认被看成最大的值。

2、在DB2、ORACLE和PostgreSQL数据库系统中,采用的连接符为"||";而在SQL Server和Access数据库系统中,采用的连接符为"+"。

使用连接符进行多列连接时,要求被连接的列必须有相同的或能够相互隐式转换的数据类型。

不能对具有完全不同的数据类型的列进行连接。

另外,需要说明的是NULL值的处理问题。

如果连接的两个字段中有一个字段的值为NULL,那么NULL会被正常连接,只不过NULL值不会有任何数据显示。

3、常用的单行函数
(1)字符处理函数
获取字符串长度函数length(char)
去除字符串首尾指定字符函数
trim([leading|trailing|both][trim_character FROM] trim_source
字符串截取函数substr
substr函数并不能改变原数据的长度,而是对原数据进行操作后返回操作结果,通常可以把该结果赋值给其他变量。

字符串连接函数concat
小写字母转大写函数 upper(char)
大写字母转小写函数 lower(char)
检索字符串函数 instr
(2)数值处理函数
数值处理函数可以接收数字类型的参数,并且返回数字类型的值,大多数的数值类型函数返回值可以精确到38位(十进制),一部分函数则精确到30位或36位。

绝对值函数 abs
取余函数mod
正弦函数sin 余弦cos 反余弦 acos 正切tan 反正切atan 反正弦asin
近似值函数 round
数字截取函数trunc
(3)日期处理函数
获取系统日期函数sysdate
获取系统时间函数systimestamp
月份增加函数add_months
获取两个日期之间的月份函数months_between(date1,date2)
获取某月最后一天函数last_day(date)
(4)转换函数
类型转换函数cast(expr as type_name)
数值或日期转字符串函数 to_char(n,[,fmt[,nlsparam]])
字符转日期函数to_date(char[,fmd[,nlsparam]]
字符串转数字函数to_number(expr[,fmt[,nlsparam]])
(5)替换NULL值函数 NVL(expr1,expr2) 如果expr1的值为NULL,则会返回expr2的值,否则将返回expr1的值。

(6)排除指定条件函数
LNNVL(condition)
4、聚合函数
sum 返回选取的结果集中所有值的总和
count 返回选取的结果集中所有记录行的数目
max 返回选取的结果集中所有值的最大值
min 返回选取的结果集中所有值的最小值
avg 返回选取的结果集中所有值的平均值
stddev 返回选取的结果集中所有值的标准偏差
stddev_pop 返回选取的结果集中所有值的总体标准偏差
当对某列数据进行求和操作时,如果该列存在NULL值,则SUN函数会忽略该值。

在计算平均值时,AVG函数将忽略NULL值。

实际上,所有的聚合函数都忽略了含用NULL值的记录。

5、分组查询
所有的聚合函数都是对查询出的每一行数据进行分类后再进行统计计算的。

所以在结果集中,对所进行分类的列的每一种数据都有一行统计结果值与之对应。

GROUP BY 子句中不支持对列分配的别名,也不支持使用了统计函数的集合列。

另外,对SELECT后面每一列数据,除了出现在统计函数中的列以外,都必须在GROUP BY子句中应用。

在生成包含小计和合计的报表时,ROLLUP运算符很有用。

ROLLUP运算符生成的结果集类似于CUBE运算符所生成的结果集。

CUBE和ROLLUP之间的区别在于:CUBE生成的结果集显示了所选列中值的所有组合的聚合;ROLLUP生成的结果集显示了所选列中值的某一层次结构的聚合。

使用CUBE和ROLLUP运算符操作生成空值将会带来一个问题:如何区分CUBE操作生成的NULL值和在实际数据中返回的NULL值?可以使用GROUPING函数解决此问题。

如果列值来自实际数据,GROUPING函数将返回0;如果列值是由CUBE 操作生成的NULL,则返回1。

2016.1.3
1、基本的转换函数
CAST函数:将内置的数据类型或集合类型转换成其他的数据类型。

TO_CHAR函数:将date或number转换为字符串。

TO_DATE函数:将number、char或varchar2转换为date。

TO_NUMBER函数:将char或varchar2转换为number。

BIN_TO_NUM函数,可以将二进制数转换为十进制数。

它的输入值是一个二进制形式的数字列表,用逗号分隔,作为一个字符串处理。

TO_BINARY_DOUBLE函数,将数据值转换为双精度浮点数。

TO_BINARY_FLOAT函数,将数据值转换为单精度浮点数
2016.1.7
1、内部连接(Inner join):内部连接为典型的连接运算,使用类似于“=”或
“<>”的比较运算符,它是组合两个表的常用方法。

内部连接使用比较运算符根据每个表的通用列中的值匹配两个表中的行,内部连接包括同等连接和自然连接。

2、外部连接(Outer join):在内部连接中,只有在两个表中匹配的行才能在结果集中出现。

而在外部连接中可以只限制一个表,而对另外一个表不加限制(即所有的行都出现在结果集中)。

外部连接分为左外连接、右外连接和全外连接。

左外连接是对连接条件中左边的表不加限制;右外连接是对右边的表不加限制;全外连接是对两个表都不加限制,两个表中的所有行都会包括在结果集中。

3、交叉连接(Cross join):没有WHERE子句的交叉连接将产生连接所涉及的表的笛卡儿积。

第1个表的行数乘以第2个表的行数等于笛卡儿积得到的结果集的大小。

相关主题