一、说明

  第一次使用Oracle,想做一些练习,熟悉一些oracle。

  表:使用的是scott用户,默认的表

  具体表讲解,可以参考该文档:https://www.cnblogs.com/xjcheng1/p/7220159.html

二、基础练习

第一、查询工资在0-1000,1000-2000,2000-3000,3000以上各个工资范围的员工数。

SELECT
SUM(CASE WHEN sal>0 AND sal<1000 THEN 1 ELSE 0 END) AS "0<sal<1000",
SUM(CASE WHEN sal>1000 AND sal<2000 THEN 1 ELSE 0 END) AS "1000<sal<2000",
SUM(CASE WHEN sal>2000 AND sal<3000 THEN 1 ELSE 0 END) AS "2000<sal<3000",
SUM(CASE WHEN sal>3000 THEN 1 ELSE 0 END) AS "sal>3000"
FROM
emp

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

SELECT
d.dname as "部门名称",
s.count as "部门的员工数",
s.avgsal as "部门的平均工资",
e.ename as "最低收入雇员的姓名"
FROM
emp e ,
dept d,
(
SELECT
deptno,COUNT(1) count,AVG(sal) avgsal,MIN(sal) minsal
FROM
emp
GROUP BY
deptno
) s
WHERE
e.deptno = d.deptno
AND
e.deptno = s.deptno
AND
s.minsal = e.sal

第三、查询各个职位员工工资大于平均工资(平均工资包括所有员工)的人数和员工职。

SELECT
COUNT(1),
job
FROM
emp
WHERE
sal > (SELECT AVG(SAL) FROM emp)
GROUP BY
job

第四、列出所有员工的姓名及其直接上级的姓名。

SELECT
e1.ename,
e2.ename AS manage
FROM
emp e1 LEFT JOIN emp e2
ON
e1.mgr = e2.empno

第五、返回比本部门平均工资高的员工的empno,ename,deptno,sal,以及平均工资。

SELECT
t1.empno,
t1.ename,
t1.deptno,
t1.sal,
t2.avgsal
FROM
emp t1 , (SELECT deptno,AVG(sal) avgsal FROM emp t2 GROUP BY t2.deptno) t2
WHERE
t1.deptno = t2.deptno
AND
t1.sal > t2.avgsal

第六、查询与7369或者7499号具有相同job和deptno的其他员工的empno,ename,job和empno。

SELECT
empno,
ename,
job,
deptno
FROM
emp
WHERE
(job,deptno)
IN
(
SELECT
job,
deptno
FROM
emp
WHERE
empno
IN
(7369,7499)
)

第七、查询员工工资2到5名的员工信息。

SELECT
*
FROM
(
SELECT
rownum r,empno,ename,sal
FROM
(
SELECT
empno,ename,sal
FROM
emp
ORDER BY
sal
DESC
)
) t
WHERE
t.r>=2 and t.r<=5

第八、列出薪金比smith多的所有员工信息。

SELECT
*
FROM
emp
WHERE
sal >
(
SELECT
sal
FROM
emp
WHERE
ename = 'SMITH'
)

第九、把hiredate列看做是员工的生日,求本月过生日的员工。

SELECT
*
FROM
emp
WHERE
EXTRACT(MONTH FROM hiredate)
=
EXTRACT(MONTH FROM sysdate);

第十、查询出1981各个月入职的员工数。

SELECT
COUNT(*),
to_char(hiredate,'yyyy-MM')
FROM
emp
WHERE
to_char(hiredate,'yyyy') = '1981'
GROUP BY
to_char(hiredate,'yyyy-MM')
ORDER BY
to_char(hiredate,'yyyy-MM')

第十一、查询和scott相同部门的员工姓名ename和雇用日期hiredate。

SELECT
ename,
hiredate
FROM
emp
WHERE
deptno
=
(
SELECT
deptno
FROM
emp
WHERE
ename = 'SCOTT'
)

第十二、查询在部门的loc为NEW YORK的部门工作的员工的员工姓名ename,部门名称dname和岗位名称job。

SELECT
e.ename,
d.dname,
e.job
From
emp e , dept d
WHERE
e.deptno = d.deptno
AND
dname =
(
SELECT
dname
FROM
dept
WHERE
loc = 'NEW YORK'
)

