1.笛卡尔积(Cartesian product)

顾名思义, 这个概念得名于笛卡儿. 在数学中,两个集合 X 和 Y 的笛卡儿积(Cartesian product),又称直积,表示为 X × Y,是其第一个对象是 X 的成员而第二个对象是 Y 的一个成员的所有可能的有序对.

假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。

2.Join类型

cross join 是笛卡儿乘积就是一张表的行数乘以另一张表的行数.
inner join 只返回两张表连接列的匹配项.
left join 第一张表的连接列在第二张表中没有匹配是,第二张表中的值返回null.
right join 第二张表的连接列在第一张表中没有匹配是,第一张表中的值返回null.
full join 返回两张表中的行 left join+right join.

3.在对两表进行各种类型的join (cross, left, right, full, inner)时, 都需要构造笛卡尔积.

有时想想不可思议, 若两个特大表进行join, 难道sql就直接上笛卡尔积吗? 难道不事前进行on的条件过滤吗? 那数据量得多大?

4.查一下MSDN就清楚了整个SQL的执行顺序.

http://msdn.microsoft.com/en-us/library/ms189499(v=SQL.100).aspx

Processing Order of the SELECT statement
The following steps show the processing order for a SELECT statement.

1.FROM

2.ON

3.JOIN

4.WHERE

5.GROUP BY

6.WITH CUBE or WITH ROLLUP

7.HAVING

8.SELECT

9.DISTINCT

10.ORDER BY

11.TOP

也就是说, 先进行on的过滤, 而后才进行join, 这样就避免了两个大表产生全部数据的笛卡尔积的庞大数据.

更多相关文章

  1. 找到另一个列至少有两个不同值的id
  2. 如何在函数中将两个参数从1个类传递给另一个?
  3. 【android】两个view共用同一个animation对象的问题
  4. 昨天花了两个小时做了一个天气预报的Demo,希望对新人有所帮助。
  5. 在不同状态下使用两个图像切换按钮
  6. 安卓,如何让两个按钮相邻,宽度相同
  7. 算法 - 给出一个字符串str,输出包含两个字符串str的最短字符串,如
  8. 是否可以在两个类之间使用RMI双向?
  9. 怎么用java 实现两个web service之间调用各自的接口 实现数据的

随机推荐

  1. 关于WindowManager在Android(安卓)N和And
  2. Android对SlidingDraw组件修改
  3. Android常用URI以及URI简介
  4. Android Studio 基础控件使用
  5. Android SeekBar的使用
  6. 基于Android P 背光流程
  7. Android 获取天气预报
  8. Android onTouch事件
  9. Android从asset中获取drawable
  10. Android常用功能实例 如IMEI号