--nvl()第一个为空则返回第二个
select nvl(comm,0) comm
from emp;

--nvl2 如果第一个数不为空,返回第二个数,否则返回第三个数
select nvl2(comm,comm,0) comm
from emp;
--nullif 两个数相等为空 不等 返回第一个数
select nullif(10,40)
from dual;

--时间格式
select to_char(sysdate,'yyyy-mm-dd day hh24:mi:ss am')
from dual;
--coalesce()返回第一个不为空的参数,参数个数不限制
select coalesce(10,20,30)
from dual;
--case关键字的使用
select ename,deptno,
(
       case deptno
         when 10 then 'asd'
           when 20 then 'dasd'
             when 30 then 'da'
               else 'no' end
) deptname
from emp;
--decode关键字的使用
select ename,deptno,
decode(deptno,
10,'销售部',
20,'技术部',
30,'管理部'
) deptname
from emp;

--hello->ello
select trim('h' from 'hello')
from dual;

--' Hello '->'Hello'
select trim(' Hello ')
from dual;
--'bllb'->'ll'
select trim('b' from 'bllb')
from dual;

--'hello  '->'hello'
select trim('hello')
from dual;
--查询员工及其经理编号,没有经理编号的显示为‘no manager’
select ename,nvl(to_char(mgr),'no manager') mgr
from emp;
--查询员工入职日期格式为 月份/年份
select to_char(hiredate,'mon/yy')
from emp;
--查询员工工资,计算税:工资<1000税率0 1000<工资<2000 税率10% 2000<工资<3000税率15% 工资>3000 税率20%
select ename,sal,
case trunc(sal/1000)
when  0 then sal*0
  when 1 then sal*0.1
    when 2 then sal*0.15
      else sal*0.2 end 税
from emp;

--查询雇员的ename和sal,sal格式化成15个字符长度,左边用$填充,列标签为SALARY
select ename,lpad(sal,15,'$') SALARY
from emp;
--多表查询,员工姓名,编号,部门名称
select e.ename,e.empno,d.dname
from emp e
left join dept d
on e.deptno=d.deptno;
select * from dept;
--查询在芝加哥工作,并且奖金不为空的员工姓名,工作地点,奖金
select e.ename 姓名,d.loc 工作地点,e.comm 奖金
from emp e
left join dept d
on e.deptno=d.deptno
where e.comm is not null and d.loc = 'CHICAGO';
--查询姓名带有‘A’的员工姓名,工作地点
select e.ename,d.loc
from emp e
left join dept d
on e.deptno=d.deptno
where e.ename like '%A%';
--外部链接,(+)能增加一个万能的行,值为空,可以和另一个表中不满足条件的行相连接
select e.ename,d.loc,d.deptno,d.dname
from emp e,dept d
where e.deptno(+)=d.deptno
order by e.deptno;
--right join可以将右边加入的表中所有行查询出来包括不符合条件的。查询结果与上例外部连接结果相同
select e.ename,d.loc,d.deptno,d.dname
from emp e right join dept d
on e.deptno=d.deptno
order by e.deptno;
--自连接,查询员工姓名和该员工的上级的姓名
select e.ename 姓名,a.ename 上级姓名
from emp e,emp a
where e.mgr=a.empno;
--inner join
select e.ename name,a.ename mgr_name
from emp e full join emp a--full join显示两张表中所有行(即使不符合条件)
on e.mgr=a.empno;

--分组和分组函数的使用
--查询部门号为10的最高工资
select max(sal) 最高工资,deptno
from emp
where deptno=10
group by deptno;
--查询部门编号为20 的平均工资和月薪总和
select avg(sal) 平均工资,sum(sal) 工资总和
from emp
where deptno=20
group by deptno;

--查询CHICAGO的工作人数,最高工资和最低工资
select count(*) 人数,max(sal) 最高工资,min(sal) 最低工资,loc 工作地点
from emp natural join dept
where loc='CHICAGO'
group by loc;

--查询员工有几种工作岗位
--可以直接用distinct关键字去除重复
select distinct job
from emp;
--也可以用group by
select job
from emp
group by job;

--查询每个部门的平均工资
select avg(sal) 平均工资,dname 部门名称
from emp natural join dept
group by dname

--查询每个部门的部门编号,部门名称,部门人数,
--最高工资,最低工资,工资总和,平均工资
select deptno,dname 部门名称,count(*) 部门人数,
max(sal) 最高工资,min(sal) 最低工资,
sum(sal) 工资总和,avg(sal) 平均工资
from emp natural join dept
group by (deptno,dname);

