---------------------第三章课后作业-----------------------------
--1.查询入职时间在1982-7-9之后,并且不从事SALESMAN工作的员工姓名、入职时间、职位。
SELECT ename,hiredate,job FROM emp 
 WHERE hiredate>'9-7月-1982' and job<>'SALESMAN';

--2.查询员工姓名的第三个字母是a的员工姓名。
SELECT ename FROM emp
 WHERE ename like '__a%';

--3.查询除了10、20号部门以外的员工姓名、部门编号。
SELECT ename,deptno FROM emp
 WHERE deptno not in(10,20);

--4.查询部门号为30号员工的信息,先按工资降序排序,再按姓名升序排序。 
SELECT ename,deptno,sal FROM emp
 WHERE deptno=30 order by sal DESC,ename ASC;

--5.查询没有上级的员工(经理号为空)的员工姓名。
SELECT ename FROM emp
 WHERE mgr is null;

--6.查询工资大于等于4500并且部门为10或者20的员工的姓名\工资、部门编号。
SELECT ename,sal,deptno FROM emp
 WHERE sal>4500 AND deptno IN(10,20);

--------------------第四章课后作业-------------------------------
--1.计算2000年1月1日到现在有多少月,多少周(四舍五入)。
SELECT round(months_between(sysdate,'01-1月-2000'))months,round((sysdate-to_date('01-1月-2000','dd-mon-yyyy'))/7) weeks
 FROM dual;
 
--2.查询员工ENAME的第三个字母是A的员工的信息(使用2个函数)。
SELECT * FROM emp where substr(ename,3,1)='A';
SELECT * FROM emp WHERE instr(ename,'A')=3;

--3.使用trim函数将字符串‘hello’、‘  Hello ’、‘bllb’、‘ hello    ’分别处理得到下列字符串ello、Hello、ll、hello。
SELECT trim('h' from 'hello') "ello",trim(' ' from 'Hello') "Hello",trim('b' from 'bllb') "ll",trim(' ' from 'hello')"hello"
 FROM dual;

--4.将员工工资按如下格式显示:123,234.00 RMB 。
SELECT empno,ename,job,to_char(sal,'999,999.00') sal FROM emp;

--5.查询员工的姓名及其经理编号,要求对于没有经理的显示“No Manager”字符串。
SELECT ename,nvl2(mgr,to_char(mgr),'No Manager') mgr
 FROM emp;

--6.将员工的参加工作日期按如下格式显示:月份/年份。 
SELECT ename,to_char(hiredate,'mm/yyyy')hiredate 
 FROM emp;

--7.在员工表中查询出员工的工资,并计算应交税款:如果工资小于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) tax
    FROM emp;

--8.创建一个查询显示所有雇员的 ename和 sal。格式化sal为 15 个字符长度,用 $ 左填充,列标签 SALARY。
SELECT ename,lpad(sal,15,'$') 
 FROM emp;
 
------------------------实验2    使用WHERE和ORDER BY子句--------
--实验要求
--(1)掌握WHERE子句的用法。
--(2)掌握ORDER BY子句的用法。
--实验步骤
--(1)创建一个查询显示工资大于2850美元的雇员的姓名及工资
SELECT ename,sal FROM emp 
 WHERE sal>2850;
--(2)显示工资不在1500到2850美元之间的雇员的姓名及工资
SELECT ename,sal 
 FROM emp 
  WHERE sal not between 1500 and 2850;
--(3)显示在10和30部门工作并且工资大于1500美元的雇员的姓名和工资,列标题显示为Employee和Monthly Salary 
SELECT ename,sal 
 FROM emp 
  WHERE sal>1500 AND deptno IN(10,30);
--(4)显示奖金比工资多10%以上的雇员的姓名、工资及奖金。
SELECT ename,sal,comm 
 FROM emp 
  WHERE sal*1.1<comm;
--思考练习题
--1.创建一个查询显示雇员编号为7566的雇员的姓名和部门编号。
SELECT ename,deptno 
 FROM emp 
  WHERE empno=7566;
--2.显示受雇时间在February 20,1981和May 1,1981之间的雇员的姓名、工资、及受雇时间,并以受雇时间升序排列。
SELECT ename,sal,hiredate 
 FROM emp 
  WHERE hiredate BETWEEN '20-2月-1981'  AND '1-3月-1981' ORDER BY hiredate ASC;
--3.显示在10号和30号部门工作的雇员的姓名及其部门编号,并以字母顺序排列。
SELECT ename,deptno 
 FROM emp 
  WHERE deptno IN (10,30) ORDER BY ename;
