• mysql补充


    having

      添加having语句(就像where指定条件一样,给每个组指定筛选条件一样,必须跟在group by后面)

        以“dept_id”为分类标志统计各单位的职工人数和工资平均数且工资平均数大于4000。

        select dept_id,avg(sal) from employee group by dept_id having avg(salary)>400;

    on

      on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

      on是生成连接表起作用的,where是生成连接表之后对连接表在进行过滤

      当使用left join时,无论on的条件是否满足,都会返回左表的所有记录,对于满足的条件的记录,两个表对应的记录会连接起来,对于不满足条件的记录,那右表字段全部是null

      当使用right join时,类似,只不过是全部返回右表的所有记录

      当使用inner join时,功能与where完全相同。

    on、where、having三者之间的区别:

      on最先执行,where次之,having最后。(on先把不符合条件的记录过滤后才进行统计,它可以减少中间运算要处理的数据,运算速度最快)、

      where的作用时间是在计算之前完成的,而having是在计算之后起作用的。

      在多表连接查询时,on比where更早起作用,系统首先根据各个表之间的连接条件把多个表合成一个临时表之后,再由where进行过滤,然后计算,计算之后再由having进行过滤。

    连表操作

      inner join  

        内联满足交换定律:“A inner join B” 和 “B inner join A” 是相等的。

      outer join

          连接类型:        保留数据行:

          A left outer join B      all A rows

          A right outer join B      all B rows

          A full outer join B      all A and B rows

      cross join(交叉连接)

        交叉连接执行连个表的笛卡尔积(就是把A表和B表的数据进行一个N*M的组合),他匹配一个表另一个表的每一行,不能通过on子句在交叉连接指定谓词,但可以使用where语句

        实现相同的效果,这时交叉连接基本上是作为一个内部连接。

        交叉连接相对于内部连接使用效率低,而且两个大表不应该使用交叉连接

  • 相关阅读:
    [原创]RTX使用printf输出后进入hardfault中断的处理方法
    [原创]单片机 HexToStr and HexToBcd BcdToStr
    [原创]单片机-HexToStr or HexToAsc
    再看 AspriseOCR
    [源创] STM32F103ZET6 基于XMODEM 通讯的 BOOTLOADER案列IAP
    单片机串口——如何判定接收一帧数据的完成
    [原创] 关于步科eview人机界面HMI的使用
    [原创] STM32 定时器TIMx 编码器应用 函数 TIM_EncoderInterfaceConfig 分析
    单片机的 HexToStr HexToBcd BcdToStr 几个转换函数
    [转载] 全局键盘钩子(WH_KEYBOARD)
  • 原文地址:https://www.cnblogs.com/jacky912/p/10528365.html
Copyright © 2020-2023  润新知