--查询部门人数大于2的部门编号,部门名称,部门人数
select deptno 部门编号,dname 部门名称,count(*) 部门人数
from emp natural join dept
group by deptno,dname
having count(*)>2;

--查询部门平均工资大于2000,且人数大于2的
--部门编号,部门名称,部门人数,部门平均工资,
--并按照部门人数升序排序
select avg(sal) 平均工资,count(*) 人数,deptno
,dname
from emp natural join dept
group by deptno,dname
having count(*)>2 and avg(sal)>2000;
--查询平均工资的最大值
select max(avg(sal))
from emp
group by deptno;

--查询部门平均工资在2500元以上的部门名称及平均工资。
select avg(sal),dname
from emp natural join dept
group by dname
having avg(sal)>2500;
--查询岗位名称不是以'SA'开头并且平均工资大于2500的岗位名称和平均工资,按照平均工资降序排序
select avg(sal),job
from emp
where job not like 'SA%'
group by job
having avg(sal)>2500
order by avg(sal) desc;
--查询部门人数在2人以上的部门名称、最高工资、最低工资
--并对求得的工资进行四舍五入到整数
select dname,round(max(sal),0),round(min(sal),0)
from emp natural join dept
group by dname
having count(*)>2;
--查询岗位不为SALESMAN,工资和大于等于2500的
--岗位及每种岗位的工资和
select job,sum(sal)
from emp
where job <> 'SALESMAN'
group by job
having sum(sal)>=2500;
--显示经理号码和经理姓名,这个经理所管理
--的员工的最低工资,没有经理的king也要显示
--不包括最低工资小于3000的,按最低工资降序排序
select e.ename 经理,e.empno 经理编号,min(ee.sal) 所管理员工的最低工资
from emp e left join emp ee
on e.empno=ee.mgr
group by e.ename,e.empno
having min(ee.sal)>=3000
order by min(ee.sal) desc;

--写一个查询,显示每个部门最高工资和最低工资的差额
select e.deptno,dname,max(sal)-min(sal) 最高最低差额
from emp e join dept  d on e.deptno=d.deptno
group by e.deptno,dname;

--查询入职日期比10部门任意一个员工晚的员工姓名
--、入职日期,不包括10部门员工
--写法一
select ename,hiredate,deptno
from emp
where hiredate> any(select hiredate
                    from emp
                    where deptno=10
                    )and
deptno <> 10;
--写法二 查询出入职日期晚于10部门的任意一个员工的入职日期,那么只需求出10部门中
--员工最早(小)的入职日期,并且比最小日期大,那么就是比任意10部门的员工入职日期晚(大)。
select ename,hiredate,deptno
from emp
where hiredate>(select min(hiredate)
                from emp
                where deptno=10
                group by deptno) and
deptno <> 10;

--查询入职日期比10部门所有员工晚的员工姓名
--入职日期,不包括10部门员工
--写法一
select ename,hiredate,deptno
from emp
where hiredate >all(select hiredate
                    from emp
                    where deptno=10)and
deptno <> 10;
--写法二  大于10部门中入职日期最晚的员工的入职日期,那么就比所有10部门的员工入职日期大(晚)
select ename,hiredate,deptno
from emp
where hiredate > (select max(hiredate)
                  from emp
                  where deptno=10
                  group by deptno)and
deptno <> 10;

--查询职位和10部门任意员工职位相同的员工姓名,职位,不包括10部门的员工
--写法一
select ename,job,deptno
from emp
where job in (select job
              from emp
              where deptno=10)and
deptno <> 10;
--写法二 in(..) 和 = any(..)效果相同
select ename,job,deptno
from emp
where job = any(select job
                from emp
                where deptno=10)and
deptno <> 10;
--查询职位及经理和10部门任意一个员工职位
--及经理相同的员工姓名,职位,不包括10部门员工
select ename,job,mgr
from emp
where (job,mgr) in (select job,mgr
                    from emp
                    where deptno=10)and
deptno <> 10;

--查询职位及经理和10部门任意一个员工职位
--或者经理相同的员工姓名,职位,不包括10部门员工
select ename,job,mgr
from emp
where job in (select job
              from emp
              where deptno=10)
       or
       mgr in(select mgr
              from emp
              where deptno=10)
       and
       deptno <> 10;

