一、涉及内容

  1.掌握SELECT语句的多表连接查询。

  2.掌握SELECT语句的子查询。

二、具体操作

(一)根据Oracle数据库scott方案下的emp表和dept表,完成下列操作:

1.查询所有工种为CLERK的员工的姓名及其部门名称。

select ename,dname 
from scott.emp t1 inner join scott.dept t2 on t1.deptno=t2.deptno
where job='CLERK';

2.查询所有部门及其员工信息,包括那些没有员工的部门。

select * from scott.emp t1 right join scott.dept t2 on t1.deptno=t2.deptno

3.查询所有员工及其部门信息,包括那些还不属于任何部门的员工。

select * from scott.emp t1 left join scott.dept t2 on t1.deptno=t2.deptno

4.查询在SALES部门工作的员工的姓名信息。

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}

用子查询实现:

select * from scott.emp
where deptno=(select deptno from scott.dept where dname='SALES')

用连接查询实现:

select * from scott.emp t1 inner join scott.dept t2 on t1.deptno=t2.deptno 
where t2.dname='SALES';

注意两种实现方式,在行和列上的变化。

5.查询所有员工的姓名及其直接上级的姓名。

select t1.ename as 员工姓名,t2.ename 经理姓名 from scott.emp t1,scott.emp t2
where t1.mgr=t2.empno;

6.查询入职日期早于其上级领导的所有员工的信息。

select t1.ename as 员工姓名,t2.ename 经理姓名 from scott.emp t1,scott.emp t2
where t1.mgr=t2.empno and t1.hiredate<t2.hiredate

7.查询从事同一种工作但不属于同一部门的员工信息。

select t1.ename,t1.job,t1.deptno,t2.ename,t2.job,t2.deptno from scott.emp t1 cross join scott.emp t2
where t1.job=t2.job and t1.deptno <>t2.deptno

8.查询10号部门员工及其领导的信息。

select t1.ename as 员工姓名,t2.ename 经理姓名 from scott.emp t1,scott.emp t2
where t1.mgr=t2.empno and t1.deptno=10;

9.使用UNION将工资大于2500的雇员信息与工作为ANALYST的雇员信息合并。

select * from scott.emp where sal>2500
union
select * from scott.emp where job='ANALYST'

10.通过INTERSECT集合运算,查询工资大于2500,并且工作为ANALYST的雇员信息。

select * from scott.emp where sal>2500
intersect
select * from scott.emp where job='ANALYST

11.使用MINUS集合查询工资大于2500,但工作不是ANALYST的雇员信息。

select * from scott.emp where sal>2500
minus
select * from scott.emp where job='ANALYST';

12.查询工资高于公司平均工资的所有员工信息。

select * from scott.emp where sal>(select avg(sal) from scott.emp)

13.查询与SMITH员工从事相同工作的所有员工信息。

select * from scott.emp where job=(select job from scott.emp
where ename='SMITH')

14.查询工资比SMITH员工工资高的所有员工信息。

select * from scott.emp where sal>(select  sal from scott.emp
where ename='SMITH')

15.查询比所有在30号部门中工作的员工的工资都高的员工姓名和工资。

select ename,sal from scott.emp where sal>all(select  sal from scott.emp where deptno=30)

16.查询部门人数大于5的部门的员工信息。

select * from scott.emp 
where deptno in (select deptno from scott.emp group by deptno having count(*)>5);

17.查询所有员工工资都大于2000的部门的信息。

select * from scott.dept
where deptno in(select deptno from scott.emp group by deptno having min(sal)>2000)

18.查询人数最多的部门信息。

select * from scott.dept
where deptno in (select deptno from (select deptno,count(*)
as 人数
from scott.emp
group by deptno)
where 人数=(select max(人数)
from(select deptno,count(*)
as 人数
from scott.emp
group by deptno)));

19.查询至少有一个员工的部门信息。

select * from scott.dept
where deptno in(select deptno
          from scott.emp
          group by deptno
          having count(*)>=1)

20.查询工资高于本部门平均工资的员工信息。

select * from scott.emp e
where sal>(select avg(sal)
      from scott.emp
      group by deptno
      having e.deptno=deptno);

21.查询工资高于本部门平均工资的员工信息及其部门的平均工资。

select * from((select * from scott.emp e
where sal>(select avg(sal)
from scott.emp
group by deptno
having e.deptno=deptno)) t1
inner join
(select avg(sal),deptno
from scott.emp
group by deptno) t2 on t1.deptno=t2.deptno);

22.查询每个员工的领导所在部门的信息。

