内连接的特性是只显示符合连接条件的记录,外连接必然会返回其中一张表的全部数据,哪怕不匹配。
假设一个数据库中有两张表,一张是学生表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={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选择情况。