- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2011魔乐_oracle课堂笔记_SQL语句02
1、课程名称:SQL语句
2、知识点
2.1、上次课程的主要知识点
1、 Oracle数据库的四个主要用户:
· 超级管理员:sys / change_on_install;
· 普通管理员:system / manager;
· 普通用户(解锁):scott / tiger;
· 海量数据用户(解锁):sh / sh;
2、 sqlplus的主要命令:
· 设置每行显示的长度:SET LINESIZE 长度;
· 设置每页显示的长度:SET PAGESIZE 长度;
· 编辑与执行指令:ed、@;
· 连接用户:CONN 用户名 / 密码 [AS SYSDBA];
· 调用本机程序:HOST 命令;
3、 SQL的基本语法
SELECT [DISTINCT] * | 列 [别名] [,列 [别名],列 [别名] ...]
FROM 表名称 [别名]
[WHERE 条件(s)]
[ORDER BY 排序字段 [ASC | DESC] [,排序字段 [ASC | DESC],...]] ; 4、 在WHERE子句里面可以编写多个条件,条件判断:关系运算、逻辑运算、BETWEEN..AND、IN、LIKE、IS NULL;
5、 单行函数:UPPER()、LOWER()、INITCAP()、REPLACE()、LENGTH()、INSTR()、SUBSTR()、ROUND()、TO_CHAR()、TO_DATE()、NVL()、DECODE()、SYSDATE、MONTHS_BETWEEN()、ADD_MONTHS()、LAST_DAY()、NEXT_DAY();
2.2、习题讲解
1、 找出各月倒数第3天受雇的所有员工。
首先需要确定的是,每一个雇员的雇佣日期是不一样的,那么每一个雇佣日期所在月的最后一天(LAST_DAY())也肯定不一样,现在要求计算出各月倒数第三天雇佣(日期 – 数字)。
公式:雇佣日期 = LAST_DAY(雇佣日期) – 2;
SELECT * FROM emp
WHERE hiredate=LAST_DAY(hiredate)-2 ; 2、 找出早于12年前受雇的员工。
如果要计算年份,那么最简单的做法就是通过月数(MONTHS_BETWEEN())除以12;
SELECT * FROM emp WHERE MONTHS_BETWEEN(SYSDATE,hiredate)/1212 ; 3、 找出在(任何年份的)2月受聘的所有员工。
如果要想求出一个日期的月数,那么使用TO_CHAR()函数即可。
SELECT * FROM emp WHERE TO_CHAR(hiredate,mm)=02 ; SELECT * FROM emp WHERE TO_CHAR(hiredate,mm)=2 ; 4、 显示满10年服务年限的员工的姓名和受雇日期。
SELECT ename,hiredate FROM emp WHERE MONTHS_BETWEEN(SYSDATE,hiredate)/1210 ; 5、 显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面。
SELECT ename,hiredate FROM emp ORDER BY hiredate ; 6、 显示所有员工姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面。
既然要拆分年和月,则使用TO_CHAR()函数完成。
SELECT ename,TO_CHAR(hiredate,yyyy) year,TO_CHAR(hiredate,mm) months
FROM emp
ORDER BY months,year ; 可以发现,现在在Order BY子句里面使用的是别名,在所有子句之中,只有ORDER BY可以使用别名。
7、 显示在一个月为30天的情况所有员工的日薪金,忽略余数
SELECT ename,TRUNC(sal/30) FROM emp ; 8、 以年月日的方式显示所有员工的服务年限。
本题目的含义如下,例如,现在假设一个雇员是在1981-02-14雇佣,而今天的日期是2012年03月27日,那么这个雇员已经被公司雇佣了:30年、1个月、13天;
· 步骤一:计算出每一个雇员到今天为止雇佣的年份,通过月份操作;
SELECT empno,ename,hiredate,
TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) year
FROM emp ; · 步骤二:计算出每一个雇员被雇佣的月数,在之前计算年的时候剩下的无法整除的部分就是月,使用MOD()
SELECT empno,ename
原创力文档


文档评论(0)