友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
oracle从入门到精通(PDF格式)-第6部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
182 INTERVAL YEAR TO MONTH ORACLE9i
183 INTERVAL DAY TO SECOND ORACLE9i
208 UROWID ORACLE9i
231 TIMESTAMP WITH LOCAL TIMEZONE ORACLE9i
USERENV'option'
基于 option返回包含有关当前会话信息的 VARCHAR2 值。
函数的行为
选项值 USERENV(option)的行为
'OSDBA' 如果当前会话将 OSDBA角色的设置打开了,则返回'TRUE';否则返回
'FALSE';注意返 回值是 VARCHAR2 类型,而不是 BOOLEAN 类型。
'LABEL' 仅对 TRUSTED ORACLE 中有效,返回当前会话标志。
'LANGUAGE' 返回当前会话所使用的语言和地域,以及数据库字符集,这是 NLS 参数,返
回形式是 LANGUAGE_TERRITORY。CHARACTERSET。
'TERMINAL' 返回当前会话所使用终端的操作系统标识符。对于分布式的 SQL 语句,返回
的是本地会话的标识符。
'SESSIONID' 如果初始化参数 AUDIT_TRAIL 被设置为 TRUE,那么将返回审计会话标识符。
第 23 页,共 106 页
…………………………………………………………Page 24……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通
在分布式 SQL 语句中,USERENV('SESSIONID')是无效的。
'ENTRYID' 如果初始化参数 AUDIT_TRAIL 被设置为 TRUE,那么将返回可用的审计项标识
符。在分布式 SQL 语句中 USERENV('ENTRYID')是无效的。
'LANG' 返回语言名称的 ISO 缩写符号。它的格式比 USERENV('LANGUAGE')要短。
例:
select USERENV('TERMINAL');USERENV('LANGUAGE') from dual;
USERENV('TERMINA USERENV('LANGUAGE')
………………………………………………………………………………………………………………………………………………………………………………
WNJ SIMPLIFIED CHINESE_CHINA。ZHS16GBK
2。 条件表达式:
CASE 表达式(简单 CASE)
语法:
CASE 表达式 WHEN 条件1 THEN 返回值 1
WHEN 条件 2 THEN 返回值 2
。
。
。
WHEN 条件 n THEN 返回值 n
ELSE 返回值
END
DECODE 函数
语法:
DECODE(
条件;比较值1,返回值 1
比较值2,返回值 2
。
。
。
比较值n,返回值 n
返回值(不满足条件时)
)
select last_name;salary;
decode( trunc(salary/2000;0);//条件
0; 0。00;//比较值 1,返回值 1
1; 0。09,
2; 0。20,
3; 0。30,
4; 0。40,
第 24 页,共 106 页
…………………………………………………………Page 25……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通
5; 0。42,
6; 0。44,
0。45
) TAX_RATE
from employees
where department_id=80;
3。 从多表中显示数据:
SQL(老版本的)
等值查询
SELECT TABLE1。COLUMN;TABLE2。COLUMN FROM TABLE1;TABLE2 WHERE
TABLE1。COLUMN1=TABLE2。COLUMN2;//自然连接使用 AND 操作符增加查询条件
使用表的别名来简化查询,提高查询功能。
SELECT E。ID,D。ID FROM EMPL E,DEP D WHERE E。NAME=D。NAME;
E、D:表别名
多表等值连接查询
为了连接 N个表,至少需要 N…1 个连接条件。
非等值查询
使用 BETWEEN AND 查询近似值作为连接条件的多表结果。
WHERE E。SALARY BETWEEN J。LOW AND J。HIGH
外连接查询
SELECT T1。COL;T2。COL FROM WHERE T1。COL(+)=T2。COL;左外连接所有 T2 的T1 信息。
SELECT T1。COL;T2。COL FROM WHERE T1。COL=T2。COL(+);右外连接所有 T1 的T2 信息。
为了看到与连接条件不匹配的数据,就必须得用外连接。
自连接
通过表的别名来创建虚拟逻辑表;进行自连接查询。
select worker。last_name || 'work for' || manager。last_name
from employees worker;employees manager
where worker。manager_id=manager。employee_id;
9I 适应性连接:
select t1。col;t2。col
from table
cross join t2 //交叉连接
natural join t2//自然连接:把两表中所有等值的字段都作为连接条件(但这些连接条件不用
写)。
从两个表中选出连接列的值相等的所有行。
如果两个列的名称相同,但数据类型不同;或是类型相同,意义不同都会出错。
第 25 页,共 106 页
…………………………………………………………Page 26……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通
join t2 using (column_name);基于自然连接,只有在 USING 中出现的,才作为连接条件(在
USING 中列名前一定不能加前缀)。
join t2 on (t1。col=t2。col);基于 ON 的自然连接。等值、非等值或自连接都可以实现。
left|right|full outer join t2 on(t1。col=t2。col);
select e。last_name;d。department_name;l。city
from employees e
left outer join departments d on e。department_id=d。department_id
right outer join locations l on d。location_id=l。location_id;
*&* 可以连续做左连接或右连接的操作。
full outer join 忽略连接条件,把要查询的列的所有行全显示出来。
笛卡尔乘积(多表查询容易产生的错误)形成原因:
*、忽略连接条件;
*、连接条件不正确;
*、笛卡尔乘积是由第一个表的所有行和第二个表的所有行联合形成的;
*、为了避免笛卡尔乘积的产生,一定要在 WHERE 条件中正确写出连接条件。
set linesize 160;设置显示行的行数。
1。8、用字函数产生的总计
对多行的计算产生单行的结果。
组函数用语对每个组的行集进行运算,每个组产生一个结果。
AVG('DISTINCT/ALL'col)只能用与数字。只能对多行的数据进行运算,不能在这个函数中做单
行的数学运算。
CORR(x1;x2)
返回表达式 X1 和X2 组成的集合的相关系数。在保证所有行中的 X1 和 X2都不为 NULL之后结果
通过
COVAR_POP(x1;x2)/(STDDEV_POP(x1)*STDDEV_POP(x2))得到。
COUNT('DISTINCT/ALL'col)所有非空字段的行数。
COVAR_POP(x1;x2)返回表达式 x1 和 x2 组成的集合的人口协方差结果通过
(SUM(x1*x2)…SUM(x2)*SUM(x1)/n)/n得到,n 是没有 NULL 项的集合的数目。
COVAR_SAMP(x1;x2)返回表达式 X1 和X2 组成的集合的相同协方差。
CUME_DIST 返回一组值中一个值的累积分布。
DENSE_RANK返回有序分组的行中一行的秩,秩是从 1 开始的连续的整数。
GROUP_ID()返回一个唯一数字值用于在 GROUP BY 字句中辨别组。
GROUPING_ID返回一个数字对应于一行的 GROUPING 位矢量。
第 26 页,共 106 页
…………………………………………………………Page 27……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通
MAX('DISTINCT/ALL'col)可以用于任何类型,当用于日期类型时代表最晚。忽略空值。字符类
型时候,比较字符串首字母的 ASCLL 值。
MIN('DISTINCT/ALL'col)可以用于任何类型,当用于日期类型时代表最早。忽略空值。字符类
型时候,比较字符串首字母的 ASCLL 值。
PERCENTILE_CONT 这个函数是一个反分布函数,它假设了一个连续分布模式。
PERCENTILE_DISC 一个反分布函数,它假设了一个离散分布模式。
RANK 返回给定行的秩。秩不必是连续的,因为相同的行有相同的秩。
REGR 这些函数
(REGR_SLOPE;REGR_INTERCEPT;REGR_COUNT;REGR_R2;REGR_AVGX;REGR_AVGY;REGR_SXX
REGR_SYY;REGR_SXY)得到了双集合的普通最小衰减线。
SUM('DISTINCT/ALL'col)返回选择列表项目的总和,只能用于数字。
STDDEV('DISTINCT/ALL'col) 标准方差
STDDEV_POP(col)计算人口标准差并返回人口方差的平方根。
STDDEV_SAMP(col)计算累计标准差并返回例子方差的平方根。
VAR_POP(x)返回提系列数字在去除了 NULL 值之后的人口不同。由
(SUM(x*x)…SUM(x)*SUM(X)/COUNT(x))/COUNT(x)得到。
VAR_SAMP(x)返回一系列数字在去 NULL 值之后的范例不同。由
(SUM(x*x)…SUM(x)*SUM(X)/COUNT(x))/(COUNT(x)…1)得到。
VARIANCE('DISTINCT/ALL'col)偏移方差,返回 COL 的方差。
语法:
select col;group function(col) from table where 条件 group by col;
GROUP BY
必须:出现在查询列表中的一个字段,但没有出现在函数中,那么这个字段必须要出现在 GROUP
BY 中。
可以:出现在 GROUP BY 子句中的字段可以不出现在查询列表中。
先排列,再运算。
WHERE 子句中不能使用 group function。
限制组必须使用 HAVING 子句。
语法:
select col;group function from table
where 条件//可以没有条件限制
group by col
having group_condition //组过滤,在过滤以后,再进行分组计算。
order by col;
组函数嵌套最多只能有两层。
select max(avg(salary))
from employees
group by employee_id;
select * from tab;查询一个用户中的所有表。
第 27 页,共 106 页
…………………………………………………………Page 28……………………………………………………………
资源来自网络,仅供学习! Oracle 从入门到精通
1。9、子查询:
语法:
select col from table
where expr operator (select col from table);
子查询在主查询执行前执行一次。
子查询的结果被用于主查询。
使用规则:
在 WHERE 和 HAVING 子句中都可以使用子查询。
*、子查询必须用括号扩起。
*、子查询应该在比较条件的右边。
*、在子查询中的 ORDER BY 子句不需要,除非执行 TOP…N 分析。
TOP…N 分析:(在一些表里求出最怎么怎么怎么样(最好、做多。。。)的几个人)。
*、对单行子查询使用单行比较操作符,多行子查询使用多行比较操作符。
可以在子查询中使用组函数。
子查询的分类:
单行单列子查询:一定返回一行
单行操作符:》;=;
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!