--*********函数***********
--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. 41.QT-多线程与界面之间交互总结

    1. 线程与界面组件需要注意的地方 在QThread线程中不能直接创建QWidget之类的界面组件. 因为在QT中,所有界面组件相关的操作都必须在主线程中(也就是GUI thread) 所以, QTh ...

  2. 黑匣子_NOI导刊2010提高(06) Splay Tree

    题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两种: ...

  3. elasticsearch常用工具及使用

    1. 数据库工具:https://github.com/jprante/elasticsearch-jdbc 2.数据展示:https://github.com/mobz/elasticsearch- ...

  4. return this链式操作

    function Fn(){}; Fn.prototype = { constructor:Fn, a:function(){ alert(1); return this; //实现链式操作.即fn. ...

  5. Django---登录(含随机生成图片验证码)、注册示例讲解

    登录(验证码).注册功能具体代码 # urls.py from django.contrib import admin from django.urls import path from app01 ...

  6. 练习二十二:python兵乓求比赛顺序练习,关于连个兵乓球队进行比赛

    已知有两支兵乓球队进行比赛,每队各出3人: 甲队有a,b,c三人,乙队有x,y,z三人,已抽签决定比赛名单 问题:有人向队员打听比赛名单.a说他不和X比,c说他不和x,z比,程序找出比赛对手 方法一: ...

  7. 04.Spring Ioc 容器 - 刷新

    基本概念 Spring Ioc 容器被创建之后,接下来就是它的初始化过程了.该过程包含了配置.刷新两个步骤 . 刷新由 Spring 容器自己实现,具体发生在 ConfigurableApplicat ...

  8. B - Reverse and Compare 小小思维题

    http://agc019.contest.atcoder.jp/tasks/agc019_b 一开始的做法是, 用总数减去回文子串数目,因为回文子串怎么翻转都不影响答案. 然后,如果翻转afucka ...

  9. Gym 100971B Derangement

    要求改换序列,使得没有位置是a[i] == i成立.输出最小要换的步数 首先把a[i] == i的位置记录起来,然后两两互相换就可以了. 对于是奇数的情况,和它前一个换或者后一个换就可以,(注意前一个 ...

  10. js电话号码校验

    var contact_phone = $("#contact_phone").val();        if(contact_phone && /^1[3|4| ...