【Query】标量子查询 scalar subquery

目录

 

定义


定义

 

标量子查询是一个子查询,它只从一行中返回一个列值。标量子查询表达式的值是子查询的可选列表项的值。如果子查询返回 0 行,则标量子查询表达式的值为 NULL。如果子查询返回多行,则报错。

可以在大多数要求表达式 (expr) 的语法中使用标量子查询表达式。在所有情况下,标量子查询必须包含在其自己的括号中,即使其句法位置已将其定位在括号内(例如,当标量子查询用作内置函数的参数时)。

 

他不能用在如下条件中:

不能作为列的默认值

不能作为cluster的哈希表达式

不能用在 DML 语句的返回子句中

不能作为基于函数的索引的基础

不能用在check约束中


在scott用户中查询员工(emp)和部门(dept)的总数

SQL> select (select count(*) from emp) 员工总数,(select count(*) from dept) 部门总数 from dual;
 
 
员工总数   部门总数
---------- ----------
        14          4

查询每位员工的主管名字

SQL>

select e.ename||q'[的主管是]'||m.ename

from emp e,(

select empno,ename,job from emp) m

where e.mgr=m.empno;
 
E.ENAME||Q
'[的主管是]'||M.ENAME
-----------------------------------------------------------
FORD的主管是JONES
SCOTT
的主管是JONES
TURNER
的主管是BLAKE
ALLEN
的主管是BLAKE
WARD
的主管是BLAKE
JAMES
的主管是BLAKE
MARTIN
的主管是BLAKE
MILLER
的主管是CLARK
ADAMS
的主管是SCOTT
BLAKE
的主管是KING
JONES
的主管是KING
CLARK
的主管是KING
SMITH
的主管是FORD
 

13 rows selected.

当然也可以用自连接的方式自连接:SELF JOIN

SQL>

select e.ename||q'[的主管是]'||m.ename

from emp e,emp m

where e.mgr=m.empno;
 
E.ENAME||Q
'[的主管是]'||M.ENAME
-----------------------------------------------------------
FORD的主管是JONES
SCOTT
的主管是JONES
TURNER
的主管是BLAKE
ALLEN
的主管是BLAKE
WARD
的主管是BLAKE
JAMES
的主管是BLAKE
MARTIN
的主管是BLAKE
MILLER
的主管是CLARK
ADAMS
的主管是SCOTT
BLAKE
的主管是KING
JONES
的主管是KING
CLARK
的主管是KING
SMITH
的主管是FORD
 

13 rows selected.

 

查询所有部门的名称,地点,员工数和平均工资

SQL>

select dname,loc,empcount,avg_sal

from

(select deptno,count(deptno) empcount,avg(sal) avg_sal from emp group by deptno) e,

(select deptno,dname,loc from dept) d

where e.deptno=d.deptno;
 
DNAME           LOC               EMPCOUNT    AVG_SAL

--------------- --------------- ---------- ----------
ACCOUNTING      TJ CHINA                 3 2916.66667
RESEARCH        DALLAS                   5       2175
SALES           CHICAGO                  6 1566.66667

也可用普通子查询来解决

SQL>

select d.dname,d.loc,e.empcount,e.avg_sal

from (

select deptno,count(deptno) empcount ,avg(sal) avg_sal from emp group by deptno) e

,dept d

where e.deptno=d.deptno;
 
DNAME           LOC               EMPCOUNT    AVG_SAL

--------------- --------------- ---------- ----------
ACCOUNTING      TJ CHINA                 3 2916.66667
RESEARCH        DALLAS                   5       2175
SALES           CHICAGO                  6 1566.66667

 

查询工资比SCOTT高的员工是谁

SQL>

select ename from emp

where sal>(

select sal from emp where ename='SCOTT'

);
 
ENAME

-------
KING

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以将标量子查询嵌套在 SELECT 语句中作为一个列,然后在外部 SELECT 语句中选择该列。例如: ``` SELECT column1, (SELECT COUNT(*) FROM my_table WHERE column2 = 'my_value') as scalar_subquery FROM my_table WHERE column1 = 'another_value'; ``` 在上面的示例中,标量子查询 `(SELECT COUNT(*) FROM my_table WHERE column2 = 'my_value')` 返回一个值,该值作为一个名为 `scalar_subquery` 的列包含在结果集中。 如果你想要抓取标量子查询的 SQL 语句,可以使用以下方法: 1. 将标量子查询作为一个子查询,并将其结果集保存到一个临时表中,然后在外部查询中使用该临时表。例如: ``` CREATE TABLE temp_table AS SELECT COUNT(*) as count_value FROM my_table WHERE column2 = 'my_value'; SELECT column1, count_value FROM my_table, temp_table WHERE column1 = 'another_value'; ``` 在上面的示例中,第一个 SELECT 语句将标量子查询的结果集保存到一个名为 `temp_table` 的临时表中,然后在第二个 SELECT 语句中使用该临时表。 2. 使用变量来存储标量子查询的结果,并将该变量作为参数传递给外部查询。例如: ``` DECLARE @count_value INT; SELECT @count_value = (SELECT COUNT(*) FROM my_table WHERE column2 = 'my_value'); SELECT column1, @count_value FROM my_table WHERE column1 = 'another_value'; ``` 在上面的示例中,第一个 SELECT 语句将标量子查询的结果保存到一个名为 `@count_value` 的变量中,然后在第二个 SELECT 语句中使用该变量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aluphami

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值