相信把这99条sql搞定,Oracle基本笔试简直就像玩的一样(史上最全,最经典的入门级Oracle查询语句)

1. select * from emp;

2. select empno, ename, job from emp;





3. select empno 编号, ename 姓名, job 工作 from emp;





4. select job from emp;





5. select distinct job from emp;





6. select distinct empno, job from emp;

说明:由于雇员编号不反复, 所以此时证明全部的列没有反复,所以不能消除掉反复的列.





7. 查询出雇员的编号, 姓名, 工作, 可是显示的格式:编号是: 7369 的雇员, 姓名是: smith, 工作是: clear

select '编号是: ' || empno || '的雇员, 姓名是: ' || ename || ', 工作是: ' || job from emp;





8. 求出每一个雇员的姓名及年薪

select ename, sal * 12 income from emp;





9. 求出工资大于 1500 的全部雇员信息

select * from emp where sal > 1500;





10. 查询每月能够得到奖金的雇员信息

select * from emp where comm is not null;





11. 查询没有奖金的雇员信息

select * from emp where comm is null;





12. 查询出基本工资大于 1500 同一时候能够领取奖金的雇员信息

select * from emp where sal > 1500 and comm is not null;





13. 查询出基本工资大于 1500 或者能够领取奖金的雇员信息

select * from emp where sal > 1500 or comm is not null;





14. 查询出基本工资不大于 1500 或者不能够领取奖金的雇员信息

select * from emp where not(sal > 1500 and comm is not null);





15. 查询基本工资大于 1500, 可是小于 3000 的所有雇员信息

select * from emp where sal > 1500 and sal < 3000;





16. 查询基本工资大于等于 1500, 可是小于等于 3000 的所有雇员信息

select * from emp where sal >= 1500 and sal <= 3000;

select * from emp where sal between 1500 and 3000;





17. 查询出在 1981 年雇佣的所有雇员信息(1981 年 1 月 1 日 到 1981 年 12 月 31 日之间的雇佣的雇员)

select * from emp where hiredate between '1-1月-81' and '31-12月-81';





18. 要求查询出姓名是 smith 的雇员信息

select * from emp where ename = 'SMITH';





19. 要求查询出雇员是 7369, 7499, 7521 的雇员的详细信息

select * from emp where empno = 7369 or empno = 7499 or empno = 7521;

select * from emp where empno in(7369, 7499, 7521);





20. 要求查询出雇员不是 7369, 7499, 7521 的雇员的详细信息

select * from emp where empno not in(7369, 7499, 7521);





21. 要求查询出姓名是 smith, allen, king 的雇员信息

select * from emp where ename in('SMITH', 'ALLEN', 'KING');





22. 查询出全部雇员姓名中第二个字母包括 "M" 的雇员信息

        select * from emp where ename like '_M%';





23. 查询出雇员姓名中包括字母 M 的雇员信息

select * from emp where ename like '%M%';





24. 要求查询出在 1981 年雇佣的雇员信息

select * from emp where hiredate like '%81%';





25. 查询工资中包括 5 的雇员信息

select * from emp where sal like '%5%';





26. 查询雇员编号不是 7369 的雇员信息

select * from emp where empno != 7369;

select * from emp where empno <> 7369;





27. 要求依照工资由低到高排序

select * frm emp order by sal;

select * from emp order by sal asc;





28. 要求依照工资由高到低排序

select * from emp order by sal desc;





29. 要求查询出 20 部门的全部雇员信息, 查询的信息依照工资由高到低排序,假设工资相等,则依照雇佣日期由早到晚排序.

select * from emp where deptno = 20 order by sal desc, hiredate asc;





30. 将小写字母变为大写字母

select upper('hello') from dual;





31. 将大写字母变为小写字母

select lower('HELLO WORLD') from dual;





32. 要求查询出姓名是 smith 的雇员信息

select * from emp where ename = upper('smith');





33. 使用 initcap() 函数将单词的第一个字母大写

select initcap('hello world') from dual;





34. 将雇员表中的雇员姓名变为开头字母大写

select initcap(ename) from emp;