第十三、查询上司是king的员工姓名(ename)和工资(sal)。

SELECT
ename,
sal
FROM
emp
WHERE
mgr =
(
SELECT
empno
FROM
emp
WHERE
ename = 'KING'
)

第十四、查询与姓名中包含字母U的员工在相同部门的员工信息。

SELECT
*
FROM
emp
WHERE
deptno
IN
(
SELECT
deptno
FROM
emp
WHERE
ename
LIKE
'%U%'
)

第十五、查询所有雇员姓名和部门名称(使用left join,inner join, right join)。

SELECT
e.ename,
d.dname
FROM
emp e
INNER JOIN
dept d
ON
e.deptno = d.deptno

注意:这里的INNER JOIN 可以直接替换成 LEFT JOIN 和 RIGHT JOIN

第十六、显示每个员工的员工姓名、部门名称、职务、工资、和工资等级信息(使用left join,inner join, right join)。

SELECT
e.ename,
d.dname,
e.job,
e.sal,
s.grade
FROM
emp e
INNER JOIN
dept d
ON
e.deptno = d.deptno
INNER JOIN
salgrade s
ON
e.sal
BETWEEN
s.losal
AND
s.hisal

注意:这里的INNER JOIN 可以直接替换成 LEFT JOIN 和 RIGHT JOIN

第十七、取得每个部门最高薪水的人员名称。

SELECT
e.ename,
r.maxsal,
r.deptno
FROM
emp e ,
(
SELECT
MAX(sal) maxsal,
deptno
FROM
emp
GROUP BY
deptno
) r
WHERE
e.deptno = r.deptno
AND
e.sal = r.maxsal
ORDER BY
deptno

第十八、列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称。

SELECT
*
FROM
(
SELECT
e1.empno,
e1.deptno,
e1.ename,
e2.ename AS manage,
e2.hiredate managedate,
e1.hiredate staffdate
FROM
emp e1 LEFT JOIN emp e2
ON
e1.mgr = e2.empno
) z
WHERE
z.staffdate < z.managedate
ORDER BY
z.empno

第十九、列出所有"CLERK"(办事员)的姓名及其部门名称,部门的人数。

SELECT
s.ename,
s.dname,
k.deptno,
k.count
FROM
(
SELECT
e.ename,
d.dname,
e.deptno deptno
FROM
emp e , dept d
WHERE
e.deptno = d.deptno
AND
job = 'CLERK'
) s,
(
SELECT
COUNT(*) count,
deptno
FROM
emp
GROUP BY
deptno
) k
WHERE
s.deptno = k.deptno

第二十、找出早于12年前受雇的员工. 并且按受雇年份倒序排序。

SELECT
e.*,
TO_CHAR(hiredate,'yyyy') 受雇年份,
ROUND(MONTHS_BETWEEN(SYSDATE,hiredate)/12,2) 受雇年限
FROM
emp e
WHERE
MONTHS_BETWEEN(SYSDATE,hiredate)/12>12
ORDER BY
受雇年份
DESC

第二十一、列出从事同一种工作但属于不同部门的员工的一种组合。

SELECT
DISTINCT
e.empno,
e.ename,
e.job,
e.deptno
FROM
emp e,emp k
WHERE
e.deptno != k.deptno
AND
e.job = k.job
ORDER BY
job,deptno

 三、重点说明

  1.oracle数据库,sql语句不能使用limit关键字。

  2.rownum非常的特殊,使用的时候需要特别注意。详细可参考文档:https://www.cnblogs.com/szlbm/p/5806070.html

  3.所有包含中文的字体,需要加单引号。比如:job = 'CLERK'   ,ename = 'KING'

  4.函数的使用。

  to_char()  函数功能,就是将数值型或者日期型转化为字符型。具体参考文档:https://www.cnblogs.com/aipan/p/7941917.html

  extract()函数----用于截取年、月、日、时、分、秒。具体参考文档:https://www.cnblogs.com/xqzt/p/4477239.html

  

 

