学习了常用的单列函数,以及表与表之间的连接,练习题目如下:

<单行函数>
–(1)写一个查询,用首字母大写,其他字母小写显示雇员的 ename ,显示名字的长度,并
–给每列一个适当的标签,条件是满足所有雇员名字的开始字母是J、A或 M的雇员,并对查
–询结果按雇员的ename升序排序。 (提示:使用initcap 、length 、substr)
SELECT initcap(ename) 首字母大写的姓名,LENGTH(ename) 姓名的长度 FROM emp
WHERE SUBSTR(ename,1,1) IN (‘J’,’A’,’M’)
ORDER BY ename

–(2)查询 员工姓名中中包含大写或小写字母 A的 员工姓名。
SELECT ename 员工姓名 FROM emp
WHERE INSTR(ename,’A’)>0 OR INSTR(ename,’a’)>0

–(3)查询部门编号为10或20 ,入职日期在1981年5月1日之后,并且姓名中包含大写
–字母 A 的 员工姓名,员 工 姓 名 长 度。(提 示:要 求 使 用INST R 函 数,不 能 使 用like进 行 判
–断)
SELECT ename 员工姓名,LENGTH(ename) 姓名长度 FROM emp
WHERE deptno IN (10,20) AND hiredate>’1-5月-81’ AND INSTR(ename,’A’)>0

–(4)查询每个职工的编号、姓名、工资。要求:1 将查询到的数据按照一定的格式合并成一个字符串。2 前10位表示编号,不足部分用填充,左对齐。3 中间10位表示姓名,不足部分用填充,左对齐。4 后10位表示工资,不足部分用*填充,右对齐。
SELECT concat(CONCAT(RPAD(empno,10,’‘),RPAD( ename,10,’‘)),LPAD( sal,10,’*’)) 职工编号加姓名加工资 FROM emp

–(5)写一个查询,分别计算100 .456 四舍五入到小数点后第2位、第1位、整数位的值。
SELECT ROUND(100.456,2) 小数点后两位四舍五入,ROUND(100.456,1) 小数点后一位四舍五入,ROUND(100.456,0) 整数四舍五入
FROM dual

–(6)写一个查询,分别计算100 .456 从小数点后第2位、第1位、整数位截断的值。
SELECT TRUNC(100.456,2) 小数点后两位截取,TRUNC(100.456,1) 小数点后一位截取,TRUNC(100.456,0) 整数位截取 FROM dual

–(7)查询每个员工截止到现在一共入职多少天?
SELECT ename 姓名,TRUNC (SYSDATE-hiredate,0) 入职天数 FROM emp

–(9)查询服务器当前时间。
SELECT SYSDATE FROM dual

–(10)查询10号和20号部门的员工截止到2000年1月1日,工作了多少个月,入职的
–月份。(提示:使用 months ,between ,extract)
SELECT ename, MONTHS_BETWEEN(‘1-1月-00’,hiredate) 工作月数,EXTRACT(YEAR FROM hiredate) 入职月份
FROM emp

–(11)如果员工试用期6个月,查询职位不是 MANAGER的 员工姓名、入职日期、转正日
–期、入职日期后的第一个星期一、入职当月的最后一天日期。
SELECT ename 员工姓名,hiredate 入职时间,add_months(hiredate,6) 转正日期,
next_day(hiredate,’星期一’) 第一个星期一,last_day(hiredate) 最后一天日期
FROM emp

–(12)显示服务器系统当前时间,格式为2007-10-12 17 :11 :11 。
SELECT to_char(SYSDATE,’YYYY-MM-DD HH24:MI:SS’) 当前时间 FROM dual

–(13)显示ename、hiredate和雇员开始工作日是星期几,列标签 DAY 。
SELECT ename,hiredate,to_char(hiredate,’DAY’) DAY FROM emp

–(14)查询 员工姓名、工资、格式化的工资(¥ 999 ,999 .99)。
SELECT ename 员工姓名,sal 工资,to_char(sal,’L999,999.99’) 格式化工资 FROM emp

