2018.5.17 oracle函数查询
--*********函数***********
--1、显示当前日期
select sysdate from dual;
--2、显示当前日期,格式为****年月日,别名为hday
select to_char(sysdate,'yyyy"年"mm"月"dd"日"') hday from dual;
--3、编写一个查询,显示姓名以J、A或M开始的所有员工的姓名(第一个字母大写,其余字母小写)和姓名的长度,给每列一个合适的标签;
select initcap(e.ename) lname,length(e.ename) len
from emp e
where substr(upper(ename),0,1) in('J','A','M');
或者:
select concat(substr(ename,1,1), lower(substr(ename,2))) from emp where substr(ename,1,1) in('J','A','M');
--4、计算每位员工截止到当前时间入职的星期数,别名为weeks_worked。按聘用的星期数对结果进行排序。该星期数舍入到最接近的整数。同时显示员工的名字;
select e.ename,round((sysdate-e.hiredate)/7) as weeks_worked
from emp e;
--5、计算每位员工截止到当前时间入职的月数,别名为months_worked。该星期数舍入到最接近的整数。同时显示员工的名字。
select e.ename,round(months_between(sysdate,e.hiredate)) as months_worked
from emp e;
--6、查询在1981年2月20日和1987年5月1日之间入职的员工的姓名、职务标识和起始日期
select e.ename,e.job,e.hiredate
from emp e
where e.hiredate between to_date('19810220','yyyyMMdd') and to_date('19870501','yyyyMMdd');
--7、创建一个查询。显示所有员工的姓名和薪金。将薪金格式规定为15个字符长,左边填充$
select lpad(e.sal,15,'$') sal
from emp e;
--9、显示员工的姓名、聘用日期和该员工在星期几开始工作的。
select e.ename,e.hiredate,to_char(e.hiredate,'DAY') as "开始"
from emp e;
/13、使用decode函数编写一个查询,使其按照以下数据根据job列的值显示所有员工的级别,同时显示员工的姓名
job grade
PRESIDENT A
MANAGER B
ANALYST C
SALESMAN D
CLERK E
都不是 0
/
select e.ename,e.job job,
decode(e.job,'PRESIDENT','A'
,'MANAGER','B'
,'ANALYST','C'
,'SALESMAN','D'
,'CLERK','E'
,'0'
) as grade
from emp e;
--14、使用case语法重写一遍上题
select e.ename,e.job job,
case e.job
when 'PRESIDENT'then 'A'
when 'MANAGER' then 'B'
when 'ANALYST' then 'C'
when 'SALESMAN' then 'D'
when 'CLERK' then 'E'
else '0'
end
as grade
from emp e;
--***********补充*********
--1、显示当前日期,本月最后一天的日期,以及本月还剩多少天
SELECT SYSDATE,
LAST_DAY(SYSDATE) "Last",
LAST_DAY(SYSDATE) - SYSDATE "Days Left"
FROM DUAL;
--2、显示今年的第一天
select trunc(sysdate,'year') from dual;
--3、显示本月的第一天
select trunc(sysdate,'month') from dual;
--4、最近一个星期四是哪天(不含今日)
SELECT NEXT_DAY(sysdate,5)
FROM DUAL;
--实现
--1.查询emp表中所有的数据
select * from emp;
--2.给gei biao zhi ding xu hao kai shi yema 6 jieshuyema10
select * from
(select rownum rn , e1.* from emp e1) e2 where rownum<=10;
--或者下面的方法
select * from (select rownum rn,e.* from emp e)e1 where rn>=5 and rn<=10;
--多表连接
--会产生笛卡尔积
select e.empno,e.ename,d.*
--如何显示小于10号部门的最低工资的员工(多表查询)
--1.员工表:姓名,工资
select *
from emp e,(select min(sal) sm from emp where deptno=10)s
where e.sal<s.sm;
--列出与“SMITH”从事相同工作的所有员工及部门名称(多表查询)
--部门表:部门名称
--员工表:所有信息
--条件:SMITH相同工作的信息
select *
from emp e,dept d
where e.deptno = d.deptno --取消笛卡尔积 等值判断
and e.job=(select job from emp where ename='SMITH');
select e.ename,t.dname from emp e,dept t where t.deptno=e.deptno and job=(select job from emp where ename='SMITH') and e.ename not in('SMITH');
;(select deptno from emp where e.ename='SMITH') ;
--显示每个部门的名称、地点、员工人数以及该部门所有员工的平均薪资(多表查询)
select d.dname 部门,d.loc 地点, e. 部门员工数
--列出薪金高于公司平均薪金的所有员工,薪资,所在部门名称,上级领导姓名,工资等级(多表查询)
--员工表:员工编号、员工工资、员工姓名、
--领导表:姓名
--部门表:部门名称
--工资表:工资等级
--条件:薪金高于公司平均薪金
select e1.empno 员工姓名,e2.empno 员工编号,e1.sal 员工工资,d.dname 部门名称,s.grade 工资等级
from emp e1, emp e2,dept d,salgrade s
where e1.mgr = e2.empno
and e1.deptno = d.deptno
and e1.sal between s.losal and s.hisal
and e1.sal >(select avg(sal) eavg from emp);
--------作业
--1. 显示所有员工的姓名ename,部门号deptno和部门名称dname。
select e.ename,d.deptno,d.dname from emp e left join dept d on e.deptno = d.deptno;
--2. 查询20号部门员工的job和20号部门的loc
select e.ename,e.job,d.loc from emp e,dept d where e.deptno=20 and d.deptno=20;
--3. 选择所有有奖金comm的员工的ename , dname , loc
select e.ename,d.dname,d.loc from emp e,dept d where (e.deptno = d.deptno) and (e.comm is not null);
--4. 选择在DALLAS工作的员工的ename , job , deptno, dname
select e.ename,e.job,d.deptno,d.dname from emp e,dept d where (e.deptno=d.deptno) and d.loc='DALLAS';
--5. 选择所有员工的姓名ename,员工号empno,以及他的管理者mgr的姓名ename和员工号empno
select e.ename employee ,e.empno EMP#,e2.ename manager,e2.empno MGR# from emp e, emp e2 where e.mgr = e2.mgr;
--6. 查询各部门员工姓名和他们所在位置
select d.deptno,e.ename,d.loc from emp e,dept d where d.deptno = e.deptno;
--7、列出每个部门工作的员工数量,平均工资和平均服务年限
select d.dname,count(*),avg(sal) from emp e,dept d group by deptno where d.deptno=e.deptno;
select d.dname from emp e,dept d group by e.deptno where (d.deptno = e.deptno);
Select distinct( deptno),count(*)over(partition by deptno) 员工数量,
avg(sal) over(partition by deptno) 平均工资
,avg(sysdate-hiredate) over(partition by deptno) 平均服务期限 from emp;
--8、列出于“SCOTT”从事相同工作的所有员工及部门名称
select e.empno,e.ename,d.dname from emp e,dept d where (d.deptno = e.deptno) and job=(select job from emp where ename='SCOTT') and (e.ename not in('SCOTT'));
--9、列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,公司的工资等级
--列出薪金高于公司平均薪金的所有员工,薪资,所在部门名称,上级领导姓名,工资等级(多表查询)
--员工表:员工编号、员工工资、员工姓名、
--领导表:姓名
--部门表:部门名称
--工资表:工资等级
--条件:薪金高于公司平均薪金
select e1.ename 员工姓名,e2.empno 员工编号,e1.sal 员工工资,d.dname 部门名称,s.grade 工资等级
from emp e1, emp e2,dept d,salgrade s
where e1.mgr = e2.empno
and e1.deptno = d.deptno
and e1.sal between s.losal and s.hisal
and e1.sal >(select avg(sal) eavg from emp);
select e1.empno,e1.ename,d.dname,s.grade
from emp e1,emp e2,dept d,salgrade s
where e1.deptno=d.deptno
and e2.empno=e1.mgr
and e1.sal >(select avg(sal) from emp)
and e1.sal between s.losal and s.hisal;
2018.5.17 oracle函数查询的更多相关文章
- 2018.5.9 Oracle数据库查询命令
0.查询所有数据(最简单,但是时间很久) select * from emp; Result: EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- - ...
- oracle函数,查询,事务
函数包括:单行函数,多行函数(分组函数) 数值函数: --绝对值 select abs(-12.3) from dual; --向上取值 select ceil(5.3) from dual; --向 ...
- Oracle 函数高级查询
目录 oracle高级查询 Oracle SQL获取每个分组中日期最新的一条数据 求平均值(为0的参数不均摊) 字符串清除前面的0 判断字符串串是否包含某个字符串 switch 判断 oracle不足 ...
- oracle 子查询和组合函数
oracle 子查询和组合函数 --查询与"SCOTT"在同一个部门的员工 select empno,ename,deptno from emp where deptno in ( ...
- 【软件实施面试】MySQL和Oracle联合查询以及聚合函数面试总结
软件实施面试系列文章第二弹,MySQL和Oracle联合查询以及聚合函数的面试总结.放眼望去全是MySQL,就不能来点Oracle吗?之前面过不少公司,也做过不少笔试题,现在已经很少做笔试题了.你肚子 ...
- oracle中查询当前系统时间用到的dual是什么?
oracle我们查询当前系统时间的时候,经常用到dual,这个是什么东西呢? -- 查询系统时间 结果:2018/04/17 15:00:48 -- select sysdate from dual; ...
- 黑马oracle_day01:03.oracle的查询
01.oracle体系结构 02.oracle的基本操作 03.oracle的查询 04.oracle对象 05.oracle编程 黑马oracle_day01:03.oracle的查询 09scot ...
- 【函数】Oracle函数系列(2)--数学函数及日期函数
[函数]Oracle函数系列(2)--数学函数及日期函数 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不 ...
- Oracle函数面试题
1.对字符串操作的函数? 答:ASCII() –函数返回字符表达式最左端字符的ASCII 码值 CHR() –函数用于将ASCII 码转换为字符 –如果没有输入0 ~ 255 之间的ASCII 码值C ...
随机推荐
- bzoj2229: [Zjoi2011]最小割(最小割树)
传送门 这题是用最小割树做的(不明白最小割树是什么的可以去看看这一题->这里) 有了最小割树就很简单了……点数那么少……每次跑出一个最大流就暴力搞一遍就好了 //minamoto #includ ...
- jsp页面将日期类型的数据转换成xxxx年xx月xx日xx时xx分
<fmt:formatDate value="${bsjz.cxkssj}" pattern="yyyy"/><span class=&quo ...
- Orthanc+OHIF DICOM Viewer最佳Dicom解析、在线浏览实践指南(解决方案)
概念 DICOM identifiers Very importantly, the DICOM standard specifies DICOM tags that allow to index e ...
- vue-cli 使用sass(scss)
安装依赖: npm install sass-loader node-sass vue-style-loader --save-dev
- POJ2488 A Knight's Journey
题目:http://poj.org/problem?id=2488 题目大意:可以从任意点开始,只要能走完棋盘所有点,并要求字典序最小,不可能的话就impossible: 思路:dfs+回溯,因为字典 ...
- 洛谷P4114 Qtree1
题目描述 给定一棵\(n\)个节点的树,有两个操作: \(CHANGE\) \(i\) \(t_i\) 把第\(i\)条边的边权变成\(t_i\) \(QUERY\) \(a\) \(b\) 输出从\ ...
- Java基础笔记(十)—— 数组
数组是具有相同类型的数据的集合,是一种引用数据类型,一般具有固定的长度,并且在内存中占据连续的空间. 数组声明:数据类型[ ] 数组名; 数据类型 数组名[ ]; 如:int[ ...
- OnclickListener
https://developer.android.com/reference/android/view/View.OnClickListener.html# https://blog.csdn.ne ...
- CF D. Recovering BST (区间DP)
题意:给你n个节点,每个节点有一个权值,两个点可以连边当且仅当这两个点的gcd>1,问你这n个点能否构成一个二叉搜索树(每个节点最多有两个儿子,且左儿子小于右儿子),输入为递增顺序. 分析: 若 ...
- 3 - EventLoop和线程模型-事件循环
a). EventLoopGroup为每个新创建的channel分配一个EventLoop,多个channel对应一个EventLoop. b). 一个EventLoop由一个不变的thread驱动, ...