Oracle学习记录 七 继续接六的

下面是转换函数

  1. to_char

select to_char(sysdate,‘yyyy‘) from dual;

select to_char(sysdate,‘fmyyyy-mm-dd‘) from dual;

select to_char(sysdate,‘yyyy-mm-dd‘) from dual;

select to_char(sysdate, ‘DDD‘) from dual;    一年中的第几天

select to_char(sysdate, ‘DD‘) from dual;    一月中的第几天

select to_char(sysdate, ‘D‘) from dual;    一星期中的第几天,这并不是星期几,因为第一天是从周日算的

其中有fm代表去掉多余的0和空格

http://zhidao.baidu.com/link?url=VtGQ0DbPYOmlk99vhz_Nm2O4bL26srNg24q4nZHgzYCYez22AuVM8mujT6lPvguyTgxbIKk1LsCmzzJZbQpiv_

http://www.cnblogs.com/tider/archive/2009/05/07/1451296.html

2. to_number

select to_number(‘44‘)+to_number(‘33‘) from dual;

3. to_date

select to_date(‘20150305‘, ‘yyyymmdd‘) from dual;

下面是通用函数

  1. nvl()函数

select nvl(comm, 0) from emp;

这在上一章用过了,就是comm为null就返回第二个参数,如果不为null就返回第一个参数,如果两个参数都为null

就返回null。

2. nvl2()函数

select ename, nvl2(comm, comm+sal, sal) from emp;

如果第一个参数是null就返回第三个参数,如果第一个不为null,就返回第二个参数。

3. nullif()函数

select nullif(1,1) from dual;

select nullif(1,2) from dual;

如果第一个和第二个参数相等,则返回null,否则返回第一个参数;

4. coalesce()函数

依次查看,遇到不为null的参数就立即返回这个参数

select ename, coalesce(sal+comm, sal, 0) from emp;

这和上面用nvl实现的差不多。

5. case表达式

select empno, ename, case deptno

when 10 then ‘caiwubu‘

when 20 then ‘yanfabu‘

when 30 then ‘xiaoshoubu‘

else ‘qitabu‘

end bumen

from emp;

6. decode()函数

这也是条件函数和case差不多,一个是函数一个是关键字

select empno, ename, decode(deptno, 10, ‘caiwubu‘, 20, ‘yanfabu‘, 30, ‘xiaoshoubu‘, ‘qitabu‘) bumen from emp;

对照5的例子就明白这个了。

http://www.cnblogs.com/juddhu/archive/2012/03/07/2383101.html

7. 找出每个月倒数第三天雇用的员工

select ename from emp

where hiredate=(last_day(hiredate)-2);

8. 找出雇佣超过30年的员工

select ename from emp

where hiredate<add_months(sysdate,-30*12);

9. 每个员工名字前面加上Dear并且名字首字母大写

select (‘Dear‘ || ‘ ‘ || initcap(ename)) "New name" from emp;

这里"New name"不能用单引号,我现在发现了,如果这个字符串是当属性用的,就要用双引号,

如果是要当数据用的,就用单引号,好像是。

10. 找出姓名为5个字母的员工

select ename from emp

where length(ename)=5;

11. 找出名字不带R的员工,这个我看到的时候还想什么子字符串查找之类的,比如instr这些呢

select ename from emp

where ename not like ‘%R%‘;

12. 显示所有员工名字的第一个字母

select substr(ename,0,1) from emp;

13. 显示所有员工,名字按降序排列,如果相同,按工资升序排列

select * from emp

order by ename desc, sal asc;

14. 按一个月30天算,计算员工一天的薪水,不计小数

select trunc(sal/30,0) from emp;

15. 找出二月份受雇的员工

select ename from emp

where to_char(hiredate,‘fmmm‘)=‘2‘;

16. 计算员工加入公司的天数,这个比较有意思了,我当时还想什么一年多少天之类的,后来在网上查了一下,得记住

日期可以直接进行加减操作得到天数的。

select sysdate-hiredate from emp;

如果不要小数

select round(sysdate-hiredate,0) from emp;

http://www.myexception.cn/oracle-management/1245803.html

下面进行分组函数练习。

  1. count()

计算部门10有多少人

select count(*) from emp

where deptno=10;

2. avg/max/min/sum

select round(avg(sal), 2) from emp

where deptno=30;

select max(sal) from emp

where deptno=20;

select min(sal) from emp;

select sum(sal) from emp;

3. group by

按部门计算总工资

select deptno, sum(sal) from emp

group by deptno;

按部门和上级领导的编号计算总工资

select mgr, deptno, sum(sal) from emp

group by mgr, deptno;

4. having

计算每个部门每个工作的员工在1981年5月1日后雇佣的平均工资。。。。这个我还不会描述了。。。

select deptno, job, avg(sal) from emp

where hiredate>=to_date(‘19810501‘,‘yyyymmdd‘)

group by deptno, job

having avg(sal)>1200

order by deptno, job;

这里我遇到一个问题,还没有解决,先记录下来

select job, avg(sal)

from emp

group by job;

这样就可以,但是下面就不行了

select job, max(avg(sal))

