三、子查询和常用函数

一、子查询

子查询在selectupdatedelete语句内部可以出现select语句。内部的select语句结果可以作为外部语句中条件子句的一部分,也可以作为外部查询的临时表。子查询类型有:

1、  单行子查询:不向外部返回结果,或者只返回一行结果。

2、  多行子查询:向外部返回零行、一行或者多行结果。

 

案例1:查询出销售部(sales)下面的员工信息。

SELECT * FROM EMP  WHEREDEPTNO=(SELECT DEPTNO FROM DEPT WHERE DNAME='SALES')

 

案例2any子查询。

解析:<any:比子查询结果中任意的值都;>any表示比子查询结果中最小的还大

SELECT ENAME,JOB,SALFROM EMP  WHERE SAL<ANY (SELECT SALFROM EMP WHERE JOB='SALESMAN')

 

案例3All子查询

解析:<all:比最小值还小;>all比子查询结果最大值还要大

SELECT ENAME,JOB,SAL FROM EMP WHERE SAL>ALL (SELECT SAL FROM EMP WHERE JOB='SALESMAN')

 

总结:【ANY

             “比任意一个销售员工资低”==“比最高销售员工资低”;

        “比任意一个销售员工资高”==“比最低销售员工资高”;

         ALL

           “比所有销售员工资都低”==“比最低销售员工资低”;

           “比所有销售员工资都高”==“比最高销售员工资高”;

 

二、Oracle中的位列

Oracle的表的使用过程中,实际表中还有一个附加的列,称为伪列。伪列就像表中的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改操作。接下来学习两个伪列:rowid rownum

注:ROWNUMROWID不同,ROWID是插入记录时生成,ROWNUM是查询数据时生成。ROWID标识的是行的物理地址。ROWNUM标识的是查询结果中的行的次序。

         案例:查询出表EMP中第5条到第10条之间的记录(可以用于SQL分页语句)

         Select * from

(select rownum r, e.* from emp  e  whererownum<=10) where r>5

 

三、Oracle函数

Oracle数据库中主要使用两种类型的函数:

1、  单行函数:对每一个函数应用在表的记录中时,只能输入一行结果,返回一个结果。例如:mod(x,y)放回x除以y的余数。

a、  字符函数:对字符串操作

b、  数字函数:对数字进行计算,返回一个数字

c、  转换函数:可以将一种数据类型转换为另外一种数据类型;

d、  日期函数:对日期和时间进行处理。

2、  聚合函数:聚合函数同时可以对多行数据进行操作,并返回一个结果。比如sum(x)返回结果集中x列的总和。

 

字符函数

         字符函数接受字符参数,这些参数可以是表中的列,也可以是一个字符串表达式。下表列出了常用的字符函数:

数字函数

         数字函数接受数字参数,参数可以来自表中的一列,也可以是一个数字表达式。

 

 

 

日期函数

         日期函数对日期进行运算。常用的日期函数有:

1、  add_months(d,n),在某一个日期d上,加上指定的月数n,返回计算后的新日期。

d表示日期,n表示要加的月数。

eg:  select sysdate,add_months(sysdate,5) fromdual;

2、  last_day(d),返回指定日期当月的最后一天。

Select sysdate,last_day(sysdate) from dual;

3、  round(d,’fmt’),返回一个以fmt为格式的四舍五入日期值,d是日期,fmt是格式模型。

Select sysdate,round(sysdate),round(sysdate,’day’), round(sysdate,’month’), round(sysdate,’year’) from dual;

4、  extract(fmt from d),提取日期中的特定部分。

Fmt为:yearmonthdayhourminutesecondYearmonthday既可以date类型匹配,也可以与timestamp类型匹配;但是hourminutesecond必须与timestamp类型匹配。

Select sysdate “date”,extract(year from sysdate) “year”, extract(month from sysdate) “month”,extract(hour from systimestamp) “hour” from dual;

 

转换函数

转换函数将值从一种数据类型转换为另外一种数据类型。常用有:

1、  to_char(d,’fmt’):把日期和数字转换为指定格式的字符串。

select to_char(sysdate,’yyyy””mm””dd””HH24:MI:SS’)“DATE” from dual;

2、  to_date(s,’fmt’):把一个字符串以fmt格式转换为一个日期类型。

selectto_date('2013-09-04 14:17:50','yyyy-mm-dd hh24:mi:ss') "date" fromdual;

3、  to_number(x,’fmt’):把一个字符串以fmt格式转换为一个数字。

Select to_number(‘-$12,321.46’,’$99,999.99’)“num” from dual;

 

其他单行函数

1、  nvl(x,value):如果x为空,返回value,否则返回x

2、  nvl(x,value1,value2):如果x非空,返回value1,否则返回value2

 

聚合函数

         聚合函数同时对一组数据进行操作,返回一行结果,比如计算一组数据的总和,平均值等。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值