最近遇到一个面试题,A表存了500条数据,B表存35条数据,请问使用cross join查询的结果是多少条数据。嗯....原谅我从业也有大几年了,从来没见过这个。本着不会就要学的态度,我老老实实去写了一条sql语句,是这样的:select * from a cross join b on a.id=b.id 当时在sql server中操作on还报了语法错误,当时没细想,直接把on 换成了where,经验告诉我所有的联表查询都是应该加条件的,查出来结果,嗯...当然跟其他联表查询没什么区别。
后来发现不是这样的,又仔细查了查,CROSS JOIN,微软给出的定义是这样的:The CROSS JOIN operator can be used to combine all the records in one data set to all the records in another data set. By using the CROSS JOIN operator between two sets of records you are creating what is known as a Cartesian product.(CROSS JOIN运算符可以把一个数据集中和另外一个数据集中的数据组合在一起。在两个数据集之间使用CROSS JOIN运算符产生的结果也被称为笛卡尔积。)语法是这样的:SELECT * FROM A CROSS JOIN B。哦,原来是不用加条件的,加了条件就跟inner/outer join没区别了。正确的SELECT * FROM A CROSS JOIN B的结果应该是A表数据数量*B表数据数量,就是求表A和表B的所有可能的组合。