oracle中的子查询问题

  • A+
所属分类:技术

chatGPT账号

相关子查询

不相关子查询

子查询中没有使用到外部查询中表的任何一个列。

--先执行子查询,然后执行外部查询

 

--何时考虑使用子查询?

--如果一个查询任务需要2步以上的计算过程才能得到结果,那么都可以使用子查询

 

--子查询必须放在小括号中

 

--查询赚的比亚伯多的雇员的信息

--子查询负责找到亚伯的薪水

SELECT last_name,job_id,salary

FROM employees

WHERE salary > (SELECT salary

FROM employees

WHERE last_name='Abel');

--子查询一般放在比较操作符的右边,增强代码可读性。

 

--单行子查询:

--子查询返回1行1列1个值。

 

--多行子查询

--子查询返回多行1列多个值。

 

--在外部查询中,要对单行子查询的返回结果进行比较,应该使用单行比较操作符:

-- > = < >= <= <>  :只能比较一个值

 

--查询和Chen做一样的工作,但是赚的比Chen多的雇员的信息。

select last_name,salary,job_id

FROM employees

WHERE job_id = (

select job_id

FROM employees

where last_name='Chen'

)

AND salary > (

select salary

FROM employees

where last_name='Chen'

);

 

--子查询可出现在select语句的大部分子句中

--子查询-------

--如果子查询返回空结果集,它会把null值带入到外部查询中,从而导致外部查询的结果集

--也为空

--查询和雇员Haas干同样工作的雇员(公司中没有Haas)

SELECT last_name,job_id

FROM employees

WHERE job_id = (SELECT job_id

FROM employees

WHERE last_name='Haas');

 

 

--多行子查询---

--如果要在外部查询中对多行子查询的返回结果进行比较,必须使用多行比较操作符:

--3个:in(和其中任何一个值相等)、any(任何一个值)、all(所有值)

--其中,any和all不能单独使用,其前面必须加上单行比较操作符。例如:

-- >any <any =any(等同于in) >all <all等

 

--查询工作不是IT程序员,并且工资少于任何一个程序员的雇员的信息

SELECT last_name,salary,job_id

FROM employees

WHERE salary <ANY(

SELECT salary

FROM employees

WHERE job_id='IT_PROG'

)

and job_id <> 'IT_PROG';

 

--查询工作不是IT程序员,并且工资少于所有程序员的雇员的信息

SELECT last_name,salary,job_id

FROM employees

WHERE salary <All(

SELECT salary

FROM employees

WHERE job_id='IT_PROG'

)

and job_id <> 'IT_PROG';

 

--注意:当在外部查询的where中使用not in 操作符,并且,子查询的结果集中包含一个null

--值时,直接导致外部查询的结果集也为空

--查询非经理雇员的姓名

SELECT last_name

FROM employees

WHERE employee_id NOT IN (

SELECT manager_id

from employees

);

--原因:not in操作实际上转化为and操作。在and操作中,只要有一个条件为null,整个

--and的结果也为null,从而导致外部查询的结果集为空。

--解决办法:去掉子查询结果集中的null值

SELECT last_name

FROM employees

WHERE employee_id NOT IN (

SELECT manager_id

FROM employees

where manager_id is not null

);

本文由 知点 首发于【知点网http://www.zhidnet.com)】未经允许不得以任何方式转载,违者必将追究法律责任。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的电报
  • 这是我的电报扫一扫
  • weinxin
chatGPT账号
知点

发表评论

您必须登录才能发表评论!