–(15)把字符串2015-3月-18 13:13:13转换成日期格式,并计算和系统当前时间间隔多
–少天 。
SELECT to_date(‘2015-3月-18 13:13:13’,’YYYY-MONTH-DD HH24:MI:SS’) 转为日期格式,
TRUNC (SYSDATE-to_date(‘2015-3月-18 13:13:13’,’YYYY-MONTH-DD HH24:MI:SS’),0) 和当前相差天数
FROM dual

–(16)计算2000年1月1日到现在有多少月、多少周(四舍五入)。
SELECT round(months_between(SYSDATE,’1-1月-00’),0) 月数,
ROUND((SYSDATE-to_date(‘1-1月-00’))/7,0) 周数
FROM dual

–(17)查询员工 ENAME的第三个字母是 A的员工的信息(使用2个函数)。
SELECT ename FROM emp
WHERE SUBSTR(ename,3,1)=’A’
SELECT ename FROM emp
WHERE INSTR(ename,’A’)=3

–(18)使用trim函数将字符串’hello’、’Hello’、 ‘bllb’、 ‘hello’分别处理得到下列字符串ello 、
–H ello 、ll 、hello 。
SELECT TRIM(‘h’ FROM ‘hello’),REPLACE(‘Hello’,’H’,’H ‘),
TRIM(‘b’ FROM ‘bllb’),TRIM(’ ’ FROM ‘hello’)
FROM dual
–(19)将员工工资按如下格式显示:123,234.00 RMB。
SELECT concat(to_char(sal,’999,999.99’),’RMB’) 工资 FROM emp

–(20)查询员工的姓名及其经理编号,要求对于没有经理的显示“No Manager”字符串。
SELECT ename 员工姓名,nvl(to_char(mgr),’No Manager’) 经理编号
FROM emp

–(21)将员工的参加工作日期按如下格式显示:月份/年份。
SELECT to_char(hiredate,’MM/YYYY’) 月份/年份 FROM emp

–(22)在员工表中查询出员工的工资,并计算应交税款:如果工资小于1000 ,税率为0 ;如
–果工资大于等于1000并小于2000 ,税率为10% ;如果工资大于等于2000并小于3000 ,税率
–为15% ;如果工资大于等于3000 ,税率为20% 。
SELECT ename 员工,sal 工资,(CASE
WHEN (sal>0 AND sal<1000) THEN sal*0
WHEN (sal >=1000 AND sal<2000)THEN sal*0.1
WHEN (sal>=2000 AND sal<3000)THEN sal*0.15
when sal>=3000 THEN sal*0.2
END
) 税款 FROM emp

