内连接的特性是只显示符合连接条件的记录,外连接必然会返回其中一张表的全部数据,哪怕不匹配。
假设一个数据库中有两张表,一张是学生表StudentInfo,一张是班级表ClassInfo,两张表之间用ClassId字段进行关联。
如果用内连接(inner join on),正常的写法是这样的:
Select StudentInfo.*,ClassInfo.* from StudentInfo inner join ClassInfo on StudentInfo.ClassId=ClassInfo.ClassId
用这种写法不会出现笛卡尔积,但是内连接是允许省略连接条件的,也就是可以省略掉on后面的内容,所以如果写成这样:
Select StudentInfo.*,ClassInfo.* from StudentInfo,ClassInfo
也是可以通过编译的,但是这样一来就产生了一个笛卡尔积。但是因为怕产生笛卡尔积而拒绝使用内链接是不正确的,只要不省略掉连接条件,是不会产生全部的笛卡尔积,会产生过滤后的笛卡尔积。
笛卡尔积:
假设集合A={a,b},集合B={