2018/12/19 oracle-sql练习相关推荐

  1. 《惢客创业日记》2018.12.19(周三)创业从0到1的10个阶段(六)

    今天,第一位全职美工来上班了,总算有了一个全职的助手,可以稍微伸一下懒腰了.        接下来,还是继续分享创业从0到1的0.5阶段,也就是团队阶段.因为,即使做的不是产品,只是产品原型或者在家模 ...

  2. 【跃迁之路】【674天】程序员高效学习方法论探索系列(实验阶段431-2018.12.19)...

    @(收集箱(每日一记,每周六整理))专栏 实验说明 从2017.10.6起,开启这个系列,目标只有一个:探索新的学习方法,实现跃迁式成长 实验期2年(2017.10.06 - 2019.10.06) ...

  3. 2018/12/22

    encode 编码 decode 解码 declared 声明 1.二进制----->ASCII :只能存英文和拉丁字符.一个字符占一个字节,8位-------->gb2312:只能670 ...

  4. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

    本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...

  5. 19.Oracle数据库SQL开发之 笛卡尔积

    19.Oracle数据库SQL开发之 笛卡尔积 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/49107213 如果在多表查询中 ...

  6. Oracle SQL Developer 19.1 Microsoft Windows x64 64-bit 下载 安装 配置

    Oracle SQL Developer 19.1 Microsoft Windows x64 64-bit 下载 安装 配置 下载地址 安装步骤 连接Oracle数据库 添加用户 下载地址 下载地址 ...

  7. Oracle SQL性能优化40条,值得收藏

    1. SQL语句执行步骤 语法分析> 语义分析> 视图转换 >表达式转换> 选择优化器 >选择连接方式 >选择连接顺序 >选择数据的搜索路径 >运行&q ...

  8. oracle sql获取年月日时分秒,Oracle SQL日期及日期格式获取命令

    日期及日期格式: 获取系统日期: sysdate() 格式化日期 to_char(sysdate(),'yyyy-mm-dd,hh24:mi:ss') to_date(sysdate(),'yyyy- ...

  9. Oracle SQL高级编程——分析函数(窗口函数)全面讲解

    Oracle SQL高级编程--分析函数(窗口函数)全面讲解 注:本文来源于:<Oracle SQL高级编程--分析函数(窗口函数)全面讲解> 概述 分析函数是以一定的方法在一个与当前行相 ...

最新文章

  1. Java线程-两阶段终止模式(interrupted实现)
  2. win10系统下多python版本部署
  3. java rgb hsl_RGB、HSB、HSL 互相转换算法
  4. Go 1.4 正式版发布,官方正式支持 Android
  5. 数据中心网络性能:新应用下的新需求
  6. scut AccountServer 使用mysql
  7. Pandas 表连接(Merge,join,concatenate)
  8. 算法笔记_171:历届试题 小朋友排队(Java)
  9. python 库文件版本收集及安装
  10. 服务器系统如何安装文件损坏,安装系统提示winload.exe故障,文件丢失损坏
  11. 计算机更新后打印机无法使用,升级win10系统后无法使用HP打印机的官方解决方案...
  12. WeUI源码学习笔记一
  13. 更改高通平台开机logo和开机动画以及fastboot界面显示
  14. iOS开发日记54-Xcode7调试神技
  15. SwitchHosts 模拟本地域名解析访问
  16. 装饰模式:换装系统设计
  17. PHP RSA公钥加密解密
  18. 雨晨QQ2013beta2(5865) 双显IP纯净完整自选版
  19. 小型VoIP电话系统的建立
  20. 2011东莞市优秀表彰企业名单

热门文章

  1. 了解人脸识别和二维码识别
  2. 利用迈克尔逊干涉仪和傅里叶变换光谱法测量相干性
  3. win10修改系统时间(2038,2050)重启后桌面一直刷新
  4. 使用TreeMap实现ASCII排序
  5. APL开发日志--2012-11-28
  6. 严重性 代码 说明 项目 文件 行 禁止显示状态 警告 CS8032 无法从...创建分析器...的实例: 未能加载文件或程序集...或它的某一个依赖项。系统找不到指定的文件
  7. 模型评价 - 回归模型的常用评价指标
  8. 什么是 Headless CMS?
  9. pytorch_lesson13.2 模型拟合度概念介绍+模型欠拟合实例+单隐藏层激活函数性能比较+相同激活函数不同隐藏层数结果对比+神经网络结构选择策略
  10. 基于空间金字塔网络的光流估计