oracle--查询练习

2023-10-27

查询练习

1.查询工资大于12000的员工姓名和工资

select last_name, salary
from employees
where salary > 12000

2.查询员工号为176的员工的姓名和部门号

select last_name, department_id
from employees
where employee_id = 176

3.选择工资不在5000到12000的员工的姓名和工资

select last_name, salary
from employees
where salary not between 5000 and 12000

4.选择雇用时间在1998-02-01到1998-05-01之间的员工姓名,job_id和雇用时间

select last_name, job_id, hire_date
from employees
where hire_date between '1-2月 -1998' and '1-5月 -1998'

5.选择在20或50号部门工作的员工姓名和部门号

select last_name, department_id
from employees
where department_id in (20, 50)

6.选择在1994年雇用的员工的姓名和雇用时间

select last_name, hire_date
from employees
where hire_date like '% -94'

7.选择公司中没有管理者的员工姓名及job_id

select last_name, job_id
from employees
where manager_id is null

8.选择公司中有奖金的员工姓名,工资和奖金级别

select last_name, salary, commission_pct
from employees
where commission_pct is not null

9.选择员工姓名的第三个字母是a的员工姓名

select last_name 
from employees
where last_name like '__a%'

10.选择姓名中有字母a和e的员工姓名

select last_name
from employees
where last_name like '%a%' and last_name like '%e%'

11.显示系统时间

select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;

12.查询员工号,姓名,工资,以及工资提高百分之20%后的结果(new salary)

select employee_id,last_name,salary,salary*1.2 "new salary" from employees;

13.将员工的姓名按首字母排序,并写出姓名的长度(length)

select last_name,length(last_name)
from employees
order by last_name

14.查询各员工的姓名,并显示出各员工在公司工作的月份数(worked_month)。

select last_name,months_between(sysdate,hire_date) worked month from employees

15.查询员工的姓名,以及在公司工作的月份数(worked_month),并按月份数降序排列

select last_name, months_between(sysdate, hire_date) worked_month
from employees
order by worked_month desc

16.做一个查询,产生下面的结果

<last_name> earns <salary> monthly but wants <salary*3>

结果.PNG

select last_name || ' earns ' || salary || ' monthly but wants ' || salary * 3
from employees

17.使用decode函数,按照下面的条件:

decode函数.PNG

select last_name, job_id, decode(job_id, 'AD_PRES', 'A',
                                         'ST_MAN', 'B',
                                         'IT_PROG', 'C',
                                         'SA_REP', 'D',
                                         'ST_CLERK', 'E',
                                         'F') GRADE
from employees

18.将第7题的查询用case函数再写一遍。

select last_name, job_id, case job_id when 'AD_PRES' then 'A'
                                      when 'ST_MAN' then 'B'
                                      when 'IT_PROG' then 'C'
                                      when 'SA_REP' then 'D'
                                      when 'ST_CLERK' then 'E'
                                      else 'F'
                           end            
from employees

19.查询公司员工工资的最大值,最小值,平均值,总和

Select max(salary), min(salary), avg(salary), sum(salary)
From employees

20.查询各job_id的员工工资的最大值,最小值,平均值,总和

Select job_id, max(salary), min(salary), avg(salary), sum(salary)
From employees
Group by job_id

21.选择具有各个job_id的员工人数

Select job_id, count(employee_id)
From employees
Group by job_id;

22.查询员工最高工资和最低工资的差距(DIFFERENCE)

Select max(salary) – min(salary) difference
From employees

23.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内

Select manager_id, min(salary)
From employees
Where manager_id is not null
Group by manager_id
Having min(salary) >= 6000

24.查询所有部门的名字,location_id,员工数量和工资平均值

Select department_name, location_id, count(employee_id), avg(salary)
From employees e join departments d
On e.department_id = d.department_id
Group by department_name, location_id

一、找到员工表中工资最高的前三名:

关于行号
1. rownum永远按照默认的顺序生成
2. rownum只能使用 < <=; 不能使用> >=

SQL> select rownum,empno,ename,sal
  2  from (select * from emp order by sal desc)
  3  where rownum<=3;

    ROWNUM      EMPNO ENAME             SAL                                                                                                                                                             
---------- ---------- ---------- ----------                                                                                                                                                             
         1       7839 KING             5000                                                                                                                                                             
         2       7788 SCOTT            3000                                                                                                                                                             
         3       7902 FORD             3000 

2.rownum只能使用 < <=; 不能使用> >=

SQL>  select *
  2   from  (select rownum r,e1.*
  3      from (select * from emp order by sal) e1
  4      where rownum <=8
  5     )
  6   where r >=5;

临时表:

1. create global temporary table *****
2.自动创建: order by
特点:当事务或者会话结束的时候,表中的数据自动删除

所以 oracle中事务提交了 数据不一定保存下来了(临时表),数据不在,但表还在