35. 将字符串 "hello" 和 "world" 进行串联

select concat('hello ', 'world') from dual;





36. 对字符串进行操作的经常使用字符处理函数

select substr('hello', 1, 3) 截取字符串, length('hello') 字符串的长度, replace('hello', 'l', 'x') 字符串替换 from dual;

select substr('hello', 0, 3) 截取字符串, length('hello') 字符串的长度, replace('hello', 'l', 'x') 字符串替换 from dual;





37. 显示全部雇员的姓名及姓名的后三个字符

select ename, substr(ename, length(ename) -2) from emp;

select ename, substr(ename, -3, 3) from emp;





38. 使用数值函数运行四舍五入操作

select round(789.536) from dual;





39. 要求将 789.536 数值保留两位小数

select round(789.536, 2) from dual;





40. 要求将 789.536 数值中的整数的十位进行四舍五入进位

select round(789.536, -2) from dual;





41. 採用 trunc() 函数不会保留不论什么小数,并且小数点也不会运行四舍五入的操作

select trunc(789.536) from dual;





42. 通过 trunc() 也能够指定小数点的保留位数

select trunc(789.536, 2) from dual;





43. 作用负数表示位数

select trunc(789.536, -2) from dual;





44. 使用 mod() 函数能够进行取余的操作

select mod(10, 3) from dual;





45. 显示 10 部门雇员进入公司的星期数(当前日期 - 雇佣日期 = 天数 / 7 = 星期数)

select empno, ename, round((sysdate - hiredate) / 7) from emp where deptno = 10;





46. 日期函数

months_between(): 求出给定日期范围的月数

add_months(): 在指定的日期上加上指定的月数, 求出之后的日期

next_day(): 指定日期的下一个日期

last_day(): 求出给定日期当月的最后一天日期





47. 

select empno, ename, months_between(sysdate, hiredate) from emp;

select empno, ename, round(months_between(sysdate, hiredate)) from emp;





48. select sysdate, add_months(sysdate, 4) from dual;





49. select next_day(sysdate, '星期一') from dual;





50. select last_day(sysdate) from dual;





51. 转换函数

to_char(): 转换成字符串

to_number(): 转换成数字

to_date(): 转换成日期





52. 查询全部雇员的雇员编号, 姓名, 雇佣日期

select empno, 

ename,

to_char(hiredate, 'yyyy') year,

to_char(hiredate, 'mm') months,

to_char(hiredate, 'dd') day

from emp;





select empno, ename, to_char(hiredate, 'yyyy-mm-dd') from emp;





select empno, ename, to_char(hiredate, 'fmyyyy-mm-dd') from emp;





53. 查询全部雇员的编号, 姓名和工资

select empno, ename, sal from emp;

select empno, ename, to_char(sal, '99,999') from emp;

select empno, ename, to_char(sal, 'L99,999') from emp;

select empno, ename, to_char(sal, '$99,999') from emp;





54. select to_number('123') + to_number('123') from dual;





55. 将一个字符串转换成日期类型

select to_date('2009-01-01', 'yyyy-mm-dd') from dual;





56. 求出每一个雇员的年薪(要求加上奖金)

select empno, ename, sal, comm, (sal + comm) * 12 from emp;

select empno, ename, sal, comm, nvl(comm, 0), (sal + nvl(comm, 0)) * 12 income from emp;





57. decode() 函数类似于 if....elsif...else 语句

select decode(1, 1, '内容是 1', 2, '内容是 2', 3, '内容是 3') from dual;





58. 查询出雇员的编号, 姓名, 雇佣日期及工作, 要求将雇员的工作替换成下面信息:

select empno 雇员编号, 

ename 雇员姓名, 

hiredate 雇佣日期, 

decode(job, 

'CLERK', '业务员', 

'SALESMAN', '销售人员',

'MANAGER', '经理',

'ANALYST', '分析员',

'PRESIDENT', '总裁'

) 职位

from emp;





59. 笛卡尔积(交差连接)

select * from emp, dept;

select * from emp cross join dept;





60. 内连接

