友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

oracle从入门到精通(PDF格式)-第8部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!


        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 分析:(在一些表里求出最怎么怎么怎么样(最好、做多。。。)的几个人)。  

  *、对单行子查询使用单行比较操作符,多行子查询使用多行比较操作符。  

  可以在子查询中使用组函数。  

   

  子查询的分类:  

  单行单列子查询:一定返回一行  

       单行操作符:》;=;
返回目录 上一页 下一页 回到顶部 0 0
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!