Oracle学习系列4
Oracle学习系列4
************************************************************************************
数据库更新操作:
分类:
查询操作:select
更新操作:insert ,update , delete
为了保存原始的emp表的信息,在进行增删改之前备份词表:
create table emp_bak as select * from emp ; //将表emp结构和数据完整的复制出来
添加数据:
insert into table ( [ col1,col2,col3,. . .] )
values( 值1,值2,值3,...) ;
ex:
insert into emp(enpno, ename, job, mgr, hiredate, sal, comm, deptno)
values (,,,,) ;
select * from emp;//查询记录是否添加
ex:插入新雇员,无领导,无奖金:
insert into emp(enpno, ename, job, hiredate, sal, deptno)
values (,,) ;
ex: 使用to_date()函数将字符串类型的数据变为date类型的数据
insert into emp(enpno, ename, job, mgr, hiredate, sal, comm, deptno)
values (,,to_date(,,) ;
更新数据:
update table
set 字段1=值1 , 字段2=值2 ,... ;//全部修改
update table
set 字段1=值1 , 字段2=值2 ,...
where 修改条件 ;//局部修改(重点推荐)
ex: update emp
;
ex: update emp
set mgr=null
;
ex:将7399,,7788的领导及奖金取消:
update emp
set mgr=null, comm=null
,, ) ;
删除数据:
delete from table ;//全部删除
delete from table
where 条件; //局部删除
ex: delete from emp
;
delete from emp
,, ) ;
where comm is not null ;
************************************************************************************
数据库的事务处理:
事务处理:保证数据的完整性,具有ACID特性
创建一张包含10部门的临时表:
create table emp10
as select * from emp
;
delete from emp10
;
/**
在oracle中,每个连接到数据库上的用户都表示创建了一个session,一个session队数据库所做的修改不会立刻反映到数据库的真实数据之上,当session提交所有的操作之后,数据库才真正做出修改。
提交事务:commit
回滚事务:rollback
>>>>>>>>若事务已经提交了,则肯定无法回滚<<<<<<<<<<
*/
************************************************************************************
死锁:
一个session更新了数据库中的记录,其他session事无法立刻更新的,要等待对方提交后才允许更新
SQL语法练习:
,列出至少有一个员工的所有部门:
a,列出所有部门的员工数量
select deptno ,count(empno)
from emp
group by deptno ;
b,列出部门人数大于1的所有部门编号
select deptno ,count(empno)
from emp
group by deptno having count(empno)> ;
c , 通过部门表,查询出部门的信息即可:
select d.*, ed.cou
from emp d, (
select deptno,count(empno) cou
from emp
group by deptno having count(empno) >
) ed
where d.deptno=ed.deptno ;
,列出新金比Smith多的所有员工:
a,先求出smith的工资:
select sal from emp where ename ='SMITH';
b,以上面的结果为条件,查询所有符合条件的雇员信息
select * from emp
where sal > (
select sal from emp where ename ='SMITH';
) ;
,列出所有员工的姓名及其直接上级的姓名:
select e.ename, m.ename
from emp e, emp m
where e.mgr=m.empno(+);
,列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称:
a,查找mgr=empno的同时还要比较hiredate,先查询编号,姓名
select e.empno, e.ename
from emp e, emp n
where e.mgr=m.empno and e.hiredate < m.hiredate ;
b, 查询部门编号
select e.empno, e.ename ,d.dname
from emp e, emp n, dept d
where e.mgr=m.empno and e.hiredate < m.hiredate
and e.deptno=d.deptno;
,列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门:
select d.deptno, d.dname, e.empno, e.ename
from dept d, emp e
where d.deptno=e.deptno(+);
,列出所有办事员的姓名及其部门名称,部门人数:
select e.ename, d.dname, ed.cou
from emp e, dept d, (
select deptno, count(empno) cou
from emp
group by deptno
) ed
where job='CLERK' and e.deptno=d.deptno and ed.deptno=e.deptno;
,列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数:
select e.job, count(e.empno)
from emp e
where e.job in(
select job
from emp
group by job having min(sal)>
)
group by e.job ;
,列出部门销售部工作的员工的姓名,假定不知道销售部的部门编号:
select ename
from emp
where deptno=(
select deptno from dept
where dname='SALES'
) ;
,列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,公司的工资等级:
select e.empno, e.ename, s.grade, m.empno, m.ename, d.deptno, d.dname, d.loc
from emp e, dept d, emp m, salgrade s
where e.sal>(
select avg(sal) from emp
)and e.deptno=d.deptno
and e.mgr=m.empno(+)
and e.sal between s.losal and s.hisal ;
,列出与“SCOTT”从事相同工作的所有员工及部门名称:
select e.empno, e.ename, e.job, e.sal, d.dname, d.loc
from emp e, dept d
where job =(select job from emp where ename='SCOTT')
and ename !='SCOTT'
and e.deptno=deptno ;
,列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金:
select ename,sal
from emp
where sal IN(
select sal from emp
)
and deptno != ;
,列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金,部门名称:
select e.ename, e.sal, d.dname, d.loc
from emp e, dept d
where e.sal >ALL(
select sal from emp
)
and e.deptno!= and e.deptno = d.deptno ;
,列出每个部门工作的员工数量,平均工资和平均服务期限:
select d.dname, count(e.empno), avg(e.sal), avg(months_between(sysdate,e.hiredate)/) years
from emp e, dept d
where e.deptno=d.deptno
group by d.dname ;
,列出所有员工的姓名,部门名称和工资:
select e.ename, d.dname , e.sal
from emp e,dept d
where e.detpno=d.deptno ;
,列出所有部门的详细信息和部门人数:
select d.* ,nvl(ed.cou ,)
from dept d,(
select deptno dno,count(empno) cou from emp group by deptno
) ed
where d.deptno=ed.dno (+);
,列出各种工作的最低工资及从事此工作的雇员姓名:
select * from emp
where sal IN (
select min(sal) from emp group by job
) ;
,列出各个部门的manager的最低薪金:
select deptno ,min(sal)
from emp
where job='MANAGER'
group by deptno ;
,列出所有员工的年工资,按年薪升序排序:
select ename, ( sal+NVL(comm,))* income
from emp
order by income ;
,查出某个员工的上级主管,并要求这些主管中的年薪不超过3000:
select distinct m.*
from emp e , emp m
;
,求出部门名称中带“S“字符的部门员工的,工资合计,部门人数:
select deptno, sum(sal), count(empno)
from emp
where deptno in(
select deptno from dept where dname like '%S%'
)
group by deptno ;
,给任职日期超过10年的人加薪10%:
update emp
set sal=sal*0.1
> ;
--------------------------------
commit ;
************************************************************************************
SUMMARY
,多表查询,注意产生笛卡尔积
,分组统计,所有统计函数只能在分组语句中使用
,子查询:子查询可以在任意的位置上编写,多表查询,子查询,分组统计一起完成复杂查询
,数据库的增删改
,了解一下事务的处理方式,commit,rollback
Oracle学习系列4的更多相关文章
- Oracle学习系列1-7
Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...
- Oracle学习系列7
Oracle学习系列7 ************************************************************************************ 关联表 ...
- Oracle学习系列6
Oracle学习系列6 ************************************************************************************ 删除约 ...
- Oracle学习系列5
Oracle学习系列5 ************************************************************************************ ,掌握 ...
- Oracle学习系列3
Oracle学习系列3 ************************************************************************************ 多表查 ...
- Oracle学习系列1
两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 300 ; set pag ...
- oracle学习系列之四 (视图)
视图视图是数据库中特有的对象.视图用于存储查询,但不会存储数据(物化视图除外).这是视图和数据表的重要区别.可以利用视图进行查询,插入,更新和删除数据.Oracle有如下四种视图(关系视图,内嵌视图, ...
- oracle学习系列之三 (约束)
主键约束:外键约束:唯一性约束:检查约束:默认值约束 -——————五大约束 一. 主键约束: --创建表的主键约束 create table student (student_id number ...
- Oracle 学习系列之二(会话与事务级临时表和dual表 )
一. 会话临时表 --创建会话临时表create global temporary table tmp_user_session(user_id int, user_name varchar2(20) ...
随机推荐
- 【CSU1808】地铁
ICPCCamp 有 n 个地铁站,用 1,2,-,n 编号. m 段双向的地铁线路连接 n 个地铁站,其中第 i 段地铁属于 ci 号线,位于站 ai,bi 之间,往返均需要花费 ti 分钟(即从 ...
- VM安装mac及dmg文件转换iso
今天心血来潮,突然看见一篇关于swift的入门教程,但是前提是有一台mac啊,于是对于屌丝,就只好装黑苹果或者是虚拟机上运行了,但是呢mac貌似听说(没用过)只能在inter上运行,屌丝的本子偏偏是A ...
- Pycharm使用问题# 行号设置
设置行号就很简单了,在Settings中找到Editor-Appearance,选中Show line numbers即可.
- ios 模拟器不显示系统版本了,后边都是 uuid 了,怎么弄回来?系统升级xcode6.4,模拟器找不到选择了?
当我用El Capitan Beta 下 Xcode6.4版本时候出现了问题 常用的Scheme 选择版本不见了 而在Xcode 7.0 beta 6中显示有 简直就是坑,经过查资料其实是一个bug ...
- sizeof既是关键字,又是运算符(操作符),但不是函数!
sizeof是关键字吗 sizeof是关键字,这一点毋庸置疑.你不能将sizeof定义为任何标识符.查看C语言标准文档里的说明: sizeof是运算符(操作符)吗 C语言中,sizeof是运算符(操作 ...
- javascript数组常用方法汇总
1.join()方法: Array.join()方法将数组中所以元素都转化为字符串链接在一起,返回最后生成的字符串.也可以指定可选的字符串在生成的字符串中来分隔数组的各个元素.如果不指定分隔符,默认使 ...
- linux笔记:用户和用户组管理-用户配置文件
用户信息文件(/etc/passwd): 影子文件(/etc/shadow) 组信息文件(/etc/group)和组密码文件(/etc/gshadow):
- linux驱动初探之字符驱动
关键字:字符驱动.动态生成设备节点.helloworld linux驱动编程,个人觉得第一件事就是配置好平台文件,这里以字符设备,也就是传说中的helloworld为例~ 此驱动程序基于linux3. ...
- Java:Collection List Set
Java:集合 常见集合:List Set List 特点:元素是有序的,而且元素可以重复,因为该集合体系有索引. 常见的三个子类:ArrayList.LinkedList.Verctor List集 ...
- SqlServer和MySQL游标学习
一 sqlserver游标使用 /*** 游标的使用 讲了这个多游标的优点,现在我们就亲自来揭开游标的神秘的面纱. 使用游标的顺序: 声名游标.打开游标.读取数据.关闭游标.删除游标. 1.3.1 ...