--4.显示所有受雇于1982年的雇员的姓名和受雇时间。
SELECT ename,hiredate 
 FROM emp 
  WHERE TO_CHAR(hiredate,'YYYY')=1982;
--5.显示没有上级管理员的雇员的姓名及其工作。
SELECT ename,job 
 FROM emp 
  WHERE mgr IS NULL;
--6.显示能挣得奖金的雇员的姓名、工资、奖金,并以工资和奖金降序排列。
SELECT ename,sal,comm 
 FROM emp 
  WHERE comm>0 ORDER BY sal DESC,  comm DESC;
--7.显示姓名中第三个字母为A的雇员的姓名。
SELECT ename 
 FROM emp 
  WHERE ename LIKE '__A%';
--8.显示姓名中两次出现字母L并且在30部门工作或者其管理员编号是7782的雇员的姓名。
SELECT ename 
 FROM emp 
  WHERE ename LIKE '%L%L%' AND (deptno=30 OR mgr=7782);
--9.显示工作为Clerk或Analyst并且工资不等于$1000、$3000、$5000的雇员的姓名、工作及工资。
SELECT ename,job,sal 
 FROM emp 
  WHERE LOWER(job) IN ('clerk','analyst')  AND  sal NOT IN (1000,3000,5000);

------------------实验3    在SELECT语句中使用单行函数--------
--实验要求
--掌握常用的单行函数的用法。
--实验步骤
--(1)显示雇员的编号、姓名、工资以及工资增长15%后的整数值(以New Salary作为列标题)
SELECT empno,ename,sal,sal*1.15 "New Salary" 
 FROM emp;
--(2)在(1)的基础上,增加一个列Increase显示new salary和salary的差值
SELECT empno,ename,sal,sal*1.15 "New Salary",sal*0.15 "Increase" 
 FROM emp;
--(3)显示雇员姓名并以*为指示符代表工资数额(列标题为EMPLOYEE_AND_THEIR_SALARIES),一个指示符代表一百美元,并以工资数额降序排列。
SELECT ename||RPAD('*',TRUNC(sal/100),'*') AS "EMPLOYEE_AND_THEIR_SALARIES" 
 FROM emp;    
--思考练习题
--1.编写一个显示当期日期的查询,列标题为Date。
SELECT sysdate "Date" 
 FROM dual;
--2.显示雇员姓名、受雇日期及工资复审日期(复审日期为受雇后6个月后的第一个星期一),复审日期以列标题REVIEW显示。
SELECT ename,hiredate,TO_CHAR(NEXT_DAY(ADD_MONTHS(hiredate,6),'星期一') ,
'DAY","DDSPTH" of "MONTH","YYYY','nls_date_language=american') 
  AS "REVIEW" 
   FROM emp;
--3.显示每个雇员的姓名并计算出从受雇日期起到目前一共工作了多少个月,以列标题MONTHS_WORKED显示月数(四舍五入),输出以月数升序排列。
SELECT ename,ROUND(MONTHS_BETWEEN(sysdate,hiredate) )"MONTHS_WORKED" 
 FROM emp ORDER BY "MONTHS_WORKED";
--4.编写一个以下面的形式输出的查询:
--<employee name> earns <salary> monthly but wants <3 times salary>.
--列标题为Dream Salaries。
SELECT ename ||' earns '||sal||' monthly but wants '||sal*3 AS "Dream Salaries" 
 FROM emp;

--5.创建一个查询显示每个雇员的姓名及工资(列标题为SALARY),工资的显示模式为:占15个字符的宽度,对于不够位数的以$填充。
SELECT ename,LPAD(sal,15,'$') "SALARY" 
 FROM emp;
--6.编写一个查询显示名字以J、A、M开头的雇员的姓名及姓名所占的字符数,姓名的显示格式为第一个字母大写其他字母小写,为每个列设置合适的列标题。
SELECT ename,hiredate,TO_CHAR(hiredate,'DAY') "DAY" 
 FROM emp ORDER BY TO_CHAR(hiredate,'D');
--7.显示雇员的姓名、受雇日期及受雇当天是星期几(列标题为DAY),并以DAY升序排列
--创建一个查询显示雇员姓名及其奖金(列标题为COMM),如果该雇员不能获得奖金则以“No Commission.”显示。
SELECT ename,  CASE WHEN comm>0 THEN TO_CHAR(comm,'9999999') 
 ELSE 'No Commission' END "COMM" 
  FROM emp;