Oracle数据库 基础SQL语句练习的更多相关文章

  1. [转载]Oracle数据库基础--SQL查询经典例题

    Oracle基础练习题,采用Oracle数据库自带的表,适合初学者,其中包括了一些简单的查询,已经具有Oracle自身特点的单行函数的应用 本文使用的实例表结构与表的数据如下: emp员工表结构如下: ...

  2. Oracle数据库基础--SQL查询经典例题

    Oracle基础练习题,采用Oracle数据库自带的表,适合初学者,其中包括了一些简单的查询,已经具有Oracle自身特点的单行函数的应用 本文使用的实例表结构与表的数据如下: emp员工表结构如下: ...

  3. Oracle数据库的sql语句性能优化

    在应用系统开发初期,由于开发数据库数据比较少,对于查询sql语句,复杂试图的编写等体会不出sql语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目 ...

  4. Oracle数据库高效sql语句的整理

    业务需求说明:由于之前公司后台APP端有一个document表,该表中包含了所有的信息,新的需求就是通过该表创建出一个新的用户表(usertable)和一个档案表(document,该表只保留原doc ...

  5. oracle数据库常用SQL语句(11.29更新)

    笔者日常工作中常用到的sql语句,现总结如下,留作日后查看. 1.按照两列中的最大值取 ,只取两列其中的一列 SELECT * FROM t_doc T ORDER BY GREATEST(T.Loa ...

  6. Oracle数据库常用Sql语句大全

    一,数据控制语句 (DML) 部分 1.INSERT  (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSE ...

  7. Oracle数据库入门——sql语句和函数详解

    一.oracle常用数据类型 一.  数据定义语言(ddl) 数据定义语言ddl(data definition language)用于改变数据库结构,包括创建.更改和删除数据库对象. 用于操纵表结构 ...

  8. oracle数据库常用SQL语句

    1)删除表的一列 ALTER TABLE 表名 DROP COLUMN 列名; 2)增加表的一列 且默认值为0 alter table 表名 add 字段名 类型 default '0'; 3)修改表 ...

  9. Python使用cx_Oracle模块操作Oracle数据库--通过sql语句和存储操作

    https://www.jb51.net/article/125160.htm?utm_medium=referral  Python使用cx_Oracle调用Oracle存储过程的方法示例 http ...

随机推荐

  1. JavaScript热身练习1

    把某个元素移出你的视线: 1.display:none:(显示为无,不占地) 2.visibility:hidden:(隐藏,占地) 3.宽或者高设置为零 4.透明度设置 5.left/top (定位 ...

  2. 数据库SQL优化大总结1之- 百万级数据库优化方案

    转载自:https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/72875054

  3. EXTENDED LIGHTS OUT

    In an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons each (the actual ...

  4. idea的一般使用和初始配置

    ----- idea的一般使用和配置 1.java的类注释及方法注释 :https://blog.csdn.net/sikefeng/article/details/80557265 类注释模板 /* ...

  5. Applet

    Applet简介: 可以翻译为小应用程序,Java Applet就是用Java语言编写的这样的一些小应用程序,它们可以直接嵌入到网页中,并能够产生特殊的效果.包含Applet的网页被称为Java-po ...

  6. HTML5 Canvas绚丽的小球详解

    实例说明: 实例使用HTML5+CSS+JavaScript实现小球的运动效果 掌握Canvas的基本用法 技术要点: 从需求出发 分析Demo要实现的功能 擅于使用HTML5 Canvas 参考手册 ...

  7. Java中java.util.concurrent包下的4中线程池代码示例

    先来看下ThreadPool的类结构 其中红色框住的是常用的接口和类(图片来自:https://blog.csdn.net/panweiwei1994/article/details/78617117 ...

  8. LeetCode 145 二叉树的后序遍历(非递归)

    题目: 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 解题思路: 1 ...

  9. AX视图View中添加静态方法

    public static server str  EcoResCategoryName(){    DictView dv = new DictView(tableNum("ViewNam ...

  10. linux 免密码登陆

    1.Linux下生成密钥 ssh-keygen的命令手册,通过”man ssh-keygen“命令: 通过命令”ssh-keygen -t rsa“ 生成之后会在用户的根目录生成一个 “.ssh”的文 ...