`

sql语句

阅读更多

查询练习(一)



--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;
分享到:
评论

相关推荐

    sql语句万能生成器,sql语句,sql语句生成

    SQL语句是数据库操作的核心,它用于查询、插入、更新和删除数据,是任何数据库管理系统中的基础工具。在IT行业中,编写SQL语句是一项必备技能,但手动编写和调试SQL语句可能会耗费大量时间和精力,尤其在处理复杂...

    Oracle Sql语句转换成Mysql Sql语句

    本项目提供了一个Java源码工具,能够帮助用户便捷地将Oracle SQL语句转换为MySQL SQL语句。 Oracle SQL与MySQL SQL的主要差异在于以下几个方面: 1. **数据类型**:Oracle支持的数据类型如NUMBER、LONG、RAW等在...

    Java打印漂亮的SQL语句(被格式化的SQL语句)

    在Java编程中,调试SQL语句是开发过程中的常见任务,尤其当面对复杂且冗长的查询时。为了提高效率并使SQL语句更易于理解和分析,格式化SQL语句显得尤为重要。标题提及的"Java打印漂亮的SQL语句(被格式化的SQL语句)...

    hibernate执行原生sql语句

    "hibernate执行原生sql语句" Hibernate 是一种流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在一些情况下,我们需要直接执行原生 SQL 语句,而不是使用 Hibernate 的...

    E10查用SQL语句集合E10查用SQL语句集合

    名称:E10查用SQL语句集合 适用人群:ERP管理员 适用场景:E10ERP系统上线持续改善,SQL常用语句 功能描述:PO待交明细、出入库统计表、待领料清单、请购中品号无单价的品号清单、请购单中无品号采购信息的品号清单 ...

    sql语句大全sql语句大全sql语句大全sql语句大全sql语句大全sql语句大全

    根据提供的标题、描述、标签以及部分内容,我们可以整理出一系列与SQL语句相关的知识点。下面将对这些知识点进行详细的解释和扩展。 ### SQL语句大全 #### SELECT 语句 - **基本语法**: ```sql SELECT column1,...

    完成超长SQL语句执行前拆分

    ### 完成超长SQL语句执行前拆分 #### 概述 在使用Visual Basic (简称VB)进行数据库操作时,可能会遇到因为SQL语句过长而导致无法正常执行的问题。这种情况下,即使该SQL语句可以在SQL Server的查询分析器中成功运行...

    查看LINQ生成SQL语句的几种方法

    在实际开发中,有时我们需要了解LINQ查询是如何转换为SQL语句的,以便于调试和优化性能。以下将详细介绍几种查看LINQ生成SQL语句的方法。 1. **Debug.WriteLine()** 在使用LINQ查询时,可以利用`Debug.WriteLine()...

    存储过程中怎么动态执行sql语句

    ### 动态执行SQL语句在Oracle中的应用 #### 标题解读 “存储过程中怎么动态执行SQL语句”这一标题表明文章将介绍如何在Oracle数据库的存储过程中编写能够动态执行的SQL语句。动态SQL是指在运行时才能确定其具体内容...

    SQLServer动态SQL语句的用法

    SQL Server 动态 SQL 语句的用法 SQL Server 中的动态 SQL 语句是一种灵活的查询方式,它可以根据不同的情况生成不同的 SQL 语句。动态 SQL 语句可以用来实现复杂的业务逻辑,提高查询效率和灵活性。 普通 SQL ...

    自动生成SQL语句_C#_sql_

    本文将深入探讨如何在C#中自动生成SQL语句,以提高开发效率并减少手动编写SQL可能导致的错误。 一、Entity Framework与自动SQL生成 1. Entity Framework(EF)是微软提供的一个开源ORM(对象关系映射)框架,它...

    sql语句中用问号代替参数

    在SQL语句中,使用问号(`?`)作为参数占位符是一种常见的做法,尤其是在编程语言如Java中与数据库交互时。这种方式被称为预编译语句或参数化查询,它具有重要的安全性和性能优势。 ### SQL参数化查询的概念 参数化...

    oracle监听执行sql语句

    ### Oracle监听执行SQL语句详解 #### 一、Oracle监听执行概述 在Oracle数据库管理与维护过程中,有时候我们需要了解应用程序正在执行哪些SQL语句,这不仅有助于性能优化,还可以帮助我们诊断潜在的问题。通过监听...

    PB脚本中SQL语句写法与SQL中语句写法对照

    PB脚本中SQL语句写法与SQL中语句写法对照 PB脚本中SQL语句写法与SQL中语句写法对照是非常重要的知识点,因为PB脚本和SQL语言在写法和应用中有所不同。本文将对PB脚本中SQL语句写法和SQL中语句写法进行对比和分析。 ...

    SQLTracker,抓取sql语句的工具

    SQLTracker是一款专为数据库操作监控设计的工具,它在IT领域中主要用于跟踪和记录SQL语句的执行情况。SQL(Structured Query Language)是用于管理关系数据库的编程语言,包括查询、更新、插入和删除数据等操作。SQL...

    动态拼接sql语句工具类,拼接where后面语句

    动态拼接sql语句工具类,拼接where后面语句 配合原生jdbc仿动态sql注入 if (ObjectUtil.isNotEmpty(maxLat)&&ObjectUtil.isNotEmpty(minLat)){ sqlParamList.add(new SqlParam("lat",minLat, SqlOpEnum.GE)); ...

    arcgis中的sql语句

    ### ArcGIS中的SQL语句详解 #### 一、SQL在ArcGIS中的角色与应用 SQL,全称为Structured Query Language,即结构化查询语言,是专为数据库设计的一种标准语言,用于管理和操作数据库中的数据。在ArcGIS环境中,SQL...

    SQL语句在审计

    SQL语句在审计中的应用 SQL语句是数据库管理系统中使用最频繁的语言,SELECT语句是SQL语言中使用频率最高的语句。SELECT语句的作用是让数据库服务器根据用户的要求搜索出所需要的信息资料,并按规定的格式进行整理...

    java执行SQL语句实现查询的通用方法详解

    "java执行SQL语句实现查询的通用方法详解" 本文主要介绍了java执行SQL语句实现查询的通用方法详解,具有一定借鉴价值,需要的朋友可以参考下。 一、Java执行SQL语句实现查询的通用方法详解 在Java中执行SQL语句...

Global site tag (gtag.js) - Google Analytics