- 浏览: 887972 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1096)
- 大数据存储 (76)
- 编程语言(Java&Scala) (46)
- 大数据建模 (33)
- 开发与管理 (8)
- 操作系统 (13)
- 实用代码集合 (25)
- 新技术研究 (15)
- 前端技术研究 (22)
- 物联网 (18)
- 兴趣探索 (15)
- 编程语言(Groovy&Grails) (92)
- 编程语言(RubyOnRails) (153)
- 个人收藏 (153)
- 技术管理 (12)
- 编程语言(Flex) (8)
- 架构和框架(GWT) (4)
- 数学和算法 (6)
- 人工智能(TensorFlow) (11)
- 编程语言(Python) (6)
- 移动开发 (4)
- 软件工程实践 (54)
- 个人感悟 (6)
- 职场感悟 (5)
- 行业经验 (23)
- 产品和运营 (10)
- 生活与随想 (155)
- 简单生活 (70)
- 天空的云 (53)
- 秋月春风 (14)
- 东逝水 (59)
- 浪花淘 (35)
- 白发渔樵 (4)
最新评论
-
cljhyjs:
今天看看在研究,已经安装好了,请问怎么一步一步使用呢?
Thingsboard -
yx200404:
说一下十维空间 -
Clear_Love:
设置了也报错
Xcode 7遇到 App Transport Security has blocked a cleartext HTTP 错误 -
wang263574375:
我想问的是,如果防火墙的设置不能改变,那么要怎么处理呢?
ORA-12571:TNS包写入程序失败 -
ralflsb:
SmartSVN 8.6
SmartSVN破解包
子查询:
用子查询能解决的问题
假想你想要写一个查询来找出挣钱比陆涛的薪水还多的人。为了解决这个问题,你需要两个查询:一
个找出陆涛的收入,第二个查询找出收入高于陆涛的人。
你可以用组合两个查询的方法解决这个问题,放置一个查询到另一个查询中。
内查询或子查询返回一个值给外查询或主查询。使用一个子查询相当于执行两个连续查询并且用第一个
查询的结果作为第二个查询的搜索值。
子查询语法:
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
1.子查询(内查询) 在主查询之前执行一次
2.子查询的结果被用于主查询(外查询)
首先执行子查询 (内查询) 显示子查询返回的值,然后用内查询返回的结果执行外查询,最后,执行整个查询 (包括子查询),显示相同的结果。
子查询可嵌套的位置:
子查询是一个SELECT 语句,它是嵌在
另一个 SELECT 语句中的子句。
使用子查询你可以用简单的语句构建功能强大的语句。当你需要从表中用依赖于表本身的数据选择行时
它们是非常有用的。
也可以放在
WHERE 子句 HAVING 子句 FROM 子句。
在语法中:
operator 包括比较条件,例如 >、= 或 IN
比较条件分为两个种类:单行运算符 (>, =, >=, <, <>, <=) 和多行运算符 (IN, ANY, ALL)。
子查询通常涉及一个嵌套的 SELECT、子-SELECT 或内 SELECT 语句。字查询通常执行一次。并且它的输出被用于完成主或外查询的查询条件。
另外,子查询可以被放在 CREATE VIEW 语句中、CREATE TABLE 语句、UPDATE 语句、INSERT 语句的 INTO 子句和 UPDATE 语句的 SET 子句中。
使用子查询的原则:
1. 子查询放在圆括号中
2.将子查询放在比较条件的右边, 可以增加可读性。
在子查询中的ORDER BY 子句不需要,除非你正在执行Top-N 分析。
Oracle8i 以前的版本中,子查询不包含 ORDER BY 子句。对一个 SELECT 语句只能用一个 ORDER BY 子句,并且如果指定了它就必须放在主 SELECT 语句的最后。从 Oracle8i 开始,ORDER BY 子句可以使用,并且在进行 Top-N 分析时是必须的。
3.在单行子查询中用单行运算符,在多行子查询中用多行运算符,
在子查询中可以使用两种比较条件:单行运算符和多行运算符。
子查询的个数:
Oracle 服务器没有强制限制子查询的数目;限制只与查询所需的缓冲区大小有关。
子查询的类型:
1. 单行子查询:从内 SELECT 语句只返回一行的查询
2. 多行子查询:从内 SELECT 语句返回多行的查询
3. 还有多列子查询:从内 SELECT 语句返回多列的查询。
单行子查询
单行子查询是从内查询返回一行的查询。在该子查询类型中用一个单行操作符
SELECT last_name, job_id
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE employee_id = 141);
SELECT last_name, job_id, salary
FROM employees
WHERE job_id =
(SELECT job_id FROM employees WHERE employee_id = 141) AND salary >(SELECT salary FROM employees WHERE employee_id = 143);
该例子可以由三个查询块组成:外查询和两个内查询。内查询块首先被执行,产生查询结果分别为 ST_CLERK 和 2600。然后处理外查询块,并且使用内查询的返回值来完成它的查询条件。
两个内查询返回单个值 (分别是 ST_CLERK 和 2600),所以这种 SQL 语句被称为单行子查询。
注:外和内查询可以从不同的表中取得数据。
在子查询中使用组函数:
SELECT last_name, job_id, salary
FROM employees
WHERE salary =
(SELECT MIN(salary) FROM employees);
你可以从主查询中显示数据,该主查询使用一个带组函数的单行子查询。子查询放在圆括号中并且放在比较条件的后面。
例子显示所有其薪水等于最低薪水的雇员的 last name、job ID 和 salary。 MIN 组函数返回单个的值 (2500) 给外函数。
带子查询的HAVING 子句:
1.Oracle 服务器首先执行子查询
2.Oracle 服务器返回结果到主查询的HAVING 子句中
例
找出平均薪水为最低平均薪水的工作岗位。
SELECT job_id, AVG(salary)
FROM employees
GROUP BY job_id
HAVING AVG(salary) = (SELECT MIN(AVG(salary))
FROM employees
GROUP BY job_id);
子查询错误
使用子查询的一个常见的错误是单行子查询返回返回了多行。
SELECT employee_id, last_name
FROM employees
WHERE salary =
(SELECT MIN(salary) FROM employees GROUP BY department_id);
ERROR at line 4:ORA-01427: single-rowsubqueryreturns more thanone rowERROR
子查询包含一个 GROUP BY 子句,这就暗示该子查询将返回多行,每个对应它所找到的一组,在这种情况下,子查询的结果将是 4400、6000、2500、4200、7000、17000 和 8300。
外查询得到子查询的结果 (4400、6000、2500、4200、7000、17000、8300) 并且在它的 WHERE 子句中使用这些结果。WHERE 子句包含一个等号 (=) 运算符,这是一个单行比较运算符,只能使用一个值。 = 操作符不能接受来自子查询的多个值,并且因此产生错误。
为了纠正该错误,改变 = 操作为 IN。
子查询的另一个常见问题是内查询没有返回行。
,子查询包含一个 WHERE 子句,推测起来,其目的是找名字为 Haas 的雇员,该语句是正确的,但在执行时选择无行返回。
没有名叫 Haas 的雇员,所以子查询无返回行,外查询得到子查询的结果 (null) 并且在 WHERE 子句中使用该结果,外查询找不到一个 job ID 等于 null 的雇员,所以也没有行返回。如果一个 job 存在 null 值,也没有返回行,因为比较两个空值还是空,因此 WHERE 子句的条件不为 true。
多行子查询:
多行子查询
子查询返回多行被称为多行子查询。对多行子查询要使用多行运算符而不是单行运算符。多行运算符期待多个值。
例
查找各部门收入为部门最低的那些雇员。
SELECT last_name, salary, department_id
FROM employees
WHERE salary IN (SELECT MIN(salary)
FROM employees
GROUP BY department_id);
内查询先被执行,产生一个查询结果,然后主查询块处理和使用由内查询返回的值完成它的搜索条件。事实上,在 Oracle 服务器看起来主查询象是下面这样:
SELECT last_name, salary, department_id
FROM employees
WHERE salary IN (2500, 4200, 4400, 6000, 7000, 8300, 8600, 17000);
在多行子查询中使用ANY 运算符
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ANY(SELECT salaryFROM employeesWHERE job_id = 'IT_PROG')
AND job_id <> 'IT_PROG';
ANY 运算符 (和它的同义词, SOME 运算符) 比较一个值与一个子查询返回的每一个值。幻灯片中的例子显示不是 IT 程序员的雇员,并且这些雇员的的薪水少于IT 程序员。挣钱最多的程序员的薪水是 $9,000。
<ANY
发表评论
-
期货交易的秘密
2022-09-28 12:31 20期货交易盈利的逻辑,简单来说就是4个字:大赚小亏。 赚钱的时 ... -
一个未了的心结
2022-09-27 14:16 87我有一个未了的心结, 就是攻克癌症, 我后面不管做啥, 挣了钱 ... -
生是一场自我实现的预言
2022-03-15 15:21 0术力之限要靠道力突破, 道力之限要靠心力突破, 人生是一场自我 ... -
人生是一场自我实现的预言
2022-03-15 14:25 476术力之限要靠道力突破, 道力之限要靠心力突破, 人生是一场自我 ... -
物联网大数据平台
2021-01-28 15:29 302TDengine是专为物联网、车联网、工业互联网、IT运维等设 ... -
大数据平台CDH搭建指南
2021-01-28 15:26 279CDH和CM介绍及搭建 http://www.fblinux. ... -
使用Flume+Logstash+Kafka+Spark Streaming进行实时日志处理分析【公安大数据】
2018-09-20 16:53 1130使用Flume+Logstash+Kafka+Spark St ... -
Cloudera Hadoop运维管理与性能调优
2018-09-17 18:53 628Cloudera Hadoop运维管理与性能调优 -
CIO
2018-08-30 11:34 334一个企业的运营过程,不论其身处哪个行业,其实都是一个信 ... -
Hadoop与MPP是什么关系?有什么区别和联系?
2018-08-29 11:17 1587Hadoop与MPP是什么关系?有什么区别和联系? -
大数据资料
2018-05-25 09:44 236大数据资料 -
大数据相关的一些内容和知识
2018-04-22 20:38 347一、大数据通用处理平 ... -
难念的经
2018-03-27 12:13 390“笑你我枉花光心计 爱 ... -
办公室里面小屁就没有掌握自己命运的资格
2018-02-07 10:03 429办公室里面小屁就没有掌握自己命运的资格。 -
一个成熟的自动化运维系统具备什么功能?
2018-02-05 16:57 331一个成熟的自动化运维系统具备什么功能? -
我国“十三五”国家大数据战略离不开专业的数据中心基础设施运维服务
2017-11-21 15:35 470我国“十三五”国家大数据战略离不开专业的数据中心基础设施运维服 ... -
千万级记录的Discuz论坛导致MySQL CPU 100%的优化笔记
2016-07-08 12:15 813千万级记录的Discuz论坛导致MySQL CPU 100%的 ... -
Oralce表被锁了,咋办?
2015-11-02 10:27 6351.下面的语句用来查询哪些对象被锁: select objec ... -
id oracle
2013-11-21 13:14 674SQL> startup ORA-27125: una ... -
一个sql简单关于分组的sql
2013-05-14 16:36 761select * from ( select aa.pe ...
相关推荐
oracle笔记子查询,有子查询相关的知识点笔记和具体的案例代码!
Oracle子查询是构建复杂查询的基石,通过合理利用单行或多行子查询,结合`IN`、`ANY`、`SOME`、`ALL`、`EXISTS`等关键字,可以极大地提高查询的灵活性和效率。理解并熟练掌握子查询的使用,对于提升数据库操作技能和...
ORACLE子查询
复杂相关子查询 动画版
### Oracle经典教程3——子查询和常用函数 #### 子查询概述 子查询是指在一个查询语句中嵌套另一个查询语句,内层查询的结果通常作为外层查询的一个条件或参数。子查询能够帮助我们更灵活地处理复杂的数据查询需求...
oracle笔记高级子查询,oracle中的高级子查询有点难度,不太好理解,有具体的案例代码!
在Oracle中,连接查询和子查询以及存储过程与触发器是数据库管理与开发中的核心概念,下面将对这些主题进行深入讲解。 首先,让我们探讨**连接查询**。在数据库操作中,连接查询用于合并两个或更多表的数据,根据...
在学习Oracle子查询时,学员需要通过实践来熟悉不同场景下子查询的使用方法,掌握其返回的数据类型,以及如何在WHERE、HAVING、FROM子句中嵌入子查询,解决实际问题。同时,理解子查询返回空值对主查询的影响,以及...
Oracle子查询知识点总结 Oracle子查询是指在SQL语句中嵌套使用SELECT语句,以解决复杂的查询问题。下面是Oracle子查询的知识点总结: 一、子查询的定义和类型 * 子查询是一个完整的SELECT语句,嵌套在另一个...
oracle select group 子查询 表连接
在Oracle中,子查询是一个非常关键的概念,尤其对于初学者来说,理解和掌握子查询是提升SQL技能的基础。子查询,也称为嵌套查询,是在一个SQL语句中嵌入另一个查询,用于获取数据或对主查询进行条件判断。 1. **子...
oracle子查询学习教案.pptx
Oracle子查询是数据库查询中的一个重要概念,它是指在SQL语句中嵌套另一个查询语句,用于获取数据或满足特定条件。子查询可以被用在SELECT、INSERT、UPDATE和DELETE命令中,甚至可以在一个子查询内部再嵌套其他子...
Oracle子查询的语法结构如下: ```sql SELECT [DISTINCT] * | 列名 1 [别名 1], 列名 2 [别名 2]… FROM 表名, (SELECT [DISTINCT] * | 列名 1 [别名 1], 列名 2 [别名 2]… FROM 表名 [WHERE 条件] [GROUP BY...
李兴华老师的ORACLE数据库课程中,对分组统计和子查询进行了深入详解。本课程涵盖了分组统计的重点和难点、子查询的概念和应用场景,以及在实际开发中需要注意的细节。 分组统计 在SQL中,分组统计是对数据进行...
通过本章学习,您将可以: ...子查询对空值的处理 在 FROM 子句中使用子查询 在SQL中使用单列子查询 相关子查询 书写相关子查询 使用子查询更新和删除数据 使用 EXISTS 和 NOT EXISTS 操作符 使用 WITH 子句
Oracle子查询是数据库查询语言SQL中的一个重要概念,它在数据处理和分析中起着至关重要的作用。子查询,也称为嵌套查询,是指在另一个查询内部的查询,它作为一个独立的查询被执行,并且其结果被主查询使用。下面...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其性能优化是DBA(数据库管理员)和开发人员的关键技能之一。查询优化是性能优化的核心部分,它涉及到如何以最有效的方式执行SQL查询,从而提高数据检索的...
在Oracle数据库中,`IN`操作符是一种常用的查询方式,它允许我们检查某个值是否在一个给定的集合或子查询结果中。例如,如果我们有一个表`employees`,包含`column1`和`column2`列,我们可以用如下SQL查询来找出`...