Oracle第三章练习相关推荐

  1. oracle第三章、第四章作业

    ---------------------第三章课后作业----------------------------- --1.查询入职时间在1982-7-9之后,并且不从事SALESMAN工作的员工姓名 ...

  2. oracle siplugincol表,ORACLE 经常使用的命令工具-第三章:表

    第三章:表 T-P*sd:@1t0 1.create a table51Testing软件测试网 i6}2pdjT1Wf 51Testing软件测试网,UPta6i(W/L(w sql> cre ...

  3. oracle体系三大文件,oracle 体系_第三章控制文件

    第三章 控制文件 1.功能特点 记录数据库当前的物理状态 维护数据库的一致性,是一个二进制的小文件 在mount阶段被读取,记录rman备份的元数据 查看database控制文件的位置 Show pa ...

  4. mysql 导入百万级数据 几种 java_Java 修行第034天--执行计划及其使用--Oracle数据导入导出--第三章MySQL使用...

    执行计划中牢记几句话: -- 尽量避免是*代替所有列,编写查询语句时使用具体列名代替*,可以防止全表扫描 -- 尽可能少的使用like关键字进行模糊查询 -- 建立适当的索引可以提高查询效率 十三. ...

  5. 【书评:Oracle查询优化改写】第三章

    [书评:Oracle查询优化改写]第三章 BLOG文档结构图 一.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 隐含参数 _ ...

  6. 《Oracle Concept》第三章 - 12

    背景: 按照<Oracle Concept>的结构一起了解Oracle数据库,这是学习Oracle从入门到精通的基础. 前言<Introduction to Oracle Datab ...

  7. oracle 获取第三行,Oracle 11g 第三章知识点总结——单行函数

    Oracle 11g 第三章知识点总结--单行函数 知识点预览 单行函数 单行函数 1. SQL 函数 2.两种 SQL 函数 3.单行函数 a) 操作数句对象 b)接受函数返回一个结果 c)只对一行 ...

  8. Oracle PL/SQL 第三章--运算符与表达式

    Oracle PL/SQL 第三章--运算符与表达式 目录 Oracle PL/SQL 第三章--运算符与表达式 1.运算符分类 1.1.算术运算符 1.2.关系运算符 1.3.比较运算符 1.4.逻 ...

  9. ticktock卖给oracle,ticktock第三章怎么过 ticktock第三章玩家一通关攻略

    ticktock第三章怎么过?ticktock是一个冒险逃脱类手游,很多玩家都不知道在ticktock第三章中如何让玩家一成功脱险.下面就是优游网小编为大家带来的ticktock第三章玩家一通关攻略了 ...

最新文章

  1. 差分隐私 机器学习_满足差分隐私的经验误差最小化方法
  2. About Instruments
  3. Python爬虫入门(2):爬虫基础了解
  4. 20. PWT、PCD(填坑篇)
  5. Linux bash卸载软件,Ubuntu卸载软件的4种方法
  6. CSS中meta标签的viewport
  7. 次数匹配(不需要在前面加“\”)
  8. 【Algorithm】逆序数的分治求解
  9. gulp怎么运行html文件,如果gulp-watch监视html文件,它会运行所有任务
  10. 十次方项目开发系列【1】:项目介绍和工程搭建
  11. Pytorch基于 LSTM 的自动写诗
  12. 数据分析(7)路径挖掘分析法 行为序列分析法
  13. 什么才是真正的 RESTful 架构?
  14. JavaWeb----Ajax技术
  15. pandas的使用(一)
  16. Docker的基本操作命令
  17. 通过Gartner 2018年新兴技术成熟度曲线解读大数据人工智能技术的发展
  18. 论文笔记 计算机模型的贝叶斯校准 Bayesian calibration of computer models
  19. PX4通过I2C方式添加自定义传感器(2)
  20. Java实现 LeetCode 187 重复的DNA序列

热门文章

  1. 刘韧:煮知识 论英雄
  2. excel如何拆分数据
  3. IEC 61850 Compatible OpenPLC for Cyber Attack Case Studies on Smart Substation Systems
  4. oracle 存储过程语法例子
  5. csp 2022.6
  6. android 开启闪光灯(手电筒)
  7. 虚拟机安装Ubuntu22.04 以及个人相关配置记录
  8. 输出日期为2021年的第几天(switch...case)
  9. 磁盘阵列柜 和存储有什么区别
  10. 记录每天学习的新知识:Composing builds