`
cometoeye
  • 浏览: 27113 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle学习记录之表查询

阅读更多

【以scott用户登录】

 

查询练习(一)

 

--1.选择部门30中的雇员
select * from emp where deptno=30;

 

--2.列出所有办事员的姓名、编号和部门
select empno, ename, deptno from emp;
select empno, ename, (select dname from dept d where d.deptno=e.deptno) as "DNAME" from emp e;

 

--3.找出佣金高于薪金的雇员
select * from emp where comm>sal;

 

--4.找出佣金高于薪金的60%的雇员
select * from emp where comm>sal*0.6;

 

--5.找出部门10中所有经理和部门20中所有办事员的详细资料
select * from emp where (deptno=10 and job='MANAGER') or (deptno=20 and job='CLERK');
 
--6.找出部门10中所有经理、部门20中所有办事员以及既不是
--  经理又不是办事员但其薪金大于或等于2000的所有雇员的详细资料
select * from emp where (deptno=10 and job='MANAGER') or (deptno=20 and job='CLERK') or (job not in('MANAGER','CLERK') and sal>=2000);

 

--7.找出收取佣金的雇员的不同工作.
select distinct job from emp where nvl(comm,0)>0;

 

--8.找出不收取佣金或收取的佣金低于100的雇员
--select * from emp where comm is null or (comm is not null and comm<100);--复杂写法
select * from emp where nvl(comm,0)<100;

 

--9.找出各月最后一天受雇的所有雇员.
select * from emp where hiredate=last_day(hiredate);
--select sysdate from dual;
--select last_day(sysdate) from dual;
--select last_day(to_date('2009-02-02','yyyy-mm-dd')) from dual;
--select to_char(sysdate,'yyyy') from dual;
--select to_char(sysdate,'yy') from dual;
--select to_number('300') from dual;

 

--10.找出早于12年之前受雇的雇员
select * from emp where to_char(sysdate,'yyyy')-to_char(hiredate,'yyyy')>12;

 

--11.显示只有首字母大写的所有雇员的姓名
--select initcap('HeLlo') from dual;
select ename from emp where ename=initcap(ename);

 

--12.显示正好为15个字符的雇员姓名.
select ename from emp where length(ename)=15;

 

--13.显示不带有"R"的雇员姓名
select ename from emp where ename not like '%R%';

 

--14.显示所有雇员的姓名的前三个字符.
select substr(ename,0,3) from emp;

 

--15.显示所有雇员的姓名,用a替换所有"A" 
select replace(ename,'A','a') from emp;

 

--16.显示所有雇员的姓名以及满10年服务年限的日期
select ename, add_months(hiredate,120) from emp;

 

--17.显示雇员的详细资料,按姓名排序
select * from emp order by ename asc;--默认按asc排序,可省略asc
select * from emp order by ename desc;

 

--18.显示雇员姓名,根据其服务年限,将最老的雇员排在最前面
select ename from emp order by hiredate;

 

--19.显示雇员姓名,工作和薪金,按工作的降序顺序排序,而工作按薪金排序
select ename,job,sal from emp order by job desc, sal desc;

 

--20.显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,并将最早年份的项目排在最前面
select ename, to_char(hiredate, 'yyyy-mm') as "加入年月" from emp order by to_char(hiredate,'mm') asc, hiredate asc;

 

--21.显示在一个月为30天的情况下所有雇员的日薪金,忽略卢比余数
select round(sal/30,0) from emp;

 

--22.找出在(任何年份的)2月受雇的所有雇员
select * from emp where to_char(hiredate, 'mm')=2;

 

--23.对于每个雇员,显示其加入公司的天数
select ename,round(sysdate-hiredate,0) "加入公司天数" from emp;

 

--24.显示姓名字段的任何位置包含"A"的所有雇员的姓名
select ename from emp where ename like '%A%';

 

--25.以年、月和日显示所有雇员的服务年限. 
select empno,
floor(months_between(sysdate,hiredate)/12) As Year,
floor((months_between(sysdate,hiredate)/12-floor(months_between(sysdate,hiredate)/12))*12) As Month,
ceil((((months_between(sysdate,hiredate)/12-floor(months_between(sysdate,hiredate)/12))*12)-floor((months_between(sysdate,hiredate)/12-floor(months_between(sysdate,hiredate)/12))*12))*30) As Day
from emp order by hiredate;

 

 

查询练习(二)

 

rownum含义:
1、rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数。
2、rownum不能以任何基表的名称作为前缀。

select rownum, empno, ename, sal from emp;
select rownum, empno, ename, sal from emp order by sal;
select rownum, empno, ename, sal from (select * from emp order by sal);

 

 

--1、请从emp表中查询出第三条记录之后的所有记录?
select * from (select rownum as num, empno, ename from emp) where num>3;

--2、请从emp表中查询价格大于sal>1200的前五条记录(注:不需要对sal字段排序查询)
select * from (select * from emp where sal>1200) where rownum<=5;

--3、请从emp表中查询价格大于sal>1200的前五条记录(注:需要对sal字段排序查询后再查询前五条)
select * from (select * from emp where sal>1200 order by sal desc) where rownum<=5;
 
--4、请从emp表中查询价格大于sal>1200的后五条记录(注:不需要对sal字段排序查询)
select * from
       (select rownum as num, empno, ename, sal from emp where sal>1200)
               where num>(select count(*) from emp where sal>1200)-5;

--5、请从emp表中查询价格大于sal>1200的前五条记录(注:需要对sal字段排序查询后再查询前五条)
select * from
       (select rownum as num, empno, ename, sal from (select * from emp where sal>1200 order by sal))
               where num>(select count(*) from emp where sal>1200)-5;

--6、要找出一个emp表中按sal从大到小排序的前10条纪录,假如有2条纪录的数量相同,那么就显示11条纪录.
select * from emp order by sal desc;--10和11两条记录的sal大小相同
select * from emp
       where sal>=
             (select sal from
                     (select * from (select rownum as num, empno, ename, sal from (select * from emp order by sal desc))) e
             where e.num=10)
       order by sal desc;

--7、从emp表中查询第八条到第十条记录(请用两种以上的方法来作)
-- 第一解题思路:
select * from emp;
select * from (select rownum as num, empno, ename from emp) where num>=8 and num<=10;
-- 第二解题思路:
select * from (select rownum as num, empno, ename from emp) where num between 8 and 10;
-- 第三解题思路:
select * from (select rownum num, empno, ename from emp where rownum<=10) where num>=8;
-- 第四解题思路:
select * from emp where rownum<=10 minus select * from emp where rownum<8;

 

 

查询练习(三)

--1.列出至少有一个雇员的所有部门
select dname from dept where deptno in (select distinct deptno from emp);

--2.列出薪金比'SMITH'多的所有雇员.
select * from emp where sal>(select sal from emp where ename='SMITH');

--3.列出所有雇员的姓名及其上级的姓名.
select ename, (select ename from emp e2 where e2.empno=e1.mgr) MGR from emp e1;

--4.列出入职日期早于其直接上级的所有雇员.
select * from emp e1 where hiredate<(select hiredate from emp e2 where e2.empno=e1.mgr);

--5.列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门
select d.dname, e.* from dept d left join emp e on d.deptno=e.deptno;

--6.列出所有'CLERK'的姓名及其部门名称.
select ename, (select dname from dept d where d.deptno=e.deptno) "部门" from emp e where e.job='CLERK';
select ename,dname from dept a,emp b where a.deptno=b.deptno and job='CLERK';

--7.列出各种类别的最低薪金,要求最低薪金大于1500
select job,min(sal) from emp group by job having min(sal)>1500;

--8.列出各种类别"SALES"工作的雇员的姓名,假定不知道销售部的部门编号.
select ename from emp where emp.deptno=(select deptno from dept where dname='SALES');

--9.列出薪金高于公司平均水平的所有雇员.
select * from emp where sal>(select avg(sal) from emp);

--10.列出与"SCOTT"从事相同工作的所有雇员.
select * from emp where job=(select job from emp where ename='SCOTT');
--11.列出薪金等于在部门30工作的雇员的薪金的雇员的所有姓名和薪金
select ename, sal from emp where sal in (select sal from emp where deptno=30);

--12.列出薪金高于在部门30工作的所有雇员的薪金的雇员的姓名和薪金.
select ename, sal from emp where sal>(select max(sal) from emp where deptno=30);

--13.列出在每个部门工作的雇员的数量以及其他信息.
select d.*, (select count(deptno) from emp e where e.deptno=d.deptno) "雇员人数" from dept d;

--14.列出所有雇员的雇员名称、部门名称和薪金.
select ename,(select dname from dept d where d.deptno=e.deptno) "部门名称",sal from emp e;

--15.列出从事同一种工作但属于不同部门的雇员的不同组合.
select * from emp order by job, deptno;

--16.列出分配有雇员的所有部门及其员工的详细信息,即使是分配0个雇员的部门信息也要列出来.
select d.*, e.* from dept d left join emp e on d.deptno=e.deptno;

--17.列出各种类别工作的最低工资.
select job, min(sal) from emp group by job;

--18.列出所有部门MANAGER的最低薪金.
select min(sal) from emp where job='MANAGER';

--19.列出按计算的字段排序的所有雇员的年薪.
select sal*12 from emp order by sal;

--20.列出薪金水平处于第四位的雇员.
select * from (select rownum num, e.* from (select * from emp order by sal desc) e) where num=4;

 

 

未完待续...

分享到:
评论

相关推荐

    Oracle学习笔记

    Oracle学习笔记是李兴华老师编写的Oracle从入门到精通的学习笔记,涵盖了 Oracle 的多表查询、连接、组函数和分组统计等知识点。在本篇笔记中,李兴华老师详细介绍了多表查询的基本语法、左右连接、交叉连接、自然...

    Oracle学习笔记 PDF

    ### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...

    Oracle学习笔记精华版

    Oracle学习笔记精华版是针对数据库管理系统Oracle的一份重要学习资源,涵盖了从基础概念到高级特性的全面知识。Oracle,作为全球广泛使用的大型企业级数据库系统,对于IT专业人员尤其是数据库管理员(DBA)来说,是...

    Oracle学习笔记.doc

    Oracle学习笔记 以下是我这一周学习oracle整理的笔记,包括课堂的内容和自己看额外看的视频补充的一些内容,基本上囊括了所有oracle的基本知识。主要的形式是例子代码加代码解释加运行结果,我个人认为对于没有学习...

    Oracle学习笔记.pdf

    以下是对Oracle学习笔记中提到的一些关键知识点的详细解释: 1. **SQL执行顺序**: SQL语句的执行顺序是:`FROM` -&gt; `WHERE` -&gt; `SELECT` -&gt; `GROUP BY` -&gt; `HAVING` -&gt; `ORDER BY`。首先从`FROM`子句开始,确定...

    oracle学习笔记整理

    以下是对Oracle学习笔记整理的主要知识点的详细说明: 1. **数据库选择**: 在决定使用哪种数据库时,通常需要考虑项目的规模、性能需求、安全性要求以及可用资源。Oracle数据库因其稳定性、可扩展性和高性能而被...

    Oracle学习笔记(嵌套表、可变数组)

    Oracle学习笔记(嵌套表、可变数组),有具体的代码案例供大家参考

    Oracle学习笔记 Oracle学习笔记

    根据提供的信息,我们可以总结出以下Oracle数据库学习的关键知识点: ...以上是基于提供的内容整理出的Oracle学习笔记中的关键知识点。通过理解这些基础知识,可以更好地管理和操作Oracle数据库。

    oracle dba学习笔记

    Oracle DBA 学习笔记 ...该 Oracle DBA 学习笔记涵盖了 Oracle 数据库维护的多个方面,包括表空间统计、SGA 信息、命中率等。这些知识点对于 Oracle DBA 来说非常重要,可以帮助他们更好地维护和优化数据库。

    ORACLE经典学习笔记

    ### ORACLE经典学习笔记知识点概览 #### 第一章 ORACLE 命令 本章节主要介绍了Oracle数据库中常用的命令及其使用方法。 1. **查看参数文件**: `Desc v$parameter` - 这个命令用于查看Oracle的参数文件信息,通过...

    oracle学习笔记-入门基础

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的特性和功能来优化数据管理和查询性能。本文主要探讨Oracle数据库的入门基础知识,特别是与索引相关的概念。 首先,我们要理解ROWID的概念。ROWID是...

    Oracle查询操作的学习笔记

    ### Oracle查询操作学习笔记知识点详解 #### 一、Oracle用户管理与权限分配 - **创建用户**:在Oracle中创建用户的基本语法为`CREATE USER username IDENTIFIED BY password`。例如,`CREATE USER xiaoming ...

    MSDN oracle学习笔记

    在“MSDN Oracle学习笔记”中,我们可以期待找到关于Oracle数据库的详细讲解和实践指导。 首先,Oracle数据库的基础知识是必不可少的。这通常涵盖数据库系统的基本概念,如SQL(结构化查询语言)的使用,数据类型,...

    oracle学习笔记.txt

    超详细Oracle学习笔记,详细记录了oracle的学习过程中遇到的各种问题及基础知识,适合初中级oracle使用人员学习参考。

    ORACLE学习笔记之调节性能优化篇

    Oracle数据库性能优化是数据库管理员和开发人员日常工作中不可或缺的部分,它涉及到查询优化、资源管理、系统调整等多个方面。本文主要围绕ORACLE数据库的性能优化,特别是如何通过不同的方式来追踪和分析SQL语句的...

    基础的oracle学习的笔记

    这篇笔记主要聚焦于Oracle的基础知识,包括SQL语句、数据类型、表的创建与管理、索引、视图以及事务处理等核心概念。 首先,让我们从SQL语言开始。SQL(Structured Query Language)是用于管理关系数据库的标准语言...

Global site tag (gtag.js) - Google Analytics