分类: Oracle
2006-07-29 16:55:50
ORACLE PL/SQL使用经验总结-
编写基本SQL语句
所有包含空值或与空值比较的表达式,结果为空值。
在各种数据类型中,只有NUMBER数据类型的默认显示是靠右对齐的,而CHAR, DATE和VARCHAR2是靠左对齐的
DISTINCT关键字的位置紧跟在SELECT后,一旦使用,查询返回的数据不含冗余行。
当查询中包含带Primary Key 主键约束的列时,返回的数据不带冗余行,因为PK约束保证了该列数据是不重复的。跟使用了DINSTICT关键字的作用是一样的。
SQL*PLUS 命令在SQL*PLUS环境中控制查询结果的格式,和操纵文件。
START 命令用以执行一个已储存的文件
SAVE命令用以创建一个文件
EDIT命令用以调用编辑器编辑已存文件的内容
CHANGE 是SQL*Plus的编辑命令,用于在当前一行把旧文段转换为新文段
DEL 命令用以删除文本中一行或多行文字
SPOOL命令用以把查询结果储存在一个已有文件中,注意与SAVE区别
GET命令用以一个文件的内容写进一个SQL块中
SPOOL OUT命令用以把文件的结果发送到系统打印机。
DML命令: UPDATE, INSERT, DELETE
DDL命令: ALTER, CREATE, DROP,TRUNCATE, RENAME,
DCL 命令: GRANT, REVOKE
当在限制语句NULL或NOT NULL 关键字时,不能写成 = NULL 或 <> NULL , 要写成 IS NULL。 因为NULL不是一个值。
Selection允许你选择表里的行(横向),Projection(投影)允许你选择表中的列(竖向)
ORDER BY 指令用于排序,如果指令中出现多列,先按第一列排序,然后第二列……
DESCRIBE 命令用于显示表和视图中的定义,包括列名,列的数据类型和长度,还有被赋以
NOT NULL约束的列。
NVL(expression1, expression2)
NVL 函数用以把一个空值转换为一个实值,如:
NVL(100/quantity, 0) ,要是quantity为空值,该函数返回一个0。
表达式中出现空值,或任何与空值比较结果都为空值
对数据进行限制和排序
当一个表被赋予表别名(不时列别名)时,应在所有能应用表别名的地方使用,包括SELECT,WHERE 和GROUP BY 子句。
列别名不能用于WHERE子句
运算符的计算次序:1 所有的比较运算符, 2 AND , 3 OR
NULL值不能跟任何值比较,所以不能使用=NULL,>NULL, !=NULL, 只能用IS NULL .
当ORDER BY 子句中对多列排序,会按先按紧跟其后的第一列升序排,再按第二列…….
在升序排列中,NULL值排在最后。
单行函数
常用的单行函数有:
LOWER(column\expression) ,UPPER(column\expression) ,INITCAP(column\expression),
CONCAT (column1\expression1,column2\expression2) ,SUBSTR(column\expression,m[,n]),
LENGTH(column\expression),NVL(column1\expression1, column2\expression2)
数字函数:ROUND(column\expression, n),TRUNC(column\expression,n), MOD(m,n)
日期函数:MONTHS_BETWEEN(date1, date2) , ADD_MONTHS(date, n) , NEXT_DAY(date,’ char) ,
LAST_DAY(date) , ROUND , TRUNC
重点:
SUBSTR (column\expression, m[,n]) 用于对字符串进行截取操作,从第m个位置开始,把其后的连续n个字符的部分截取下来,如果m位负值,则从末尾开始计算。
LENGTH(column\expression) 用于返回表达式中的字符数,注意返回的是NUMBER。
NVL(column1\expression1, column2\expression2)用于把列中的空值转化为另一个值,但该值数据类型必须与列中数据类型一样,否则必须使用转换函数。如:NVL (id,“no number”)是错的, 正确:NVL(TO_CHAR( id),“no number”)
ROUND和TRUNC函数能用于NUMBER和DATE类型数据,不能用于字符型数据,
ROUND(order_date, 'YEAR')把 '23-MAY-00' 舍入为 '01-JAN-00'
ROUND(order_date, 'MONTH')把 '23-MAY-00' 舍入为 '01-MAY-00'
两个日期相减结果为天数,日期减天数结果为日期,天数减日期…….什么也不是,返回错误,
日期中RR与YY的区别,RR格式对日期作类似于舍入的操作,YY格式对日期作类似于截取的操作
Current year specified date RR format YY format
1995 27-oct-95 1995 1995
1995 27-oct-17 2017 1917
2001 27-oct-17 2017 2017
2001 27-oct-95 1995 2095
显示多个表中的数据
不等值连接的(+)加在不含对应值的一边,但返回的将是等号另一边列的不符合连接条件的数据。
不等值连接的典型例子:与A表中的a列对应的B表中的b列包含有空值的行,而且这些行需要显示。
要在SELECT语句中使用等值连接来连接n个表,最少的连接条件是n-1。
在外部连接中,关键字 =和and可以使用,in 和or 不可使用
使用组函数集合数据
常用组函数:AVG(DISTINCT|ALL|n),COUNT(DISTINCT|ALL|expr) , MAX(DISTINCT|ALL|expr) ,
MIN(DISTINCT| ALL | expr) , STDDEV(DISTINCT| ALL | n) , SUM(DISTINCT| ALL | n) ,
VARIANCE(DISTINCT| ALL | n) ,
GROUP BY 子句中不能使用列别名
SELECT 子句中出现多个列和组函数时,组函数外的所有列必须出现在GROUP BY 子句中。
限制组函数不能用WHERE子句,只能用HAVING子句
WHERE子句对整个查询限制,HAVING只对组函数限制,
当MIN函数用于字符类型的列时,列中数据第一位字母最前的会显示。
查询语句的顺序
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
COUNT 函数所用的列包含空值时,空值行被忽略。