Oracle单行子查询和多行子查询实例讲解

1、查询部分分为主查询和子查询;

2、根据返回值的记录多少分为单行子查询和多行子查询;单行子查询用单行比较符=连接;多行子查询用多行比较符in连接;

3、子查询的内容可以放在FROM后面,也可以放在WHERE后面,也可以放在HAVING后面;

4、完整的SELECT语句可以拥有GROUP BY,HAVING子句,也可以使用组函数;也可以从多个表中查询;

5、子查询的内容必须用小括号来界定;

6、例子1:子查询(子句)在FROM后面的:

SELECT first_name,last_name
FROM 
(SELECT first_name,last_name
FROM s_emp
WHERE 1=1
AND first_name='国藩'
)
WHERE 1=1
AND last_name='曾';

精简一下就是:

SELECT first_name,last_name
FROM 
(子查询)
WHERE 1=1
AND last_name='曾';

这里就像是一个定语从句,这里的(子查询)就替换成了另一个select语句;这里要注意,子查询语句里没有表示结束的分号;并且主查询的范围必须小于子查询,否则会因查不到数据而报错;

7、例子2:子查询(子句)在WHERE后面的

SELECT first_name,last_name 
FROM s_emp
WHERE dept_id=
(
SELECT dept_id
FROM s_emp
WHERE last_name='曾'
);

这里查询的是姓是和‘曾’的所在的部门ID相同(只有一个姓曾)的所有人的姓名;

这里,有人问了,如果有好几个姓曾的人怎么办,我要把所有姓曾人所在部门的人的姓名都查出来怎么办,这里就是多行子查询;把等号换成in即可;

Oracle数据库SQL开发之 子查询——子查询的类型

子查询有两种基本的类型:

单行子查询:不向外部的SQL语句返回结果,或者只返回一行。

多行子查询:向外部的SQL语句返回一行或多行。

还有3种子类型,可以返回一行或多行:

多列子查询:向外部的SQL语句返回多列

关联子查询:引用外部的SQL语句中的一列或多列。通过相同的列与外部的SQL语句相关联。

嵌套子查询:位于另外一个自查中。子查询最多可以嵌套255层。

子查询的分类

子查询可以返回的数据类型一共分以下4种:

单行单列:返回的是一个具体列的内容,可以理解为一个单值数据。

单行多列:返回一行数据中多个列的内容。

多行单列:返回多行记录中同一列的内容,相当于给出一个操作范围。

多行多列:查询返回的结果是一张临时表。

子查询几乎可以出现在一条查询语句的任意位置上,不过在from、where、having子句中出现较多,而且在子查中一定要使用“()”声明。

子查询返回的结果:

where子句:此时子查询返回的结果一般都是单行单列、单行多列、多行单列(即不是一张表)。

having子句:此时子查询返回的都是单行单列数据(即一个数据),同时为了使用统计函数操作。

from子句:此时子查询返回的结果一般都是多行多列,可以按照一张数据表(即临时表)的形式操作。

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