改编自http://www.cnblogs.com/zxlovenet/p/4005256.html
并在mysql自行进行实验。
SQL连接可分为内连接、外连接、交叉连接。
数据库数据:
student表
bookloan表
- 内连接
1.1 等值连接:在连接条件中使用等于号运算符比较连接列的列值,其查询结果中列出被连接表中的所有列包括其中的重复列。
select *
from student as a, bookloan as b
where a.stuid = b.stuid;
等价于
select *
from student as a inner join bookloan as b
on a.stuid = b.stuid;
1.2 不等值连接:在连接条件中使用除等于运算符以外的其它比较运算符比较被连接的列的列值。其实就是在笛卡尔积的基础上进行筛选。
select *
from student as a, bookloan as b
where a.stuid <> b.stuid;
1.3 自然连接:在连接条件中使用等于运算符比较被连接列的列值,但它使用选择列表指出查询结果中所包括的列,消除同名列,注意这里不需要。
select *
from student as a natural join bookloan as b;
- 外连接
2.1 左连接:以左表为基准,进行连接。
select *
from student as a left join bookloan as b
on a.stuid = b.stuid;
2.2 右连接:以右表为基准,进行连接。
select *
from student as a right join bookloan as b
on a.stuid = b.stuid;
2.3 全连接:完整外部连接返回左表和右表中所有的列。当某行在另一个表中没有匹配行时,则另一个表的选择表列包含空值。如果表之间没有匹配行,则整个结果集行包含基表的数据值。
mysql不支持全连接
- 交叉连接:就是笛卡尔积
所以内连接和交叉连接的效果是一样的知识前者要在条件下进行过滤。