--*********函数***********
--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函数查询的更多相关文章

  1. 2018.5.9 Oracle数据库查询命令

    0.查询所有数据(最简单,但是时间很久) select * from emp; Result: EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- - ...

  2. oracle函数,查询,事务

    函数包括:单行函数,多行函数(分组函数) 数值函数: --绝对值 select abs(-12.3) from dual; --向上取值 select ceil(5.3) from dual; --向 ...

  3. Oracle 函数高级查询

    目录 oracle高级查询 Oracle SQL获取每个分组中日期最新的一条数据 求平均值(为0的参数不均摊) 字符串清除前面的0 判断字符串串是否包含某个字符串 switch 判断 oracle不足 ...

  4. oracle 子查询和组合函数

    oracle 子查询和组合函数 --查询与"SCOTT"在同一个部门的员工 select empno,ename,deptno from emp where deptno in ( ...

  5. 【软件实施面试】MySQL和Oracle联合查询以及聚合函数面试总结

    软件实施面试系列文章第二弹,MySQL和Oracle联合查询以及聚合函数的面试总结.放眼望去全是MySQL,就不能来点Oracle吗?之前面过不少公司,也做过不少笔试题,现在已经很少做笔试题了.你肚子 ...

  6. oracle中查询当前系统时间用到的dual是什么?

    oracle我们查询当前系统时间的时候,经常用到dual,这个是什么东西呢? -- 查询系统时间 结果:2018/04/17 15:00:48 -- select sysdate from dual; ...

  7. 黑马oracle_day01:03.oracle的查询

    01.oracle体系结构 02.oracle的基本操作 03.oracle的查询 04.oracle对象 05.oracle编程 黑马oracle_day01:03.oracle的查询 09scot ...

  8. 【函数】Oracle函数系列(2)--数学函数及日期函数

    [函数]Oracle函数系列(2)--数学函数及日期函数 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不 ...

  9. Oracle函数面试题

    1.对字符串操作的函数? 答:ASCII() –函数返回字符表达式最左端字符的ASCII 码值 CHR() –函数用于将ASCII 码转换为字符 –如果没有输入0 ~ 255 之间的ASCII 码值C ...

随机推荐

  1. ac自动机俩模板

    ac自动机算法正确性还没有理解,算法导论也看不懂..等懂了回来发算法专题. #include <cstdio> #include <cstring> using namespa ...

  2. 如何从git上clone一个项目

    今天想从自己的git上down下来代码,补充一些新的学习demo,不过因为平时工作中不适用git管理代码,所以,有些命令行忘记了.现在,通过这种方式再加深一遍印象吧. 那我就假设已经安装好了git了. ...

  3. Redis内核原理及读写一致企业级架构深入剖析1-综合组件环境实战

    1 Redis 工作模型 redis实际上是个单线程工作模型,其拥有较多的数据结构,并支持丰富的数据操作,redis目前是原生支持cluster模式.如果需要缓存能够支持更复杂的结构和操作,基于以上原 ...

  4. [SCOI2007]修车 费用流 BZOJ 1070

    题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待 ...

  5. 洛谷P5058 [ZJOI2004]嗅探器

    题目描述 某军搞信息对抗实战演习,红军成功地侵入了蓝军的内部网络,蓝军共有两个信息中心,红军计划在某台中间服务器上安装一个嗅探器,从而能够侦听到两个信息中心互相交换的所有信息,但是蓝军的网络相当的庞大 ...

  6. 最长双回文串(模板+dp)

    题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; inline ll read(){ , f ...

  7. Gdiplus的使用 gdi+

    使用步骤: 1.包括相应的头文件及引入相应的lib 1 #include <GdiPlus.h> 2 #pragma comment(lib, "gdiplus.lib" ...

  8. Android Studio模拟器的root权限

    前言 一个安卓练习中用自带的sqlite3数据库查看数据的时候,需要通过adb shell进入/data/data/[包名]/databases/目录中,通过查看创建的数据库来查看相应的数据或者表.起 ...

  9. 配置IIS Web服务器

    配置IIS Web服务器 1.1 控制面板中找到“程序”并打开 1.2 程序界面找到“启用或关闭Windows功能”并打开 1.3 上面两步也可以简化为一步:按[Win + R]快捷键打开运行对话框, ...

  10. mybatis获得执行insert的返回值

    http://www.myexception.cn/h/805633.html http://blog.csdn.net/gaojinshan/article/details/24308313