【Query】标量子查询 scalar subquery

编程入门 行业动态 更新时间:2024-10-23 01:36:40

【Query】<a href=https://www.elefans.com/category/jswz/34/1765735.html style=标量子查询 scalar subquery"/>

【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

 

更多推荐

【Query】标量子查询 scalar subquery

本文发布于:2024-03-04 12:55:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1709326.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:标量   Query   subquery   scalar

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!