内连接、外连接、交叉连接
数据表:
stu表
result表
1.内连接 join 或者inner join
与select a.* , b.* from 表a, 表b where a.id = b.id 等效,也是内连接(推荐使用join)
select * from stu as a,result as b where a.stuid=b.stuid
select * from stu as a [inner] join result as b on a.stuid=b.stuid
内连接可以使用上面两种方式,其中第二种方式的inner可以省略
作用:内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值
查询结果:
2.外连接
1.左连接:left join 或者 left outer join
是以左表为基准,将a.stuid = b.stuid的数据进行连接,然后将左表没有的对应项显示,右表的列为NULL
select * from stu as a left join result as b on a.stuid = b.stuid
查询结果:
2.右连接:right join 或者 right outer join
是以右表为基准,将a.stuid = b.stuid的数据进行连接,然以将右表没有的对应项显示,左表的列为NULL
select * from stu as a right join result as b on a.stuid = b.stuid
查询结果:
3.全然外连接:full join 或者full outer join
完整外部连接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值
select * from stu as a full join result as b on a.stuid=b.stuid
3.交叉连接 cross join
没有where指定查询条件的子句的交叉联接将产生两表的笛卡尔积,交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合,交叉连接也称作笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小
select * from stu as a cross join result order by a.stuid
查询结果:
如果加了条件,将返回符合条件的结果集,结果和inner join所看到的运行结果一样
select * from stu as a cross join result as b on a.stuid=b.stuid
查询结果: