zoukankan      html  css  js  c++  java
  • 【Vegas原创】SQL Join的经典使用(07.12.11 Update)

    外联接。外联接可以是左向外联接、右向外联接或完整外部联接。
    在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:

    LEFT JOIN 或 LEFT OUTER JOIN。
    左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

    RIGHT JOIN 或 RIGHT OUTER JOIN。
    右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

    FULL JOIN 或 FULL OUTER JOIN。
    完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

    仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。内联接消除与另一个表中的任何行不匹配的行。而外联接会返回 FROM 子句中提到的至少一个表或视图的所有行,只要这些行符合任何 WHERE 或 HAVING 搜索条件。将检索通过左向外联接引用的左表的所有行,以及通过右向外联接引用的右表的所有行。完整外部联接中两个表的所有行都将返回。

    select * from etssstu left   join etsdl on trano=stuccno and stuwno=wno 
    where stuccno=60



    07.12.11 Update:
    Inner Join使用:

        连接两个数据表的用法:
        
    FROM Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort
        语法格式可以概括为:
        
    FROM 表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号
        
        连接三个数据表的用法:
        
    FROM (Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort) INNER JOIN MemberLevel ON Member.MemberLevel=MemberLevel.MemberLevel 
        语法格式可以概括为:
        
    FROM (表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号
        
        连接四个数据表的用法:
        
    FROM ((Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort) INNER JOIN MemberLevel ON Member.MemberLevel=MemberLevel.MemberLevel) INNER JOIN MemberIdentity ON Member.MemberIdentity=MemberIdentity.MemberIdentity
        语法格式可以概括为:
        
    FROM ((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号
        
        连接五个数据表的用法:
        
    FROM (((Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort) INNER JOIN MemberLevel ON Member.MemberLevel=MemberLevel.MemberLevel) INNER JOIN MemberIdentity ON Member.MemberIdentity=MemberIdentity.MemberIdentity) INNER JOIN Wedlock ON Member.Wedlock=Wedlock.Wedlock
        语法格式可以概括为:
        
    FROM  (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号)  INNER JOIN 表4 ON Member.字段号=表4.字段号) INNER JOIN 表5 ON Member.字段号=表5.字段号
    INNER JOIN 运算

    组合两个表中的记录,只要在公共字段之中有相符的值。
    语法

    FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2

    INNER JOIN 运算可分为以下几个部分:
    部分     说明
    table1, table2     记录被组合的表的名称。
    field1, field2     被联接的字段的名称。若它们不是由数字构成的,则这些字段必须为相同的数据类型并包含同类数据,但它们无须具有相同的名称。
    compopr     任何的关系比较运算子:"
    =," "<," ">," "<=," ">=," 或 "<>."

    说明

    可以在 
    FROM 子句中使用INNER JOIN运算。.这是最普通的联接类型。只要在这两个表的公共字段之中有相符值,内部联接将组合两个表中的记录。

    可以使用 
    INNER JOIN 与部门表及员工表选择每一个部门中的全部员工。反之,可以使用 LEFT JOIN或 RIGHT JOIN运算创建 outer join,从而选择所有部门(即使有些并没有员工)或所有员工(即使有些尚未分配到部门)。

    若试图联接包含 Memo或 OLE Object数据的字段,会导致错误。

    可以联接任何两个相同类型的数值字段。例如,可以联接 AutoNumber和 Long字段,因为它们类型相似。但不能联接 
    Single 和 Double 类型的字段。

    下列示例显示如何在类标识符字段联接类表及产品表:

    Select CategoryName, ProductName

    FROM Categories INNER JOIN Products

    ON Categories.CategoryID = Products.CategoryID;

    在上面的示例中,类标识符是已被联接的字段,但是它并不包含在查询输出中,因它并非被包含在 
    Select 语句之中。在这个示例中,若要包含联接字段,将字段名包含在 Select 语句中, Categories.CategoryID.

    也可以使用下列语法,在一个 
    JOIN 语句中链接多个 ON 子句:

    Select fields
    FROM table1 INNER JOIN table2
    ON table1.field1 compopr table2.field1 AND
    ON table1.field2 compopr table2.field2) or
    ON table1.field3 compopr table2.field3)];

    也可以使用下列语法,嵌套 
    JOIN 语句:

    Select fields
    FROM table1 INNER JOIN
    (table2 
    INNER JOIN []table3
    [INNER JOIN [( ]tablex [INNER JOIN )]
    ON table3.field3 compopr tablex.fieldx)]
    ON table2.field2 compopr table3.field3)
    ON table1.field1 compopr table2.field2;

    在一个 
    INNER JOIN 之中,可以嵌套 LEFT JOIN 或 RIGHT JOIN,但是在 LEFT JOIN 或 RIGHT JOIN 中不能嵌套 INNER JOIN。 



     

  • 相关阅读:
    学习心得——王梦茹
    优秀学生专栏——孙珩发
    优秀学生专栏——孙振涛
    学习心得——李嫣然、逯广捷
    Spring和Hibernate集成声明式事务 小强斋
    Hibernate——编程式事务 小强斋
    设计模式>原则 小强斋
    Spring>JDK动态代理和CGLIB字节码生成 小强斋
    Hibernate——编程式事务 小强斋
    设计模式>原则 小强斋
  • 原文地址:https://www.cnblogs.com/amadeuslee/p/3744601.html
Copyright © 2011-2022 走看看