select * from emp e, dept d where e.deptno = d.deptno;

select * from emp e inner join dept d on e.deptno = d.deptno;

select * from emp e join dept d on e.deptno = d.deptno;









61. 自然连接

select * from emp natural join dept;

select * from emp e join dept d using(deptno); 





62. 要求查询出雇员的编号, 姓名, 部门的编号, 名称, 地址

select e.empno, e.ename, d.deptno, d.dname, d.loc from emp e, dept d where e.deptno = d.deptno;





63. 要求查询出雇员的姓名, 工作, 雇员的直接上级领导姓名

select e.ename, e.job, m.ename from emp e, emp m where e.mgr = m.empno;





64. 要求查询出雇员的姓名, 工作, 雇员的直接上级领导姓名以及部门名称

select e.ename, e.job, m.ename, d.dname from emp e, emp m, dept d where e.mgr = m.empno and e.deptno = d.deptno;





65. 要求查询出每一个雇员的姓名, 工资, 部门名称, 工资在公司的等级(salgrade), 及其领导的姓名及工资所在公司的等级

select e.ename, e.sal, d.dname, s.grade, m.ename, m.sal, ms.grade

from emp e, dept d, salgrade s, emp m, salgrade ms

where e.deptno = d.deptno 

and e.sal between s.losal and s.hisal 

and e.mgr = m.empno

and m.sal between ms.losal and ms.hisal;





select e.ename, 

e.sal, 

d.dname, 

decode(s.grade, 1, '第五等级', 2, '第四等级', 3, '第三等级', 4, '第二等级', 5, '第一等级'), 

m.ename, 

m.sal, 

decode(ms.grade, 1, '第五等级', 2, '第四等级', 3, '第三等级', 4, '第二等级', 5, '第一等级')

from emp e, dept d, salgrade s, emp m, salgrade ms

where e.deptno = d.deptno and e.sal between s.losal and s.hisal and e.mgr = m.empno

and m.sal between ms.losal and ms.hisal;





66. select empno, ename, d.deptno, dname, loc from emp e, dept d where e.deptno = d.deptno;

    select empno, ename, d.deptno, dname, loc from emp e inner join dept d on e.deptno = d.deptno;





67. 左外连接

    select empno, ename, d.deptno, dname, loc from emp e, dept d where e.deptno = d.deptno(+);

    select empno, ename, d.deptno, dname, loc from emp e left outer join dept d on e.deptno = d.deptno;

    select empno, ename, d.deptno, dname, loc from emp e left join dept d on e.deptno = d.deptno(+);





68. 右外连接

    select empno, ename, d.deptno, dname, loc from emp e, dept d where e.deptno(+) = d.deptno;

    select empno, ename, d.deptno, dname, loc from emp e right outer join dept d on e.deptno = d.deptno;

    select empno, ename, d.deptno, dname, loc from emp e right join dept d on e.deptno = d.deptno;





69. select e.empno, e.ename, m.empno, m.ename from emp e, emp m where e.mgr = m.empno;





70. select e.empno, e.ename, m.empno, m.ename from emp e, emp m where e.mgr = m.empno(+);





71. 

select * from emp e, dept d where e.deptno = d.deptno and d.deptno = 30;

select * from emp e inner join dept d on e.deptno = d.deptno where d.deptno = 30;

select * from emp e join dept d on e.deptno = d.deptno where d.deptno = 30;

select * from emp e natural join dept d where deptno = 30;

select * from emp e join dept d using(deptno) where deptno = 30;





72. 

select e.ename, d.deptno, d.dname, d.loc from emp e right outer join dept d on e.deptno = d.deptno;

select e.ename, d.deptno, d.dname, d.loc from emp e right join dept d on e.deptno = d.deptno;

select e.ename, d.deptno, d.dname, d.loc from emp e, dept d where e.deptno(+) = d.deptno;





73. select count(ename) from emp;





74. select min(sal) from emp;





75. select max(sal) from emp;





76. select sum(sal) from emp;





77. select avg(sal) from emp;





78. select sum(sal) from emp where deptno = 20;





