zoukankan      html  css  js  c++  java
  • Sql_join left right

    1、内连接inner join

      只返回两张表中所有满足连接条件的行,即使用比较运算符根据每个表中共有的列的值匹配两个表中的行。(inner关键字是可省略的)

    ①传统的连接写法:

      在FROM子句中列出所有要连接的表的名字(进行表别名),以逗号分隔;

      连接条件写在WHERE子句中;

    2、外连接outer join

      使用外连接不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。

    在MySQL数据库中外连接分两类(不支持全外连接):

      左外连接、右外连接。(outer关键字可省略)。

    共同点:都返回符合连接条件和查询条件(即:内连接)的数据行

    不同点:

      ①左外连接还返回左表中不符合连接条件,但符合查询条件的数据行。(所谓左表,就是写在left join关键字左边的表)

      ②右外连接还返回右表中不符合连接条件,但符合查询条件的数据行。(所谓右表,就是写在right join关键字右边的表)

     

    ①先连接后过滤

      select ……from ……

      left join ……

      on 连接条件

        where 过滤条件;

    ②先过滤后连接

      select ……from ……

      right join ……

      on 连接条件

        and 过滤条件;

    3、交叉连接—笛卡尔积

      因为没有连接条件,所进行的表与表间的所有行的连接。

    特点:

      ①连接查询没有写任何连接条件

      ②结果集中的总行数就是两张表中总行数的乘积(笛卡尔积)

    注意:在实际中,应该要避免产生笛卡尔积的连接,特别是对于大表:

    select * from stu,tea,course,xuanke;

    分组SELECT的基本格式:

      select [聚合函数] 字段名 from 表名

        [where 查询条件]

        [group by 字段名]

        [having 过滤条件]

    1、group by子句

      根据给定列或者表达式的每一个不同的值将表中的行分成不同的组,使用组函数返回每一组的统计信息

    规则:

      ①出现在SELECT子句中的单独的列,必须出现在GROUP BY子句中作为分组列

      ②分组列可以不出现在SELECT子句中

      ③分组列可出现在SELECT子句中的一个复合表达式中

      ④如果GROUP BY后面是一个复合表达式,那么在SELECT子句中,它必须整体作为一个表达式的一部分才能使用。

    4、HAVING子句:对分组结果进行过滤

    注意:

      不能使用WHERE子句对分组后的结果进行过滤

      不能在WHERE子句中使用组函数,仅用于过滤行

    因为WHERE子句比GROUP BY先执行,而组函数必须在分完组之后才执行,且分完组后必须使用having子句进行结果集的过滤

    !!!having子语句与where子语句区别:

      where子句在分组前对记录进行过滤;

      having子句在分组后对记录进行过滤

    1)HAVING可以单独使用而不和GROUP BY配合,如果只有HAVING子句而没有GROUP BY,表中所有的行分为一组

    2)HAVING子句中可以使用组函数

    3)HAVING子句中的列,要么出现在一个组函数中,要么出现在GROUP BY子句中(否则出错)

  • 相关阅读:
    HTML与css语法笔记
    HTML标记含义
    HTML-入门篇day01
    计算器
    九宫格
    5.28第十三周
    5.21 不用交得作业及答案
    5.22 上交作业
    5.15作业
    5.7作业
  • 原文地址:https://www.cnblogs.com/ingstyle/p/6755508.html
Copyright © 2011-2022 走看看