select * from scott.dept
where deptno in(select distinct deptno
          from scott.emp
          where empno in(select distinct mgr
                    from scott.emp));

23.查询平均工资低于2000的部门及其员工信息。

select * from scott.emp t1,scott.dept t2
where t1.deptno=t2.deptno and t1.deptno in(select deptno
                      from scott.emp
                            group by deptno
                            having avg(sal)<2000)

(二)习题

1.如果需要将雇员表中的所有行连接到雇员表中的所有行,则应创建哪种类型的连接?(B)

A.等值连接    B.笛卡尔乘积  C.内连接  D.外连接

2.如果需要从顾客表和订单表中查询所有顾客及其下达的所有订单,并且要求查询结果中先按顾客所在公司名称的升序排列,再按订单金额的降序排列。应执行以下哪条语句?(B)

A.SELECT c.顾客标识,c.公司名称,o.订单日期,o.顾客标识,o.金额

FROM 顾客 c,订单 o

WHERE c.顾客标识=o.顾客标识

ORDER BY 金额 DESC, 公司名称;

B. SELECT c.顾客标识,c.公司名称,o.订单日期,o.顾客标识,o.金额

FROM 顾客 c,订单 o

WHERE c.顾客标识=o.顾客标识

ORDER BY公司名称,金额 DESC;

C. SELECT c.顾客标识,c.公司名称,o.订单日期,o.顾客标识,o.金额

FROM 顾客 c,订单 o

WHERE c.顾客标识=o.顾客标识

ORDER BY公司名称,金额;

D. SELECT c.顾客标识,c.公司名称,o.订单日期,o.顾客标识,o.金额

FROM 顾客 c,订单 o

WHERE c.顾客标识=o.顾客标识

ORDER BY公司名称 ASC,金额 DESC;

3.评估以下SQL语句:

SELECT e.雇员标识,e.姓氏,e.名字,d.部门名称

FROM 雇员 e,部门 d

WHERE e.部门标识=d.部门标识

AND 雇员.部门标识>5000

ORDER BY 4;

哪个字句的语法有错误?(E)

A. SELECT e.雇员标识,e.姓氏,e.名字,d.部门名称

B. FROM 雇员 e,部门 d

C. WHERE e.部门标识=d.部门标识

D. AND 雇员.部门标识>5000

E. ORDER BY 4;

4.评估以下语句:

SELECT 部门标识,AVG(薪金)

FROM 雇员

WHERE 职务标识<> 69 879

GROUP BY 部门标识

HAVING AVG(薪金)>35 000

ORDER BY部门标识;

哪些子句限制了返回结果?请选择两个正确答案。(BD)

A. SELECT 部门标识,AVG(薪金)

B. WHERE 职务标识<> 69 879

C. GROUP BY 部门标识

D. HAVING AVG(薪金)>35 000

5.在SELECT语句中各个子句的正确顺序是什么?(C)

A. SELECT

FROM

WHERE

ORDER BY

GROUP BY

HAVING

B.  SELECT

FROM

HAVING

ORDER BY

WHERE

GROUP BY

C.  SELECT

FROM

WHERE

GROUP BY

HAVING

ORDER BY

D.  SELECT

FROM

WHERE

HAVING

ORDER BY

GROUP BY

6.以下哪个运算符可用于多行子查询?(A)

A.IN             B.<>           C.=             D.LIKE

7.假设数据库中有顾客表和订单历史记录表。其中,顾客表中包括:客户标识NUMBER(5)、姓名VARCHAR2(25)、信贷限额NUMBER(8,2)、开户日期(DATE);订单历史记录表中包括:订单标识NUMBER(5)、客户标识NUMBER(5)、订单日期(DATE)、总计NUMBER(8,2)。以下哪种方案需要使用子查询来返回需要的结果?(D)

A.需要显示每个顾客账户下的开户日期

B.需要显示顾客下达订单的各个日期

C.需要显示在特定日期下达的所有订单

D.需要显示与编号为25950的订单的下达日期相同的所有订单

8.如果希望在报表中显示成本值高于所有产品平均成本的产品名称,应使用以下哪些SELECT语句?(B)

A. SELECT 产品名称 FROM 产品 WHERE 成本>(SELECT AVG(成本) FROM 产品);

B. SELECT 产品名称 FROM 产品 WHERE 成本> AVG(成本);

C. SELECT AVG(成本), 产品名称 FROM 产品 WHERE 成本> AVG(成本)GROUP BY 产品名称;

D. SELECT 产品名称 FROM(SELECT AVG(成本) FROM 产品) WHERE 成本> AVG(成本);