–(23)创建一个查询显示所有雇员的 ename和 sal。格式化sal为 15个字符长度,用 –左填充,列标签SALARY。SELECTLPAD(ename,15,′–左填充,列标签SALARY。SELECTLPAD(ename,15,′ –左填充,列标签 SALARY 。 SELECT LPAD(ename,15,’’) SALARY,sal FROM emp

<多表连接>
–(1)写一个查询,显示所有 员工姓名、部门编号、部门名称。
SELECT e.ename 员工姓名,e.deptno 部门编号,d.dname 部门名称
FROM emp e,dept d
WHERE e.deptno=d.deptno

–(2)写一个查询,显示所有工作在CHICAGO并且奖金不为空的 员工姓名、工作地点、
–奖金。
SELECT e.ename 员工姓名,d.loc 工作地点
FROM emp e,dept d
WHERE e.deptno=d.deptno AND d.loc=’CHICAGO’
AND e.comm IS NOT NULL

–(3)写一个查询,显示所有姓名中含有 A字符的 员工姓名 、工作地点。
SELECT e.ename 员工姓名,d.loc 工作地点
FROM emp e,dept d
WHERE e.deptno=d.deptno AND INSTR(e.ename,’A’)>0

–(4)查询每个员工的编号 、姓名、工资、工资等级、所在工作城市 ,按照工资等级进行升序
–排序。(非等值连接)
SELECT e.empno 员工编号,e.ename 员工姓名,e.sal 工资,s.grade 工资等级,d.loc 工作城市
FROM emp e,dept d,salgrade s
WHERE e.deptno=d.deptno AND e.sal
BETWEEN s.losal AND s.hisal

–(5)查询所有工作在 NEWYORK和CHICAGO的 员工姓名、员工编号,以及他们的经
–理姓名、经理编号。(自连接)
SELECT e.ename 员工姓名,e.empno 员工编号,m.ename 经理姓名,m.empno 经理编号
FROM emp e,emp m,dept d
WHERE e.mgr=m.empno
AND e.deptno=d.deptno
AND d.loc IN (‘NEW YORK’,’CHICAGO’)

–(6)查询所有员工编号 、姓名、部门名称,包括没有部门的员工也要显示出来 。(外连接)
SELECT e.empno 员工编号,e.ename 员工姓名,d.dname 部门名称
FROM emp e,dept d
WHERE e.deptno=d.deptno(+)

–(7)使用SQL-99写法,完成如下练习 。
–创建一个员工表和部门表的交叉连接。(cross join 等同于迪卡尔乘积)
SELECT * FROM emp CROSS JOIN dept

–使用自然连接,显示入职日期在1980年5月1日之后的 员工姓名、部门名称、入职日期。(natural join)
SELECT ename 员工姓名,dname 部门名称,hiredate 入职日期
FROM emp NATURAL JOIN dept
WHERE hiredate>’1-5月-80’

–使用USING子句,显示工作在 CHICAGO的 员工姓名、部门名称、工作地点。
SELECT e.ename 员工姓名,d.dname 部门名称,d.loc 工作地点
FROM emp e JOIN dept d USING(deptno)
WHERE d.loc=’CHICAGO’

–使用ON子句,显示工作在 CHICAGO的 员工姓名、部门名称、工作地点、薪资等级。
SELECT e.ename 员工姓名, d.dname 部门名称,d.loc 工作地点,s.grade 薪资等级
FROM emp e
JOIN dept d
ON(e.deptno=d.deptno)
JOIN salgrade s
ON(e.sal BETWEEN s.losal AND s.hisal)
WHERE d.loc=’CHICAGO’

–使用左连接,查询每个员工的姓名 、经理姓名,没有经理的 King也要显示出来 。(左边是满的,右边是空的)
SELECT e.ename 员工姓名,m.ename 经理姓名
FROM emp e
LEFT OUTER JOIN emp m
ON (e.mgr=m.empno)

–使用右连接,查询每个员工的姓名 、经理姓名,没有经理的 King也要显示出来 。(右边是满的)
SELECT e.ename 员工姓名,m.ename 经理姓名
FROM emp m
RIGHT OUTER JOIN emp e
ON(e.mgr=m.empno)

–(8)显示员工SMITH的姓名、部门名称、直接上级名称 。
SELECT e.ename 员工姓名,d.dname 部门名称,m.ename 直接上级名称
FROM emp e,emp m,dept d
WHERE e.deptno=d.deptno AND e.ename=’SMITH’ AND e.mgr=m.empno

–(9)显示 员工姓名 、部门名称、工资、工资级别,要求工资级别大于 4级。
SELECT e.ename 员工姓名,d.dname 部门名称,e.sal 工资,s.grade 工资级别
FROM emp e,dept d,salgrade s
WHERE e.deptno=d.deptno AND s.grade>4
AND e.sal BETWEEN s.losal AND s.hisal

–(10)显示员工KING和FORD管理的 员工姓名及其经理姓名
SELECT a.员工,a.管理的员工,m.ename 经理姓名
FROM (SELECT p.mgr,p.ename 员工,e.ename 管理的员工
FROM emp e,emp p
WHERE p.ename IN (‘KING’,’FORD’) AND e.mgr=p.empno) a,emp m
WHERE a.mgr=m.empno(+)

–(11)显示 员工姓名 、参加工作时间 、经理名、参加工作时间 ,要求参加时间比经理早 。
SELECT e.ename 员工姓名,e.hiredate 员工工作时间,m.ename 经理姓名,m.hiredate 经理工作时间
FROM emp e,emp m
WHERE e.mgr=m.empno AND e.hiredate

Oracle——单列函数,多表连接相关推荐

  1. 数据库编程1 Oracle 过滤 函数 分组 外连接 自连接

    [本文谢绝转载原文来自http://990487026.blog.51cto.com] <大纲>数据库编程1 Oracle 过滤 函数 分组 外连接 自连接本文实验基于的数据表:winso ...

  2. Oracle 优化器_表连接

    概述 在写SQL的时候,有时候涉及到的不仅只有一个表,这个时候,就需要表连接了.Oracle优化器处理SQL语句时,根据SQL语句,确定表的连接顺序(谁是驱动表,谁是被驱动表及 哪个表先和哪个表做链接 ...

  3. oracle中的多表连接

    2019独角兽企业重金招聘Python工程师标准>>> 简单连接: 简单连接仅仅是通过select子句和from子句来连接多个表,其查询结果是一个通过笛卡尔积所生成的表.在实际需求中 ...

  4. Oracle练习:用表连接实现查询平均工资最高的部门信息

    Oracle练习 利用表连接查询平均工资最高的部门信息 当查询结果数据来自于多两张表时,需要使用特定的连接条件将两张表的记录连接在一起,这种语法"表链接". 在做查询平均工资最高的 ...

  5. 【Oracle】三种表连接方式

    表连接的方式有三种分别是:排序合并连接(Sort Merge Join).嵌套循环连接(Nested Loops Join).哈希连接(Hash Join). 1. 排序合并连接(Sort Merge ...

  6. ORACLE 使用函数返回表数据

    #1.建立一个表对象类型 create or replace type mcard.obj_table_field as object (   sectionid number(1),   cardi ...

  7. ORACLE中的多表连接查询

    这篇文章讲述了多表之间连接,包括内连接.外连接,如有错误或者不妥之处,还请各位大佬批评指正. 连表 SQL中操作多个表,以便可以查询到所需数据,其中包括内连接.外链接.等值连接.非等值连接.左连接.右 ...

  8. oracle中inner函数,Oracle Inner Join(多表连接)

    oracle函数 的 Oracle Inner Join(多表连接) 在本教程中,您将学习Oracle INNER JOIN子句以从表中检索具有其他表的匹配行的行. Oracle INNER JOIN ...

  9. Oracle表连接深入浅出

    表的连接 表的连接是指在一个SQL语句中通过表与表之间的关联,从一个或多个表检索出相关的数据.如果一个SQL语句的关联表超过两个, 那么连接的顺序如何呢?ORACLE首先连接其中的两个表,产生一个结果 ...

最新文章

  1. 恢复误删的进程在使用的文件【转】
  2. java 过滤器 中文_Java web整站中文过滤器实现
  3. 打造精简版Linux-mini
  4. 学python买什么书好-学python3什么书好
  5. RocketMQ的Producer详解之顺序消息(原理)
  6. JAVA方法 字符串与unicode的相互转换
  7. Django 部署基础【使用 Nginx + uWSGI 的方式来部署来 Django】
  8. npm安装less插件 - cmd篇
  9. systemctl命令完全指南
  10. ACM动态规划总结(by utobe67)
  11. 计算机基础知识高职版,计算机应用基础 课件教学全套课件(高职版大学计算机基础 第7章 计算机网络基础知识 课件.pptx...
  12. Libevent 源码文件结构分析
  13. Unity Editor 编辑器扩展 九 Gizmos
  14. Excel单元格设置选择项
  15. 软件项目中的成本构成及估算方法【转】
  16. 财务报表分析实务(第五讲)
  17. PCB碎碎念——贴片封装与标识
  18. vim中,c/cpp文件如何在头文件和.c/.cpp文件中快速的进行跳转
  19. (Sentinel-2A、Sentinel-2B)2017年全年中国地区数据
  20. 云南大学02届计算机系,云南大学2019年第二届 “东陆青年学者论坛”公告

热门文章

  1. 【C语言:精准打击】scanf_s()函数与scanf()函数的相关解决方案
  2. 如何利用蜂鸣器制作MIDI音乐
  3. LabVIEW基础(1)
  4. 【Git】回退单个文件到指定版本
  5. 分布式架构和集群架构的区别
  6. 谷歌浏览器翻译英文网页功能消失解决方案
  7. 实际项目中的消息中心
  8. HTML基础知识整理
  9. 西红柿炒鸡蛋教程(从入门到精通)
  10. 爬虫学习经验分享-------某点评网站