zoukankan      html  css  js  c++  java
  • 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语句

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

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

  • 相关阅读:
    luogu_P1850 换教室
    luogu_P3224 [HNOI2012]永无乡
    luogu_P1064 金明的预算方案
    luogu_P2014 选课
    luogu_P3372 【模板】线段树 1(动态开点)
    luogu_P2852 [USACO06DEC]牛奶模式Milk Patterns
    luogu_P1941 飞扬的小鸟
    luogu_P2678 跳石头
    luogu_P1638 逛画展
    【Tyvj2046】掷骰子
  • 原文地址:https://www.cnblogs.com/jacky912/p/10528365.html
Copyright © 2011-2022 走看看