SQL> create global temporary table test2
  2  (tid number,tname varchar2(20))
  3  on commit delete rows;

表已创建。

SQL> insert into test2 values(1,'Tom');

已创建 1 行。

SQL> select * from test2;

       TID TNAME                                                                                                                                                                                        
---------- --------------------                                                                                                                                                                         
         1 Tom                                                                                                                                                                                          

SQL> commit;

提交完成。

SQL> select * from test2;

未选定行

SQL> desc test2
 名称                                                                                                              是否为空? 类型
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 TID                                                                                                                        NUMBER
 TNAME                                                                                                                      VARCHAR2(20)

二、找到员工表中薪水大于本部门平均薪水的员工:

相关子查询:将主查询中的值作为参数传递给子查询:

SQL> select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal
  2  from emp e
  3  where sal > (select avg(sal) from emp where deptno=e.deptno);

     EMPNO ENAME             SAL     AVGSAL                                                                                                                                                             
---------- ---------- ---------- ----------                                                                                                                                                             
      7499 ALLEN            1600 1566.66667                                                                                                                                                             
      7566 JONES            2975       2175                                                                                                                                                             
      7698 BLAKE            2850 1566.66667                                                                                                                                                             
      7788 SCOTT            3000       2175                                                                                                                                                             
      7839 KING             5000 2916.66667                                                                                                                                                             
      7902 FORD             3000       2175  

解:

SQL> select e.empno,e.ename,e.sal,d.avgsal
  2  from emp e,(select deptno,avg(sal) avgsal from emp group by deptno) d
  3  where e.deptno=d.deptno and e.sal > d.avgsal;

     EMPNO ENAME             SAL     AVGSAL                                                                                                                                                             
---------- ---------- ---------- ----------                                                                                                                                                             
      7698 BLAKE            2850 1566.66667                                                                                                                                                             
      7499 ALLEN            1600 1566.66667                                                                                                                                                             
      7902 FORD             3000       2175                                                                                                                                                             
      7788 SCOTT            3000       2175                                                                                                                                                             
      7566 JONES            2975       2175                                                                                                                                                             
      7839 KING             5000 2916.66667  

三、统计每年入职的员工个数

每年入职的员工个数.PNG

SQL> select count(*) Total,
  2         sum(decode(to_char(hiredate,'yyyy'),'1980',1,0)) "1980",
  3         sum(decode(to_char(hiredate,'yyyy'),'1981',1,0)) "1981",
  4         sum(decode(to_char(hiredate,'yyyy'),'1982',1,0)) "1982",
  5         sum(decode(to_char(hiredate,'yyyy'),'1987',1,0)) "1987"
  6  from emp;

     TOTAL       1980       1981       1982       1987                          
---------- ---------- ---------- ---------- ----------                          
        14          1         10          1          2

1.查询和Zlotkey相同部门的员工姓名和雇用日期

select last_name, hire_date
from employees
where department_id = (
      select department_id
      from employees
      where last_name = 'Zlotkey'
)

2.查询工资比公司平均工资高的员工的员工号,姓名和工资。

select employee_id, last_name, salary
from employees
where salary > (
      select avg(salary)
      from employees
)

3.查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资

select employee_id, last_name, salary
from employees e
where salary > (
      select avg(salary)
      from employees
      where department_id = e.department_id
)

4.查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名

select employee_id, last_name
from employees
where department_id in (
      select department_id
      from employees
      where last_name like '%u%'
)

5.查询在部门的location_id为1700的部门工作的员工的员工号,

select employee_id
from employees
where department_id in (
      select department_id
      from departments
      where location_id = 1700
)

6.查询管理者是King的员工姓名和工资

