1. SQL连接

    A表Person

    id name
    1 张三
    2 李四
    3 王五

    B表Job

    id job person_id
    1 23 1
    2 34 2
    3 32 4
    1. 内连接(INNER JOIN)

      结果中只含有左右两表匹配的行

      select Person.*,Job.*
      from Person
      INNER JOIN Job
      ON Person.id=Job.person_id

      或者隐式的内连接(与显示的内连接结果相同)

      select Person.*,Job.*
      from Person,Job
      where Person.id=Job.person_id

      结果是:

      1 张三 1 23 1
      2 李四 2 34 2
    2. 外链接(OUTER JOIN)

      (1)左外链接

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

      select Person.*,Job.*
      from Person
      LEFT (OUTER) JOIN Job
      ON Person.id=Job.person_id

      结果是:

      1 张三 1 23 1
      2 李四 2 34 2
      3 王五 null null null

      (2)右外连接

      返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

      select Person.*,Job.*
      from Person
      RIGHT (OUTER) JOIN Job
      ON Person.id=Job.person_id

      结果是:

      1 张三 1 23 1
      2 李四 2 34 2
      null null 3 34 4

      (3)全连接

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

      select Person.*,Job.*
      from Person
      FULL (OUTER) JOIN Job
      ON Person.id=Job.person_id

      结果是:


      1 张三 1 23 1
      2 李四 2 34 2
      3 王五 null null null
      null null 3 34 4
    3. 交叉连接(CROSS JOIN)

      交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。

      select Person.*,Job.*
      from Person CROSS JOIN Job

      或者隐式交叉连接(与显示交叉连接结果相同)

      select Person.*,Job.*
      from Person,Job