from emp

group by job;

这里就需要大神帮忙看看怎么回事了,要不然自己就慢慢解决。

时间: 2024-10-25 02:22:20

Oracle学习记录 七 继续接六的的相关文章

Oracle学习记录 六 又一本学习资料练习

学习过最简单的几种语句了,也安装过了几次数据库,本来在看那个高级编程的,但是还有一本入门的没看,就先看了再说, 多练习,熟悉掌握最基本的操作. 我以前登录的时候都是用conn回车,然后再输入密码,这个文档第一个就介绍了另一种登录方法. conn scott/xx 这样就直接登录了,/前是用户名,/后是密码 conn sys/xx as sysdba 这个就是用管理员登录 2. 然后是把刚才输入的sql保存成文件用.sql后缀 select * from emp; save /home/oracl

玩转oracle学习第七天

 1.上节回顾 2.PL/SQL的进阶 3.oracle的视图 4.oracle的触发器 目标: 1.掌握PL/SQL的高级用法(能编写分页过程模块,下订单过程模块...) 2.会处理oracle常见的例外 3.会编写oracle各种触发器 4.理解视图的概念并能灵活使用视图 任何计算机语言都有各种控制语句,在PL/SQL中也存在这样的控制结构 在本部分学习完毕后,希望大家达到: 1)使用各种if 2)使用循环结构 3)使用控制语句 goto 和 null; 条件分支语句: if then

[转]Oracle学习记录 九 Prc C学习

经过前面的了解,现在想用C语言来编程了,搜索了很多东西,后来决定先用Pro C来进行学习 在安装完Oracle数据库后就可以进行编程了,里面有一个命令proc就是对程序进行预编译的. 在这记一下,这是一个学习PL/SQL的网站,挺好的 http://www.cnblogs.com/huyong/archive/2012/07/30/2614563.html 创建用户是 create user xx identified by xx account unlock; grant connect, r

Oracle学习笔记七 锁

锁的概念 锁是数据库用来控制共享资源并发访问的机制. 锁用于保护正在被修改的数据 直到提交或回滚了事务之后,其他用户才可以更新数据 对数据的并发控制,保证一致性.完整性.             并行性 -允许多个用户访问同一数据 一致性 - 一次只允许一个用户修改数据 完整性 - 为所有用户提供正确的数据.如果一个用户进行了修改并保存,所做的修改将反映给所有用户 锁的类型 行级锁:对操作的数据行进行锁定,防止其他用户(连接)进行修改. 表级锁:对整个表进行锁定. 行级锁 对正在被修改的行进行锁

Oracle学习记录 九 Prc C学习

经过前面的了解,现在想用C语言来编程了,搜索了很多东西,后来决定先用Pro C来进行学习 在安装完Oracle数据库后就可以进行编程了,里面有一个命令proc就是对程序进行预编译的. 写一个test.pc然后 proc iname=test.pc oname=test.c 但是我这怎么也不行,一直出问题 后来我用 proc PARSE=NONE CODE=KR_C LINE=YES INAME=test.pc MODE=ORACLE DBMS=V8 UNSAFE_NULL=YES 这下才生成了t

Oracle学习记录 一 基本指令练习

使用的是Oracle 11g 之前其实已经弄过几下,不过没有太多学习,现在开始重新好好的学习一下,包括SQL语句等. 先从安装后开始, 我安装了客户端sqldeveloper,但是进入后需要连接,这我都忘了怎么弄了,开始查看资料. 点了新建连接后,弹出一个对话窗口,连接名我用的是sys,用户名也用的是sys,口令就是在安装数据库 的时候写的密码,然后在下面"角色"这改成了SYSDBA,下面"SID"填写的是orcl 这样就以数据库管理员身份登录了. 因为我安装完数据

Oracle学习记录 五 Centos6.4 64bit下安装oracle

错误记录: Invalid source path '../stage/Components/oracle.jdk/1.5.0.17.0/1/DataFiles' specified for unzip. 这个错误应该是我只解压了第一个压缩包,没有解压第二个. 2. 还有一个问题就是按照开始安装的时候,说什么color的问题,这个我在网上看了些,不过,我直接把系统登出一次,重新用oracle登录就没事了. 3. [INS-32021] Insufficient disk space on thi

oracle学习篇七:约束

----约束------- --1.主键约束--唯一标识,不能为空,通常用于ID--1>创建主键create table person(id varchar2(20) primary key,name varchar2(50),birthday date,sex varchar2(2) default '男');insert into person(id,name,birthday,sex)values(1,'zhangsan',to_date('1988-05-11','yyyy-mm-dd'

Oracle学习笔记(七)

九.高级查询(分组,子查询)查询升级版: 需要用到三张表员工表: desc emp EMPNO 员工号 ENAME 员工姓名 JOB 员工职位 MGR 老板员工号 HIREDATE 员工入职日期 SAL 员工月薪 COMM 员工奖金 DEPTNO 员工所在部门部门号 查看当前用户: show users; select * from emp;部门表: desc dept deptno 部门号 dname 部门名称 LoC 部门地点 select * from dept;工资级别表: desc s