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) ...
随机推荐
- [bzoj3555]企鹅QQ(hash)
3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1645 Solved: 616[Submit][Statu ...
- LTE Module User Documentation(翻译9)——Using the EPC with emulation mode
LTE用户文档 (如有不当的地方,欢迎指正!) 15 Using the EPC with emulation mode(使用仿真方式的 EPC) 在上一节中,我们使用点对点链路连接基站和服务 ...
- MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)
前面讲了模态对话框和非模态对话框,本节来将一种特殊的对话框--属性页对话框. 属性页对话框的分类 属性页对话框想必大家并不陌生,XP系统中桌面右键点属性,弹出的就是属性页对话框,它通过标签切换各个页面 ...
- 插件框架(Plugin Framework)
HOW TO MAKE PLUGIN FRAMEWORK 插件系统构建 Dissect Eclipse Plugin Framework
- [SoapUI] SoapUI JDBC REST 连接 Netezza
How to Connect to Server 1. Apply accounts that has permission to access Netezza system for host acc ...
- UIApplication sharedApplication详细解释-IOS
iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: int UIApplicationMain ( int argc, char *a ...
- SG函数 专题练习
[hdu1536][poj2960]S-Nim 题意 题意就是给出一个数组h,为每次可以取石子的数目. 然后给你n堆石子每堆si.求解先手能不能赢? 分析 根据\(h\)数组预处理出\(sg[i]\) ...
- 【apache】yum 安装Apache(Centos 6.5)
一.首先在系统上面查询一下是否已经安装了apache [Apache在linux系统里的名字是httpd] rpm -qa httpd 如果有返回的信息,则会显示已经安装的软件.如果没有则 ...
- JAVA中怎么处理高并发的情况
一.背景综述 并发就是可以使用多个线程或进程,同时处理(就是并发)不同的操作. 高并发的时候就是有很多用户在访问,导致系统数据不正确.糗事数据的现象.对于一些大型网站,比如门户网站,在面对大量用户访问 ...
- cookie的使用
cookie的使用 1.创建cookie对象: function addCookie(name, value) { var path = filterRoot(); var cookieString ...