【Oracle】Oracle的子查询——单行子查询和多行子查询;

时间:2022-05-26 00:22:59

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即可;