玩转oracle查询部分

  • 格式:ppt
  • 大小:55.00 KB
  • 文档页数:15

下载文档原格式

  / 15
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

玩转oracle

在from字句中使用子查询 请思考:如何显示高于自己部门平均工资的员工信息 1.查询出各个部门的平均工资和部门号 Select deptno,avg(sal) mysal from emp group by deptno; 2.把上次查询看做是一张子表 Select a2.ename,a2.sal,a2.deptno,a1.mysal From emp a2 ,(Select deptno,avg(sal) mysal from emp group by deptno) a1 where a2.deptno=a1.deptno and a2.sal>a1.mysal ;
玩转oracle





查看表结构 Sql>desc dept; 查询所有列 Select * from dept; 打开显示操作时间开关(set timing on;) 疯狂复制(insert into users (userid,username,userpss) select * from users;) 查询指定列 Select ename,sal,job,deptno from emp; 如何取消重复行 Select distinct deptno ,job from emp; ?查询SMITH的薪水,工作,所在部门 答案:select sal,deptno ,job from emp where ename=„SMITH‟; 注意oracle对查询条件大小写区分;

玩转oracle
分页查询 按雇员的id升序取出

玩转oracle







说明: 在实际应用中经常需要执行复杂的数据统计,经常需要显示多张表的 数据,现在我们给大家介绍较为复杂的select语句 数据分组 max ,min, avg,sum,count ?如何显示所有员工中最高工资和最低工资 ?显示所有员工的平均工资和工资总和 ?计算共有多少员工 扩展要求: ?请显示工资最高的员工的名字,工作岗位 select ename,sal from emp where sal=(select max(sal) from emp) ?请显示工资高于平均工资的员工信息 Select * from emp where sal>(select avg(sal) from emp);
玩转oracle
在from 字句中使用子查询 这里需要说明在当from字句中使用子查询时, 该子查询会被当做一个视图来对待,因此页叫做 内嵌式图,当在from字句中使用子查询时,必须 给子查询指定别名。

给表起别名不能加 “AS”
之后开始oracle分页的学习

玩转oracle
Hale Waihona Puke Baidu
玩转oracle
玩转oracle




对分组数据进行总结 1.分组函数只能出现在选择列表、having、order by子 句中 2.如果在select语句中同时包含有group by having ,order by 3.在选择列中如果有列,表达式,和分组函数,那么这些 列和表达式必须有一个出现在group by 字句中,否则就 会出错
玩转oracle
玩转oracle教程




介绍 在我们讲解的过程中我们利用scott用户存在的几张表 (emp,dept)为大家演示如何使用select语句,select 语句是在软件编程中非常有用,希望大家好好账务 Emp表字段 EMPNO(雇员编号), ENAME(雇员名称), JOB(职位) ,MGR(上司) HIBERNATE (入职时 间),SAL(收入), COMM(奖金), DEPTNO(部门编 号) Dept表字段 DEPTNO(部门编号),DNAME(部门名 称),LOC(地点)
玩转oracle
玩转oracle
玩转oracle
玩转oracle
玩转oracle
玩转oracle
玩转oracle
玩转oracle
玩转oracle
玩转oracle
玩转oracle
玩转oracle
玩转oracle
玩转oracle
玩转oracle
玩转oracle
玩转oracle
玩转oracle



什么是子查询 子查询是指潜入在其他sql中的select语句 也叫做嵌套子查询 单行子查询 单行子查询指只返回一行数据的子查询语句: 请思考:如何显示与SMITH同一部门的所有员工? 1.查询SMITH的部门号2.查询和该部门号项目的所有员 工 多行子查询 多行子查询指返回多行数据的子查询 请思考:如何查询和部门10的工作相同的雇员名字岗位、 工资、部门号。
玩转oracle



Group by 和having字句 Group by用于对查询结构分组统计 Having字句用于限制分组显示结果
?如何显示每个部门的平均工资和最高工资 select deptno ,avg(sal) ,max(sal) from emp group by deptno;(分组字段要出现在查询列中) ?显示每个部门的每种岗位的平均工资和最低工资 select deptno,avg(sal),max(sal),job from emp group by deptno,job; ?显示平均工资低于2000的部门号和它的平均工资 select deptno,avg(sal) ,max(sal) from emp group by deptno having avg(sal)>2000;

如;select deptno,avg(sal) ,max(sal) from emp group by deptno having avg(sal)<2000;
玩转oracle
说明: 多表查询时指基于两个和两个以上的表或是视图的查询, 在实际应用中,查询单个表可能不能满足你的需求 ?显示雇员名,雇员工资及所在部门的名字【笛卡尔积】 ?如何显示部门号为10的部门名、员工名、工资 ?显示各个员工的姓名、工资、以及工资的级别 扩展要求: ?显示雇员名,雇员工资以及所在部门的名字,并按部门排 序(排序列不一定出现在查询列中)

玩转oracle
自连接 自连接是指在痛一张表的连接查询 ?显示某个员工的上级领导的姓名 比如显示“FORD”的上级领导

Select worker.ename,boss.ename From emp worker , emp boss where worker.mgr=boss.empno and worker.ename= “FORD”;
玩转oracle
使用算术表达式 ?显示每个雇员的工资 使用列的别名 Select ename “姓名”,sal*12 as “年收入” from emp; 如何处理null值 使用nvl函数来处理 计算员工一年的工资 Select sal *12 +nvl( comm,0)*12 “年工资” ename from emp; 如何连接字符串(||) Select ename || „is a‟ || job from emp;
玩转oracle
玩转oracle
玩转oracle
玩转oracle
玩转oracle

玩转oracle





使用where 子句 ?如何显示工资高于3000的员工 ?如何查找1982.1.1后入职的员工 注意:文字与格式字符串不匹配的问题(1-2月-98) ?如何显示工资在2000到2500的员工情况 如何使用like操作符 %:表示任意0到多个字符 -:表示单个字符 ?如何显示首字符为S的员工姓名和工资 ?如何显示第三个字符为大写O的所有员工的姓名和工资 在where 条件中使用in 注意:批量处理数据要用in ?如何显示empno为123,456,800…的雇员情况 使用is null 操作符 ?如何显示没有上级的雇员情况
玩转oracle
使用逻辑操作符号 ?查询工资高于500或是岗位为MANAGER的雇员,同时 还要满足他们的姓名首写字母为大写的J select * from emp where (sal>500 or job=„MANAGER‟ ) and ename like „J%‟ 使用order by 字句 ?如何按照工资的从低到高的顺序显示雇员的信息 ?按照部门号升序而雇员工资降序排列 使用列的别名排序 Select ename,(sal +nvl(comm,0))*12 as “年薪” from emp order by ”年薪”;