79. select avg(sal) from emp where deptno = 20;





80. 求出每一个部门的雇员数量

select deptno, count(deptno) from emp group by deptno;

select deptno, count(empno) from emp group by deptno;





81. 求出每一个部门的平均工资

select deptno, avg(sal) from emp group by deptno;





82. 按部门分组, 并显示部门的名称, 及每一个部门的员工数

select d.dname, count(e.empno) from emp e, dept d 

where e.deptno = d.deptno

group by d.dname;





select d.deptno, d.dname, temp.c

from (select deptno, count(e.empno) c from emp e group by e.deptno) temp, dept d

where temp.deptno = d.deptno;





83. 要求显示出平均工资大于 2000 的部门编号和平均工资

select deptno, avg(sal) from emp group by deptno having avg(sal) > 2000;





84. 显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,而且要满足从事同一工作的雇员的月工资合计大于 5000, 输出结果按月工资的合计升序排序.

select job, sum(sal) su from emp where job <> 'SALESMAN' group by job having sum(sal) > 5000 order by su;





select temp.job, sum(temp.sal) s

from (select job, sal from emp e where job <> 'SALESMAN') temp

group by temp.job

having sum(temp.sal) > 5000

order by s;





85. 求出平均工资最高的部门工资

select max(avg(sal)) from emp group by deptno;





86. 要求查询出比雇员编号为 7654 工资高的全部雇员信息

select * from emp where sal >(select sal from emp where empno = 7654);





87. 要求查询出工资比 7654 高, 同一时候与 7788 从事同样工作的所有雇员信息

select * from emp 

where sal >(select sal from emp where empno = 7654)

and job = (select job from emp where empno = 7788);





88. 要求查询出工资最低的雇员姓名, 工作, 工资

select ename, job, sal from emp where sal = (select min(sal) from emp);





89. 要求查询出: 部门名称,部门的员工数,部门的平均工资,部门的最低收入雇员的姓名

select d.dname, temp.c, temp.a, e.ename 

from dept d, 

(select deptno, count(empno) c, avg(sal) a, min(sal) m from emp group by deptno) temp, 

emp e

where d.deptno = temp.deptno and e.sal = temp.m;





select d.deptno, temp.dname, temp.c, temp.a, e.ename, e.sal

from 

(select d.dname , count(e.empno) c, avg(e.sal) a, min(e.sal) m

from emp e, dept d

where e.deptno = d.deptno

group by d.dname) temp, 

emp e,

dept d

where temp.m = e.sal

and temp.dname = d.dname;





90. 求出每一个部门的最低工资的雇员的信息

select * from emp where sal in(select min(sal) from emp group by deptno);

select * from emp where sal =any(select min(sal) from emp group by deptno);

select * from 

(select min(sal) m from emp group by deptno) temp,

emp e

where e.sal = temp.m;





91. 范例 90 中, 比子查询条件中最低(小)的工资要大的雇员信息

select * from emp where sal >any(select min(sal) from emp group by deptno);

select * from emp where sal > (select min(min(sal)) from emp group by deptno);





92. 范例 90 中, 比子查询条件中最高(大)的工资要小的雇员信息

select * from emp where sal <any(select min(sal) from emp group by deptno);

select * from emp where sal < (select max(min(sal)) from emp group by deptno);





93. 范例 90 中, 比子查询条件中最高(大)的工资要大的雇员信息

select * from emp where sal >all(select min(sal) from emp group by deptno);

select * from emp where sal > (select max(min(sal)) from emp group by deptno);





94. 范例 90 中, 比子查询条件中最低(小)的工资要小的雇员信息

select * from emp where sal <all(select min(sal) from emp group by deptno);

select * from emp where sal < (select min(min(sal)) from emp group by deptno);





95. 查找出 20 部门中没有奖金的雇员信息

select * from emp where (sal, nvl(comm, -1)) in (select sal, nvl(comm, -1) from emp where deptno = 20);

select * from emp where deptno = 20 and comm is null;





96. union 操作符返回两个查询选定的全部不反复的行

select deptno from emp union select deptno from dept;





