子查询

本文详细介绍了SQL中的子查询概念及应用,包括单行子查询与多行子查询的区别和使用场景,并通过具体例子展示了如何使用in、notin、exists等运算符。

一、单子查询

        说明:单子查询只返回一行记录,但父查询可以返回多行。在where条件中可以使用预算符<,>,=,<=,>=,<>

eg:

select *  from emp where sal=(select min(sal) from emp)

 结果

结果为 写道

EMPNO  ENAME   JOB       MGR     HIREDATE        SAL       COMM    DEPTNO
---------- ---------- --------- ---------- --------------    ---------- ---------- ----------
7369      SMITH     CLERK 7902      17-12月-80   800                       20

 二:多行子查询

          说明:子查询可以返货多行记录,单where条件中必须使用多行运算符in,not in,exists,no exists,all,any.一般情况下,不能确认子查询返回多少条数据,用多行子查询比较安全

 

 in:where条件中必须在子查询中的某些记录也包含和它们相同的值。

 eg:

select * from emp where sal in (select sal from emp where deptno=20) order by deptno

 

     EMPNO ENAME      JOB              MGR       HIREDATE     SAL       COMM     DEPTNO
----------    ----------  ---------            ---------- -------------- ---------- ---------- ----------
      7369    SMITH      CLERK           7902 17-12月-80        800                      20
      7876    ADAMS      CLERK           7788 23-5月 -87        1100                    20
      7566    JONES      MANAGER         7839 02-4月 -81      2975                    20
      7788    SCOTT      ANALYST         7566 19-4月 -87        3000                    20
      7902     FORD       ANALYST         7566 03-12月-81        3000                    20

 

 not in:和 in 刚好相反  子查询中的记录必须不包含和他们相同的值。

eg:

select * from emp where sal  not in (select sal from emp where deptno=20) order by deptno
     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
    ---------- ---------- ---------        ---------- --------------    ---------- ---------- ----------
      7782 CLARK      MANAGER         7839 09-6月 -81      2450                    10
      7839 KING       PRESIDENT            17-11月-81           5000                    10
      7934 MILLER     CLERK           7782 23-1月 -82          1300                    10
      7499 ALLEN      SALESMAN        7698 20-2月 -81       1600        300         30
      7521 WARD       SALESMAN        7698 22-2月 -81      1250        500         30
      7900 JAMES      CLERK           7698 03-12月-81           950                    30
      7844 TURNER     SALESMAN        7698 08-9月 -81      1500          0         30
      7654 MARTIN     SALESMAN        7698 28-9月 -81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-5月 -81         850                    30
9 rows selected.

          any:如果用=any的时候,作用与in相同

                 如果>any, 意思是 比里面子查询中最小的大

  SQL> select * from emp where sal  >any (select sal from emp where deptno=20) order by deptno;
     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10
      7839 KING       PRESIDENT            17-11月-81           5000                    10
      7934 MILLER     CLERK           7782 23-1月 -82           1300                    10
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20
      7902 FORD       ANALYST         7566 03-12月-81           3000                    20
      7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20
      7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20
      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300         30
      7900 JAMES      CLERK           7698 03-12月-81            950                    30
      7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30
      7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30
      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500         30

13 rows selected.

 

      如果<any,意思是,比里面最大的小

  1* select * from emp where sal<any (select sal from emp where deptno=20) order by deptno
SQL> /

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10
      7934 MILLER     CLERK           7782 23-1月 -82           1300                    10
      7369 SMITH      CLERK           7902 17-12月-80            800                    20
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20
      7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20
      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300         30
      7900 JAMES      CLERK           7698 03-12月-81            950                    30
      7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30
      7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30
      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500         30

11 rows selected.

 

          all:如果=all的时候,作用也与in相同

                如果>all,意思是比里面子查询中最大的还大。

  1* select * from emp where sal>all (select sal from emp where deptno=20) order by deptno
SQL> /
 EMPNO ENAME   JOB        MGR       HIREDATE       SAL       COMM     DEPTNO
---------- ---------- -------     ---------- -------------- -    --------- ---------- ----------
 7839     KING    PRESIDENT            17-11月-81     5000                    10

 

                如果<all,意思是比里面子查询中最小的还小。

  select * from emp where sal<all (select sal from emp where deptno=20) order by deptno;
no rows selected

 

 

【直流微电网】径向直流微电网的状态空间建模与线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模与线性化方法,重点提出了一种基于耦合DC-DC变换器状态空间平均模型的建模策略。该方法通过对系统中多个相互耦合的DC-DC变换器进行统一建模,构建出整个微电网的集中状态空间模型,并在此基础上实施线性化处理,便于后续的小信号分析与稳定性研究。文中详细阐述了建模过程中的关键步骤,包括电路拓扑分析、状态变量选取、平均化处理以及雅可比矩阵的推导,最终通过Matlab代码实现模型仿真验证,展示了该方法在动态响应分析控制器设计中的有效性。; 适合人群:具备电力电子、自动控制理论基础,熟悉Matlab/Simulink仿真工具,从事微电网、新能源系统建模与控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网中多变换器系统的统一建模方法;②理解状态空间平均法在非线性电力电子系统中的应用;③实现系统线性化并用于稳定性分析与控制器设计;④通过Matlab代码复现扩展模型,服务于科研仿真与教学实践。; 阅读建议:建议读者结合Matlab代码逐步理解建模流程,重点关注状态变量的选择与平均化处理的数学推导,同时可尝试修改系统参数或拓扑结构以加深对模型通用性适应性的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值