//数据库在执行sql是从右到左
什么是子查询?
子查询是指嵌入在其它sql语句中的select语句,也叫嵌套查询
1)单行子查询
单行子查询是指只返回一行数据的子查询语句
?如何显示与SMITH同一部门的所有员工
SQL> select * from emp where deptno=(select deptno from emp where ename='SMITH');
2)多行子查询
多行子查询指返回多行数据的子查询
?如何查询和部门10的工作相同的雇员的名字,岗位,工资,部门号
SQL> select * from emp where job in (select distinct job from emp where deptno=10);
注意:如果是多行子查询就不能够使用'='要使用in作为范围
******************************************************************
数据的去重
******************************************************************
3)***如何进行数据的过滤(将重复的数据过滤掉)***
只需要在需要去重的数据前面加上一个distinct
SQL> select distinct job from emp where deptno=30;
4)在多行子查询中使用all操作符
?如何显示工资比部门30的所有员工的工资高的员工姓名、工资和部门号
方法1:使用all操作符
SQL> select ename,sal,deptno from emp where sal>all(select sal from emp where deptno=30);
方法2:使用max()函数 这个效率更高
SQL> select ename,sal,deptno from emp where sal>(select max(sal) from emp where deptno=30);
5)在多行子查询中使用any操作符
?如何显示工资比部门30的任意一个员工的工资高的员工的姓名、工资和部门号
方法1:使用any操作符
SQL> select ename,sal,deptno from emp where sal>any(select sal from emp where deptno=30);
方法2:使用min()函数
SQL> select ename,sal,deptno from emp where sal>(select min(sal) from emp where deptno=30);
6)多列子查询
单列子查询是指子查询只返回单列、单行数据,多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句
*****************************************************************
?如何查询与SMITH的部门和岗位都完全相同的所有雇员
SQL> select * from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH');
注意:括号里的顺序要相同
再次强调:
group by用于对查询的结果分组统计
having子句用于限制分组显示结果
在from子句中使用子查询
?如何显示高于自己部门平均工资的员工信息
//1.查询出各个部门的平均工资和部门号
select deptno,avg(sal) mysal from emp group by deptno;
//2.把上面的查询看做事一张子表
(select deptno,avg(sal) mysal from emp group by deptno) a1
上面的意思就是将上面查询到的结果当成是一张表并命名为a1
SQL> select a1.ename,a1.sal,a2.deptno,a2.mysal from emp a1,(select deptno,avg(sal) mysal from emp group by deptno) a2 where a1.deptno=a2.deptno and a1.sal>a2.mysal order by deptno;
在from子句中使用子查询
这里需要说明的是当在from子句中使用子查询时,该子查询会被作为一个视图来对待,因此也叫做内嵌视图,当在from子句中使用子查询时,必须给子查询指定别名
用查询的结果创建新表
这个命令是一种快捷的建表方法:
create table mytable (id,name,sal,job,deptno) as select empno,ename,sal,job,deptno,from emp;
这种命令创建的表拥有和参考的表一样的数据
即相当于将参考表的数据都转移到了新建的表中
合并查询(在实际中不怎么使用)
有时在实际应用中,为了合并多个select语句的结果,可以使用集合操作符号union,union all,intersect,minus
1)union
该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行
select ename,sal,job from emp where sal>2500 union select ename,sal,job from emp where job='MANAGER';
2)union all
该操作符和union相似,但是它不会取消重复行并且不会排序,就类似逻辑运算符‘或’。
select ename,sal,job from emp where sal>2500 union all select ename,sal,job from emp where job='MANAGER';
3)intersect(相交)
该操作符用于取得两个结果集的交集。
select ename,sal,job from emp where sal>2500 intersect select ename,sal,job from emp where job='MANAGER';
4)minus(减去)
该操作符用于取得两个结果集的差集,它只会显示存在第一个集合中,而不存在第二个集合中的数据
select ename,sal,job from emp where sal>2500 minus select ename,sal,job from emp where job='MANAGER';
即第一个集合减去第二个集合中后第一个集合中剩下的数据
相关推荐
ORACLE子查询
Oracle子查询是构建复杂查询的基石,通过合理利用单行或多行子查询,结合`IN`、`ANY`、`SOME`、`ALL`、`EXISTS`等关键字,可以极大地提高查询的灵活性和效率。理解并熟练掌握子查询的使用,对于提升数据库操作技能和...
Oracle子查询知识点总结 Oracle子查询是指在SQL语句中嵌套使用SELECT语句,以解决复杂的查询问题。下面是Oracle子查询的知识点总结: 一、子查询的定义和类型 * 子查询是一个完整的SELECT语句,嵌套在另一个...
oracle笔记子查询,有子查询相关的知识点笔记和具体的案例代码!
Oracle子查询是数据库查询中的一个重要概念,它是指在SQL语句中嵌套另一个查询语句,用于获取数据或满足特定条件。子查询可以被用在SELECT、INSERT、UPDATE和DELETE命令中,甚至可以在一个子查询内部再嵌套其他子...
### Oracle 子查询详解 #### 一、子查询概述 在Oracle数据库中,子查询(也称为嵌套查询)是一种非常强大的SQL特性,它允许在一条SQL语句中嵌入另一条查询语句。子查询可以用来解决各种复杂的数据检索问题,特别是...
Oracle子查询是数据库查询语言SQL中的一个重要概念,它在数据处理和分析中起着至关重要的作用。子查询,也称为嵌套查询,是指在另一个查询内部的查询,它作为一个独立的查询被执行,并且其结果被主查询使用。下面...
根据提供的文件信息,我们可以归纳出以下关于Oracle子查询的关键知识点: ### Oracle子查询概述 子查询是指在SQL语句中的一个查询嵌套在另一个查询之中。这种查询方式可以帮助我们更灵活地处理数据,并且能够实现...
Oracle子查询是数据库查询语言中的一个关键概念,它在处理复杂的数据分析和查询时非常有用。子查询,也称为内部查询或嵌套查询,是指在一个更大的查询(外查询)内部执行的独立查询,用于获取主查询所需的数据或者...
【基于成本的ORACLE子查询性能研究】 Oracle数据库在处理SQL查询时,特别是涉及子查询时,会基于一种称为“成本”的评估标准来选择最佳执行计划。本文将深入探讨Oracle中的几种子查询类型,以及如何优化子查询以...
oracle子查询学习教案.pptx
Oracle子查询优化是数据库性能调优的关键环节,尤其是在处理复杂SQL语句时,正确的优化策略能够显著提升系统效率。以下是一些关于Oracle子查询优化的最佳实践: ### SQL优化的核心思想 1. **减少IO次数**:无论是...
oracle子查询PPT课件.pptx
在Oracle中,子查询是一个非常关键的概念,尤其对于初学者来说,理解和掌握子查询是提升SQL技能的基础。子查询,也称为嵌套查询,是在一个SQL语句中嵌入另一个查询,用于获取数据或对主查询进行条件判断。 1. **子...
子查询的类型 1、单行子查询:不向外部的SQL语句返回结果,或者只返回一行 2、多行子查询:向外部的SQL语句返回一行或者多行 1、多列子查询:向外部的SQL语句返回多列 2、关联子查询:引用外部的SQL语句中的一列...
在学习Oracle子查询时,学员需要通过实践来熟悉不同场景下子查询的使用方法,掌握其返回的数据类型,以及如何在WHERE、HAVING、FROM子句中嵌入子查询,解决实际问题。同时,理解子查询返回空值对主查询的影响,以及...
Oracle子查询的语法结构如下: ```sql SELECT [DISTINCT] * | 列名 1 [别名 1], 列名 2 [别名 2]… FROM 表名, (SELECT [DISTINCT] * | 列名 1 [别名 1], 列名 2 [别名 2]… FROM 表名 [WHERE 条件] [GROUP BY...
Oracle子查询是数据库查询中的一个重要概念,它是在一个SQL语句中嵌套另一个SQL查询,用以提供外部查询所需的条件或值。子查询可以作为WHERE、HAVING、FROM或SELECT子句的一部分,用于处理复杂的查询需求。以下是...
通过本章学习,您将可以: ...子查询对空值的处理 在 FROM 子句中使用子查询 在SQL中使用单列子查询 相关子查询 书写相关子查询 使用子查询更新和删除数据 使用 EXISTS 和 NOT EXISTS 操作符 使用 WITH 子句