select last_name, salary
from employees
where manager_id in (
      select employee_id
      from employees
      where last_name = 'King'
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

oracle--查询练习 的相关文章

随机推荐

  • Telnet找不到时的安装(启动)教程 (Windows)

    目录 前言 启动Windows功能 Step1 打开控制面板 Step2 点击程序 注意 不是卸载程序 Step3 点击 启动或关闭Windows功能 Step4 勾选 Telnet客户端 Step5 点击确认 等待启动 Step6 启动完
  • java: 非法字符: ‘\ufeff’

    导入项目运行后会发现如下错误 java 非法字符 ufeff java 需要class interface或enum 原因 编码问题 将UTF 8换成GBK 然后再将GBK转换为UTF 8即可
  • 2.4 等比数列

    学习步骤 如果我要学习等比数列 我会按照以下步骤进行学习 定义和性质 首先了解等比数列的定义和性质 包括公比 首项 通项公式 求和公式等 例题练习 通过练习一些简单的例题来理解等比数列的概念和性质 并能够灵活应用公式解决问题 深入理解 通过
  • Python 基础合集7:类和实例

    一 前言 本小节主要梳理类和实例的基本知识 包含类及其属性 方法的定义和调用 类的实例及其属性 方法的定义和调用 还介绍了3个魔法函数 init str repr 和私有化变量的使用 环境说明 Python 3 6 windows11 64
  • 关于kali安装nessus打不开网页?

    大家好 我想请教大家一个问题 我在kali上面安装的是10 4版本的nessus 后来压缩到tmp之后 我复制到etc里 我开启了这个nessus服务 但是显示这个 我擦 不知道怎么回事 换了一个8版本的也不行 然后最终的问题就是浏览器打不
  • 数据类型和取值以及运算符

    数据类型分为基本数据类型和引用数据类型 一 基本数据类型又分为 1 数值型 byte short int long float double 2 布尔型 booleanl 3 字符型 char 二 引用数据类型 类 接口 抽象类 数组 常用
  • 大一统,windows下安装linux的最新方式

    抛弃虚拟机和双系统 在windows下使用linux 为啥要执着于linux 入坑指南 安装windows terminal 开启子系统功能 下载Ubuntu系统 更改命令主题 把oh my zsh 项目 Clone 下来 复制 zshrc
  • RFC2367 PF_KEY键管理API

    组织 中国互动出版网 http www china pub com RFC文档中文翻译计划 http www china pub com compters emook aboutemook htm E mail ouyang china p
  • 基于C++的非线性方程的解法研究及实现

    基于C 的非线性方程的解法研究及实现 前言 关于非线性方程f x 0的根的解法目前分为三类 二分法 试值法和不动点迭代法 本文实例为寻找f x x2 2x在区间 1 3 内精度在0 05以内的实根 代码中的set用于保存答案 1 二分法 二
  • 华为云服务器最新信息,云服务器拉新

    云服务器拉新 内容精选 换一换 当云服务器密码即将过期 密码泄露或首次登录时 首次登录云服务器建议您修改初始密码 您可以参考本节操作在操作系统内部修改云服务器密码 优先推荐您参考在控制台重置云服务器密码 在控制台重置实例的登录密码 可以登录
  • 手把手教你如何自己设计实现一个深度学习框架(附代码实现)

    本文首先从深度学习的流程开始分析 对神经网络中的关键组件抽象 确定基本框架 然后再对框架里各个组件进行代码实现 最后基于这个框架实现了一个 MNIST 分类的示例 并与 Tensorflow 做了简单的对比验证 喜欢本文 就请点赞 收藏 关
  • HBase写吞吐场景资源消耗量化分析及优化

    一 概述 HBase 是一个基于 Google BigTable 论文设计的高可靠性 高性能 可伸缩的分布式存储系统 网上关于 HBase 的文章很多 官方文档介绍的也比较详细 本篇文章不介绍HBase基本的细节 本文从 HBase 写链路
  • Jupyter 如何使用 args = parser.parse_args()

    最近在女朋友的催促下 啃代码啃得脑壳疼 遇到了一个问题 python文件里面的参数不能直接在jupyter中使用 放在jupyter中的时候就会报错 如下所示 parser argparse ArgumentParser parser ad
  • Vscode配置C/C++环境出现报错,导致不能运行代码,报错如下:

    Vscode配置C C 环境出现报错 导致不能运行代码 报错如下 问题描述 gcc 无法将 gcc 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 请检查名称的拼写 如果包括路径 请确保路径正确 然后再试一次 所在位置 行 1 字
  • YUV学习,详解

    YUV 格式详解 只看这一篇就够了 分类标准 首先 我们可以将YUV格式按照数据大小分为三个格式 YUV420 YUV422 YUV444 由于人眼对Y的敏感度远超于对u和v的敏感度 所以有时候可以多个Y分量共用一组uv 这样既可以极大的节
  • Dreaming to Distill: Data-free Knowledge Transfer via DeepInversion

    Dreaming to Distill Data free Knowledge Transfer via DeepInversion 1 论文信息 论文标题 Dreaming to Distill Data free Knowledge T
  • java基础语法(精简版)

    文章目录 目录 文章目录 一 运算符 1 算数运算符 2 赋值运算符 3 关系运算符 比较运算符 4 逻辑运算符 5 三元运算符 6 字符的 操作 7 字符串的 操作 二 流程控制语句 1 顺序结构 2 分支结构 1 if语句 2 swit
  • Win10 系统下VisualStudio2019 配置点云库 PCL1.11.0

    目录 一 下载PCL1 11 0 二 安装PCL1 11 0 三 VS2019相关设置 四 配置PCL1 11 0 五 测试代码 六 附录 获取自己的链接库列表 一 下载PCL1 11 0 Github下载地址 https github c
  • docker: Error response from daemon: driver failed programming external connectivity on endpoint ranc

    docker Error response from daemon driver failed programming external connectivity on endpoint rancher server f62779d6c72
  • oracle--查询练习

    查询练习 1 查询工资大于12000的员工姓名和工资 select last name salary from employees where salary gt 12000 2 查询员工号为176的员工的姓名和部门号 select las