97. union all 操作符合并两个查询选定的全部行,包含反复的行

select deptno from emp union all select deptno from dept;





98. intersect 操作符仅仅返回两个查询都有的行

select deptno from emp intersect select deptno from dept;





99. minus 操作符仅仅返回由第一个查询选定可是没有被第二个查询选定的行, 也就是在第一个查询结果中排除在第二个查询结果中出现的行

select deptno from dept minus select deptno from emp;

Oracle 经典SQL 专为笔试准备的更多相关文章

  1. Oracle经典SQL

    最近本人整理了一些Oracle sql,现分享给大家,后续还会更新.如果有错误的地方,请指正,共同学习.贴上去的sql都是我测试过的,大家可以粘贴在自己的电脑上试试. 1.查询部门的名称,及最低收入雇 ...

  2. (转)经典SQL查询语句大全

    (转)经典SQL查询语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql s ...

  3. 经典sql语句大全,【转载】

    经典SQL查询语句大全   一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql se ...

  4. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  5. 经典SQL语句大全以及50个常用的sql语句

    经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...

  6. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

  7. olcal数据库经典SQL语句大全

    基于olacle自带的表 第一篇 -----1.列出至少有一个员工的所有部门. oracle 一些经典sql第一篇 --------1.列出至少有一个员工的所有部门.---------  SQL> ...

  8. 经典sql语句

    经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...

  9. [转] - 经典SQL语句大全

    经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...

随机推荐

  1. 五毛的cocos2d-x学习笔记08-动画

    一个例子就够了,单击文本标签,执行动画.我也是小白,写这个demo的时候遇到了问题,单击文本标签游戏就死掉了.今天为了解决这个问题也是一晚没睡,到学习群里问大神,经过大神的指点解决了问题.原来是Ani ...

  2. js判断微信内置浏览器

    做了一个h5页面来下载app,但如果页面是用微信扫一扫打开的,点击下载按钮下载不了app,原因是微信内置浏览器屏蔽了下载链接.所以增加了检测,如果用户是用微信浏览器打开的,则提示用户使用浏览器打开.那 ...

  3. python 推导式和迭代器、生成器

    1.常用推导式 推导式是从一个或者多个迭代器快速简洁创建数据结构的一种方法. 1.1 _ 列表推导式 最简单的形式:  [exprssion for item in iterable] 示例:  nu ...

  4. C/C++指针知识整理(一)

    1.指针(变量)的类型 把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型.这是指针本身所具有的类型. (1)int*ptr; //指针的类型是 int* (2) char*ptr;//指针 ...

  5. MYSQL group_concat() 函数

    看来看一下表中的数据 select * from t; 下一步来看一下group_concat函数的用法 select ID,group_concat(Name) from t group by ID ...

  6. Codeforces Round #242 (Div. 2) &lt;A-D&gt;

    CF424 A. Squats 题目意思: 有n(n为偶数)个x和X,求最少的变换次数,使得X的个数为n/2,输出变换后的序列. 解题思路: 统计X的个数ans,和n/2比較,少了的话,须要把n/2- ...

  7. poj 3624 Charm Bracelet 01背包问题

    题目链接:poj 3624 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放.             用子问题定义状态:即F [i, v]表示前i件物品恰放入一个容量为v 的背包可以 ...

  8. hdu 5040 BFS 多维化处理图

    http://acm.hdu.edu.cn/showproblem.php?pid=5040 跟这一题http://blog.csdn.net/u011026968/article/details/3 ...

  9. ASP.NET之电子商务系统开发-2(购物车功能)

    一.前言 继上次的首页数据列表后,这是第二篇.记录一下购物车这个比较庞大的功能,可能实现的方法跟其他人有点不一样,不过原理都差不多,是将cookie存数据库里面的. 二.开始 首先看一下购物车流程及对 ...

  10. struts2+hibernate环境搭建

    使用的是myeclipse2014,搭建比较简单,很多jar包不用自己引入,很多初始配置文件不需要自己写.后面会介绍ssh的搭建. 首先新建web project. 1.右键项目,如图所示 这个直接f ...