9.如果单行子查询返回了空值且使用了等于比较运算符,外部查询会返回什么结果?(B)

A.不返回任何行            B.返回表中的所有行

C.返回空值                D.返回错误

10.如果需要创建包含多行子查询的SELECT语句,可以使用哪个(些)比较运算符?(A)

A.IN、ANY和ALL            B.LIKE

C.BETWEEN…AND…           D.=、< 和 >

select ename,dname
from scott.emp t1 inner join scott.dept t2 on t1.deptno=t2.deptno where
job='CLERK';

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}

Oracle数据库——SQL高级查询的更多相关文章

  1. Oracle数据库——SQL基本查询

    一.涉及内容 1.掌握SELECT 语句的基本语法. 2.掌握常用函数的使用. 二.具体操作 (一)使用Scott方案下的emp表和dept表,完成以下操作: 1.查询部门编号是20的员工信息. 2. ...

  2. Oracle数据库sql命令整理

    转至:https://blog.csdn.net/weixin_43712330/article/details/88358604 以下为oracle数据库中sql语句的整理,将持续更新01. 如何登 ...

  3. Oracle 数据库SQL性能查看

    作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作.下面简单介绍下一些查看 ...

  4. ASP.NET操作ORACLE数据库之模糊查询

    ASP.NET操作ORACLE数据库之模糊查询 一.ASP.NET MVC利用OracleHelper辅助类操作ORACLE数据库 //连接Oracle数据库的连接字符串 string connect ...

  5. SQL 高级查询(层次化查询,递归)

    SQL 高级查询 前面我们写了一下 SQL 的极简入门,今天来说点高级查询.没看到的朋友可以点击下面链接查看. 1 小时 SQL 极速入门(一) 1 小时 SQL 极速入门(二) 1 小时 SQL 极 ...

  6. SQL高级查询技巧

    SQL高级查询技巧   1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重 ...

  7. Oracle数据库的状态查询

    本文来源:huang_xw 的<Oracle数据库的状态查询> 1 状态查询 启动状态 SQL语句 结果 nomount select status from v$instance; ST ...

  8. Oracle数据库日期范围查询的两种实现方式

    参考文档:http://database.51cto.com/art/201108/288058.htm Oracle数据库日期范围查询有两种方式:to_char方式和to_date方式,接下来我们通 ...

  9. Sql Server数据库设计高级查询

    -------------------------------------第一章  数据库的设计------------------------------------- 软件开发周期:     (1 ...

随机推荐

  1. 2016-1-3点菜系统demo的实现,pickerView的学习

    // // ViewController.m // pickView // // Created by Mac on 16/1/3. // Copyright © 2016年 Mac. All rig ...

  2. Planning for a period of time

    After a period of struggle , i decided to follow the teacher Chen learning . Say true i really disli ...

  3. JAVA的第一个程序

    关于下载安装环境变量的配置网上的教程已经很多了 . 下面附上第一个HelloWorld的代码 /** 这是我的第一个java程序 */ public class HelloWorld { public ...

  4. JAVA嵌套循环

    Java语言中的各种循环.选择.中断语句和C/C++一般无二. 选择结构 循环结构 中断(跳转) if for return if else while break if elseif do whil ...

  5. [Java Basics] Stack, Heap, Constructor, I/O, Immutable, ClassLoader

    Good about Java: friendly syntax, memory management[GC can collect unreferenced memory resources], o ...

  6. 学习笔记:APP切图那点事儿–详细介绍android和ios平台

    学习笔记:APP切图那点事儿–详细介绍android和ios平台 转载自:http://www.woofeng.cn/articles/168.html   版权归原作者所有 作者:亚茹有李 原文地址 ...

  7. 11、SQL基础整理(变量)

    变量 定义变量:declare  @hello  varchar(20) 赋值:set  @hello = ‘你好’ select(结果框显示)/print(消息框显示) @hello *三行必须同时 ...

  8. array_count_values函数

    array_count_values() 函数用于统计数组中所有值出现的次数. 本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数. 例子 <?php $a=array ...

  9. Unity3D ShaderLab 简单的立方体图反射

    Unity3D ShaderLab 简单的立方体图反射 反射是着色器模拟现实环境的一个关键因素,它能使我们的着色器渲染效果更加具备视觉冲击,因为他利用了我们周围的环境, 让着色器反射外界的场景信息并将 ...

  10. eclipse如何连接oracle 11g数据库

    1.首先先建立一个项目DB,右键点击DB,选择Build Path-->Configure Build Path进入 通过Add External JARs..选择D:\orcl\app\hr\ ...