• Atitit 提升可读性sql subquery udf 子查询 目录 1. 使用udf 和参数@简化join和subquery 1 1.1.1. 子查询分类 1 2. 2.1 按返回结果集分类


    Atitit 提升可读性sql subquery udf 子查询

     

     

    目录

    1. 使用udf 和参数@简化join和subquery 1

    1.1.1. 子查询分类 1

    2. 2.1 按返回结果集分类 2

    2.1.     2.2 按照对返回结果的调用方法 2

    2.2. 行子查询实例 3

    2.3. 标量子查询实例 3

    2.4.   4.6 列子查询实例 in any all 4

     

     

    1. 使用udf 和参数@简化join和subquery

    Use in select fld by udf....can not need join,,and enhance readable.

     

     

        1. 子查询分类
          1. 按结果集的行列数不同分为4种
    • 标量子查询(结果集只有一行一列)
    • 列子查询(结果集只有一列多行)
    • 行子查询(结果集有一行多列)
    • 表子查询(结果集一般为多行多列)
          1. 按子查询出现在主查询中的不同位置分
    •  

    select后面:仅仅支持标量子查询。

    •  
    •  

    from后面:支持表子查询。

    •  
    •  

    where或having后面:支持标量子查询(单列单行)、列子查询(单列多行)、行子查询(多列多行)

    •  
    •  

    exists后面(即相关子查询):表子查询(多行、多列)

    •  

     

     

    1. 1 按返回结果集分类

            子查询按返回结果集的不同分为4种:表子查询,行子查询,列子查询和标量子查询。

            表子查询:返回的结果集是一个行的集合,N行N列(N>=1)。表子查询经常用于父查询的FROM子句中。

            行子查询:返回的结果集是一个列的集合,一行N列(N>=1)。行子查询可以用于福查询的FROM子句和WHERE子句中。

            列子查询:返回的结果集是一个行的集合,N行一列(N>=1)。

            标量子查询:返回的结果集是一个标量集合,一行一列,也就是一个标量值。可以指定一个标量表达式的任何地方,都可以用一个标量子查询。

     

            从定义上讲,每个标量子查询也是一个行子查询和一个列子查询,反之则不是;每个行子查询和列子查询也是一个表子查询,反之也不是。

     

      1.     2.2 按照对返回结果的调用方法

            子查询按对返回结果集的调用方法,可分为where型子查询,from型子查询及exists型子查询。

            where型子查询:(把内层查询结果当作外层查询的比较条件)

            定义:where型的子查询就是把内层查询的结果当作外层查询的条件。

            from型子查询:(把内层的查询结果供外层再次查询)

            定义:from子查询就是把子查询的结果(内存里的一张表)当作一张临时表,然后再对它进行处理。

            exists型子查询:(把外层查询结果拿到内层,看内层的查询是否成立)

            定义:exists子查询就是对外层表进行循环,再对内表进行内层查询。和in ()差不多,但是它们还是有区别的。主要是看两个张表大小差的程度。若子查询表大则用exists(内层索引),子查询表小则用in(外层索引);

    3 使用子查询原则

        1.一个子查询必须放在圆括号中。

        2.将子查询放在比较条件的右边以增加可读性。

        子查询不包含 ORDER BY 子句。对一个 SELECT 语句只能用一个 ORDER BY 子句,并且如果指定了它就必须放在主 SELECT 语句的最后。

        3.在子查询中可以使用两种比较条件:单行运算符(>, =, >=, <, <>, <=) 和多行运算符(IN, ANY, ALL)。

    4

    ————————————————

      1. 行子查询实例

        如:获取和100号球员性别相同并且居住在同一城市的球员号码。

     

    mysql> select playerno

    from players

    where (sex, town) = (

        select sex, town

        from players

        where playerno = 100);

    ————————————————

      1. 标量子查询实例 

        可以指定一个标量表达式的任何地方,几乎都可以使用一个标量子查询。

        如:获取和27号球员出生在同一年的球员的号码

     

    mysql> select playerno

    from players

    where year(birth_date) =

        (select year(birth_date)

        from players

        where playerno = 27)

    and playerno <> 27;

    ————————————————

      1.   4.6 列子查询实例 in any all

        由于列子查询返回的结果集是 N 行一列,因此不能直接使用 =   >   <   >=   <=   <> 这些比较标量结果的操作符。在列子查询中可以使用 IN、ANY(SOME)和ALL操作符:

        IN:在指定项内,同 IN(项1,项2,…)。

        ANY:与比较操作符联合使用,ANY关键字必须接在一个比较操作符的后面,表示与子查询返回的任何值比较为 TRUE ,则返回 TRUE 。

        SOME:ANY 的别名,较少使用。

        ALL:与比较操作符联合使用,ALL关键字必须接在一个比较操作符的后面,表示与子查询返回的所有值比较都为 TRUE ,则返回 TRUE 。

    ————————————————

    mysql查询语句select-子查询_数据库_jesseyoung-CSDN博客

  • 相关阅读:
    我的安卓开始
    OLAP的一些知识——接下去的项目需要的背景
    关于Java接口
    Hexo+Github/Coding免费搭建个人博客网站
    手机自带输入法emoji表情的输入,提交及显示——前端解决方案
    改变函数中的 this 指向——神奇的call,apply和bind及其应用
    什么是jsonp?——使用jsonp解决跨域请求问题
    玩转angularJs——通过自定义ng-model,不仅仅只是input可以实现双向数据绑定
    利用jquery mobiscroll插件选择日期、select、treeList的具体运用
    转载:中年程序猿的迷茫,你还在深究技术吗?
  • 原文地址:https://www.cnblogs.com/attilax/p/15196932.html
Copyright © 2020-2023  润新知