zoukankan      html  css  js  c++  java
  • SQL语法 之 表连接

    一、连接条件

      连接查询中用来连接连个表的条件称为连接条件或连接谓词。其形式为:

    [<表1>].<列名1> <连接运算符> [<表2>].<列2>  

      常见的连接运算符包括

      1、比较运算符:=、>、<、>=、<=、!=、between和and。

      2、逻辑运算符:not、and、or。

      3、使用between和and连接查询形式为[<表1>].<列名1><between>[<表2>].<列名2>and[<表2>].<列名3>。

    二、连接按照结果集分类

      1、内连接:表中的行互相连接。结果集的行数等于每个表满足条件的行数的乘积,参与连接的表示平等的。

      2、外连接:参与连接的表有主次之分,主表的每一行数据去匹配从表的数据列,符合连接条件的数据将直接返回到结果集中,不符合连接条件的数据列将以null填充后返回到结果集中,其中外连接又分左外连接、右外连接和全连接3种。

      [1] 等值连接查询

    select p.*,c.* 
    from country as c,person as p 
    where c.countryid = p.countryid

      上面的等值连接中,两张表都有countryid字段,因此查出来的结果中就会有两列countryid

      [2] 在等值结果中消除数据就是自然连接

    select p.name,c.countryname from country as c,person as p where c.countryid = p.countryid

      [3] 自身连接

      一个数据表自己与自己建立连接称为自身连接

    、内连接

      1、内连接查询的语法结构如下:

    SELECT <属性或表达式列表>
    FROM <表名> [INNER] JOIN <表名>
        ON <连接条件>
    [ WHERE <限定条件> ]

      INNER 可以省略,只有 JOIN 时就是省略了inner。内连接就是传统的连接操作,这里用 ON 子句指定连接条件,用 WHERE 子句指定连接后的其他限定条件:

    select p.name,c.countryname 
    from country as c inner join person p on p.countryid = c.countryid

    、左外连接查询

      1、左外连接查询的语法结构,OUTER 可省略:

    SELECT <属性或表达式列表>
    FROM <表名> LEFT [OUTER] JOIN <表名>
        ON <连接条件>
    [ WHERE <限定条件> ]

      如下:

    SELECT TA.RoleId,TA.RoleName,TB.FunctionCode
    FROM SysRole TA LEFT JOIN SysRoleFunction TB ON TA.RoleId = TB.RoleId

      注意:

      [1] 第一个表为主表,第二个表为从表;

      [2] 在查询结果集中包含第一个表中满足条件的所有记录,如果第二个表存在ON子句连接条件匹配的记录,则第二个表返回相应值,否则第二个表返回null。也就是说,不管第二个表有没有记录匹配,第一个表的所有字段都会返回,这就是外连接与内连接的区别。

      

    五、右外连接查询

      1、右外连接查询的语法结构如下:

    SELECT <属性或表达式列表>
    FROM <表名> RIGHT OUTER JOIN <表名>
        ON <连接条件>
    [ WHERE <限定条件> ]

      2、实例:

    SELECT TB.RoleId,TB.FunctionCode,TA.RoleName
    FROM SysRole TA RIGHT JOIN SysRoleFunction TB ON TA.RoleId = TB.RoleId

      注:

      [1] 第一个表为从表,第二个表为主表;

      [2] 在查询结果集中包含第二个表中满足条件的所有记录,如果第一个表存在ON子句连接条件匹配的记录,则第一个表返回相应值,否则第一个表返回null。也就是说,不管第一个表有没有记录匹配,第二个表的所有字段都会返回。

      

    六、全外连接查询

      1、全外连接查询的语法结构如下:

    SELECT <属性或表达式列表>
    FROM <表名> FULL [ OUTER ] JOIN <表名>
        ON <连接条件>
    [ WHERE <限定条件>]

      注:

      [1] 两个表同为主表;

      [2] 在查询结果集中包含两个表中的所有记录,如果存在ON子句连接条件匹配的记录,则另一个表返回相应值,否则另一个表返回null。也就是说,不管表记录有没有记录匹配,两个表的所有字段都会返回。

    七、交叉连接

      交叉连接Corss join,用于将第一张表的所有记录与第二张表的所有记录组合一次并返回。

        执行如下SQL语句:

    SELECT LastName + firstname 
    FROM name2 CROSS JOIN name1

      

    八、联合查询union(union all)

       union是一个特殊的运算符,用于将两个或两个以上的查询产生一个结果集。join将信息水平连接(添加更多列),而union将信息垂直连接(添加更多行)。

       当使用union处理查询时,要注意以下几个关键点。

       (1)、所有union的查询必须在select列表中有相同的列数。即如果第一个查询有3个列数,第二个查询也要只有3个列数。

       (2)、union返回结果的标题集仅从第一个查询中获得,无论第二个查询如何命名或取别名都不会更改。

       (3)、查询中对应的列的数据类型必须隐式一致。注意不要求完全一致,只需要隐式一致。

       (4)、与其他非union不同,union的默认返回选项为distinct,而不是all。union all语句与union的不同点仅仅在于遇到相同的记录,会全部保留。

  • 相关阅读:
    SDN第二次作业
    事后诸葛亮
    SDN第一次上机作业
    个人作业——软件产品案例分析
    SDN第一次作业
    Alpha冲刺总结报告
    Alpha冲刺Day10
    Alpha冲刺Day9
    Alpha冲刺Day8
    Alpha冲刺Day7
  • 原文地址:https://www.cnblogs.com/xinaixia/p/5809265.html
Copyright © 2011-2022 走看看