--*********函数***********
--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. Eclipse中导入项目的方法

    在Eclipse导入其他项目时,可能由于开发软件.JDK版本.Tomcat服务器版本的不同等多种原因,造成项目报错的问题 可以通过以下步骤解决: 1.在Project  Explorer面板下,右键— ...

  2. HDU1729 Stone Game

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1729 思路:理解错题目了,以为SG模板直接套就行了.后来队友说了那个ci是不断变化的.那么每次可以放的石头 ...

  3. javascript中的Set和Map数据结构

    Set数据结构 类似数组,所有的数据都是唯一的,没有重复值,它本身是一个构造函数 size 数据长度 add() 添加一个数据 delete() 删除一个数据 has() 查找一个数据 clear() ...

  4. 由奇葩cookie导致服务器500来认识cookie

    问题:cookie中文会导致服务器报500错误. 一:cookie的特点 1.以键值对的形式出现的,比如:a=b;b=c 2.中文的值需要转义 cookie的例子 <!DOCTYPE html& ...

  5. Leetcode初级算法(排序和搜索+数学篇)

    合并两个有序数组 开始的时候将这道题理解错了,发现几个奇怪的测试案例后才明白这道题什么意思.本来的想法就是把nums2全部放到num1里面,然后删除重复元素.排序一下,就有了下面的代码: class ...

  6. web应用,http协议简介,web框架

    一.web应用 web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件.应用程序有两种模式C/S.B/S.C/S是客户端 ...

  7. Flask&&人工智能AI --2

    参考博客: https://www.cnblogs.com/xiao987334176/p/9598606.html 昨日作业讲解 昨天的作业就是,有3个视图函数,分别是/login,/student ...

  8. flush logs时做的操作

    flush logs时做的操作:  对于一般查询日志和慢日志,先关闭文件再打开  对于binlog,关闭当前的,开始用下一个新的  用错误日志文件的话,先关闭再打开flush logs可以对一般查询日 ...

  9. Java面向对象_适配器模式

    概念:将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 public class Practice14 { public static v ...

  10. 由Python的浅拷贝(shallow copy)和深拷贝(deep copy)引发的思考

    首先查看拷贝模块(copy)发现: >>> help(copy)Help on module copy:NAME    copy - Generic (shallow and dee ...