`
南部县人民
  • 浏览: 15889 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Oracle 经典SQL 专为笔试准备【转】

阅读更多
相信把这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;

转自http://blog.csdn.net/rulon147/article/details/29599329
请尊重原创
分享到:
评论

相关推荐

    ORACLE,sql server笔试题目,答案

    【标题】:“ORACLE,sql server笔试题目,答案”涵盖了两个主流的关系型数据库管理系统——Oracle和SQL Server的相关知识。在数据库领域,Oracle和SQL Server都是广泛使用的数据库平台,尤其在企业级应用中占据重要...

    sql笔试面试题目(oracle,含答案)

    题目包含:1.基本SQL-SELECT语句 2.过滤和排序数据 3.单行函数 4.多表查询 5.分组函数 6.子查询 7.创建和管理表 8.数据处理 9.约束 10.视图 11.数据库对象 12.企业sql笔试题目 等

    ORACLE数据库及SQL语言考试题一含答案.pdf

    ORACLE数据库及SQL语言考试题一含答案.pdf 本文档是关于ORACLE数据库及SQL语言考试题,涵盖了名词解释、ORACLE数据库知识问答和SQL语句编写三部分,旨在考察新同事ORACLE数据库知识和SQL语言掌握情况。 名词解释 ...

    Oracle PL-SQL 中联模拟笔试题

    Oracle PL-SQL是一种强大的数据库编程语言,用于在Oracle数据库环境中创建和管理复杂的...记住,实践是检验理论的最好方式,通过这些模拟笔试题,你可以不断锻炼自己的技能,为真实的Oracle PL-SQL面试或工作做好准备。

    ORACLE数据库笔试题及答案.doc

    ### ORACLE数据库笔试题解析及知识点总结 #### 一、选择题解析 1. **算法的执行效率与数据的存储结构无关** - **解析**: 正确选项为 **C**。算法的执行效率与数据的存储结构密切相关。例如,数组与链表在查找、...

    最全java sql oracle笔试面试题_各大公司_及笔试面试剖析

    Java SQL Oracle 笔试面试题集锦涵盖了众多技术领域,是评估和提升开发者技能的重要资源。这份资料集合了Google、华为、中软等知名企业的面试题目,为求职者提供了宝贵的准备素材。以下将针对Java、SQL和Oracle以及...

    超经典SQL关系代数笔试题

    无论你是准备应聘Oracle、MySql或其他SQL相关职位,熟悉这些知识点都是至关重要的。 1. **基本SQL概念**:SQL分为DDL(Data Definition Language)、DML(Data Manipulation Language)、DCL(Data Control ...

    sql 笔试经典

    在进行SQL笔试时,面试者通常会被要求解决各种数据库查询、数据操作、数据库设计以及性能优化等问题。本篇文章将详细探讨SQL笔试中的核心知识点,帮助你更好地理解和应对这类考试。 1. **基本查询操作**: - `...

    oracle 笔试面试题目

    以下是对Oracle笔试面试题目中涉及的一些关键知识点的详细解释: 1. **冷备份与热备份**: - **冷备份**:在数据库关闭后进行,简单且适用于所有模式,但不能在备份过程中使用数据库。 - **热备份**:在数据库...

    sql 语句的笔试题

    SQL笔试题 本篇资源主要整理了多道SQL笔试题,涵盖了查询、删除、联合查询、分组等多个方面的知识点。 1. 查询出每门课都大于80分的学生姓名 知识点:子查询、distinct关键字 使用子查询可以实现该需求,子查询...

    Oracle笔试题及答案

    Oracle笔试题及答案是Oracle数据库管理员和开发者必备的知识点,涵盖了Oracle数据库的基本概念、SQL语句、数据操作、数据库设计等方面的知识点。以下是从给定的文件中提取的相关知识点: 1. Oracle数据类型:...

    oracle 11 g 笔试题

    通过解决“oracle 11 g 笔试题”中的题目,我们可以深入理解这些概念,并将理论知识转化为实际操作技能。这些题目涵盖了Oracle 11g的各个方面,包括但不限于数据库管理、SQL与PL/SQL编程、性能调优、安全策略和高...

    SQL Server笔试题(Sql2000常见笔试题)

    【SQL Server 笔试题解析】 SQL Server 是一款由微软公司开发的关系型数据库管理系统(RDBMS),广泛应用于企业级数据存储和管理。本题主要考察的是SQL Server 2000的基础知识,包括单词解释、SQL语句编写、填空和...

    常见的SQL笔试选择题含答案.docx

    以下是一些关于SQL笔试选择题中的关键知识点: 1. **关系型数据库**:关系型数据库是一种以表格形式存储数据的数据库,其中数据之间的关系可以通过外键进行关联。题目中提到的Oracle和MySql都是典型的关系型数据库...

    oracle笔试和面试题

    本资源摘要信息涵盖了 Oracle 相关的笔试和面试题,包括表连接方式、SQL 执行计划、CBO 和 RULE 的区别等多个方面的知识点。 表连接方式: * Inner Join: Inner Join 用于连接两个表,并返回满足连接条件的记录。...

    数据库面试题3 oracle笔试 oracle例题

    ### 数据库面试题3:Oracle笔试与Oracle例题解析 #### 一、选用适合的Oracle优化器 在Oracle数据库管理中,优化器的选择对于SQL查询的执行效率至关重要。Oracle提供了三种不同的优化器模式: 1. **基于规则的优化...

    笔试专用sql数据库基础知识

    本文将深入讲解SQL数据库的基础知识,帮助准备笔试的读者快速掌握核心概念。 首先,我们要理解数据库的基本概念。数据库是一个有序的数据集合,它能够存储、管理和检索数据。数据管理技术经历了人工管理、文件管理...

    sql经典笔试题一(含答案)

    SQL是Structured Query Language的缩写,是用于管理和...以上就是SQL笔试题涉及的关键知识点,涵盖了数据库基础概念、SQL语句的使用以及事务和索引的理解。理解并熟练掌握这些概念对于数据库管理和开发工作至关重要。

    oracle dba 笔试题

    ### Oracle DBA 笔试题详解 #### SQL Tuning 类 1. **表连接方式** 表连接在SQL查询中至关重要,常见的连接方式包括: - **Merge Join**: 这种连接方式适用于两个表中都有排序的情况,Oracle将两个已排序的表...

    自己整理的oracle和java笔试题

    这些文档集合提供了全面的Oracle数据库和Java编程的面试与笔试准备材料。...通过这些文档,学习者可以系统地复习Oracle和Java的关键知识点,为面试做好充分准备,提高成功通过笔试和面试的可能性。

Global site tag (gtag.js) - Google Analytics