交叉链接

  • 交叉链接的结果可以称之为笛卡尔积,把左表中的数据每一行都与右表中所有行相结合,形成的新表的行数是 左表数据行数*右表数据行数,示例如下
  • 左表
id 姓名
1 小王
2 小李
  • 右表
id 班级
1 一班
2 二班
  • 交叉链接查询结果
id 姓名 id 班级
1 小王 1 一班
1 小王 2 二班
2 小李 1 一班
2 小李 2 二班
  • 交叉链接SQL语句
    1
    select * from students cross join classes;

内链接

  • 仅将两个表中满足连接条件的行组合起来作为结果集。在内连接中,只有在两个表中匹配的行才能在结果集中出现
    等值链接
  • 在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列
    不等值链接
  • 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>
    自然链接
  • 在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列
    SQL语句
    1
    select 列名 from  左表 inner join 右表 on 左表.xxx = 右表.xxx;

外链接

  • 外联接可以是左向外联接、右向外联接或完整外部联接。在内连接的基础上,还包含表中所有不符合条件的数据行,并将相对应的表列填写NULL
    左外链接
  • (左–对应右NULL)
    1
    select 列名 from 左表 left join 右表 on 左表.xxx = 右表.xxx;

右外链接

  • (右–对应左NULL)
    1
    select 列名 from 左表 right join 右表 on 左表.xxx = 右表.xxx;

全外链接

  • 完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
    1
    select 列名 from 左表 full join 右表 on 左表.xxx = 右表.xxx;

不过这条全外链接语句我用MySQL测试的时候报错了,还有待验证…