给大家带来的一篇关于Oracle数据库相关的电子书资源,介绍了关于oracle12c、从零开始学方面的内容,本书是由清华大学出版社出版,格式为PDF,资源大小229.1 MB,刘增杰编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:9.4。
Oracle 12c从零开始学 电子书封面
比较基础,书上说在是64位的win7系统 上的实验
刘增杰、刘玉萍编著的《Oracle12c从零开始学 (视频教学版)》主要内容包括Oracle的安装与配置 、数据库的创建、数据表的创建、数据类型和运算符 、Oracle函数、查询数据、数据表的操作(插入、更 新与删除数据)、游标、存储过程、视图、触发器、 用户管理、数据备份与还原、日志以及性能优化等。*后通过两个综合案例的数据库设计,进一步讲述 Oracle在实际工作中的应用。重点介绍Oracle安装与 配置、数据类型和运算符以及数据表的操作。本书注 重实战操作,帮助读者循序渐进地掌握Oracle中的各项技术。
本书共有480个实例,还有大量的经典习题。配书压缩包中赠送了近20小时培训班形式的视频教学录像 ,详细讲解了书中每一个知识点和每一个数据库操作 的方法和技巧。同时,配书压缩包中还提供了本书所有例子 的源代码,读者可以直接查看和调用。配书压缩包需要网上下载。
本书适合Oracle数据库初学者、Oracle数据库开 发人员和Oracle数据库管理员,同时也能作为高等院 校相关专业师生的教学用书。
查询现有数据库:select name from V$database;
解锁用户scott:alter user scott account unlock;
普通用户连接:conn scott
默认密码:tiger
普通管理员:system/system
超级管理员:Sys/sys
断开连接:disconnect
当前用户:show user
查看该用户下的所有对象:select * from tab;
dual表是oracle内虚拟的一个表,妙用很多
单行函数
模糊查询
%表示零个或多个字符
_ 表示一个字符
对于特殊符号可使用ESCAPE标识符来查找
select * from emp where ename like '%*_%' escape '*'
上面的escape表示*后面的那个符号不被当成特殊字符处理,就是查找普通的_符号
Scott用户自带的表结构
雇员表EMP(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO)
部门表dept(deptno,dname,loc)
工资等级表salgrade(grade,losal,hisal)
奖金表BONUS(ENAME,JOB,SAL,COMM)
单表查询example
选择在部门30中员工的所有信息
select * from emp where deptno=30;
列出职位为(manager)的员工的编号,姓名
select empno,ename from emp where job='MANAGER'
找出奖金高出工资的员工
select * from emp where comm>sal;
找出每个员工奖金和工资的总和
select ename,comm+sal from emp;
找出部门10中的经理(MANAGER)和部门20中的普通员工(CLERK);
找出部门10中既不是经理也不少普通员工,而且工资大于2000的员工
SELECT * FROM EMP WHERE DEPTNO=10 AND JOB NOT IN ('MANAGER','CLERK') AND SAL>=2000;
找出有奖金的员工的不同工作
select distinct job from EMP where comm is not null and comm>0;
找出没有奖金或者奖金低于500的员工
select * from emp where comm<500 or comm is null;
显示雇员姓名,根据其服务年限,将最老的雇员排在最前面
select ename from emp order by hiredate;
字符函数
upper,lower(大写,小写)
initcap(将每个能识别的单词的第一个字母大写,其他小写,中间出息中文,空格都将视为一个单词)
concat('a','b'); 'a'||'b' 连接俩字符串
length()字符串长度
substr('abcde',length('abcde')-2,2) 从第三个字符开始取‘abcde’的2个字符,结果为'cd',第三个值可缺省
replace(ename,'A',a)将ename的所有A换为a
instr('Hello world','or')第二个字符串在第一个字符串中的位置(结果为8)
lpad('Smith',10,'*') *****Smith
rpad('smith',10,'*') Smith*****
trim(' Mr Smith ')过滤首尾空格
trim([BOTH|LEADING|TRAILING] '*' from '****ab***') ab
数值函数
round(419,-1) 精确到小数点后多少位,进行四舍五入,-1的结果为420
round(412.313,2)结果为412.31
mod(5,4) 取余,1
trunc类似round,截取时不进行四舍五入
日期函数
months_between(date1,date2),返回相差的月数date1-date2
add_months(to_date('19910522','yyyymmdd'))增加一个月
next_day(sysdate,'星期一')下一个星期一的日期
last_day(sysdate)对应月份的最后一天
转换函数
//sysdate---2015-03-16
to_char(sysdate,'yyyy')2015
to_char(sysdate,'fmyyyy-mm-dd')2015-3-16
to_char(sysdate,'yyyy-mm-dd')2015-03-16
select to_char(sal,'L999,999,999')from emp; ¥800 ¥3,000
to_char(sysdate,'D')返回这是这周的第几天,注意这里返回的是美国习惯,即周日是第一天
to_number('13')
to_date('20051103','yyyymmdd')
通用函数
nvl(字段名,‘x’)该字段若为空值时,显示为X
nullif(表达式1,表达式2)如果表达式1等于表达式2,则返回空值,否则返回表达式1的值
nvl2(表达式,不为空设值,为空设值)
coalesce(表达式1,表达式2,表达式3)依次考察各参数表达式,遇到非null值即停止并返回该值
select empno,ename,sal,case deptno when 10 then '财务部' when 20 then '研发部' when 30 then '销售部' else'未知部门' end
部门 from emp;
select empno,ename,sal,decode( deptno, '财务部', 20,'研发部' ,30,'销售部','未知部门' )部门 from emp;
练习:
1.找出每个月倒数第三天受雇的员工(如:2009-5-29)
select * from emp where hiredate+2=last_day(hiredate);
2.找出30年前的雇的员工
select * from emp where hiredate<=add_months(sysdate,-30*12);
3.所有员工名字前加上Dear ,并且首字母大写
select * from 'Dear '|| initcap(ename) from emp;
4.找出姓名为5个字母的员工
select * from emp where length(ename)=5;
5.找出姓名中不带R这个字母的员工
select * from emp where ename not like '%R%';
6.显示所有员工的姓名的第一个字
select substr(ename,1,1) from emp;
7.显示所有员工,按名字第一个字母降序排列,若相同,则按工资升序排列
select ename,sal from emp order by substr(ename,1,1) desc,sal;
8.假设一个月为30天,找出所有员工的日薪,不计小数
select ename,round(sal/30)daily_sal from emp;
9.找到2月受雇的员工
select * from emp where to_char(hiredate,'fmmm')='2';
10.列出员工加入公司的天数(四舍五入)
select ename,round(months_between(sysdate,hiredate)*30)from emp;
11.分别用case和decode函数列出员工所在的部门,deptno显示‘部门10’,deptno=20显示‘部门20’否则为‘其他部门’
select ename,case deptno when 10 then'部门10' when 20 then '部门20' else '其他部门' end 部门 from emp;
select ename,decode(deptno,10,'部门10',20,'部门20','其他部门')部门 from emp;
分组函数
count
如果数据库表没有数据,count(*)返回的不是null,而是0
avg,max,min,sum
用avg算均值时,若为null,不算均数,如emp表中除了1400,300,500,0外,都为空值,算出来的值为550,此时可用nvl()函数强制分组函数处理空值
select avg(nvl(comm,0)) from emp;
group by 不允许出现在where中(用having)
select deptno,avg(sal) from emp group by deptno;
having 字句
select deptno,job,avg(sal) from emp where hiredate >=todate('1981-05-01','yyyy-mm-dd') group by deptno,job having avg(sal) >1200 order by deptno,job;
分组函数嵌套
select max(avg(sal)) from emp group by deptno;
练习:
1.统计各部门下工资大于500员工的平均工资表
select avg(sal) where sal>500 group deptno;
2.统计各部门下平均工资大于1600的部门
select deptno,avg(sal) from emp group by deptno having avg(sal)>1600;
3.算出部门30中薪水最高的员工薪水
select max(sal) from where deptno=30;
4.算出部门30中薪水最高的员工姓名
select ename from emp where sal=(select max(sal) from where deptno=30);
5.算出每个职位的员工数和最低工资
select job,min(sal),count(*)from emp group by job;
6.算出每个部门,每个职位的平均工资和平均奖金(平均值包括没有奖金)如果平均奖金大于300,显示'奖金不错',如果平均奖金100到300,显示'奖金一般',如果平均奖金小于100,显示“基本没有奖金”,按部门编号降序,平均工资降序排列
select deptno,job,avg(sal)平均工资,avg(nvl(comm,0))平均奖金,case when avg(nvl(comm,0))>=300 then '奖金不错' avg(nvl(comm,0))>100 and avg(nvl(comm,0))<300 then '奖金一般' else '基本没有奖金' end 奖金状况 from emp group by deptno,job order by deptno desc, avg(sal) desc;
7.列出员工表中每个部门的员工数,和部门no
select deptno,count(*) from emp group by deptno;
8.得到工资大于自己部门平均工资的员工信息
select * from emp e1,(select deptno,avg(sal)avgsal from emp group by deptno)e2 where e1.deptno=e2.deptno and e1.sal>e2.avgsal;
9.分组统计每个部门下,每种职位的平均奖金和总工资(包括奖金)
select deptno,job,avg(nvl(comm,0)),sum(sal+nvl(comm,0)) from emp group by deptno,job;
以上就是本次介绍的Oracle数据库电子书的全部相关内容,希望我们整理的资源能够帮助到大家,感谢大家对码农之家的支持。
上一篇:HTML5+CSS3+JavaScript从入门到精通
展开 +
收起 -
码农之家
Copyright 2018-2020 www.xz577.com 码农之家
版权投诉 / 书籍推广 / 赞助:520161757@qq.com
有了一定的SQL基础后,就要尽可能的了解Oracle的体系结构,这就涉及到了Oracle管理的内容了。 我学习的时候,机械工业出版社的《Oracle9i DBA手册》这本书对我的帮助挺大。或许现在都出11g版本的了吧。 Oracle公司的《Oracle Concepts》是非常棒的书,对了解Oracle体系结构很有好处。每个Oracle版本都有对应的版本,可以认真多读几次,每次都会有新的收获。
做数据库维护的时候,备份与恢复是不得不接触的内容。于是学习Oracle备份与恢复技术也是必然的事情。 数据量少的,比如20、30多个G,还可以考虑用exp/imp来备份与恢复,但数据量大了,这种方法就根本不适合了。 大数据量情况下,Oracle 建议用RMAN来进行数据的备份与恢复。目前市场上有很多数据库备份恢复软件,其实好多也是后台调用RMAN。清华大学出版社出版的《Oracle9i RMAN 备份与恢复技术》是一本非常不错的介绍RMAN的书。
有了以上的基础,可以说已经入门了,对遇到的一些初级Oracle问题将不再束手无策。然而我们的学习之路仍然还很漫长。我们的用户可能经常抱怨数据库运行缓慢。这时,如果有一定的优化知识,那就好办了。有时你会看到优化前需要运行几个小时的作业,优化后也许几秒钟就能完成!
1、orcale不区分大小写,标志符(表名,列名,别名等)是区分大小写的;标志符没有加双引号,默认自动转换为大写执行
2、orcale中双引号作用:转义非法标志符为合法,强制标志符原始大小写执行
3、oracle中日期类型没有常量这一说,默认日期字符串格式dd-mon-rr
4、oracle空值和任何值作比较运算结果一定为假,oracle数据库没有布尔值true和false
5、in(值列表):如果表达式等于值列表中的任意一个值,就为真;not in(值列表):表达式不等于值列表中的任意一个值,才为真
6、like:模糊查询 not like 逻辑非,通配符%代表0到多个任意字符 _代表1个任意字符
7、排序子句:order by 排序表达式 asc升序(不写默认) desc降序,排序操作非常耗费资源,大量数据排序,必须提前做好数据库的优化
8、单行函数,每次执行函数,传入一行列值,返回一个结果;多行函数,每次执行函数,传入多行列值,返回一个结果